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_Vertex BRepBuilderAPI_MakeEdge = TopoDS_Edge BRepBuilderAPI_MakeWire = TopoDS_Wire BRepBuilderAPI_MakeFace = TopoDS_Face BRepBuilderAPI_MakePolygon = TopoDS_Wire //直线框
几何容器:数组队列
TColGeom_xxxxxxxxxxxxxxxxxx
TColgp_xxxxxxxxxxxxxxxxxxxxxx
TColStd_xxxxxxxxxxxxxxxxxxxxx
TDataStd_xxxxxxxxxxxxxxxxxxx
————————————————
版权声明:本文为CSDN博主「少莫千华」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chenlu5201314/article/details/8687364
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)