Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何在父图形中获取数字索引/面位置(OpenCascade)_C++_Indexing_Shapes_Face_Opencascade - Fatal编程技术网

C++ 如何在父图形中获取数字索引/面位置(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::

我使用OpenCascade在三角剖分中获取边顶点。为此,我使用边到面贴图的帮助,将边作为匹配面的关键点。但是,我还希望获得父图形中面的数字索引(例如,如果我使用
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.
  }
}