OpenCascade基础图元建模API快速教程 BRepPrimAPI

Posted 新缸中之脑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OpenCascade基础图元建模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会抛出错误。以下代码显示如何创建框:

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:

Standard_Real X = 20, Y = 10, Z = 15, R = 10, DY = 30; 
// Make the system of coordinates 
gp_Ax2 axes = gp::ZOX(); 
axes.Translate(gp_Vec(X,Y,Z)); 
TopoDS_Face F = 
BRepPrimAPI_MakeCylinder(axes,R,DY,PI/2.); 

5、圆锥体(Cone)

使用类BRepPrimAPI_MakeCone类创建圆锥图元。与圆柱体一样,圆锥体可以在默认坐标系或给定坐标系统gp_Ax2中创建。有两种构造方法:

  • 指定两个半径和高度,以建立一个完整的圆锥体。其中一个半径如果为空,则得到一个尖锐的圆锥体。
  • 指定半径、高度和角度,以建立一个截断的圆锥体。

以下代码构建示例途中的实心圆锥体,该圆锥体在默认坐标系统中,半径为R1和R2,高度为H。

Standard_Real R1 = 30, R2 = 10, H = 15; 
TopoDS_Solid S = BRepPrimAPI_MakeCone(R1,R2,H); 

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。
  • 指定两个半径和三个角度 - 前两种方法的组合,构建圆环体片段。

以下代码指定两个半径和三个角度构建四个圆环体:

Standard_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类支持利用形状、矢量或方向创建线性棱镜。

  • 指定一个矢量,创建有限棱镜:
  • 指定一个方向,可以创建无限或半无限棱镜。半无限或无限棱镜使用一个布尔类型的参数来切换。所有构造函数
    都有一个布尔参数来声明复制还是共享(默认)原始形状。

以下代码使用面、方向和长度创建一个有限、无限和半无限的实体。

TopoDS_Face F = ..; // The swept face 
gp_Dir direc(0,0,1); 
Standard_Real l = 10; 
// create a vector from the direction and the length 
gp_Vec v = direc; 
v *= l; 
TopoDS_Solid P1 = BRepPrimAPI_MakePrism(F,v); 
// finite 
TopoDS_Solid P2 = BRepPrimAPI_MakePrism(F,direc); 
// infinite 
TopoDS_Solid P3 =  BRepPrimAPI_MakePrism(F,direc,Standard_False); 
// semi-infinite 

11、旋转扫掠体(Rotational Sweep)

BRepPrimAPI_MakeRevol类允许指定形状、轴(gp_Ax1)和角度创建旋转扫掠体。角度的默认值为 2*PI,这意味着一个闭合的旋转。

BRepPrimAPI_MakeRevol构造器最后一个参数用来声明复制或共享原始形状。以下代码使用面、轴和角度创建完整和部分旋转扫掠体。

TopoDS_Face F = ...; // the profile 
gp_Ax1 axis(gp_Pnt(0,0,0),gp_Dir(0,0,1)); 
Standard_Real ang = PI/3; 
TopoDS_Solid R1 = BRepPrimAPI_MakeRevol(F,axis); 
// Full revol 
TopoDS_Solid R2 = BRepPrimAPI_MakeRevol(F,axis,ang); 

原文链接:BRepPrimAPI图元创建接口 - BimAnt

以上是关于OpenCascade基础图元建模API快速教程 BRepPrimAPI的主要内容,如果未能解决你的问题,请参考以下文章

win10安装OpenCasCade并绘图测试

Spring Boot基础-RESTfull API简单项目的快速搭建

OpenCasCade一些常用的API

浮云绘图CAD编辑器源码开发之直线方块圆等基础图元操作和接口定义

OpenSceneGraph几何基础教程OSG

零基础快速入门SpringBoot2.0教程