1. 引言
3DEC具有导入和定义任意几何数据的能力,目前支持的文件格式有三种: dxf, stl和geom,创建后的几何信息可以进行操作修改,也可以用于可视化中的参考。可以通过由多边形形成的封闭体积来生成单元或构建块(building blocks),此外,这些数据还可以用于筛选受 3DEC 命令影响的对象,并通过分配组名称来标识某些区域中的对象。导入后的几何集名(Geometry Set Name)为文件名,但Group名可以自行定义。
3DEC 将几何数据组织成集(Set),即多边形、边和节点的集合,这些数据在拓扑上是相互连接的,多边形由一系列边定义,而边由两个节点定义。
2. Geometry命令
下面的命令可以用来操作几何对象:
3. 几何数据
geometry import 'orebody.stl' format stl group 'ore' set 'wxc'
使用命令行创建多边形块体的基本格式为:
geometry set 'polygons'
geometry polygon create
一个基于几何数据的多边形(多面体)使用geometry polygon create来创建,这个命令可以带3个主要的关键字: by-edges,by-nodes,by-positions, 不过最常使用的关键字是by-positions,即通过点的坐标来产生多变形,与block create polygon的使用方法类似,首先顺时针产生一个长方形,然后extrude成为一个长方体,例如:
geometry polygon create by-positions ...
(0,0,0) (0,0,10) (20,0,10) (20,0,0) extrude (0,5,0)
一个更万能的方法是直接定义点的坐标,从而产生出任意形状的块体。
fracture generate fracture-count 1000
geometry set 'plane'
geometry polygon create by-positions (-4,-4,0) (-4,4,0) (4,4,0) (4,-4,0)
geometry set 'line'
geometry edge create by-position (-4,0,0) (4,0,0)
fracture intersections scanline intersection-set 'scan' lines 'line' surface 'plane'
geom.poly.create函数能够创建或改进已经产生的多边形,这个命令通过几何集的指针返回到多边形的指针,例如:
local gset = geom.set.find("GeotechWu")
if gset = null then
gset = geom.set.create("GeotechWu")
endif
local poly = geom.poly.create(gset)
新创建的多边形没有边,所以处于无效状态。在多边形处于有效状态之前,必须使用geom.poly.add.edge或geom.poly.add.node添加边。
fish define fish_cylinder(start,radius,height,segments)
local gset = geom.set.find("FISH Example")
if gset = null then
gset = geom.set.create("FISH Example")
endif
loop local i (1,segments)
local ang1 = float(i-1) * math.pi * 2.0 / float(segments)
local ang2 = float(i) * math.pi * 2.0 / float(segments)
local p1 = start + vector(math.cos(ang1),math.sin(ang1),0.0)
local p2 = start + vector(math.cos(ang2),math.sin(ang2),0.0)
local p3 = vector(p2->x,p2->y,height)
local p4 = vector(p1->x,p1->y,height)
local poly = geom.poly.create(gset)
geom.poly.add.node(gset,poly,p1)
geom.poly.add.node(gset,poly,p2)
geom.poly.add.node(gset,poly,p3)
geom.poly.add.node(gset,poly,p4)
geom.poly.close(gset,poly)
end_loop
end
[fish_cylinder((0,0,0),1.0,4.0,40)]