C++ 如何在父图形中获取数字索引/面位置(OpenCascade)
我使用OpenCascade在三角剖分中获取边顶点。为此,我使用边到面贴图的帮助,将边作为匹配面的关键点。但是,我还希望获得父图形中面的数字索引(例如,如果我使用C++ 如何在父图形中获取数字索引/面位置(OpenCascade),c++,indexing,shapes,face,opencascade,C++,Indexing,Shapes,Face,Opencascade,我使用OpenCascade在三角剖分中获取边顶点。为此,我使用边到面贴图的帮助,将边作为匹配面的关键点。但是,我还希望获得父图形中面的数字索引(例如,如果我使用TopoDS::face(face\u map(int face\u number)),则为面编号) TopTools\u索引APOFShape边; TopExp::MapShapes(父图形、TopAbs\u边、边); TopTools_Indexedatamapofshapelistofshape edge2面图; TopExp::
TopoDS::face(face\u map(int face\u number))
,则为面编号)
TopTools\u索引APOFShape边;
TopExp::MapShapes(父图形、TopAbs\u边、边);
TopTools_Indexedatamapofshapelistofshape edge2面图;
TopExp::MapShapeSandCestors(形状、TopAbs_边、TopAbs_面、edge2FaceMap);
对于(int iedge=1;iedge为什么要使用此索引?形状的面不是按规范枚举的。为什么?我将形状/变换导出到外部程序以进行可视化,并使用形状/实体/面/边编号来标识要更改的特征。因此,我的工作假设是,如果我在形状的所有面上循环,它们将被确定在形状改变之前,顺序/编号相同(到目前为止,我观察到OCC在迭代etc时不会随机返回面/边)。我很确定这是否有效将取决于导出格式。例如,如果您将TopoDS_外壳导出到IGES并用另一个CAD程序读取,则外壳将拆分为面。
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.
}
}