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 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

鱼哥赠书活动第⑧期:《基础软件之路:企业级实践及开源之路》

鱼哥赠书活动第⑧期&#xff1a;《基础软件之路&#xff1a;企业级实践及开源之路》 作者介绍&#xff1a;1.静态分析工具在当前软件开发流程中的应用2.编译相关技术在静态分析工具中的应用3.编译相关技术在提升软件质量和性能上的更多应用4. 未来展望图书推荐&#xff1a;赠书…

Jest单元测试:玩转代码的小捉迷藏!

嗨&#xff0c;码农小伙伴们&#xff01;在这个金秋十月&#xff0c;国庆与中秋重叠&#xff0c;我们有一个特殊的任务——通过 Jest 单元测试&#xff0c;找到代码的神秘“中秋蛋糕”&#xff01;这是一个简单又有趣的冒险&#xff0c;就像在中秋晚会上找月亮一样容易。让我们…

springboot208基于springboot物流管理系统

基于spring boot物流管理系统设计与实现 摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。…

大数据Kafka--概述

文章目录 概述定义消息队列传统消息队列的应用场景消息队列的两种模式 Kafka基础架构 Kafka快速入门安装部署集群规划集群部署集群启停脚本 Kafka命令行操作主题命令行操作生产者命令行操作消费者命令行操作 概述 定义 消息队列 目前企业中比较常见的消息队列产品主要有 Kafk…

PLC_博图系列☞基本指令“插入输入”

PLC_博图系列☞基本指令“插入输入” 文章目录 PLC_博图系列☞基本指令“插入输入”背景介绍插入输入说明参数示例 关键字&#xff1a; PLC、 西门子、 博图、 Siemens 、 插入输入 背景介绍 这是一篇关于PLC编程的文章&#xff0c;特别是关于西门子的博图软件。我并不是专…

LeetCode每日刷题:101. 对称二叉树

题目&#xff1a; 解题思路&#xff1a;可以新写一个函数&#xff0c;从root开始&#xff0c;root的left的头结点将记为lefttree&#xff08;左子树&#xff09;,root的lright的头结点将记为righttree&#xff08;右子树&#xff09;&#xff0c; 然后递归左子树的root.left与右…

搭建sql-labs靶机环境

phpstudy&#xff08;小皮面板&#xff09; 先下载phpstudy&#xff08;小皮面板&#xff09;软件&#xff0c;方便我们快速搭建环境&#xff0c;该软件程序包集成最新的ApachePHPMySQLngix,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境.该程序不仅包括PHP调试…

C++笔记:OOP三大特性之继承

文章目录 一、继承的概念和定义1.1 概念1.2 定义格式1.3 继承关系和访问限定符 二、基类和派生类对象赋值兼容转换2.1 类型转换存在临时对象的意义2.2 赋值兼容转换不会产生临时变量 三、继承中的作用域四、派生类中的默认成员函数4.1 构造4.2 拷贝构造4.3 赋值重载4.4 析构 五…

【进程创建】

目录 进程创建的方式查看进程pid 调用系统调用创建子进程fock函数做了的工作子进程刚开始创建的状态 一个变量&#xff0c;两个不同的值创建子进程的作用 进程创建的方式 1.在操作系统上输入的指令。 2.已经启动的软件。 3.程序员在代码层面上调用系统调用创建进程。 linux中第…

centos6安装

前期准备 官网 选择download 选择isos 选择mininal.iso下载 安装 打开vmware 输入root和密码登录

Block Coordinate Descent算法的部分构造技巧

文章目录 构造的目的定理另一篇中对于该定理的表述出处 构造的目的 通过增加辅助变量&#xff0c;使原来的非凸问题变为关于各个变量的凸子问题&#xff0c;交替优化各个辅助变量。 定理 Define an m m m by m m m matrix function E ( U , V ) ≜ ( I − U H H V ) ( I …

工具分享:Corn表达式在线生成工具介绍

无极低码 &#xff1a;https://wheart.cn Corn表达式在线生成工具介绍 在现代的信息技术领域中&#xff0c;定时任务是一个不可或缺的功能。无论是为了定期清理缓存、发送邮件、还是执行其他自动化任务&#xff0c;我们都需要一个高效、便捷的定时工具。而在众多的定时工具中…

Microsoft PowerToys:自定义 Windows 的实用程序

Microsoft PowerToys&#xff1a;自定义 Windows 的实用程序 Microsoft PowerToys 是一组实用程序&#xff0c;供高级用户调整和简化其 Windows 体验以提高工作效率。 微软官方地址为&#xff1a;https://learn.microsoft.com/en-us/windows/powertoys/&#xff0c;其github源…

springboot207基于springboot的实习管理系统

实习管理系统的设计与实现 摘要 近年来&#xff0c;信息化管理行业的不断兴起&#xff0c;使得人们的日常生活越来越离不开计算机和互联网技术。首先&#xff0c;根据收集到的用户需求分析&#xff0c;对设计系统有一个初步的认识与了解&#xff0c;确定实习管理系统的总体功…

qt-OPENGL-星系仿真

qt-OPENGL-星系仿真 一、演示效果二、核心程序三、下载链接 一、演示效果 二、核心程序 #include "model.h"Model::Model(QOpenGLWidget *_glWidget) { glWidget _glWidget;glWidget->makeCurrent();initializeOpenGLFunctions(); }Model::~Model() {destroyV…

HashMap 源码学习-jdk1.8

1、一些常量的定义 这里针对MIN_TREEIFY_CAPACITY 这个值进行解释一下。 java8里面&#xff0c;HashMap 的数据结构是数组 &#xff08;链表或者红黑树&#xff09;&#xff0c;每个数组节点下可能会存在链表和红黑树之间的转换&#xff0c;当同一个索引下面的节点超过8个时…

Elastic Stack--01--简介、安装

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 1. Elastic Stack 简介为什么要学习ESDB-Engines搜索引擎类数据库排名常年霸榜![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/051342a83f574c8c910cda…

【软件架构】02-复杂度来源

1、性能 1&#xff09;单机 受限于主机的CPU、网络、磁盘读写速度等影响 在多线程的互斥性、并发中的同步数据状态等&#xff1b; 扩展&#xff1a;硬件资源、增大线程池 2&#xff09;集群 微服务化拆分&#xff0c;导致调用链过长&#xff0c;网络传输的消耗过多。 集…

【Web前端笔记10】CSS3新特性

10 CSS3新特性 &#xff11;、圆角 &#xff12;、阴影 &#xff08;&#xff11;&#xff09;盒阴影 &#xff13;、背景渐变 &#xff08;&#xff11;&#xff09;线性渐变&#xff08;主要掌握这种就可&#xff09; &#xff08;&#xff12;&#xff09;径向渐变 &…

滚雪球学Java(67):深入理解 TreeMap:Java 中的有序键值映射表

咦咦咦&#xff0c;各位小可爱&#xff0c;我是你们的好伙伴——bug菌&#xff0c;今天又来给大家普及Java SE相关知识点了&#xff0c;别躲起来啊&#xff0c;听我讲干货还不快点赞&#xff0c;赞多了我就有动力讲得更嗨啦&#xff01;所以呀&#xff0c;养成先点赞后阅读的好…