介绍
Gmesh是一款开源的网格剖分软件包,除了网格剖分,还提供几何建模、求解、后处理几个模块。本文是翻译自Gmesh手册上的第5章,讲几何建模的。Gmesh中的几何建模模块具有简单的建模能力,在3D建模上,它只具有生成基本体素和扫描体的能力,不具备实体布尔运算的能力。因为Gmesh也是一个可执行的程序,所以,建模也是在用户界面上,以命令的方式进行的。下面是翻译。
第5章 几何模块
Gmsh的几何模块提供了简单的CAD引擎,使用的是Brep的方法:先定义点(使用点的命令),然后定义线(使用线的命令,如直线、圆、sp线等等,或者通过拉伸点的方法),然后定义面(使用平面或直纹面,或者通过拉伸线的方法),最后定义体(使用体的命令或者通过拉伸面)。
点、线、面、体这些术语就是gmsh中的图元,当创建这些对象时,会为每一个对象分配一个数字编号。
1、每个点图元必须占用一个唯一的编号
2、每个线图元必须占用一个唯一的编号
3、每个面图元必须占用一个唯一的编号
4、每个题图元必须占用一个唯一的编号
然后通过各种方法来操作这些几何图元,比如,使用平移、旋转、缩放或镜像命令。还可以通过删除命令来将他们删除,只要没有上层的对象引用了他们。
可以定义多个图元组成的组,他们被称为“物体的”实体。这些对象是不能通过几何命令来修改的,使用他们的唯一的目的是,将他们集成到大的组中,也许修改他们的朝向,这样他们会被mesh模块作为一个整体。类似于几何图元,每一个物理点、物理线、物理面、物理体,也必须赋予一个唯一的数字编号。对于物理实体如何影响mesh保存的方式,详细见第6章。
5.1 几何命令
接下来是将各种可用的几何命令的。这些命令可以在gmsh脚本文件中使用。
5.1.1 点
Point(exp) = {exp, exp, exp <, exp>};
创建点图元。小括号中的exp是店的编号,花括号中的exp是点在三维欧氏空间中的X,Y,Z坐标。最后一个可选的参数设置在这个点上的网格单元的尺寸。具体怎么使用这个值来控制网格单元的尺寸,详细见6.3.1.
Physical Point(exp|char-exp) = { exp-list};
创建物理点。小括号中的exp是点的编号,如果使用char-exp,会为这个点自动生成一个编号)。右边的exp-list是组成这个物理点的所有点图元的编号。(物理点就是一个点组)
5.1.2 线
Bspline(exp) = { exp-list};
创建bspline曲线,小括号中的exp是曲线的编号,花括号中的exp是这个曲线的所有的控制点的编号。
Circle(exp) = { exp, exp, exp};
创建圆弧曲线,严格小于半圆弧。同样,左边指定圆弧的编号,右边的参数分别指定:圆弧的起点编号,圆心点的编号,终点的编号。
CatmullRom(exp) = { exp-list};
是Spline的同义词。
Ellipse(exp) = {exp, exp, exp, exp};
创建椭圆弧,左边的exp是椭圆弧的编号。右边的exp分别指定:圆弧起点编号,圆弧中心点编号,主轴上任意点的编号,终点编号。
Line(exp) = {exp, exp};
创建直线段。左边的exp指定直线的编号,右边的exp分别指定起点和终点的编号。
Spline(exp) = {exp-list};
创建spline曲线。左边exp指定曲线的编号,右边指定曲线所有控制点的编号。
Line Loop(exp) = {exp-list};
创建有方向的曲线环。左边的exp指定环的编号。右边的exp-list指定了组成环的所有线单元的编号。一个线环必须是首尾相接的,而且,组成环的线单元必须是有序和有向的(使用负的编号来指定反方向)。如果方向是正确的,但顺序错误,gmsh会重新排序,以创建一个连续的环。尽管gmsh支持,但不建议在一个环命令中指定多个环(或子环)。环是用来创建面的。
Compound Line(exp) = { exp-list};
创建复合线,通过几个线单元。进行网格剖分时,一个复合的线会被作为一个单独的线来重新参数化,因此,网格会跨越内部的边界。左边的exp指定线的编号,右边的exp-list指定需要作为一个单独的线来重新参数化的所有线单元。关于复合对象,详细见复合面。
Physical Line(exp |char-exp) = { exp-list};
创建物理线。左边的exp指定线的编号,如果是char-exp,会自动为线分配一个编号。右边的exp-list指定了组成物理线的所有线的编号(物理线就是一个线组)。如果在这个exp-list中出现了负的编号,会反转那些由这些线产生的网格单元的朝向。
5.1.3 面
Plane Surface(exp) = { exp-list};
创建一个平面。左边的exp指定了平面的编号。右边的exp-list指定用来定义平面的线环的编号(译注:环作为平面的边界,由该边界来定义面)。第一环是定义平面的外环,其他所有的环都是定义平面上的空洞。一个定义空洞的环不能与定义外部边界的环共享一些边(那种情况下,不是一个空洞,那2个面应该分别定义)。同样,定义同一个面上的空洞的那些环之间不能共享边(那种情况下,2个空洞应该合并)。
Ruled Surface(exp) = { exp-list} < InSphere {exp} >;
创建直纹面,比如,一个能使用无限插值法来进行插值的面。左边的exp是直纹面的编号,右边的第一个exp-list是一个线环的编号,这个线环应该是由3到4个线单元组成的。可选的In Sphere参数,用来表示这个曲面是球面上的一块(附加的参数指定球心点的编号)。
Surface Loop(exp)= { exp-list};
创建一个面组成的环(就是一个壳)。小括号中的exp指定壳的编号。右边的exp-list指定组成这个壳的所有面的编号。一个面组成的环必须总是代表一个封闭的壳,面的朝向必须一致(使用负的编号来指定反的朝向)。(面环是用来创建体的)。
Compound Surface(exp) = { exp-list } <Boundary {{exp-list}, {exp-list}, {exp-list}, {exp-list}}>
创建复合的面,通过几个面图元。进行网格剖分时,一个复合的面会作为一个单独的面来重新参数化,因此生成的网格会跨越内部的边界(面之间的连接边界)。复合面对已经离散的的模型进行重新网格划分是非常有用的。