40 Foam::vtkTopo::vtkTopo(
const polyMesh&
mesh)
45 addPointCellLabels_(),
69 const cellModel& model = cellShapes[cellI].model();
81 const cell& cFaces = mesh_.cells()[cellI];
85 const face&
f = mesh_.faces()[cFaces[cFaceI]];
89 f.nTrianglesQuads(mesh_.points(), nTris, nQuads);
91 nAddCells += nQuads + nTris;
101 addPointCellLabels_.setSize(nAddPoints);
105 superCells_.setSize(nAddCells);
108 vertLabels_.setSize(cellShapes.size() + nAddCells);
111 cellTypes_.setSize(cellShapes.size() + nAddCells);
114 label api = 0, aci = 0;
118 const cellShape& cellShape = cellShapes[cellI];
119 const cellModel& cellModel = cellShape.model();
121 labelList& vtkVerts = vertLabels_[cellI];
123 if (cellModel == tet)
125 vtkVerts = cellShape;
127 cellTypes_[cellI] = VTK_TETRA;
129 else if (cellModel == pyr)
131 vtkVerts = cellShape;
133 cellTypes_[cellI] = VTK_PYRAMID;
135 else if (cellModel == prism)
138 vtkVerts[0] = cellShape[0];
139 vtkVerts[1] = cellShape[2];
140 vtkVerts[2] = cellShape[1];
141 vtkVerts[3] = cellShape[3];
142 vtkVerts[4] = cellShape[5];
143 vtkVerts[5] = cellShape[4];
146 cellTypes_[cellI] = VTK_WEDGE;
148 else if (cellModel == tetWedge)
152 vtkVerts[0] = cellShape[0];
153 vtkVerts[1] = cellShape[2];
154 vtkVerts[2] = cellShape[1];
155 vtkVerts[3] = cellShape[3];
156 vtkVerts[4] = cellShape[4];
157 vtkVerts[5] = cellShape[4];
159 cellTypes_[cellI] = VTK_WEDGE;
176 else if (cellModel == hex)
179 vtkVerts[0] = cellShape[0];
180 vtkVerts[1] = cellShape[1];
181 vtkVerts[2] = cellShape[2];
182 vtkVerts[3] = cellShape[3];
183 vtkVerts[4] = cellShape[4];
184 vtkVerts[5] = cellShape[5];
185 vtkVerts[6] = cellShape[6];
186 vtkVerts[7] = cellShape[7];
188 cellTypes_[cellI] = VTK_HEXAHEDRON;
196 addPointCellLabels_[api] = cellI;
199 bool substituteCell =
true;
201 const labelList& cFaces = mesh_.cells()[cellI];
205 const face&
f = mesh_.faces()[cFaces[cFaceI]];
210 f.nTrianglesQuads(mesh_.points(), nTris, nQuads);
217 f.trianglesQuads(mesh_.points(), trii, quadi, triFcs, quadFcs);
221 label thisCellI = -1;
227 substituteCell =
false;
231 thisCellI = mesh_.nCells() + aci;
233 superCells_[aci] = cellI;
238 labelList& addVtkVerts = vertLabels_[thisCellI];
242 const face& quad = quadFcs[quadi];
244 addVtkVerts[0] = quad[0];
245 addVtkVerts[1] = quad[1];
246 addVtkVerts[2] = quad[2];
247 addVtkVerts[3] = quad[3];
248 addVtkVerts[4] = mesh_.nPoints() + api;
250 cellTypes_[thisCellI] = VTK_PYRAMID;
255 label thisCellI = -1;
261 substituteCell =
false;
265 thisCellI = mesh_.nCells() + aci;
267 superCells_[aci] = cellI;
273 labelList& addVtkVerts = vertLabels_[thisCellI];
275 const face& tri = triFcs[trii];
278 addVtkVerts[0] = tri[0];
279 addVtkVerts[1] = tri[1];
280 addVtkVerts[2] = tri[2];
281 addVtkVerts[3] = mesh_.nPoints() + api;
283 cellTypes_[thisCellI] = VTK_TETRA;
291 Pout<<
" Original cells:" << mesh_.nCells()
292 <<
" points:" << mesh_.nPoints()
293 <<
" Additional cells:" << superCells_.size()
294 <<
" additional points:" << addPointCellLabels_.size()