专利名称:基于gocad软件的二维图件生成方法
技术领域:
本发明涉及水电水利工程地质三维建模技术,具体的说,是涉及一种基于GOCAD软件的二维图件生成方法。
背景技术:
随着计算机技术的发展,计算机三维技术应用已扩展至各行各业。在这种趋势下,工程设计领域也在逐步推进计算机三维技术,水电设计的三维化工作也势在必行。水电工程设计是一个跨越多专业、涉及多领域的协同过程,而工程地质是其基础,所提交的成果是下游专业的设计输入。GOCAD软件是地质领域的三维软件,能很好地支持地质专业数据的三维化分析、显示和编辑并构建三维地质模型,是水电工程地质三维工作较为理想的基础平 台。现阶段,工程设计尚离不开二维图件。同时,作为对三维成果校审的有效手段,也需要二维图件输出。作为设计依据的二维图件,不仅需要地质体的轮廓线满足精度要求,还需要用不同的图案、线型表达不同的地质内容,需要图框、图例、图面布局满足相关的行业规范要求。但GOCAD软件尚无满足国内规程规范和应用习惯的二维图件输出功能。
发明内容
本发明所要解决的技术问题是提出一种基于GOCAD软件的二维图件生成方法,实现按需、快捷地输出规范的水电工程地质二维图件。本发明解决上述技术问题所采用的方案是基于GOCAD软件的二维图件生成方法,包括a.选择要输出的图件类型;b.在GOCAD软件中获得相关数据,经过处理后作为二维图件的数据源;c.根据二维图件的数据源,生成二维图件。进一步,步骤a中,所述图件类型包括平面图、平切面图、剖面图。进一步,步骤b的具体实现方法为bl.如果所选择的图件类型为平面图,则执行步骤bll_bl7 :bll.指定地形面、结构面、地层面等各类地质界面,输入平面图的左下角pl(叉1,71,21)、右下角?2“2,72,22)和第三点?3(13,73,23),忽略21,22,23的输入值,取zl=z2=z3=0 ;bl2.在Z=O的平面内,将pl、p2之间的连线记为a,将p3到a边的距离记为L,过Pl点做与plp2垂直且长度为L的线段,将该线段记为b,将以a、b为边的矩形定义为平面图范围;bl3.调用 GOCAD API 函数 GroupAPI: :create—group 在 GOCAD 软件中新建一个组
(集合);bl4.调用 GOCAD API 函数 PLineAPI:: create—from—tsurf—contours,生成等高线数据;bl5.将等高线数据存入新建的组,作为平面图地形线数据源;bl6.求得每一个结构面、地层面与地面的相交线/点;bl7.将被切对象的属性赋予得到的对象,并将其存入新建的组,作为平面图地质迹线数据源;b2.如果所选择的图件类型为平切面图,则执行步骤b21_b26 :b21.指定被切对象,平切面高程z,输入平面图的左下角pi (xl,yl,zl)、右下角p2 (x2,y2, z2)和第三点 p3 (x3, y3, z3),忽略 zl, z2 和 z3 的输入值,取 zl=z2=z3= z ;b22.将pl、p2之间的连线记为a,将p3到a边的距离记为L,过pi点做与plp2垂直且长度为L的线段,将该线段记为b,将以a、b为边的矩形定义为平切面图范围;b23.调用 GOCAD API 函数 GroupAPI:: create_group 在 GOCAD 软件中新建一个组;b24.新建一个高程为z的水平面,过pl,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软件中,实现按需、快捷地输出规范的水电工程地质二维图件。
具体实施例方式本发明中的二维图件生成方法包括以下步骤(I)选择要输出的图件类型;(2)在GOCAD中获得相关数据,重新组织整理后,作为二维图的数据源;(3)根据数据源,生成二维图件;在步骤(I)中,有3种类型图件可以选择,分别是平面图、平切面图、垂直剖面图。在步骤(2)中,根据步骤(I)中选定的类型不同可以分为以下3个操作如果选择的是平面图i.指定地形面、结构面和层面,输入平面图的左下角pl (xl,yl,zl)、右下角p2 (x2, y2, z2)和第三点 p3 (x3, y3, z3),忽略 zl, z2, z3 的输入值,取 zl=z2=z3=0。ii.在z=0的平面内,以plp2连线(记为a)为平面图的底边,p3到a边的距离为L,过pl点做一与plp2垂直的长度为L的线段(记为b)。将以a、b为边的矩形定义为平面图范围。iii.在GOCAD中新建一个组,方法是算法I建立组
HeterogeneousGroup*group= HeterogeneousGroup*)GroupAPI::create—group ( pmt ,
/f //\
none );
Style* s = group->stylc ();
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 (constCString&name,TSurf氺tsurf,const CString&iso—name,bool save_property=false)该函数返回的一个多段线,每一条等高线都是一个part ;V.将等高线数据存入组,方法如下算法3将对象加入组PtrList<G0b j>members ;members, append (line);GroupAPI: : add—gob j (group, members);vi.求得每一个结构面、地层面与地面的相交线(或点),方法如下算法4获得相交体
if (被切对象为多段线)
{G0bj*obj= vSetAPI::creat_from_pline_and_tsurf—intersection(intersection
_name, pis, surfs, false, false, true)}
else if (被切对象为面)
{
GObj5Is obj = PLineAPI: : create_from_tsurf_intersection (intersection^ame,surfs);
}
else if (被切对象为voxet)
{
n_cell = vox->nv () *vox—>nu() t·
int n_split = log((float)n_cell/2)/log{4, 0);if(n_split <=0) n—split = I;for (int i=D i< n_split; i++;
TSurfAPI:: split(cut);
GObj承 obj = cut;
}vii.将被切对象的属性赋予得到的对象,并将新对象存入组算法5给对象赋予属性,并将其存入组
Property* from—prop = from->property_dbO->property(i);if ( vertical )
PropertyAPI::fill_vertically_from(to}from_prop->name(),from, from_prop->name(
),true);else
PropertyAPI::f iIl_pointwise_from(to, from_prop->name(),from, rom_prop->name (),
true);
setColor(from, newobj);
PtrList<G0bj> members;members, append(newobj);
GroupAPI::add—gobj(group, members);如果选择的是平切面图i.指定被切对象,平切面高程z,输入平面图的左下角pl (xl, yl, zl)、右下角p2 (x2, y2, z2)和第三点 p3 (x3, y3, z3),忽略 zl, z2 和 z3 的输入值,取 zl=z2=z3=z。ii.以plp2连线(记为a)为平面图的底边,p3到a边的距离为L,过pl点做一与plp2垂直的长度为L的线段(记为b)。将以a、b为边的矩形定义为平切面图范围,见错误!未找到引用源。。iii.在GOCAD中新建一个组,方法算法Iiv.新建一个切面,过pl、p2、p3和P点(见错误!未找到引用源。),方法如下算法6建立一个过4点的面TSurf^ts= (TSurf*) GeobaseLib:: instance O->create("skdjflsadj_
temp—000",TSurf:: id O);TFace*f=ts_>create—element (); Atom*al=f_>create—atom(pl);Atom*a2=f_>create—atom (p2);Atom*a3=f_>create—atom (p3);Atom*a4=f->create—atom(pr4);f->add—atom (al);f->add—atom (a2);f->add—atom (a3);f->add—atom (a4);Trgl*tril=f->create—simplex(al,a2,a4);f->add—simplex(tril);Trgl*tri2=f->create—simplex (a4,a3,al);f->add—simplex (tri2);ts->update ();v.求切面与每一个地质对象的相交线(或点),方法见算法4 对钻孔(Well)的处理是调用VSetAPI::create_from_pline_and_tsurf_intersection (intersection_name, pis, surfs, fal se,fal se,〃 〃,true)得到钻孔的投影点vi.将被切对象的属性赋予得到的对象,并将新对象存入组,方法见算法5
如果选择的是剖面图i.输入剖面线浙线 PI (xl,yl,zl)、p2(x2,y2,z2)、p3(x3,y3,z3) ···)和剖面最低高程LowZ,选取被切对象、需要投影的钻孔和平硐。ii.计算被切对象的外包围盒box (调用Gocad: : AtomicAPI: : compute—box (ob js))iii.计算切面的最高高程TopZ,具体方法如下TopZ=box. max (). z () + (box. max (). z () -box. min (). z ()) /2. 0iv.对剖面线中每一线段作如下操作生成一个平面投影为该线段(比如线段plp2)的垂直面,其高程范围从TopZ到LowZ,算法如下算法7生成一个过线段plp2的垂直面Po int 3d pt3 (ptl. x(),ptl. y (),TopZ);
PointSd pt4(ptl. x(), ptl. y(), LowZ);
PointSd pt5(pt2. x(),pt2. y (),TopZ);
PointSd pt6 (pt2. x (),pt2. y (),LowZ);
List<Point3d> impact_pts;impact—pt.s· append (pt3);impact_pts. append (pt4);impact_pts. append(pt5);impact_pts. append (pt6);
VSet*vs= (VSet*)GcobascLib:: instance ()~>crcatc(〃skdjfIsadj_temp_000〃,
VSet: :id());
SuhVSet氺 subvs = vs->create_element();
for ( int i = 0; i < impact_pts. count () ; i++)
{
Atom* a 二 subvs->create_atom(impact_pts. item(i)); subvs->add_atom(a);
}
vs->update ();
TSurf* ts = TSurfAPI::create_from—atomic_group(tsnarae, vs, false, Vector3d(0,0 I),true);用所得到的面与指定的地质体交切,得到地质体在剖面上迹线,算法见算法4在步骤(3)中,将步骤(2)中得到的对象输出到二维成图系统中,并生成规范美观的二维图件。
权利要求
1.基于GOCAD软件的二维图件生成方法,其特征在于,包括 a.选择要输出的图件类型; b.在GOCAD软件中获得相关数据,经过处理后作为二维图件的数据源; c.根据二维图件的数据源,生成二维图件。
2.如权利要求I所述的基于GOCAD软件的二维图件生成方法,其特征在于,步骤a中,所述图件类型包括平面图、平切面图、剖面图。
3.如权利要求2所述的基于GOCAD软件的二维图件生成方法,其特征在于,步骤b的具体实现方法为 bl.如果所选择的图件类型为平面图,则执行步骤bll-bl7 bll.指定地形面、结构面、地层面,输入平面图的左下角pi (xl,yl,zl)、右下角P2(x2,y2,z2)和第三点 p3 (x3,y3,z3),忽略 zl,z2,z3 的输入值,取 zl=z2=z3=0 ; bl2.在Z=O的平面内,将pl、p2之间的连线记为a,将p3到a边的距离记为L,过pi点做与plp2垂直且长度为L的线段,将该线段记为b,将以a、b为边的矩形定义为平面图范围; bl3.调用 GOCAD API 函数 GroupAPI: : create_group 在 GOCAD 软件中新建一个组; bl4.调用 GOCAD API 函数 PLineAPI:: create_from_tsurf_contours,生成等高线数据; bl5.将等高线数据存入新建的组,作为平面图地形线数据源; bl6.求得每一个结构面、地层面与地面的相交线/点; bl7.将被切对象的属性赋予得到的对象,并将其存入新建的组,作为平面图地质迹线数据源; b2.如果所选择的图件类型为平切面图,则执行步骤b21-b26 b21.指定被切对象,平切面高程z,输入平面图的左下角pi (xl,yl,zl)、右下角p2 (x2, y2, z2)和第三点 p3 (x3, y3, z3),忽略 zl, z2 和 z3 的输入值,取 zl=z2=z3=z ; b22.将pi、p2之间的连线记为a,将p3到a边的距离记为L,过pi点做与plp2垂直且长度为L的线段,将该线段记为b,将以a、b为边的矩形定义为平切面图范围; b23.调用 GOCAD API 函数 GroupAPI: : create_group 在 GOCAD 软件中新建一个组; b24.新建一个高程为z的水平面,过pl,p2和p3点; b25.求得平面与地质体的相交线/点; b26.将被切对象的属性赋予得到的对象,并将其存入组,作为平切面的数据源; b3.如果所选择的图件类型为剖面图,则执行步骤b31-b35 b31.输入剖面线平面位置坐标和剖面最低高程LowZ,并选取被切对象; b32.计算选取的被切对象的外包围盒; b33.计算切面的最高高程TopZ,具体方法如下 TopZ=box. max (). z () + (box. max (). z () -box. min (). z ()) /2. 0 ; b34.对剖面线中的每一个线段做如下操作 生成一个平面投影为该线段的垂直切面,其最低高程为LowZ,最高高程TopZ ; b35.分段求得生成的切面与地质体交切的交迹线/点,作为剖面图的数据源。
4.如权利要求1-3任意一项所述的基于GOCAD软件的二维图件生成方法,其特征在于,所述根据二维图件的数据源,生成二维图件的具体方法是 将步骤b中得到的数据源输入至二维成图系统中,生成规范的二维图件。
全文摘要
本发明涉及水电水利工程地质三维建模技术,其公开了一种基于GOCAD软件的二维图件生成方法,实现按需、快捷地输出规范的水电工程地质二维图件。该方法包括a.选择要输出的图件类型;b.在GOCAD软件中获得相关数据,经过处理后作为二维图件的数据源;c.根据二维图件的数据源,生成二维图件。本发明可以在GOCAD软件中,实现按需、快捷地输出规范的水电工程地质二维图件,适用于水电水利工程中三维成果的校审和设计成果的输出。
文档编号G06F17/50GK102831282SQ201210339718
公开日2012年12月19日 申请日期2012年9月14日 优先权日2012年9月14日
发明者田华兵, 刘仕勇, 王刚, 李攀峰, 石伟民, 吉云, 黄啸鹰 申请人:中国水电顾问集团成都勘测设计研究院