OpenCascade を使用して、三角形分割でエッジ頂点を取得しています。このために、一致する面へのキーとしてエッジを持つエッジから面へのマップを使用します。ただし、親シェイプの面の数値インデックスも取得したいと思います(たとえば、を使用する場合の面番号TopoDS::Face(face_map(int face_number))
)。
TopTools_IndexedMapOfShape edges;
TopExp::MapShapes (parent_shape, TopAbs_EDGE, edges);
TopTools_IndexedDataMapOfShapeListOfShape edge2FaceMap;
TopExp::MapShapesAndAncestors(shape, TopAbs_EDGE, TopAbs_FACE, edge2FaceMap);
for (int iedge = 1; iedge <= edges.Extent(); iedge++) {
const TopoDS_Edge& edge = TopoDS::Edge(edges(iedge));
const TopoDS_Face& face = TopoDS::Face(edge2FaceMap.FindFromKey(edge).First());
// Get vertices...
}
すべての顔をループして、マップされた顔を一致させることができますが、これは非常に非効率的です。
TopTools_IndexedMapOfShape face_map;
TopExp::MapShapes(shape, TopAbs_FACE, face_map);
for (v = 1; face_number <= face_map.Extent(); face_number++) {
if( face.IsSame(face_map(face_number)) ) {
// Found face index.
}
}
これを達成するためのより良い、または代替のアプローチはありますか?