OpenCascade模型解析-遍历模型

OpenCascade提供了TopExp_Explorer类,可以遍历模型中的face、edge等。

为了方便分析研究模型的构成,《OpenCascade插件化三维算法研究平台》开发了模型遍历(解析)功能。

效果如下:

如上图所示,打开一个模型时,模型是一个整体,无法按模型的几何构成一点点查看与分析。

把模型解析(遍历)后,就可以一个面一个边地查看了。

参考代码,解析(遍历)一个Box:

void ExplorerDemo()
{
    NCollection_Vector<Handle(AIS_InteractiveObject)> myObject3d;
  // Make a box with a corner at [0, 0, 0] and the specified sizes.
  Standard_Real aSizeX = 5.0;
  Standard_Real aSizeY = 10.0;
  Standard_Real aSizeZ = 15.0;
  TopoDS_Shape aBox = BRepPrimAPI_MakeBox(aSizeX, aSizeY, aSizeZ);

  // Explore vertex references.
  myResult << "Vertex refs. : ";
  Standard_Integer nbVertices = 0;
  for (TopExp_Explorer anExp(aBox, TopAbs_VERTEX); anExp.More(); anExp.Next(), ++nbVertices)
  {
    const TopoDS_Shape& aShape = anExp.Current();
    Handle(AIS_ColoredShape) anAisShape = new AIS_ColoredShape(aShape);
    anAisShape->SetColor(Quantity_Color(Quantity_NOC_YELLOW));
    myObject3d.Append(anAisShape);
  }


  // Explore edge references.
  myResult << "Edge refs.   : ";
  Standard_Integer nbEdges = 0;
  for (TopExp_Explorer anExp(aBox, TopAbs_EDGE); anExp.More(); anExp.Next(), ++nbEdges)
  {
    const TopoDS_Shape& aShape = anExp.Current();
    Handle(AIS_ColoredShape) anAisShape = new AIS_ColoredShape(aShape);
    anAisShape->SetColor(Quantity_Color(Quantity_NOC_GREEN));
    anAisShape->SetWidth(2.5);
    myObject3d.Append(anAisShape);
  }
  myResult << nbEdges << std::endl;

  // Explore face references.

  Standard_Integer nbFaces = 0;
  for (TopExp_Explorer anExp(aBox, TopAbs_FACE); anExp.More(); anExp.Next(), ++nbFaces)
  {
    const TopoDS_Shape& aShape = anExp.Current();
    Handle(AIS_ColoredShape) anAisShape = new AIS_ColoredShape(aShape);
    anAisShape->SetColor(Quantity_Color(Quantity_NOC_GREEN));
    anAisShape->SetWidth(2.5);
    myObject3d.Append(anAisShape);
  }


  // Explore shell references.

  Standard_Integer nbWires = 0;
  for (TopExp_Explorer anExp(aBox, TopAbs_WIRE); anExp.More(); anExp.Next(), ++nbWires)
  {
  }


  // Explore shell references.

  Standard_Integer nbShells = 0;
  for (TopExp_Explorer anExp(aBox, TopAbs_SHELL); anExp.More(); anExp.Next(), ++nbShells)
  {
  }


  // Explore solid references.
  
  Standard_Integer nbSolids = 0;
  for (TopExp_Explorer anExp(aBox, TopAbs_SOLID); anExp.More(); anExp.Next(), ++nbSolids)
  {
  }
 
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值