專利名稱:基于gocad軟件的二維圖件生成方法
技術領域:
本發(fā)明涉及水電水利工程地質三維建模技術,具體的說,是涉及一種基于GOCAD軟件的二維圖件生成方法。
背景技術:
隨著計算機技術的發(fā)展,計算機三維技術應用已擴展至各行各業(yè)。在這種趨勢下,工程設計領域也在逐步推進計算機三維技術,水電設計的三維化工作也勢在必行。水電工程設計是一個跨越多專業(yè)、涉及多領域的協(xié)同過程,而工程地質是其基礎,所提交的成果是下游專業(yè)的設計輸入。GOCAD軟件是地質領域的三維軟件,能很好地支持地質專業(yè)數(shù)據(jù)的三維化分析、顯示和編輯并構建三維地質模型,是水電工程地質三維工作較為理想的基礎平 臺?,F(xiàn)階段,工程設計尚離不開二維圖件。同時,作為對三維成果校審的有效手段,也需要二維圖件輸出。作為設計依據(jù)的二維圖件,不僅需要地質體的輪廓線滿足精度要求,還需要用不同的圖案、線型表達不同的地質內容,需要圖框、圖例、圖面布局滿足相關的行業(yè)規(guī)范要求。但GOCAD軟件尚無滿足國內規(guī)程規(guī)范和應用習慣的二維圖件輸出功能。
發(fā)明內容
本發(fā)明所要解決的技術問題是提出一種基于GOCAD軟件的二維圖件生成方法,實現(xiàn)按需、快捷地輸出規(guī)范的水電工程地質二維圖件。本發(fā)明解決上述技術問題所采用的方案是基于GOCAD軟件的二維圖件生成方法,包括a.選擇要輸出的圖件類型;b.在GOCAD軟件中獲得相關數(shù)據(jù),經過處理后作為二維圖件的數(shù)據(jù)源;c.根據(jù)二維圖件的數(shù)據(jù)源,生成二維圖件。進一步,步驟a中,所述圖件類型包括平面圖、平切面圖、剖面圖。進一步,步驟b的具體實現(xiàn)方法為bl.如果所選擇的圖件類型為平面圖,則執(zhí)行步驟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 函數(shù) GroupAPI: :create—group 在 GOCAD 軟件中新建一個組
(集合);bl4.調用 GOCAD API 函數(shù) PLineAPI:: create—from—tsurf—contours,生成等高線數(shù)據(jù);bl5.將等高線數(shù)據(jù)存入新建的組,作為平面圖地形線數(shù)據(jù)源;bl6.求得每一個結構面、地層面與地面的相交線/點;bl7.將被切對象的屬性賦予得到的對象,并將其存入新建的組,作為平面圖地質跡線數(shù)據(jù)源;b2.如果所選擇的圖件類型為平切面圖,則執(zhí)行步驟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 函數(shù) GroupAPI:: create_group 在 GOCAD 軟件中新建一個組;b24.新建一個高程為z的水平面,過pl,p2和p3點;b25.求得平面與地質體的相交線/點;b26.將被切對象的屬性賦予得到的對象,并將其存入組,作為平切面的數(shù)據(jù)源;b3.如果所選擇的圖件類型為剖面圖,則執(zhí)行步驟b31_b35 :b31.輸入剖面線(折線)平面位置坐標和剖面最低高程LowZ,并選取被切對象;b32.計算選取的被切對象的外包圍盒(box);b33.計算切面的最高高程TopZ,具體方法如下TopZ=box. max (). z () + (box. max (). z () -box. min (). z ()) /2. 0 ;b34.對剖面線中的每一個線段做如下操作生成一個平面投影為該線段的垂直切面,其最低高程為LowZ,最高高程TopZ ;b35.分段求得生成的切面與地質體交切的交跡線/點,作為剖面圖的數(shù)據(jù)源。進一步,所述根據(jù)二維圖件的數(shù)據(jù)源,生成二維圖件的具體方法是將步驟b中得到的數(shù)據(jù)源輸入至二維成圖系統(tǒng)中,生成規(guī)范的二維圖件。本發(fā)明的有益效果是在GOCAD軟件中,實現(xiàn)按需、快捷地輸出規(guī)范的水電工程地質二維圖件。
具體實施例方式本發(fā)明中的二維圖件生成方法包括以下步驟(I)選擇要輸出的圖件類型;(2)在GOCAD中獲得相關數(shù)據(jù),重新組織整理后,作為二維圖的數(shù)據(jù)源;(3)根據(jù)數(shù)據(jù)源,生成二維圖件;在步驟(I)中,有3種類型圖件可以選擇,分別是平面圖、平切面圖、垂直剖面圖。在步驟(2)中,根據(jù)步驟(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.生成等高線數(shù)據(jù),方法如下算法2生成等高線 PLineAPI : : create_from_tsurf_contours (constCString&name,TSurf氺tsurf,const CString&iso—name,bool save_property=false)該函數(shù)返回的一個多段線,每一條等高線都是一個part ;V.將等高線數(shù)據(jù)存入組,方法如下算法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)中得到的對象輸出到二維成圖系統(tǒng)中,并生成規(guī)范美觀的二維圖件。
權利要求
1.基于GOCAD軟件的二維圖件生成方法,其特征在于,包括 a.選擇要輸出的圖件類型; b.在GOCAD軟件中獲得相關數(shù)據(jù),經過處理后作為二維圖件的數(shù)據(jù)源; c.根據(jù)二維圖件的數(shù)據(jù)源,生成二維圖件。
2.如權利要求I所述的基于GOCAD軟件的二維圖件生成方法,其特征在于,步驟a中,所述圖件類型包括平面圖、平切面圖、剖面圖。
3.如權利要求2所述的基于GOCAD軟件的二維圖件生成方法,其特征在于,步驟b的具體實現(xiàn)方法為 bl.如果所選擇的圖件類型為平面圖,則執(zhí)行步驟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 函數(shù) GroupAPI: : create_group 在 GOCAD 軟件中新建一個組; bl4.調用 GOCAD API 函數(shù) PLineAPI:: create_from_tsurf_contours,生成等高線數(shù)據(jù); bl5.將等高線數(shù)據(jù)存入新建的組,作為平面圖地形線數(shù)據(jù)源; bl6.求得每一個結構面、地層面與地面的相交線/點; bl7.將被切對象的屬性賦予得到的對象,并將其存入新建的組,作為平面圖地質跡線數(shù)據(jù)源; b2.如果所選擇的圖件類型為平切面圖,則執(zhí)行步驟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 函數(shù) GroupAPI: : create_group 在 GOCAD 軟件中新建一個組; b24.新建一個高程為z的水平面,過pl,p2和p3點; b25.求得平面與地質體的相交線/點; b26.將被切對象的屬性賦予得到的對象,并將其存入組,作為平切面的數(shù)據(jù)源; b3.如果所選擇的圖件類型為剖面圖,則執(zhí)行步驟b31-b35 b31.輸入剖面線平面位置坐標和剖面最低高程LowZ,并選取被切對象; b32.計算選取的被切對象的外包圍盒; b33.計算切面的最高高程TopZ,具體方法如下 TopZ=box. max (). z () + (box. max (). z () -box. min (). z ()) /2. 0 ; b34.對剖面線中的每一個線段做如下操作 生成一個平面投影為該線段的垂直切面,其最低高程為LowZ,最高高程TopZ ; b35.分段求得生成的切面與地質體交切的交跡線/點,作為剖面圖的數(shù)據(jù)源。
4.如權利要求1-3任意一項所述的基于GOCAD軟件的二維圖件生成方法,其特征在于,所述根據(jù)二維圖件的數(shù)據(jù)源,生成二維圖件的具體方法是 將步驟b中得到的數(shù)據(jù)源輸入至二維成圖系統(tǒng)中,生成規(guī)范的二維圖件。
全文摘要
本發(fā)明涉及水電水利工程地質三維建模技術,其公開了一種基于GOCAD軟件的二維圖件生成方法,實現(xiàn)按需、快捷地輸出規(guī)范的水電工程地質二維圖件。該方法包括a.選擇要輸出的圖件類型;b.在GOCAD軟件中獲得相關數(shù)據(jù),經過處理后作為二維圖件的數(shù)據(jù)源;c.根據(jù)二維圖件的數(shù)據(jù)源,生成二維圖件。本發(fā)明可以在GOCAD軟件中,實現(xiàn)按需、快捷地輸出規(guī)范的水電工程地質二維圖件,適用于水電水利工程中三維成果的校審和設計成果的輸出。
文檔編號G06F17/50GK102831282SQ201210339718
公開日2012年12月19日 申請日期2012年9月14日 優(yōu)先權日2012年9月14日
發(fā)明者田華兵, 劉仕勇, 王剛, 李攀峰, 石偉民, 吉云, 黃嘯鷹 申請人:中國水電顧問集團成都勘測設計研究院