@@ -105,6 +105,7 @@ void HnMeshUtils::Triangulate(bool UseFaceVertexIndices,
105105
106106 // Count the number of triangles
107107 const size_t NumTriangles = GetNumTriangles ();
108+ VERIFY_EXPR (NumTriangles * 3 == GetTotalIndexCount (GET_TOTAL_INDEX_COUNT_FLAG_TRIANGLES));
108109
109110 // Triangulate faces
110111 TriangleIndices.reserve (NumTriangles);
@@ -280,6 +281,7 @@ pxr::VtIntArray HnMeshUtils::ComputeEdgeIndices(bool UseFaceVertexIndices, bool
280281 EdgeIndices.push_back (-1 );
281282 });
282283 VERIFY_EXPR (EdgeIndices.size () == NumEdges + NumFaces * 2 );
284+ VERIFY_EXPR (EdgeIndices.size () == GetTotalIndexCount (GET_TOTAL_INDEX_COUNT_FLAG_EDGES_STRIP));
283285 }
284286 else
285287 {
@@ -295,6 +297,7 @@ pxr::VtIntArray HnMeshUtils::ComputeEdgeIndices(bool UseFaceVertexIndices, bool
295297 EdgeIndices.push_back (StartVertex);
296298 });
297299 VERIFY_EXPR (EdgeIndices.size () == NumEdges * 2 );
300+ VERIFY_EXPR (EdgeIndices.size () == GetTotalIndexCount (GET_TOTAL_INDEX_COUNT_FLAG_EDGES_LIST));
298301 }
299302
300303 if (UseFaceVertexIndices)
@@ -320,6 +323,7 @@ pxr::VtIntArray HnMeshUtils::ComputePointIndices(bool ConvertToFaceVarying) cons
320323
321324 pxr::VtIntArray PointIndices;
322325 PointIndices.reserve (NumPoints);
326+ VERIFY_EXPR (static_cast <size_t >(NumPoints) == GetTotalIndexCount (GET_TOTAL_INDEX_COUNT_FLAG_POINTS));
323327 if (ConvertToFaceVarying)
324328 {
325329 const int * FaceVertexIndices = m_Topology.GetFaceVertexIndices ().cdata ();
@@ -356,6 +360,33 @@ pxr::VtIntArray HnMeshUtils::ComputePointIndices(bool ConvertToFaceVarying) cons
356360 return PointIndices;
357361}
358362
363+ size_t HnMeshUtils::GetTotalIndexCount (GET_TOTAL_INDEX_COUNT_FLAGS Flags) const
364+ {
365+ VERIFY ((Flags & (GET_TOTAL_INDEX_COUNT_FLAG_EDGES_LIST | GET_TOTAL_INDEX_COUNT_FLAG_EDGES_STRIP)) != (GET_TOTAL_INDEX_COUNT_FLAG_EDGES_LIST | GET_TOTAL_INDEX_COUNT_FLAG_EDGES_STRIP),
366+ " COUNT_EDGES_LIST and COUNT_EDGES_STRIP flags are mutually exclusive" );
367+
368+ size_t NumIndices = 0 ;
369+ if (Flags & GET_TOTAL_INDEX_COUNT_FLAG_TRIANGLES)
370+ {
371+ size_t NumTriangles = GetNumTriangles ();
372+ NumIndices += NumTriangles * 3 ;
373+ }
374+
375+ if (Flags & (GET_TOTAL_INDEX_COUNT_FLAG_EDGES_LIST | GET_TOTAL_INDEX_COUNT_FLAG_EDGES_STRIP))
376+ {
377+ size_t NumFaces = 0 ;
378+ size_t NumEdges = GetNumEdges (&NumFaces);
379+ NumIndices += (Flags & GET_TOTAL_INDEX_COUNT_FLAG_EDGES_STRIP) ? NumEdges + NumFaces * 2 : NumEdges * 2 ;
380+ }
381+
382+ if (Flags & GET_TOTAL_INDEX_COUNT_FLAG_POINTS)
383+ {
384+ NumIndices += m_Topology.GetNumPoints ();
385+ }
386+
387+ return NumIndices;
388+ }
389+
359390template <typename T>
360391pxr::VtValue ConvertVertexArrayToFaceVaryingArray (const pxr::VtIntArray& FaceVertexIndices, const pxr::VtArray<T>& VertexArray, size_t ValuesPerVertex)
361392{
0 commit comments