OCC常用类型笔记_occ geom_trimmedcurve-程序员宅基地

技术标签: occ类型  occ  

1、gp_xxx包含了基本的几何类。

属于FoundationClasses模块下的TKMath包,源码路径FoundationClasses/TKMath/gp,包括30多个类

// 定义三维点
gp_Pnt aPnt1(2. , 0 , 0);

// 轴
gp_Pnt aOrigin(0 , 0 , 0); // 点
gp_Dir xDir(1 , 0 , 0);  // 方向
gp_Ax1 xAxis(aOrigin , xDir); // 轴
2、Standard_XXX是occ定义的数值类型,包括一些类型定义和宏定义。

属于FoundationClasses模块下的TKernel包,源码路径FoundationClasses/TKernel/Standard,包括好几十个类

3、Geom_XXX定义了几何数据结构,由gp_XXX构建成的数据结构,不包含算法,一般称其为构建几何类

属于ModelingData模块下的TKG3d包,源码路径ModelingData/TKG3d/Geom,包括40个类

4、GC_MakeXXX也是由gp_XXX构建成的数据结构,与Geom_XXX不同的是,GC_MakeXXX包含构建算法,一般称其为几何形状构建包。

属于ModelingData模块下的TKGeomBase包,源码路径ModelingData/TKGeomBase/GC,包括近18个类

Handle(Geom_TrimmedCurve) aArcOfCircle = GC_MakeArcOfCircle(aPnt2,aPnt3 ,aPnt4); 
Handle(Geom_TrimmedCurve) aSegment1 = GC_MakeSegment(aPnt1 , aPnt2);
5、TopoDS_XXX是由多个Geom_XXX组成的,他们有共同的父类TopoDS_Shape,从名字可以看出该类对象包括了拓扑关系,但是TopoDS_XXX仅是一种数据结构,不包括算法。

属于ModelingData模块下的TKBRep包,源码路径ModelingData/TKBRep/TopoDS,包括15个类

图形 Open CASCADE Class 描述
Vertex(顶点) TopoDS_Vertex 表示几何体上的一个点
Edge (边) TopoDS_Edge 表示一个曲线和一个有边界的向量
Wire (网格) TopoDS_Wire 由顶点连起来的一系列边
Face (面) TopoDS_Face 由闭合的网格组成的边界平面
Shell (壳) TopoDS_Shell 通过边连接起起来一组面
Solid (体) TopoDS_Solid 由壳组成的有边界的三维空间
CompSolid (复合体) TopoDS_CompSolid 通过面连接的一组体
Compound (复合对象) TopoDS_Compound 由上面各种图形形成的一个集合

拓扑仅仅是数据结构,本身并不可做什么操作和运算,一般需要转成Geom_XX后,可以进行相关信息的提取及操作;如何转换呢,一般使用BRep_Tool(见12)

6、BRepBuilderAPI_XXX一般称为拓扑结构构建包,实现了从Geom_XXX到TopoDS_XXX的构建过程。

属于ModelingAlgorithms模块下的TKTopAlgo包,源码路径ModelingAlgorithms/TKTopAlgo/BrepBuilderAPI,包括20个类

TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aSegment1);  // aSegment1为Geom_TrimmedCurve类型
TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aArcOfCircle); // aArcOfCircle为Geom_TrimmedCurve

// 由多个边拓扑创建得到网格拓扑
TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(aEdge1 , aEdge2 , aEdge3);
7、BRepPrimAPI_XXX一般称为实体构建包,也就是将TopoDS_XXX构建成为实体,当然这里的实体也是TopoDS_XXX对象

属于ModelingAlgorithms模块下的TKPrim包,源码路径ModelingAlgorithms/TKPrim/BRepPrimAPI,包括11个类

顶点/gp_Pnt->线段/GC_MakeSegment->边/BRepBuilderAPI_MakeEdge->线框/BrepBuilderAPI_MakeWire->面/BRepBuilderAPI_MakeFace->体/BRepPrimAPI_MakePrism

gp_Vec aPrismVec(0 , 0 , myHeight);  // 向量
TopoDS_Shape myBody = BRepPrimAPI_MakePrism(myFaceProfile , aPrismVec); 
// 注意myFaceProfile 为一个封闭的网格
8、BRepFilletAPI_XXX为倒角包。

属于ModelingAlgorithms模块下的TKFillet包,源码路径ModelingAlgorithms/TKFillet/BRepFilletAPI,包括3个类

BRepFilletAPI_MakeFillet mkFillet(myBody);  // myBody为Solid实体,一个TopoDS_Shape类型 
mkFillet.Add(myThickness / 12. , aEdge);  // 添加需要倒角的边,aEdge为TopoDS_Edge 类型
myBody = mkFillet.Shape(); // 获取新的TopoDS_Shape类型
9、TopExp_Explorer为拓扑解析包,用于TopoDS_XXX的解析,就是将已知实体(拓扑结构)解析为边组合、面组合等等。

属于ModelingData模块下的TKBRep包,源码路径ModelingData/TKBRep/TopExp,2个类

TopExp_Explorer aEdgeExplorer(myBody , TopAbs_EDGE); 
while(aEdgeExplorer.More())
{
     
	TopoDS_Edge aEdge = TopoDS::Edge(aEdgeExplorer.Current()); //Add edge to fillet algorithm 
	mkFillet.Add(myThickness / 12. , aEdge); 
	... 
	aEdgeExplorer.Next(); 
} 
10、TopAbs_ShapeEnum是一个特殊的结构,类似于一个拓扑结构的数组,具有More()、Next()、Current()三个重要的方法,一般称之为拓扑解析结果集
11、BRepAlgoAPI_XXX是核心算法包,专门用于Shape对象的布尔运算(交集common(Boolean intersection)、差集cut(Boolean subtraction)、并集fuse(Boolean union)),一般称之为几何算法包

属于ModelingAlgorithms模块下的TKBO包,源码路径ModelingAlgorithms/TKBO/BRepAlgoAPI,包括10个类

TopoDS_Shape myNeck = BRepPrimAPI_MakeCylinder(neckAx2 , myNeckRadius , myNeckHeight); // neckAx2为gp_Ax2类型
myBody = BRepAlgoAPI_Fuse(myBody , myNeck); // myBody 为 TopoDS_Shape 类型
12、BRep_Tool主要有三个方法,用于从TopoDS_XXX到Geom_XXX的转换

属于ModelingData模块下的TKBRep包,源码路径ModelingData/TKBRep/BRepTools,14个类
TopoDS_Face -> Geom_Surface
TopoDS_Edge->Geom_Curve
TopoDS_Vertex->Geom_Point

Handle(Geom_Surface) aSurface = BRep_Tool::Surface(aFace); // aFace 为TopoDS_Face类型,但是并不知道是平面还是圆柱侧面
// 一般这里还需要做一次类型检测,使用Standard_Transient(见13点)
Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(aSurface); 

为什么需要转换多次,从TopoDS_Face->Geom_Surface->Geom_Plane? Geom_Surface本身不带信息的,都是引用具体的Geom_Plane或Geom_CylindricalSurface;这里可以通过Geom_Plane::Location获取相关信息

13、Standard_Transient类主要有两个用途
  1. DynamicType 函数用来获取 Handle(Geom_Surface)的真实类型,因为Geom_Surface有可能是任何一种面
  2. IsKind 用来判断该类型是否是某个类的子类
if(aSurface->DynamicType() == STANDARD_TYPE(Geom_Plane))
{
    
	// 这里可以执行一些检测成功后的内容,比如做类型转换
	Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(aSurface); 
} 
14、BRepOffisetAPI_XXX一般称为形体生成包,用于将线框模型生成实体模型
TopTools_ListOfShape facesToRemove; // 一个可以存放Shape集合的对象
facesToRemove.Append(face); // 添加一个一个面face为TopoDS_Face 类型

MyBody = BRepOffsetAPI_MakeThickSolid(myBody , facesToRemove , -myThickness / 50 , 1.e-3);
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/youlinhuanyan/article/details/123968903

智能推荐

【PHP-文件下载】遇到的编码格式不正确导致文件下载后乱码、文件大小发生改变的问题_php下载文件返回这种二进制流乱码无法直接下载是什么原因呢-程序员宅基地

文章浏览阅读1.7k次。上面说到过文件上传的过程,现在详细说一下文件的下载过程,在下载过程中,曾遇到过下载的文件与原上传文件,大小不一,乱码的情况,现在将详细叙述问题解决的全过程。先简单说下编码格式,header("Content-type: text/html; charset=utf-8");header("Content-type: text/html; charset=gb2312"); ?>_php下载文件返回这种二进制流乱码无法直接下载是什么原因呢

5G与边缘计算_5g mepm-程序员宅基地

文章浏览阅读7.4k次,点赞15次,收藏72次。目录文章目录目录 前言 参考文献 通信网络 核心网演进之路 早古时期 2G 网络架构 3G 网络架构 4G 网络架构 5G 5G 网络的需求 5G 网络架构的设计原则 5G 网络的逻辑架构 5G 核心网络的关键技术 SBA 基于服务的架构 微服务化 基于服务的接口 CUPS 控制与用户面分离 网络切片 ..._5g mepm

ArcGISEngine创建和删除Shp文件_arcgis engine 创建shp-程序员宅基地

文章浏览阅读2.3k次。1、创建Shp文件IFeature_arcgis engine 创建shp

【CV】高被引行人重识别(Person Re-ID)综述论文_遮挡行人再识别综述-程序员宅基地

文章浏览阅读3.5k次,点赞4次,收藏37次。论文年份:TPAMI 2021,论文被引:448(2022/05/17)_遮挡行人再识别综述

由Vue.js和Element-ui实现的Cron Generator-程序员宅基地

文章浏览阅读2.1k次。Vue Cron生成器 (vue-cron-generator)a project using vue,element-ui to generate cron expression. 使用vue,element-ui生成cron表达式的项目。 View Demo查看演示 View Github 查看Github 用途(示例) (Use(Example))Install depend..._vue-cron-generator

一个简单的温度上下限报警器_温度上下限报警电路-程序员宅基地

文章浏览阅读7.4k次,点赞14次,收藏52次。效果:默认状态下,两灯熄灭。 温度升高到一定值,红色LED亮,绿色LED不亮,表示温度过高。 温度降低到一定值,绿色LED亮,红色LED不亮,表示温度过低。 原理:首先该电路图关键在于PTC(正温度系数电阻)会随着温度的升高而阻值增大。而高温报警(上面)的反相输入端电压大小固定;而低温报警器(下面)的同向输入端电压大小固定。输出受PTC电阻的..._温度上下限报警电路

随便推点

TensorFlow构建二维数据拟合模型(1)_计算图实际上描述的是需要依次完成的计算单元以及这些计算单元之间的相互依赖关系-程序员宅基地

文章浏览阅读755次。知识图谱TensorFlow运行机制TensorFlow是基于计算图的深度学习编程模型Tensor表示张量,其实质上是某种类型的多维数组 Flow表示基于数据流图的计算,实质上是张量在不同节点间的转化过程。在TensorFlow中,计算图中的节点称为OP(即operation的缩写),节点之间的边描述了计算之间的依赖关系。在计算过程中,一个节点可获得0或多个张量,产生0或多个张量。TensorFlow程序通常被组织成图的构建阶段和执行阶段在构建阶段,节点的执行步骤被描述._计算图实际上描述的是需要依次完成的计算单元以及这些计算单元之间的相互依赖关系

keepalived vip漂移基本原理及选举算法-程序员宅基地

文章浏览阅读215次。keepalived可以将多个无状态的单点通过虚拟IP(以下称为VIP)漂移的方式搭建成一个高可用服务,常用组合比如 keepalived+nginx,lvs,haproxy和memcached等。它的实现基础是VRRP协议,包括核心的MASTER竞选机制都是在VRRP协议所约定的。一、配置说明:keepalived的配置位于/etc/keepalived/keepalived.conf,配置..._vip漂移原理

java正则表达式详解_java match getbeginning-程序员宅基地

文章浏览阅读333次。JAVA 正则表达式 (超详细,转)在Sun的Java JDK 1.40版本中,Java自带了支持正则表达式的包,本文就抛砖引玉地介绍了如何使用java.util.regex包。  可粗略估计一下,除了偶尔用Linux的外,其他Linu x用户都会遇到正则表达式。正则表达式是个极端强大工具,而且在字符串模式-匹配和字符串模式-替换方面富有弹性。在Unix世界里,正则表达式几乎没有什么限_java match getbeginning

SpringMVC 的类型转换_springmvc中负责类型转换的组件-程序员宅基地

文章浏览阅读184次。什么是类型转换?Spring MVC 中在控制器方法中 把 请求 中的 参数 映射为 指定类型,指定类型 可以是自己定义的类型,这就是Spring的类型转换。类型转换的框架原理 术语定义:a. ServletRequest : 请求b. DataBuilder : 类似于DispatcherServlet 在整个框架原理中起调度作用,他是数据绑定的核心组件。c. Co..._springmvc中负责类型转换的组件

mysql 聚集函数 比较_mysql-汇总(聚集)函数-程序员宅基地

文章浏览阅读193次。我们需要汇总数据而不用把他们实际检索出来,他们主要用来进行分析和报表数据的生成。1、AVG:通过对表中行数计数并计算特定列值之和,求得该列的平均值。可用来返回所有列的平均值,也可以用来返回特定列或行的平均值。如下:select avg(prod_price) as avg_price from products;以上语句的含义是,它包含products表中所有产品的平均价格。avg()函数忽略列值..._mysql 集合函数比较

Tensorflow的基本使用方法_tensorflow用法-程序员宅基地

文章浏览阅读2k次。使用 TensorFlow, 你必须明白 TensorFlow:使用图 (graph) 来表示计算任务.在被称之为 会话 (Session) 的上下文 (context) 中执行图.使用 tensor 表示数据.通过 变量 (Variable) 维护状态.使用 feed 和 fetch 可以为任意的操作(arbitrary operation) 赋值或者从其中获取数据...._tensorflow用法