发明内容
本发明所要解决的技术问题是:提出一种基于GOCAD软件的二维图件生成方法,实现按需、快捷地输出规范的水电工程地质二维图件。
本发明解决上述技术问题所采用的方案是:基于GOCAD软件的二维图件生成方法,包括:
a.选择要输出的图件类型;
b.在GOCAD软件中获得相关数据,经过处理后作为二维图件的数据源;
c.根据二维图件的数据源,生成二维图件。
进一步,步骤a中,所述图件类型包括:平面图、平切面图、剖面图。
进一步,步骤b的具体实现方法为:
b1.如果所选择的图件类型为平面图,则执行步骤b11-b17:
b11.指定地形面、结构面、地层面等各类地质界面,输入平面图的左下角p1(x1,y1,z1)、右下角p2(x2,y2,z2)和第三点p3(x3,y3,z3),忽略z1,z2,z3的输入值,取z1=z2=z3=0;
b12.在Z=0的平面内,将p1、p2之间的连线记为a,将p3到a边的距离记为L,过p1点做与p1p2垂直且长度为L的线段,将该线段记为b,将以a、b为边的矩形定义为平面图范围;
b13.调用GOCAD API函数GroupAPI::create_group在GOCAD软件中新建一个组(集合);
b14.调用GOCAD API函数PLineAPI::create_from_tsurf_contours,生成等高线数据;
b15.将等高线数据存入新建的组,作为平面图地形线数据源;
b16.求得每一个结构面、地层面与地面的相交线/点;
b17.将被切对象的属性赋予得到的对象,并将其存入新建的组,作为平面图地质迹线数据源;
b2.如果所选择的图件类型为平切面图,则执行步骤b21-b26:
b21.指定被切对象,平切面高程z,输入平面图的左下角p1(x1,y1,z1)、右下角p2(x2,y2,z2)和第三点p3(x3,y3,z3),忽略z1,z2和z3的输入值,取z1=z2=z3=z;
b22.将p1、p2之间的连线记为a,将p3到a边的距离记为L,过p1点做与p1p2垂直且长度为L的线段,将该线段记为b,将以a、b为边的矩形定义为平切面图范围;
b23.调用GOCAD API函数GroupAPI::create_group在GOCAD软件中新建一个组;
b24.新建一个高程为z的水平面,过p1,p2和p3点;
b25.求得平面与地质体的相交线/点;
b26.将被切对象的属性赋予得到的对象,并将其存入组,作为平切面的数据源;
b3.如果所选择的图件类型为剖面图,则执行步骤b31-b35:
b31.输入剖面线(折线)平面位置坐标和剖面最低高程LowZ,并选取被切对象;
b32.计算选取的被切对象的外包围盒(box);
b33.计算切面的最高高程TopZ,具体方法如下:
TopZ=box.max().z()+(box.max().z()-box.min().z())/2.0;
b34.对剖面线中的每一个线段做如下操作:
生成一个平面投影为该线段的垂直切面,其最低高程为LowZ,最高高程TopZ;
b35.分段求得生成的切面与地质体交切的交迹线/点,作为剖面图的数据源。
进一步,所述根据二维图件的数据源,生成二维图件的具体方法是:
将步骤b中得到的数据源输入至二维成图系统中,生成规范的二维图件。
本发明的有益效果是:在GOCAD软件中,实现按需、快捷地输出规范的水电工程地质二维图件。
具体实施方式
本发明中的二维图件生成方法包括以下步骤:
(1)选择要输出的图件类型;
(2)在GOCAD中获得相关数据,重新组织整理后,作为二维图的数据源;
(3)根据数据源,生成二维图件;
在步骤(1)中,有3种类型图件可以选择,分别是平面图、平切面图、垂直剖面图。
在步骤(2)中,根据步骤(1)中选定的类型不同可以分为以下3个操作
如果选择的是平面图
i.指定地形面、结构面和层面,输入平面图的左下角p1(x1,y1,z1)、右下角p2(x2,y2,z2)和第三点p3(x3,y3,z3),忽略z1,z2,z3的输入值,取z1=z2=z3=0。
ii.在z=0的平面内,以p1p2连线(记为a)为平面图的底边,p3到a边的距离为L,过p1点做一与p1p2垂直的长度为L的线段(记为b)。将以a、b为边的矩形定义为平面图范围。
iii.在GOCAD中新建一个组,方法是:
算法1 建立组:
HeterogeneousGroup*group=HeterogeneousGroup*)GroupAPI::create_group(“pmt”,"none");
Style*s=group->style();
s->set_attribute("*XSgrouptype",“PlanView”);
s->set_attribute("*XSgroupstyle",“”);
StyleInfo*style_info=StyleCatalog::instance()->find_style(s);;
StyleCatalog::instance()->update(style_info->name(),style_info->family());
iv.生成等高线数据,方法如下:
算法2 生成等高线:
PLineAPI::create_from_tsurf_contours(const CString&name,TSurf*tsurf,constCString&iso_name,bool save_property=false)
该函数返回的一个多段线,每一条等高线都是一个part;
v.将等高线数据存入组,方法如下:
算法3 将对象加入组:
PtrList<GObj>members;
members.append(line);
GroupAPI::add_gobj(group,members);
vi.求得每一个结构面、地层面与地面的相交线(或点),方法如下:
算法4 获得相交体:
vii.将被切对象的属性赋予得到的对象,并将新对象存入组:
算法5 给对象赋予属性,并将其存入组:
Property*from_prop=from->property_db()->property(i);
if(vertical)
PropertyAPI::fill_vertically_from(to,from_prop->name(),from,from_prop->name(),true);
else
PropertyAPI::fill_pointwise_from(to,from_prop->name(),from,rom_prop->name(),true);
setColor(from,newobj);
PtrList<GObj>members;
members.append(newobj);
GroupAPI::add_gobj(group,members);
如果选择的是平切面图
i.指定被切对象,平切面高程z,输入平面图的左下角p1(x1,y1,z1)、右下角p2(x2,y2,z2)和第三点p3(x3,y3,z3),忽略z1,z2和z3的输入值,取z1=z2=z3=z。
ii.以p1p2连线(记为a)为平面图的底边,p3到a边的距离为L,过p1点做一与p1p2垂直的长度为L的线段(记为b)。将以a、b为边的矩形定义为平切面图范围。
iii.在GOCAD中新建一个组,方法算法1
iv.新建一个切面,过p1、p2、p3和p点,方法如下:
算法6 建立一个过4点的面
TSurf*ts=(TSurf*)GeobaseLib::instance()->create("skdjflsadj_temp_000",TSurf::id());
TFace*f=ts->create_element();
Atom*a1=f->create_atom(p1);
Atom*a2=f->create_atom(p2);
Atom*a3=f->create_atom(p3);
Atom*a4=f->create_atom(pr4);
f->add_atom(a1);
f->add_atom(a2);
f->add_atom(a3);
f->add_atom(a4);
Trgl*tri1=f->create_simplex(a1,a2,a4);
f->add_simplex(tri1);
Trgl*tri2=f->create_simplex(a4,a3,a1);
f->add_simplex(tri2);
ts->update();
v.求切面与每一个地质对象的相交线(或点),方法见算法4:
对钻孔(Well)的处理是调用
VSetAPI::create_from_pline_and_tsurf_intersection(intersection_name,pls,surfs,false,false,"",true)
得到钻孔的投影点
vi.将被切对象的属性赋予得到的对象,并将新对象存入组,方法见算法5
如果选择的是剖面图
i.输入剖面线(折线p1(x1,y1,z1)、p2(x2,y2,z2)、p3(x3,y3,z3)…)和剖面最低高程LowZ,选取被切对象、需要投影的钻孔和平硐。
ii.计算被切对象的外包围盒box(调用Gocad::AtomicAPI::compute_box(objs))
iii.计算切面的最高高程TopZ,具体方法如下:
TopZ=box.max().z()+(box.max().z()-box.min().z())/2.0
iv.对剖面线中每一线段作如下操作:
生成一个平面投影为该线段(比如线段p1p2)的垂直面,其高程范围从TopZ到LowZ,算法如下:
算法7 生成一个过线段p1p2的垂直面:
用所得到的面与指定的地质体交切,得到地质体在剖面上迹线,算法见算法4
在步骤(3)中,将步骤(2)中得到的对象输出到二维成图系统中,并生成规范美观的二维图件。