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