私は最近、メッシュを改良する必要があるプロジェクトで OpenMesh を使い始めました。split(FaceHandle _fh, Point _p)
三角形の重心に頂点を挿入するには、面操作を使用する必要があります。しかし、このメソッドを使用し、VertexFaceIterator を使用して新しく作成された頂点の面を取得しようとすると、(87, 87, -1) または (12, 12, -1) などの頂点インデックスを持つ無効な面が常に取得されます。分割後に OpenMesh がメッシュ トポロジを更新していないようです。
私のコードは次のようになります。faceStartIt
これらの奇妙なインデックスを私に与えるものです。
typedef OpenMesh::TriMesh_ArrayKernelT<> TriMesh;
TriMesh::FaceIter triangleIt = mesh.faces_begin();
for( ; triangleIt != mesh.faces_end(); )
{
TriMesh::Point centroid = mesh.calc_face_centroid( *triangleIt );
if( hasToSplit( centroid ) )
{
TriMesh::VertexHandle centroidHandle = mesh.split( *triangleIt, centroid );
TriMesh::VertexFaceIter faceStartIt = mesh.vf_begin( centroidHandle );
TriMesh::VertexFaceIter faceEndIt = mesh.vf_end( centroidHandle );
TriMesh::VertexFaceIter faceIt = faceStartIt; //faceIt++;
for( ; faceIt != faceEndIt; ++faceIt )
{
// Do something for each face
}
}
else
{
++triangleIt;
}
}