OCC常用类型笔记

1、gp_xxx包含了基本的几何类。

属于FoundationClasses模块下的TKMath包,源码路径FoundationClasses/TKMath/gp,包括30多个类

// 定义三维点
gp_Pnt aPnt1(2. , 0 , 0);

// 轴
gp_Pnt aOrigin(0 , 0 , 0); // 点
gp_Dir xDir(1 , 0 , 0);  // 方向
gp_Ax1 xAxis(aOrigin , xDir); // 轴
2、Standard_XXX是occ定义的数值类型,包括一些类型定义和宏定义。

属于FoundationClasses模块下的TKernel包,源码路径FoundationClasses/TKernel/Standard,包括好几十个类

3、Geom_XXX定义了几何数据结构,由gp_XXX构建成的数据结构,不包含算法,一般称其为构建几何类

属于ModelingData模块下的TKG3d包,源码路径ModelingData/TKG3d/Geom,包括40个类

4、GC_MakeXXX也是由gp_XXX构建成的数据结构,与Geom_XXX不同的是,GC_MakeXXX包含构建算法,一般称其为几何形状构建包。

属于ModelingData模块下的TKGeomBase包,源码路径ModelingData/TKGeomBase/GC,包括近18个类

Handle(Geom_TrimmedCurve) aArcOfCircle = GC_MakeArcOfCircle(aPnt2,aPnt3 ,aPnt4); 
Handle(Geom_TrimmedCurve) aSegment1 = GC_MakeSegment(aPnt1 , aPnt2);
5、TopoDS_XXX是由多个Geom_XXX组成的,他们有共同的父类TopoDS_Shape,从名字可以看出该类对象包括了拓扑关系,但是TopoDS_XXX仅是一种数据结构,不包括算法。

属于ModelingData模块下的TKBRep包,源码路径ModelingData/TKBRep/TopoDS,包括15个类

图形Open CASCADE Class描述
Vertex(顶点)TopoDS_Vertex表示几何体上的一个点
Edge (边)TopoDS_Edge表示一个曲线和一个有边界的向量
Wire (网格)TopoDS_Wire由顶点连起来的一系列边
Face (面)TopoDS_Face由闭合的网格组成的边界平面
Shell (壳)TopoDS_Shell通过边连接起起来一组面
Solid (体)TopoDS_Solid由壳组成的有边界的三维空间
CompSolid (复合体)TopoDS_CompSolid通过面连接的一组体
Compound (复合对象)TopoDS_Compound由上面各种图形形成的一个集合

拓扑仅仅是数据结构,本身并不可做什么操作和运算,一般需要转成Geom_XX后,可以进行相关信息的提取及操作;如何转换呢,一般使用BRep_Tool(见12)

6、BRepBuilderAPI_XXX一般称为拓扑结构构建包,实现了从Geom_XXX到TopoDS_XXX的构建过程。

属于ModelingAlgorithms模块下的TKTopAlgo包,源码路径ModelingAlgorithms/TKTopAlgo/BrepBuilderAPI,包括20个类

TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aSegment1);  // aSegment1为Geom_TrimmedCurve类型
TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aArcOfCircle); // aArcOfCircle为Geom_TrimmedCurve

// 由多个边拓扑创建得到网格拓扑
TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(aEdge1 , aEdge2 , aEdge3);
7、BRepPrimAPI_XXX一般称为实体构建包,也就是将TopoDS_XXX构建成为实体,当然这里的实体也是TopoDS_XXX对象

属于ModelingAlgorithms模块下的TKPrim包,源码路径ModelingAlgorithms/TKPrim/BRepPrimAPI,包括11个类

顶点/gp_Pnt->线段/GC_MakeSegment->边/BRepBuilderAPI_MakeEdge->线框/BrepBuilderAPI_MakeWire->面/BRepBuilderAPI_MakeFace->体/BRepPrimAPI_MakePrism

gp_Vec aPrismVec(0 , 0 , myHeight);  // 向量
TopoDS_Shape myBody = BRepPrimAPI_MakePrism(myFaceProfile , aPrismVec); 
// 注意myFaceProfile 为一个封闭的网格
8、BRepFilletAPI_XXX为倒角包。

属于ModelingAlgorithms模块下的TKFillet包,源码路径ModelingAlgorithms/TKFillet/BRepFilletAPI,包括3个类

BRepFilletAPI_MakeFillet mkFillet(myBody);  // myBody为Solid实体,一个TopoDS_Shape类型 
mkFillet.Add(myThickness / 12. , aEdge);  // 添加需要倒角的边,aEdge为TopoDS_Edge 类型
myBody = mkFillet.Shape(); // 获取新的TopoDS_Shape类型
9、TopExp_Explorer为拓扑解析包,用于TopoDS_XXX的解析,就是将已知实体(拓扑结构)解析为边组合、面组合等等。

属于ModelingData模块下的TKBRep包,源码路径ModelingData/TKBRep/TopExp,2个类

TopExp_Explorer aEdgeExplorer(myBody , TopAbs_EDGE); 
while(aEdgeExplorer.More())
{ 
	TopoDS_Edge aEdge = TopoDS::Edge(aEdgeExplorer.Current()); //Add edge to fillet algorithm 
	mkFillet.Add(myThickness / 12. , aEdge); 
	... 
	aEdgeExplorer.Next(); 
} 
10、TopAbs_ShapeEnum是一个特殊的结构,类似于一个拓扑结构的数组,具有More()、Next()、Current()三个重要的方法,一般称之为拓扑解析结果集
11、BRepAlgoAPI_XXX是核心算法包,专门用于Shape对象的布尔运算(交集common(Boolean intersection)、差集cut(Boolean subtraction)、并集fuse(Boolean union)),一般称之为几何算法包

属于ModelingAlgorithms模块下的TKBO包,源码路径ModelingAlgorithms/TKBO/BRepAlgoAPI,包括10个类

TopoDS_Shape myNeck = BRepPrimAPI_MakeCylinder(neckAx2 , myNeckRadius , myNeckHeight); // neckAx2为gp_Ax2类型
myBody = BRepAlgoAPI_Fuse(myBody , myNeck); // myBody 为 TopoDS_Shape 类型
12、BRep_Tool主要有三个方法,用于从TopoDS_XXX到Geom_XXX的转换

属于ModelingData模块下的TKBRep包,源码路径ModelingData/TKBRep/BRepTools,14个类
TopoDS_Face -> Geom_Surface
TopoDS_Edge->Geom_Curve
TopoDS_Vertex->Geom_Point

Handle(Geom_Surface) aSurface = BRep_Tool::Surface(aFace); // aFace 为TopoDS_Face类型,但是并不知道是平面还是圆柱侧面
// 一般这里还需要做一次类型检测,使用Standard_Transient(见13点)
Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(aSurface); 

为什么需要转换多次,从TopoDS_Face->Geom_Surface->Geom_Plane? Geom_Surface本身不带信息的,都是引用具体的Geom_Plane或Geom_CylindricalSurface;这里可以通过Geom_Plane::Location获取相关信息

13、Standard_Transient类主要有两个用途
  1. DynamicType 函数用来获取 Handle(Geom_Surface)的真实类型,因为Geom_Surface有可能是任何一种面
  2. IsKind 用来判断该类型是否是某个类的子类
if(aSurface->DynamicType() == STANDARD_TYPE(Geom_Plane))
{
	// 这里可以执行一些检测成功后的内容,比如做类型转换
	Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(aSurface); 
} 
14、BRepOffisetAPI_XXX一般称为形体生成包,用于将线框模型生成实体模型
TopTools_ListOfShape facesToRemove; // 一个可以存放Shape集合的对象
facesToRemove.Append(face); // 添加一个一个面face为TopoDS_Face 类型

MyBody = BRepOffsetAPI_MakeThickSolid(myBody , facesToRemove , -myThickness / 50 , 1.e-3);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值