OpenCascade——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,dydz。盒子与坐标轴平行,并延伸至[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、 zminzmax来描述在 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中创建。有两种构造方法:

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

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

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

6、球体(Sphere)

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

  • 指定半径 - 创建一个完整的球体。
  • 指定半径和角度 - 建立一个半月体(Lune)。
  • 指定半径和两个角度 - 创建一个包围在两个纬度之间的球片段。a1a2的角度必须遵循关系: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); 

官网地址:Open CASCADE Technology: Modeling Algorithms 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/485114.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python实现简易小钢琴

Python实现简易小钢琴 使用Python和内带的Tkinter库、winsound 模块实现的简单小钢琴。 Tkinter库和winsound模块不需要额外安装就可以使用&#xff0c;因为它们是Python的标准库之一&#xff0c;已经随着Python的安装包一起提供。标准库是Python官方提供的一组核心模块和工具…

MFC 皮肤库配置

1.创建MFC 对话框 2.添加皮肤资源 添加资源 添加头文件 关闭SDL检测 添加静态库文件 修改字符集 添加头文件 将皮肤中的ssk文件加载到初始化实例中 > 运行即可

在UE5中制作UI环形进度条

在日常开发中&#xff0c;经常会有环形进度条UI的效果&#xff0c;例如技能CD时间、加载动画等&#xff0c;本文将通过材质球节点实现该效果&#xff0c;相较于准备美术素材&#xff0c;这样的做法更为方便&#xff0c;效果如下&#xff1a; 1.制作环状效果材质函数 在内容面…

创建型设计模式 - 原型设计模式 - JAVA

原型设计模式 一 .简介二. 案例三. 补充知识 前言 这是我在这个网站整理的笔记,有错误的地方请指出&#xff0c;关注我&#xff0c;接下来还会持续更新。 作者&#xff1a;神的孩子都在歌唱 一 .简介 原型模式提供了一种机制&#xff0c;可以将原始对象复制到新对象&#xff0…

【DAY03 软考中级备考笔记】存储系统,总线系统,输入输出系统和可靠性

存储系统&#xff0c;总线系统&#xff0c;输入输出系统和可靠性 2月22日 – 天气&#xff1a;阴转晴 济南下大雪&#xff0c;居家办公两天。 1. 计算机存储器的分类 根据存储位置划分&#xff1a; 内存/主存&#xff1a;用来保存当前正在运行的程序所需要的数据&#xff0c…

C2-1.4(L1,L2)正则化

C2-1.4&#xff08;L1,L2&#xff09;正则化 参考书籍 1 正则化的概念 正则化(Regularization) 是机器学习中对原始损失函数引入额外信息&#xff0c;以便防止过拟合和提高模型泛化性能的一类方法的统称。也就是目标函数变成了原始损失函数额外项&#xff0c;常用的额外项一般…

代码随想录第二十三天 回溯算法 77.组合 216.组合总和 17.电话号码的字母组合

回溯算法 LeetCode 77 组合 题目描述 思路 递归函数的返回值以及参数 在这里要定义两个全局变量&#xff0c;一个用来存放符合条件单一结果&#xff0c;一个用来存放符合条件结果的集合。 代码如下&#xff1a; vector<vector<int>> result; // 存放符合条件…

Docker容器与虚拟化技术:kylin 部署 docker容器应用

目录 一、实验 1.环境 2. kylin 部署 docker及版本升级 3.kylin 部署docker镜像加速 4.kylin 部署 nginx容器应用 5.kylin使用docker容器部署mysql实现数据持久化 6.kylin使用docker容器部署nginx实现配置文件持久化到本地 7.kylin 使⽤ docker 部署容器可视化平台porta…

【论文解读】Uncertainty Quantification of Collaborative Detection for Self-Driving

Uncertainty Quantification of Collaborative Detection for Self-Driving 摘要引言方法问题定义方法概览Double-M 实验结论 摘要 在联网和自动驾驶汽车(CAVs)之间共享信息从根本上提高了自动驾驶协同目标检测的性能。然而&#xff0c;由于实际挑战&#xff0c;CAV 在目标检测…

【LeetCode: 106. 从中序与后序遍历序列构造二叉树 + DFS】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

shell脚本实现Mysql分库分表备份

一.数据库的分库分表&#xff1f; 12张图把分库分表讲的明明白白&#xff01;阿里面试&#xff1a;我们为什么要分库分表https://mp.weixin.qq.com/s?__bizMzU0OTE4MzYzMw&mid2247547792&idx2&sn91a10823ceab0cb9db26e22783343deb&chksmfbb1b26eccc63b784879…

UIKit 在 UICollectionView 中拖放交换 Cell 视图的极简实现

概览 UIKit 中的 UICollectionView 视图是我们显示多列集合数据的不二选择&#xff0c;而丰富多彩的交互操作更是我们选择 UICollectionView 视图的另一个重要原因。 如上图所示&#xff1a;我们实现了在 UICollectionView 中拖放交换任意两个 Cell 子视图的功能&#xff0c;这…