一、输入文件内容格式
1、普通图形
Netgen 这个开源程序(软件)的输入是几何文件,一般是这三种:.geo、.stl和.in2d。
# A cube
algebraic3d #非注释行之前必须加这句
solid cube = orthobrick (0, 0, 0; 1, 1, 1);
tlo cube;#应该是代表一个图形结束
说明:
(1)输入文件格式为CSG;
(2)以#开头的是注释行
(3)每个CSG文件必须在任何非注释行之前包含关键字algebraic3d;
(4)关键字solid定义了一个命名实体,这里orthobrick定义了实体立方体。
立体是由应用于原语的欧拉运算来定义的,以下是一些已有的定义好的可以直接使用的原语:
原语 | csg语法 | 意义 |
---|---|---|
half-space | Plane(Pnt p, Vec n) | 平面上的点p,法向量 |
sphere | Sphere(Pnt c,float r) | 圆心c,半径为r的球面 |
cylinder | Cylinder(Pnt a, Pnt b, float r) | 点a和点b定义了一个半径为r的无限圆柱的轴 |
brick | OrthoBrick ( Pnt a, Pnt b ) | 轴平行立方体面,最小坐标a和最大坐标b |
文件内容的其他定义方式: | ||
除了可以用以上给定好的语句生成几何图形,还可以自己定义任意形状,比如这个立方体,还可以通过相交6个半空间(称为平面)来指定立方体。 | ||
plane 的两个坐标分别表示:每一个原始平面由一个平面上的任意一点和一个指向外部的向量构成,不一定是单位向量。六个半空格由关键字和相交。下面的输入给出了一个与上面给出的文件想要表达的等价的结果: |
# A cube
algebraic3d
solid cube = plane (0, 0, 0; 0, 0, -1)
and plane (0, 0, 0; 0, -1, 0)
and plane (0, 0, 0; -1, 0, 0)
and plane (1, 1, 1; 0, 0, 1)
and plane (1, 1, 1; 0, 1, 0)
and plane (1, 1, 1; 1, 0, 0);
tlo cube;
得到的都是一个1*1 *1的正方体。
2、复杂图形
(1)逻辑结构构成一个几何图形
如果要在立方体上钻一个孔,我们可以使这个立方体与圆柱体的余角相交。一个圆柱体是由中心轴上的两点和半径定义的。请注意,圆柱体被理解为无限长圆柱体(尽管可视化可能暗示为有限圆柱体)。
# cube with hole
algebraic3d
solid cubehole = orthobrick (0, 0, 0; 1, 1, 1)
and not cylinder (0.5, 0.5, 0; 0.5, 0.5, 1; 0.1);#not代表减法的意思,逻辑上就是正交。cubehole是自己命名的,可以随意改。
tlo cubehole;
也可以这样表示,能达到最终图形即可,此处需要自己的想法:
solid cubeball = orthobrick (0, 0, 0; 1, 1, 1)
or sphere (0, 0, 0; 0.5) -maxh = 0.2;#or逻辑关系表示并集,应该是在立方体表面网格中加一个椭圆形表面网格
标志-maxh=0.2表示实体的最大网格分割尺寸为0.2,也就是分配给域顶级对象的主实体的网格大小。
(2)如果想用多个子域定义几何图形,只需声明几个tlos。
algebraic3d
solid cube = orthobrick (0, 0, 0; 1, 1, 1);
solid cyl = cylinder (0.5, 0.5, 0; 0.5, 0.5, 1; 0.1);
solid dom1 = cube and not cyl;
solid dom2 = cube and cyl;
tlo dom1 -col=[0,0,1] -transparent;
tlo dom2 -col=[1,0,0];#col应该是定义该实体的颜色,便于与其他的实体区分
-transparent作用是使固体看起来是透明的。
这个例子还展示了包含先前定义的已命名实体的实体树。顶层对象可以通过红、绿、蓝(RGB)值的数值指定颜色。
(3)给实体表面定义不同的边界条件
可以为实体的各个表面指定边界条件。标志-bc是指将bc的值赋值给该实树的所有表面。如果有多个flag,最靠近leaves的那一面占优势。下面的文件定义了一个立方体,bc = 1在底部,bc = 2在顶部,bc = 3用于所有其他面。
algebraic3d
solid bottom = plane (0, 0, 0; 0, 0, -1) -bc=1;
solid top = plane (1, 1, 1; 0, 0, 1) -bc=2;
solid cube = bottom and top
and plane (0, 0, 0; 0, -1, 0)
and plane (0, 0, 0; -1, 0, 0)
and plane (1, 1, 1; 0, 1, 0)
and plane (1, 1, 1; 1, 0, 0) -bc=3;
tlo cube;
生成的图形是这样的(顶点视图)
3、曲面的构建
研究中。。。。
#########################我是分界线############################
二、输出文件格式
现在最新版的Netgen程序,能够输出的文件格式有以下几种:
上述格式前四个是固定的文件格式,其余的是自定义的,详细的简介在说明文档中有,但是只有四种输出文件有关于输出内容的详细解释。下面是几种给出解释的几种输出的文件内容:
1、Neutral Format----中性体网格格式
(1)node节点
#节点数目
#三维坐标点
36
-0.500000 -0.500000 0.000000
-0.500000 0.500000 0.000000
-0.500000 0.500000 0.300000
。。。。。。
在节点数之后是 x、y 和 z 坐标的列表网格节点。
(2)volume elements----体积元素(分割出来的四面体的数量)
体数据
每个四面体的子域+四个节点(5维的一组一组的数字)
97
1 25 27 33 34
1 7 18 27 20
1 25 26 27 34
2 12 14 29 18
2 32 33 36 35
2 8 18 29 33
。。。
在体积元素数量之后是四面体列表。每个元素由子域编号和 4 个节点索引指定。节点索引从 1 开始。
后面的四个顶点是按照底面三角形逆时针方向记录的,最后一个相当于顶点
(3)surface elements–表面元素
表面元素数量(表面三角形网格数目)
三角形列表
74
1 1 13 25
1 5 26 13
1 7 19 27
在表面元素数量之后是三角形列表。 每个元素由边界条件编号和 3 个节点索引指定。节点索引从 1 开始。
2、Surface triangulaton file–曲面三角文件
(1)surfacemesh
是一个开始的关键词
(2)number of points----点的数目(点坐标(x,y,z))
point coordinates (x; y; z).
(3)number of surface triangles----表面三角形的数量
当看物体时,表面三角形以逆时针方向,索引从 1 开始。