10 #ifndef vtk_m_rendering_Quadralizer_h
11 #define vtk_m_rendering_Quadralizer_h
19 #include <vtkm/rendering/raytracing/MeshConnectivityBuilder.h>
25 #define QUAD_PER_CSS 6
91 #if defined(VTKM_MSVC)
93 #pragma warning(disable : 4127) //conditional expression is constant
95 template <
typename CellNodeVecType,
typename OutIndicesPortal>
99 const CellNodeVecType& cellIndices,
100 OutIndicesPortal& outputIndices)
const
107 outputIndices.Set(offset, quad);
110 template <
typename CellNodeVecType,
typename OutIndicesPortal>
113 OutIndicesPortal& outputIndices)
const
118 cellIndex, { cellIndex, cellIndices[0], cellIndices[1], cellIndices[2], cellIndices[3] });
130 cell2quad(idx, quad, offset, cellIndices, outputIndices);
137 cell2quad(idx, quad, offset, cellIndices, outputIndices);
144 cell2quad(idx, quad, offset, cellIndices, outputIndices);
151 cell2quad(idx, quad, offset, cellIndices, outputIndices);
158 cell2quad(idx, quad, offset, cellIndices, outputIndices);
165 cell2quad(idx, quad, offset, cellIndices, outputIndices);
168 #if defined(VTKM_MSVC)
183 template <
typename VecType,
typename OutputPortal>
185 const VecType& cellIndices,
191 OutputPortal& outputIndices)
const
199 outputIndices.Set(offset++, quad);
202 template <
typename VecType,
typename OutputPortal>
205 const VecType& cellIndices,
207 OutputPortal& outputIndices)
const
211 cell2quad(offset, cellIndices, cellId, 3, 0, 2, 5, outputIndices);
212 cell2quad(offset, cellIndices, cellId, 1, 4, 5, 2, outputIndices);
213 cell2quad(offset, cellIndices, cellId, 0, 3, 4, 1, outputIndices);
215 template <
typename VecType,
typename OutputPortal>
218 const VecType& cellIndices,
220 OutputPortal& outputIndices)
const
226 quad[1] =
static_cast<vtkm::Id>(cellIndices[0]);
227 quad[2] =
static_cast<vtkm::Id>(cellIndices[1]);
228 quad[3] =
static_cast<vtkm::Id>(cellIndices[2]);
229 quad[4] =
static_cast<vtkm::Id>(cellIndices[3]);
230 outputIndices.Set(offset, quad);
234 template <
typename VecType,
typename OutputPortal>
237 const VecType& cellIndices,
239 OutputPortal& outputIndices)
const
243 cell2quad(offset, cellIndices, cellId, 0, 1, 5, 4, outputIndices);
244 cell2quad(offset, cellIndices, cellId, 1, 2, 6, 5, outputIndices);
245 cell2quad(offset, cellIndices, cellId, 3, 7, 6, 2, outputIndices);
246 cell2quad(offset, cellIndices, cellId, 0, 4, 7, 3, outputIndices);
247 cell2quad(offset, cellIndices, cellId, 0, 3, 2, 1, outputIndices);
248 cell2quad(offset, cellIndices, cellId, 4, 5, 6, 7, outputIndices);
251 template <
typename VecType,
typename OutputPortal>
254 const VecType& cellIndices,
256 OutputPortal& outputIndices)
const
263 quad[1] = cellIndices[0];
264 quad[2] = cellIndices[1];
265 quad[3] = cellIndices[2];
266 quad[4] = cellIndices[3];
267 outputIndices.Set(pointOffset, quad);
272 cell2quad(offset, cellIndices, cellId, 0, 1, 5, 4, outputIndices);
273 cell2quad(offset, cellIndices, cellId, 1, 2, 6, 5, outputIndices);
274 cell2quad(offset, cellIndices, cellId, 3, 7, 6, 2, outputIndices);
275 cell2quad(offset, cellIndices, cellId, 0, 4, 7, 3, outputIndices);
276 cell2quad(offset, cellIndices, cellId, 0, 3, 2, 1, outputIndices);
277 cell2quad(offset, cellIndices, cellId, 4, 5, 6, 7, outputIndices);
283 cell2quad(offset, cellIndices, cellId, 3, 0, 2, 5, outputIndices);
284 cell2quad(offset, cellIndices, cellId, 1, 4, 5, 2, outputIndices);
285 cell2quad(offset, cellIndices, cellId, 0, 3, 4, 1, outputIndices);
291 cell2quad(offset, cellIndices, cellId, 3, 2, 1, 0, outputIndices);
327 outputIndices.Allocate(numCells);
334 auto cellSetUnstructured =
337 invoke(
CountQuads{}, cellSetUnstructured, quadsPerCell);
344 outputIndices.Allocate(total);
346 invoke(
Quadralize{}, cellSetUnstructured, cellOffsets, outputIndices);