OpenCascade——BRepPrimAPI图元创建接口

2024-02-22 23:20

本文主要是介绍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 

这篇关于OpenCascade——BRepPrimAPI图元创建接口的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/736813

相关文章

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

手把手教你idea中创建一个javaweb(webapp)项目详细图文教程

《手把手教你idea中创建一个javaweb(webapp)项目详细图文教程》:本文主要介绍如何使用IntelliJIDEA创建一个Maven项目,并配置Tomcat服务器进行运行,过程包括创建... 1.启动idea2.创建项目模板点击项目-新建项目-选择maven,显示如下页面输入项目名称,选择

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

Java 后端接口入参 - 联合前端VUE 使用AES完成入参出参加密解密

加密效果: 解密后的数据就是正常数据: 后端:使用的是spring-cloud框架,在gateway模块进行操作 <dependency><groupId>com.google.guava</groupId><artifactId>guava</artifactId><version>30.0-jre</version></dependency> 编写一个AES加密

批处理以当前时间为文件名创建文件

批处理以当前时间为文件名创建文件 批处理创建空文件 有时候,需要创建以当前时间命名的文件,手动输入当然可以,但是有更省心的方法吗? 假设我是 windows 操作系统,打开命令行。 输入以下命令试试: echo %date:~0,4%_%date:~5,2%_%date:~8,2%_%time:~0,2%_%time:~3,2%_%time:~6,2% 输出类似: 2019_06

ORACLE 11g 创建数据库时 Enterprise Manager配置失败的解决办法 无法打开OEM的解决办法

在win7 64位系统下安装oracle11g,在使用Database configuration Assistant创建数据库时,在创建到85%的时候报错,错误如下: 解决办法: 在listener.ora中增加对BlueAeri-PC或ip地址的侦听,具体步骤如下: 1.启动Net Manager,在“监听程序”--Listener下添加一个地址,主机名写计