欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Netgen输入与输出文件格式

程序员文章站 2024-03-18 18:50:28
...

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定义了实体立方体。
立体是由应用于原语的欧拉运算来定义的,以下是一些已有的定义好的可以直接使用的原语:
Netgen输入与输出文件格式

原语 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 = bottm 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程序,能够输出的文件格式有以下几种:
Netgen输入与输出文件格式
详细的简介在说明文档中有,但是只有四种输出文件有关于输出内容的详细解释,谢天谢地我要用的格式是有说明的,下面只记录我要用的Surface Mesh Format格式输出文件:
可以从表面网格文件导出或导入。其结构如下:
(1)surfacemesh
是一个开始的关键词
(2)点的数目(点坐标(x,y,z))
point coordinates (x; y; z).
(3)表面三角形的数量
当看物体时,表面三角形以逆时针方向,索引从 1 开始。