我们将几何内核的功能进行分类,看看几何内核做了哪些事情,或者什么情况下上层应用会用到几何内核。
1. 二维草图
“草图”是一个专业术语。我们设计一个对象或者绘制一个对象时,开始很难用三维进行建模,通常的做法是先用二维表示,工程上的图纸一般也都是用二维表示,比如我们常见的俯视图,侧视图,截面图等等。AutoCAD之类的绘图设计软件最初都是二维的。
有人可能觉得二维比较简单,没什么难度,实则不然。单个的二维对象确实比较简单,点线面数据通过基本设计即可实现。
考虑如下设计:
两个互相咬合的齿轮,已经分别设计出齿轮的半径,进行了咬合。现在需要修改其中一个齿轮的半径,如果只是简单的分别绘制出两个齿轮,其中一个改动后,另外一个也需要手动修改以保证齿轮咬合。一般的做法是将两个齿轮关联,一个改动后,另外一个自动修改以保证咬合。如果一个齿轮同时和多个齿轮相连,则涉及到多个同时关联。
再考虑一种情况,在平面墙上绘制门和窗户,当我们修改墙高度和宽度的时候,门和窗户要随动,比如我们加了约束(窗户不能靠房顶,门底和地面平齐等等),随动要满足这种约束关系。
这就引申出几何内核里的一项基本功能:约束设计求解器。
约束设计求解器在于给定各种约束情况下,求解类似刚体运动自由度方程,约束设计求解器常用于二维草图绘制,零件在装配体中定位,以及各种几何外轮廓的绘制。
2. 三维实体建模,属性计算
三维实体建模是几何内核的基本功能。基于几何特征,几何内核需要提供完整的实体表达。最常见的长方体,根据长宽高等参数建立起对应的数据结构。以BREP为例,一个长方体至少包含如下信息:
1个体,6个面,6个环,12条边,12条有向边,8个顶点,8个顶点的坐标
这也是为什么专业软件的几何文件很小,而三维几何模型文件大的原因。
除了长方体,圆柱,圆台,圆环,球,锲形等各种基础实体模型外,各种常用的建模方法也是必须的,常见的拉伸,扫掠,放样,阵列,平移,缩放,矩阵变换,布尔运算,拆分。
创建的对象实体要提供边长,面积,体积,包围盒等基本信息。
3. 历史系统
历史系统主要用来跟踪记录几何对象的变化信息。这些信息在参数建模和约束建模中要经常使用,是undo/redo机制的基础,同时也是几何模型质量的保证。
看几个例子:
一步步设计好模型后,保存工程文件,关闭程序退出。再次打开工程文件,需要undo进行编辑
一个复杂的模型,执行到某一步出现错误,整体模型坏掉,需要恢复到上一步模型完好的状态
一个模型,需要进行一些修改才能拿到某些信息,但是并不希望对模型本身进行修改
以上需求都可以通过历史系统来完成
4. 属性系统
几何对象一般不会单独存在,几何对象上会有很多属性,比如颜色,显示方式,材料,业务类型,参数。对于数值仿真,还会有各种边界,荷载等信息。附加在几何上的属性系统也会涉及到增加,删除,修改,以及随几何变动而变动,比如两个不同属性的几何进行并运算,并之后新几何上的属性系统要有明确的设定。
5. 参数建模和约束建模
参数建模和约束建模都很好理解。底层需要有参数系统,基本功能包含参数表达,驱动更新,参数表达式计算,几何对象参数管理,以及约束求解器等等。这些功能是CAD软件几何设计(Design)的基础,而非Drawing
几何拓扑,属性系统,历史系统,参数建模和约束建模构成了几何内核底层管理的基础。
6. 几何离散化
几何内核要提供几何离散化功能,主要有两个目的:1. 生成基本的三角面片信息供渲染使用;2. 提供更多参数控制的面片的生成,以满足上层业务不同的需求。
7. 位置运算
位置运算提供各种几何之间的位置信息计算,常见的线线,点线,线面,点面,面面,面体,线体等各个维度几何的距离,相交,交点等信息。
通常位置运算需要大量使用计算几何或数值计算方法,这也是几何内核底层的基本功能之一
8. 布尔运算
布尔运算涉及到两个对象之间的合并,减,公共基本操作。在基本操作上衍生出切分,投影,缝补等操作。布尔运算主要涉及到线线,面面,面线的求交和裁剪运算,后续详细介绍。
布尔运算的准确性,稳定性和性能是衡量一个几何内核质量的重要标准
9. 特征识别和抑制
识别模型中的倒角,突出,凹陷,以及常用基本几何实体,并对其进行编辑操作。
10. 外部数据交换
在实际工程中,通常使用的软件和数据文件格式有多种,为了保证整体数据格式的统一,几何内核需要提供与外部的数据的接口,即能导入和导出第三方的文件格式。这一块和几何内核没有直接关系,技术上也没有太多难度,主要问题是不同数据格式的接口兼容性问题,比如公差,数据表达转换。
11. 与网格接口
这个在 深入理解数值计算网格(7)--几何与网格 已经做过介绍,不多讲。
12. 几何清理修复
除非建立封闭的生态系统,否则这是几何内核工程应用的一个基础模块。在建模工程中,因为种种原因导致模型出现问题,比如各种拓扑和几何不满足设定条件或者出现错误。这种错误会导致模型本身的分析,比如面积,体积计算出错,还会导致仿真的网格划分出现错误。
除了提供模型的拓扑几何检查外,还要提供基本的清理,修复以及必要的编辑功能。
很多时候CAD设计的模型即使没有错误,也无法用来直接仿真,比如CAD设计中的小边,小孔,倒角,印刻的字体,需要在划分网格前对其进行删除清理。
除了模型几何对象本身的错误外,实际应用中还要进行诸如几何对象之间的干涉检测,自由对象,重复对象的检测操作。这些功能可以在业务层实现,也可以在几何内核中完成。
13. 图形显示接口
几何内核本身是没有图形显示系统的。换言之,几何内核创建的数据无法直观的表现出来。为了将几何对象显示,需要和外部的图形显示引擎合作。
通常的做法是将几何对象离散化面片,然后送给图形显示引擎显示。离散化的面片和几何对象建立映射关系,以方便后续的操作。
14. 提供仿真所需的几何功能
比如提供抽中面,供有限元分析中的壳单元使用;三维实体简化成一维单元,供有限元分析中的杆,梁单元使用;处理非二维流体,以解决复合材料,流体,碰撞,接触分析中的共形网格;提供高次曲面以满足透平机械设计分析需求等等
15.脚本系统
提供脚本系统,便利上层应用的开发和调试
16.提供必要的调试工具
使用几何内核出错后,往往难以检查和调试,提供必要的工具帮助发现和解决错误
17.支持高性能计算
提供工具方便上层应用使用多线程,多进程以及分布式计算