class TopoDS_TShape : public Standard_Transient
{
...
private:
TopoDS_ListOfShape myShapes;
};
TopoDS_Shape的边界TopoDS_Shape存放在TopoDS_TShape的myShapes中,
有TopoDS_Vertex, Edge,Wire,Face,Shell,Solid,Component顺序层次,在Brep_Builder的add方法,需vertex添加到edge,edge添加到wire,wire 添加到face…这个顺序,就是在填myShapes,这个private的myShapes貌似需要TopoDS_Iterator来间接遍历访问。HashCode()返回指定范围的标识数。
class TopoDS_Shape
{
public:
const Handle(TopoDS_TShape)& TShape() const { return myTShape; }
...
private:
Handle(TopoDS_TShape) myTShape;
TopLoc_Location myLocation;
TopAbs_Orientation myOrient;
};
这些派生类例如TopoDS_TVertex只要类声明有DEFINE_STANDARD_RTTIEXT宏,通过DynamicType()->Name()得到派生类类名
只有TopoDS_Vertex,TopoDS_Edge,TopoDS_Face存有Geometry,
class BRep_TVertex : public TopoDS_TVertex
{
...
private:
gp_Pnt myPnt;
Standard_Real myTolerance;
BRep_ListOfPointRepresentation myPoints;
};
class BRep_TEdge : public TopoDS_TEdge
{
...
private:
BRep_ListOfCurveRepresentation myCurves;
};
class BRep_TFace : public TopoDS_TFace
{
...
private:
Handle(Geom_Surface) mySurface;
Handle(Poly_Triangulation) myTriangulation;
}
BRep_TVertex有Pnt得到点的几何,还有点表示,它的具体类有 pointOnSurface,pointOnCurveOnSurface
BRep_TEdge的线表示具体类有curve3d,curveOnSurface,curveOn2Surface,通过线表示访问线几何,还有pcurve
BRep_TFace可以直接Surface()访问到face的几何
Brep_Builder有许多Makexxx,Add,Remove,Updatexxx实现就是在正确填写和修改TopoDS_xxx这个层次化的的边界表示的实体建模(solid modeling)这个实体模型的数据结构体,其它的modeling中的各种造型算法其实底下也是在修改这个数据结构,包括正确的拓扑和几何,几何最多的运算就是求交,产生曲面的交曲线和产生新的点,布尔运算是在xx_Pave这种运算后,经过点点,点线…,线线,线面,面面…多次由低维向高维几何元素间求交,得到Pave,马赛克这个词挺形象,这种两个体的face和edge碎在一起的face片,多个face片共邻一个edge,然后由体素正则集合运算法则,根据是并交差算符,从Pave 这得到体的哪些面片,正确的orientation,组织成新shell从而得到新体,这个过程还记住了原来体的哪些face edge vertex 对新体的贡献。
Brep_Tool有很多方便的方法读取几何方程(Geom_xx)和离散数据(poly_xx)如果brepmesh过以后。