@@ -74,6 +74,22 @@ void HnMeshUtils::ProcessFaces(HandleFaceType&& HandleFace) const
7474 }
7575}
7676
77+ size_t HnMeshUtils::GetNumTriangles (size_t * pNumFaces) const
78+ {
79+ size_t NumTriangles = 0 ;
80+ size_t NumFaces = 0 ;
81+ ProcessFaces (
82+ [&](size_t FaceId, int StartVertex, int VertCount) {
83+ NumTriangles += VertCount - 2 ;
84+ ++NumFaces;
85+ });
86+ if (pNumFaces != nullptr )
87+ {
88+ *pNumFaces = NumFaces;
89+ }
90+ return NumTriangles;
91+ }
92+
7793void HnMeshUtils::Triangulate (bool UseFaceVertexIndices,
7894 const pxr::VtValue* PointsPrimvar,
7995 pxr::VtVec3iArray& TriangleIndices,
@@ -88,11 +104,7 @@ void HnMeshUtils::Triangulate(bool UseFaceVertexIndices,
88104 nullptr ;
89105
90106 // Count the number of triangles
91- size_t NumTriangles = 0 ;
92- ProcessFaces (
93- [&](size_t FaceId, int StartVertex, int VertCount) {
94- NumTriangles += VertCount - 2 ;
95- });
107+ const size_t NumTriangles = GetNumTriangles ();
96108
97109 // Triangulate faces
98110 TriangleIndices.reserve (NumTriangles);
@@ -233,15 +245,26 @@ void HnMeshUtils::Triangulate(bool UseFaceVertexIndices,
233245 }
234246}
235247
236- pxr::VtIntArray HnMeshUtils::ComputeEdgeIndices ( bool UseFaceVertexIndices, bool UseLineStrip ) const
248+ size_t HnMeshUtils::GetNumEdges ( size_t * pNumFaces ) const
237249{
250+ size_t NumFaces = 0 ;
238251 size_t NumEdges = 0 ;
239- size_t NumFaces = 0 ; // Count the actual number of faces
240252 ProcessFaces (
241253 [&](size_t FaceId, int StartVertex, int VertCount) {
242254 NumEdges += VertCount;
243255 ++NumFaces;
244256 });
257+ if (pNumFaces != nullptr )
258+ {
259+ *pNumFaces = NumFaces;
260+ }
261+ return NumEdges;
262+ }
263+
264+ pxr::VtIntArray HnMeshUtils::ComputeEdgeIndices (bool UseFaceVertexIndices, bool UseLineStrip) const
265+ {
266+ size_t NumFaces = 0 ; // Count the actual number of faces
267+ size_t NumEdges = GetNumEdges (&NumFaces);
245268
246269 pxr::VtIntArray EdgeIndices;
247270 if (UseLineStrip)
0 commit comments