OpenCascade的BRepPrimAPI提供了创建盒、楔、锥体、主体等的API,支持扫掠方式建模。 本文详细介绍BRepPrimAPI包的主要类、构造参数以及使用示例。
OpenCascade BRepPrimAPI包提供了创建以下图元(primitive)的 API:
- 盒;
- 锥体;
- 柱体;
- 棱镜。
可以创建部分实体,例如一定经度范围内的球体。在实际模型中,图元可用于轻松创建特定的子部件。
BRepPrimAPI也提供了扫掠方式(Sweep)建模的API,支持轮廓沿线性路径或旋转方式创建实体模型。
扫掠将轮廓沿指定路径移动从而获得几何实体。轮廓可以是任何拓扑,路径通常是曲线。轮廓根据以下规则生成几何对象:
- 顶点(Vertex)生成边(Edge)
- 边(Edge)生成面(Face)。
- 线(Wire)生成壳(Shell)。
- 面(Face)生成实体(Solid)。
- 壳(Shell)生成组合实体(Composite Solid)。
OpenCascad不支持实体和组合实体的扫掠操作。可以在BRepOffsetAPI包中找到沿复杂的轮廓(如 BSpline 曲线)进行扫描构造的API,BRepPrimAPI为常见的实体建模操作提供了简单、高层次的开发接口。
1、盒子(Box)
使用类BRepPrimAPI_MakeBox 创建一个平行六面体的盒子,可以得到壳或者是实体。有四种方法可以构建一个盒子:
- 指定三维尺寸dx,dy和dz。盒子与坐标轴平行,并延伸至[0,dx] [0,dy] [0,dz] 。
- 指定一个点和三维尺寸。与上面基本相同,差异出在于原点变化。
- 指定两个点,盒与坐标轴平行,充满两个点坐标定义的间隔空间。
- 指定坐标轴gp_Ax2和三维尺寸。与第一种方式相同,但得到的盒子与指定的坐标轴系统平行。
如果任何一个维度在默认精度下平面化,BRepPrimAPI_MakeBox会抛出错误。以下代码显示如何创建框:
1 | TopoDS_Solid theBox = BRepPrimAPI_MakeBox(10.,20.,30.); |
构建盒子的四种方法如下图显示:
2、楔子(Wedge)
使用类BRepPrimAPI_MakeWedge建立一个楔子,这是一个有角度的盒子。楔子的构造方式与盒子大致相同,即指定三维尺寸 dx、dy、dz 以及其他参数,或指定坐标轴系统、三维尺寸和辅助参数。
下图显示了两种构建楔子的方法。一个方法是指定一个额外的参数ltx,表示在dy处的面的x方向的长度;第二种方法是使用额外的参数xmin、xmax、 zmin和zmax来描述在 dy处的面。
第一种方法是第二种方法的特殊情况,这时:xmin = 0, xmax = ltx, zmin = 0, zmax = dz。要制作一个金字塔,可以使用参数:xmin = xmax = dx / 2,zmin = zmax = dz / 2。
3、旋转图元(Rotation)
BRepPrimAPI_MakeOneAxis是一个延迟实现类,作为构建旋转图元的所有类的根类。旋转图元通过围绕指定轴旋转曲线而形成,包括圆柱体(Cylinder)、圆锥体(Cone)、球体(Sphere)、圆环体(Torus)以及旋转体(Revolution),旋转体包含了对其他曲线的使用。
尽管上述图元的构造参数彼此不同,但存在一些共同点:
- 需要指定一个坐标系统,其中Z轴是旋转轴。
- 旋转角度的范围为 [0,2*PI]。
- 可以使用vmin、vmax指定曲线范围。
OneAxis 构造的结果是实体、壳或面。面覆盖旋转表面。请记住你不会直接使用 OneAxis,而是使用某个特定的派生类(例如BRepPrimAPI_MakeCylinder)。下图说明了 OneAxis 的参数作用:
4、圆柱体(Cylinder)
使用类BRepPrimAPI_MakeCylinder创建圆柱体图元,可以在默认坐标系统或给定坐标系统gp_Ax2 中创建。有两种构造方法:
- 指定半径和高度,以建立一个完整的圆柱体。
- 指定半径、高度和角度,以构建圆柱体的一部分。
以下代码构建示例图中的圆柱面,这是沿Y轴的四分之一圆柱,原点位于X、Y、Z, 长度为DY,半径为R:
1 | Standard_Real X = 20, Y = 10, Z = 15, R = 10, DY = 30; |
5、圆锥体(Cone)
使用类BRepPrimAPI_MakeCone类创建圆锥图元。与圆柱体一样,圆锥体可以在默认坐标系或给定坐标系统gp_Ax2中创建。有两种构造方法:
- 指定两个半径和高度,以建立一个完整的圆锥体。其中一个半径如果为空,则得到一个尖锐的圆锥体。
- 指定半径、高度和角度,以建立一个截断的圆锥体。
以下代码构建示例途中的实心圆锥体,该圆锥体在默认坐标系统中,半径为R1和R2,高度为H。
1 | Standard_Real R1 = 30, R2 = 10, H = 15; |
6、球体(Sphere)
使用类BRepPrimAPI_MakeSphere创建球体图元。与圆柱体一样,球体可以在默认坐标系统或给定坐标系统gp_Ax2 中创建。有四种构造方式:
- 指定半径 - 创建一个完整的球体。
- 指定半径和角度 - 建立一个半月体(Lune)。
- 指定半径和两个角度 - 创建一个包围在两个纬度之间的球片段。a1和a2的角度必须遵循关系:PI/2 <= a1 < a2 < = PI/2 。
- 指定半径和三个角度 - 前两种方法的组合,构建球片段的一部分。
以下代码指定半径和三个角度构建四个球体。
7、圆环体(Torus)
使用类BRepPrimAPI_MakeTorus创建圆环体图元。与其他图元一样,可以在默认坐标系或给定坐标系统gp_Ax2中创建。有四种构造方式:
- 指定两个半径 - 创建一个完整的圆环体。
- 指定两个半径和一个角度 - 创建一个圆环体片段。
- 指定两个半径和两个角度-在两个径向平面之间构建一个圆环体。角度 a1, a2 必须遵循关系 0 < a2 - a1 < 2*PI。
- 指定两个半径和三个角度 - 前两种方法的组合,构建圆环体片段。
以下代码指定两个半径和三个角度构建四个圆环体:
1
2
3
4
5
6
7Standard_Real R1 = 30, R2 = 10, ang = PI, a1 = 0,
a2 = PI/2;
TopoDS_Shell S1 = BRepPrimAPI_MakeTorus(R1,R2);
TopoDS_Shell S2 = BRepPrimAPI_MakeTorus(R1,R2,ang);
TopoDS_Shell S3 = BRepPrimAPI_MakeTorus(R1,R2,a1,a2);
TopoDS_Shell S4 =
BRepPrimAPI_MakeTorus(R1,R2,a1,a2,ang);
请注意,我们可以选择创建实体而不是壳。
8、旋转体(Revolution)
使用类BRepPrimAPI_MakeRevolution从曲线构建单轴图元。和其他单轴图元一样,可以在默认坐标系或给定坐标系统中创建。
曲线可以是任何Geom_Curve 对象,只要它是平面的,并且与局部坐标系的Z轴位于同一平面。有四种构造方式:
- 指定一个曲线,使用完整的曲线并进行完全旋转。
- 指定曲线和旋转角度。
- 指定曲线和两个修剪曲线的参数。这两个参数必须是增长的,并在曲线范围内。
- 指定曲线、两个参数和一个角度。这两个参数必须是增长的,并在曲线范围内。
9、扫掠(Sweeping)
扫掠体(Sweeps)是通过沿路径扫掠轮廓而获得的几何对象。
BRepPrimAPI_MakeSweep是一个延迟实现类,作为以下类的根类:
- BRepPrimAPI_MakePrism - 创建线性扫掠体
- BRepPrimAPI_MakeRevol - 创建旋转扫掠体
- BRepPrimAPI_MakePipe - 创建通用扫掠体
10、棱镜(Prism)
BRepPrimAPI_MakePrism类支持利用形状、矢量或方向创建线性棱镜。
- 指定一个矢量,创建有限棱镜:
- 指定一个方向,可以创建无限或半无限棱镜。半无限或无限棱镜使用一个布尔类型的参数来切换。所有构造函数
都有一个布尔参数来声明复制还是共享(默认)原始形状。
以下代码使用面、方向和长度创建一个有限、无限和半无限的实体。
1 | TopoDS_Face F = ..; // The swept face |
11、旋转扫掠体(Rotational Sweep)
BRepPrimAPI_MakeRevol类允许指定形状、轴(gp_Ax1)和角度创建旋转扫掠体。角度的默认值为 2*PI,这意味着一个闭合的旋转。
BRepPrimAPI_MakeRevol构造器最后一个参数用来声明复制或共享原始形状。以下代码使用面、轴和角度创建完整和部分旋转扫掠体。
1 | TopoDS_Face F = ...; // the profile |