【图形-OpenCascade】OpenCascade使用

               

GeomConvert-------  BSpline曲线、曲面拆分,Handle(Geom_Curve)转BSpline曲线

BRepExtrema_DistShapeShape------求两个TopoDS_Shape(TopoDS_Face、TopoDS_Vertex、TopoDS_Edge、TopoDS_Wire...)的最近距离,得到这个距离所对应的点【在TopoDS_Shape1上的和TopoDS_Shape2上的都可以得到】、最近距离的值、最近距离点的个数

GeomAPI_IntCS----求Geom_Curve和Geom_Surface的交点、交点,得到交点的个数和对应的交点、曲线段的条数、对应的曲线(Geom_Curve)

GeomAPI_IntSS----求Geom_Surface和Geom_Surface的交线,得到交线的条数和对应的交线

BRepAlgoAPI_Section---求TopoDS_Shape和TopoDS_Shape、Geom_Surface和TopoDS_Shape、TopoDS_Shape和gp_Pln相交后的数据,得到TopoDS_Shape【包含相交部分的数据,BRepAlgoAPI_Section继承于BRepBuilderAPI_MakeShape】

BRep_Tool---TopoDS_Face转Geom_Surface、TopoDS_Edge转Geom_Curve(转完后可以得到曲线U值范围)、TopoDS_Vertex转gp_Pnt

StlTransfer---TopoDS_Shape转StlMesh_Mesh

StlMesh_MeshExplorer---StlMesh_Mesh的遍历器、获得三角面片的三个顶点的x、y、z值

遍历示例:

 TopoDS_Shape TrimNurbsToSTL( const TopoDS_Face& aTrimTopFace,Standard_Real precision ) {  TopoDS_Face TopoFace = BRepBuilderAPI_MakeFace(aTrimTopFace).Face();  Handle_StlMesh_Mesh aSTLMesh = new StlMesh_Mesh();  StlTransfer::BuildIncrementalMesh(TopoFace, precision, Standard_False, aSTLMesh);  Standard_Integer NumberDomains = aSTLMesh->NbDomains();  Standard_Integer iND;  gp_XYZ p1, p2, p3;  TopoDS_Vertex Vertex1, Vertex2, Vertex3;  TopoDS_Face AktFace;  TopoDS_Wire AktWire;  BRepBuilderAPI_Sewing aSewingTool;  Standard_Real x1, y1, z1;  Standard_Real x2, y2, z2;  Standard_Real x3, y3, z3;  aSewingTool.Init(CAD_NURBS_STL_TOLERANCE,Standard_True);  TopoDS_Compound aComp;  BRep_Builder BuildTool;  BuildTool.MakeCompound( aComp );  StlMesh_MeshExplorer aMExp (aSTLMesh)for (iND=1;iND<=NumberDomains;iND++)   {   for (aMExp.InitTriangle (iND); aMExp.MoreTriangle (); aMExp.NextTriangle ())    {    aMExp.TriangleVertices (x1,y1,z1,x2,y2,z2,x3,y3,z3);    p1.SetCoord(x1,y1,z1);    p2.SetCoord(x2,y2,z2);    p3.SetCoord(x3,y3,z3);    if ((!(p1.IsEqual(p2,0.0))) && (!(p1.IsEqual(p3,0.0))))    {     Vertex1 = BRepBuilderAPI_MakeVertex(p1);     Vertex2 = BRepBuilderAPI_MakeVertex(p2);     Vertex3 = BRepBuilderAPI_MakeVertex(p3);     AktWire = BRepBuilderAPI_MakePolygon( Vertex1, Vertex2, Vertex3, Standard_True);     if( !AktWire.IsNull())     {      AktFace = BRepBuilderAPI_MakeFace( AktWire);      if(!AktFace.IsNull())       BuildTool.Add( aComp, AktFace );     }    }   }  }  aSTLMesh->Clear();  aSewingTool.Load( aComp );  aSewingTool.Perform();  TopoDS_Shape aShape = aSewingTool.SewedShape();  if ( aShape.IsNull() )   aShape = aComp;  return aShape;  }

StlMesh_Mesh---获得网格片数、网格面片中的三角面片个数

TopoDS_Shape---存储数据的拓扑结构

TopExp_Explorer---TopoDS_Shape的遍历器

遍历示例;

void example(){ TopoDS_Shape aShape; TopoDS_Face aFace; TopoDS_Wire aWire; TopoDS_Edge aEdge; TopoDS_Vertex aVertex; TopExp_Explorer Exp_Edge; TopExp_Explorer Exp_Wire; TopExp_Explorer Exp_Face; TopExp_Explorer Exp_Vertex; for (Exp_Face.Init(aShape,TopAbs_FACE);Exp_Face.More();Exp_Face.Next()) {  aFace = TopoDS::Face(Exp_Face.Current());  for (Exp_Wire.Init(aFace,TopAbs_WIRE);Exp_Wire.More();Exp_Wire.Next())  {   aWire = TopoDS::Wire(Exp_Wire.Current());   for (Exp_Edge.Init(aWire,TopAbs_EDGE);Exp_Edge.More();Exp_Edge.Next())   {    aEdge = TopoDS::Edge(Exp_Edge.Current());    for (Exp_Vertex.Init(aEdge,TopAbs_VERTEX);Exp_Vertex.More();Exp_Vertex.Next())    {     aVertex = TopoDS::Vertex(Exp_Vertex.Current());     gp_Pnt Pnt = BRep_Tool::Pnt(aVertex);    }   }  } } for (Exp_Vertex.Init(aShape,TopAbs_VERTEX);Exp_Vertex.More();Exp_Vertex.Next()) {  aVertex = TopoDS::Vertex(Exp_Vertex.Current());  gp_Pnt Pnt = BRep_Tool::Pnt(aVertex); } for (Exp_Edge.Init(aShape,TopAbs_EDGE);Exp_Edge.More();Exp_Edge.Next()) {  aEdge = TopoDS::Edge(Exp_Edge.Current());  Standard_Real First,Last;  Handle(Geom_Curve) Pnt = BRep_Tool::Curve(aEdge,First,Last); } for (Exp_Wire.Init(aShape,TopAbs_WIRE);Exp_Wire.More();Exp_Wire.Next()) {  aWire = TopoDS::Wire(Exp_Wire.Current()); } for (Exp_Face.Init(aShape,TopAbs_WIRE);Exp_Face.More();Exp_Face.Next()) {  aFace = TopoDS::Face(Exp_Face.Current());   Handle(Geom_Surface) aSurface = BRep_Tool::Surface(aFace); }}
拓扑创建:

BRepBuilderAPI_MakeVertex = TopoDS_VertexBRepBuilderAPI_MakeEdge = TopoDS_EdgeBRepBuilderAPI_MakeWire = TopoDS_WireBRepBuilderAPI_MakeFace = TopoDS_FaceBRepBuilderAPI_MakePolygon = TopoDS_Wire //直线框

几何容器:数组队列

TColGeom_xxxxxxxxxxxxxxxxxx

TColgp_xxxxxxxxxxxxxxxxxxxxxx

TColStd_xxxxxxxxxxxxxxxxxxxxx

TDataStd_xxxxxxxxxxxxxxxxxxx




           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/qq_43746676/article/details/86691189