7 #ifndef PXR_IMAGING_HD_MESH_UTIL_H
8 #define PXR_IMAGING_HD_MESH_UTIL_H
22 #include "pxr/base/vt/array.h"
69 : _topology(topology), _id(id) {}
100 VtIntArray *primitiveParams,
101 VtIntArray *edgeIndices =
nullptr)
const;
152 VtIntArray *primitiveParams,
153 VtVec2iArray *edgeIndices =
nullptr)
const;
159 VtIntArray *primitiveParams,
160 VtVec2iArray *edgeIndices =
nullptr)
const;
172 VtValue *quadrangulated)
const;
183 VtValue *quadrangulated)
const;
199 std::vector<GfVec2i> * edgeVerticesOut,
200 std::vector<int> * firstEdgeIndexForFacesOut =
nullptr)
const;
225 return ((faceIndex << 2) | (edgeFlag & 3));
228 return (coarseFaceParam >> 2);
231 return (coarseFaceParam & 3);
239 int _ComputeNumQuads(VtIntArray
const &numVerts,
240 VtIntArray
const &holeIndices,
241 bool *invalidFaceFound =
nullptr)
const;
244 void _ComputeQuadIndices(
246 VtIntArray *primitiveParams,
247 VtVec2iArray *edgeIndices,
248 bool triangulate =
false)
const;
313 std::vector<int>
const & edgeIndices,
314 std::vector<GfVec2i> * edgeVerticesOut)
const;
318 std::vector<int> * edgeIndicesOut)
const;
331 if (verts[0] > verts[1]) {
340 struct _CompareEdgeVertices {
341 bool operator() (_Edge
const &lhs, _Edge
const & rhs)
const {
342 return (lhs.verts[0] < rhs.verts[0] ||
343 (lhs.verts[0] == rhs.verts[0] &&
344 lhs.verts[1] < rhs.verts[1]));
348 struct _EdgeVerticesHash {
350 inline size_t operator()(
GfVec2i const&
v)
const {
352 int theMin = v[0], theMax = v[1];
353 if (theMin > theMax) {
357 size_t y = x + theMax;
358 return x + (y * (y + 1)) / 2;
363 std::vector<int> _firstEdgeIndexForFaces;
365 std::vector<GfVec2i> _edgeVertices;
366 std::vector<_Edge> _edgesByIndex;
381 : _outputPtr(indicesBuffer)
382 , _triangulate(triangulate)
387 *_outputPtr++ = quadIndices[0];
388 *_outputPtr++ = quadIndices[1];
389 *_outputPtr++ = quadIndices[2];
390 *_outputPtr++ = quadIndices[2];
391 *_outputPtr++ = quadIndices[3];
392 *_outputPtr++ = quadIndices[0];
394 *_outputPtr++ = quadIndices[0];
395 *_outputPtr++ = quadIndices[1];
396 *_outputPtr++ = quadIndices[2];
397 *_outputPtr++ = quadIndices[3];
403 bool const _triangulate;
409 #endif // PXR_IMAGING_HD_MESH_UTIL_H
HD_API bool ComputeTriangulatedFaceVaryingPrimvar(void const *source, int numElements, HdType dataType, VtValue *triangulated) const
std::vector< int > numVerts
GLsizei GLenum const void * indices
HD_API void ComputeTriQuadIndices(VtIntArray *indices, VtIntArray *primitiveParams, VtVec2iArray *edgeIndices=nullptr) const
HD_API void ComputeTriangleIndices(VtVec3iArray *indices, VtIntArray *primitiveParams, VtIntArray *edgeIndices=nullptr) const
void swap(UT::ArraySet< Key, MULTI, MAX_LOAD_FACTOR_256, Clearer, Hash, KeyEqual > &a, UT::ArraySet< Key, MULTI, MAX_LOAD_FACTOR_256, Clearer, Hash, KeyEqual > &b)
HD_API bool ComputeQuadrangulatedFaceVaryingPrimvar(void const *source, int numElements, HdType dataType, VtValue *quadrangulated) const
static int DecodeFaceIndexFromCoarseFaceParam(int coarseFaceParam)
}@
bool IsAllQuads() const
Returns true if the mesh is all-quads.
void EmitQuadFace(GfVec4i const &quadIndices)
HD_API HdMeshEdgeIndexTable(HdMeshTopology const *topology)
HD_API bool GetVerticesForEdgeIndices(std::vector< int > const &edgeIndices, std::vector< GfVec2i > *edgeVerticesOut) const
static int DecodeEdgeFlagFromCoarseFaceParam(int coarseFaceParam)
}@
HdMeshTriQuadBuilder(int *indicesBuffer, bool triangulate)
GT_API const UT_StringHolder topology
GLsizei GLsizei GLchar * source
static int const NumIndicesPerQuad
HD_API VtIntArray CollectFaceEdgeIndices(VtIntArray const &faceIndices) const
Returns the edge indices for all faces in faceIndices.
HD_API ~HdMeshEdgeIndexTable()
HD_API void ComputeQuadIndices(VtIntArray *indices, VtIntArray *primitiveParams, VtVec2iArray *edgeIndices=nullptr) const
static int const NumIndicesPerTriQuad
PXR_NAMESPACE_CLOSE_SCOPE PXR_NAMESPACE_OPEN_SCOPE
HD_API void EnumerateEdges(std::vector< GfVec2i > *edgeVerticesOut, std::vector< int > *firstEdgeIndexForFacesOut=nullptr) const
HD_API bool GetEdgeIndices(GfVec2i const &edgeVertices, std::vector< int > *edgeIndicesOut) const
static int EncodeCoarseFaceParam(int faceIndex, int edgeFlag)
}@
HD_API bool GetVerticesForEdgeIndex(int edgeId, GfVec2i *edgeVerticesOut) const
#define PXR_NAMESPACE_CLOSE_SCOPE
HD_API bool ComputeQuadrangulatedPrimvar(HdQuadInfo const *qi, void const *source, int numElements, HdType dataType, VtValue *quadrangulated) const
HdMeshUtil(HdMeshTopology const *topology, SdfPath const &id)
HUSD_API const char * dataType()
HD_API void ComputeQuadInfo(HdQuadInfo *quadInfo) const
Generate a quadInfo struct for the input topology.