羅登昌,韓 旭,于起超,盧樹盛,王 銳
(1.長江勘測規(guī)劃設(shè)計(jì)研究有限責(zé)任公司,湖北 武漢 430010;2.長江巖土工程有限公司,湖北 武漢 430010)
CATIA是由法國達(dá)索公司開發(fā)出來的一款可完成三維設(shè)計(jì)和模擬解決方案的軟件,已經(jīng)被廣泛應(yīng)用于航空航天、機(jī)械制造、船舶制造等領(lǐng)域。該軟件功能強(qiáng)大,具有先進(jìn)的混合建模技術(shù),在設(shè)計(jì)環(huán)境中實(shí)現(xiàn)了曲面和實(shí)體的互操作,2003年首次被應(yīng)用于水利水電行業(yè)大壩、廠房和機(jī)電設(shè)備安裝的三維設(shè)計(jì),2006年在國內(nèi)水電行業(yè)開始推廣。
對于CATIA在國內(nèi)水電行業(yè)的應(yīng)用,目前主要在于快速精準(zhǔn)的建模、二維出圖及三維可視化仿真等方面,例如,李小帥等[1]在CATIA V5環(huán)境下,通過CG知識庫的運(yùn)用,可快速搭建三維可視化仿真場景,縮短同類項(xiàng)目的制作周期,提高應(yīng)用自動化的程度;羅通等[2]基于CATIA二次開發(fā)研發(fā)出一種比較實(shí)用且自動化程度較高的渠道三維設(shè)計(jì)應(yīng)用程序,減輕渠道設(shè)計(jì)工作量,縮短渠道設(shè)計(jì)周期,降低渠道工程設(shè)計(jì)難度;杜飛龍等[3]基于CATIA二次開發(fā)實(shí)現(xiàn)了重力壩三維模型的快速構(gòu)建;王文進(jìn)等[4]基于CATIA二次開發(fā)提出了一種重力壩三維參數(shù)化設(shè)計(jì)方法,實(shí)現(xiàn)了高效快速進(jìn)行重力壩的設(shè)計(jì);樓濤等[5]基于3DEXPERIENCE平臺的CATIA二次開發(fā)提出了一種拱壩三維建模方法,提高了建模效率,減少建模過程中的重復(fù)工作;胡瑞華等[6]基于CATIA二次開發(fā),并應(yīng)用克里金插值法實(shí)現(xiàn)了多源數(shù)據(jù)條件下滑坡基巖覆蓋層分界面的建模。
雖然水利水電行業(yè)學(xué)者對CATIA軟件應(yīng)用的研究很深入,但對于每一個(gè)模型體額外賦予相應(yīng)工程屬性的研究卻很少見,現(xiàn)有三維模型體仍僅有系統(tǒng)自帶的一些通用屬性。
文章根據(jù)地質(zhì)專業(yè)的特點(diǎn),基于CATIA軟件針對三維模型地質(zhì)屬性的可視化表達(dá)進(jìn)行了研究與開發(fā)。
文章采用的軟件開發(fā)環(huán)境為Window 7及以上版本操作系統(tǒng),使用Visual Basic.NET編程語言,以Microsoft Visual Studio 2008作為開發(fā)平臺,通過自動化接口(Automation的API)連接CATIA模塊,并引用CATIA的類庫,通過代碼即可完成開發(fā)平臺與CATIA的連接。
軟件的設(shè)計(jì)是為了提高三維地質(zhì)模型可視化程度,便于模型流通與使用,增強(qiáng)模型通用性。圍繞這一目的,結(jié)合每一個(gè)地質(zhì)體屬性的差異性,需對每一實(shí)體分別賦予相應(yīng)的地質(zhì)屬性,讓模型使用者可以快速查詢到所需的屬性信息,從而全面了解模型的地質(zhì)特性,具體設(shè)計(jì)思路如圖1所示。
圖1 軟件設(shè)計(jì)思路圖
(1)選擇實(shí)體
每個(gè)實(shí)體模型地質(zhì)屬性不盡相同,在實(shí)體選擇時(shí)需要確保所選擇的實(shí)體為單個(gè)模型,具體設(shè)計(jì)流程如圖2所示,關(guān)鍵代碼如下:
If selectType=1 Then
If mcount>1 Then
Dim msg As String
msg=“選擇了”+Str(mcount)+“個(gè)實(shí)體,一次只能選擇單個(gè)實(shí)體!”
MsgBox(msg,vbInformation+vbOKOnly,title)
Else
MsgBox(“未選擇實(shí)體!”,vbInformation+vbOKOnly,title)
圖2 選擇實(shí)體設(shè)計(jì)流程
(2)地質(zhì)屬性添加
地質(zhì)屬性信息是指地質(zhì)體的巖性、時(shí)代、物理力學(xué)參數(shù)及典型照片等,其屬性值多由數(shù)值、字符和圖片構(gòu)成。每條屬性信息均包含屬性名稱和屬性值,在對每條屬性信息進(jìn)行添加時(shí),名稱和屬性值需要一一對應(yīng),將屬性信息逐一添加到數(shù)據(jù)表單中,具體設(shè)計(jì)流程如圖3所示,關(guān)鍵代碼如下:
Dim endrow As Integer=mView.Rows.Count- 1
mView.Rows.Insert(endrow)
mView.Item(0,endrow).Value=TB_Name.Text.Trim
mView.Item(1,endrow).Value=TB_value.Text.Trim
圖3 地質(zhì)屬性添加設(shè)計(jì)流程
(3)地質(zhì)屬性編輯
地質(zhì)屬性編輯主要針對一些輸入有誤的數(shù)據(jù)進(jìn)行調(diào)整。每條屬性信息僅包含兩個(gè)字段,對于有誤的屬性信息直接刪除該行,重新添加即可。對于不是圖像類型的屬性,所有信息均包含在屬性表單中,直接刪除表單中的屬性行即可,但對于圖像信息的屬性,需在數(shù)據(jù)庫中刪除縮略圖照片以及上傳的原始照片,具體設(shè)計(jì)流程如圖4所示,關(guān)鍵代碼如下:
If Mid(PName,1,2)=“圖像” Then
ListViewLargeImage.Images.RemoveByKey(PName)
For i=0 To Me.ListViewImg.Items.Count- 1
Dim nm As
String=UCase(ListViewImg.Items(i).ImageKey. ToString.Trim)
If nm=PName Then ListViewImg.Items.RemoveAt(i)
ThumbnailImageCode.RemoveAt(i)
圖4 地質(zhì)屬性編輯設(shè)計(jì)流程
(4)地質(zhì)屬性保存
地質(zhì)屬性保存是將已添加的地質(zhì)屬性信息傳遞到CATIA模型中的文檔系統(tǒng)與模型一起保存,而在傳遞屬性信息前需將屬性名稱和屬性值統(tǒng)一轉(zhuǎn)成字符串格式,并且將兩個(gè)參數(shù)合成一個(gè),中間用特定分隔符分開,這樣可以增加參數(shù)傳遞效率,方便后期屬性展示。對于新添加屬性需與已有屬性進(jìn)行對比,如果已經(jīng)存在,可以選擇更新或是延用以前信息;若不存在,可以重新創(chuàng)建新的屬性信息,具體設(shè)計(jì)流程如圖5所示。
屬性值存儲都是將屬性信息轉(zhuǎn)成字符串格式進(jìn)行存儲,關(guān)鍵代碼如下:
If Mid(proname,1,2)=“圖像” Then
For j=0 To ThumbnailImageCode.Count- 1
Dim mstu As Imglist=ThumbnailImageCode.Item(j)
If proname=mstu.ImglistName Then
provalue=mstu.ImglistValue
provalue=mDataGridView.Item(1,i).Value
propertyvalue=propertyvalue+proname+“===”+provalue+“||”
當(dāng)屬性信息為文字或是數(shù)字時(shí),將統(tǒng)一轉(zhuǎn)成字符串類型進(jìn)行存儲,并在存儲時(shí),屬性名稱和屬性值之間加入“===”和“||”兩個(gè)特殊符號,后期展示時(shí)方便分開屬性名稱和屬性值;當(dāng)屬性信息為圖片時(shí),需進(jìn)行圖片轉(zhuǎn)換,首先將圖片轉(zhuǎn)成byte,再由byte轉(zhuǎn)到base64string,然后對base64string進(jìn)行存儲;當(dāng)需要展示圖片屬性信息時(shí),需進(jìn)行逆向轉(zhuǎn)換,由base64string到byte再到圖片。
存儲圖像屬性信息過程:圖片轉(zhuǎn)byte再轉(zhuǎn)base64string,關(guān)鍵代碼如下:
Dim bty()As Byte
Dim ms As New IO.MemoryStream
myMap.Save(ms,System.Drawing.Imaging.ImageFormat.Jpeg)
bty=ms.ToArray
Dim btytxt As String=System.Convert.ToBase64String(bty)
Dim d As Integer=btytxt.Length
Return btytxt
展示圖像屬性信息過程:base64string到byte再到圖片,關(guān)鍵代碼如下:
Dim mymap As Bitmap
Dim bty()As Byte
bty=System.Convert.FromBase64String(ByteTxt)
Dim ms As New IO.MemoryStream(bty)
mymap=Bitmap.FromStream(ms)
′mMap=mymap
Return mymap
圖5 地質(zhì)屬性保存設(shè)計(jì)流程
(5)地質(zhì)屬性展示
地質(zhì)屬性展示是將已經(jīng)保存好的地質(zhì)屬性通過數(shù)據(jù)表單和圖像顯示框的形式展示出來,具體設(shè)計(jì)流程如圖6所示,關(guān)鍵代碼如下:
Dim pv As String=mstrParam.Value
If pv.Length=0 Then Exit Sub
pv=System.Text.Encoding.Unicode.GetString(Convert.FromBase64String(pv))
Dim propertyStr()As String=Split(pv,“||”)
For i=0 To propertyStr.Length- 1
If propertyStr(i)<> “” And
propertyStr(i)<>“===”Then
Dim endrow As Integer=
mDataGridView.Rows.Count- 1
mDataGridView.Rows.Insert(endrow)
Dim propertyStr1()As String=
Split(propertyStr(i),“===”)
mDataGridView.Item(0,endrow).Value=
propertyStr1(0).Trim
If Mid(propertyStr1(0).Trim,1,2)=“圖像” Then
ShowIMG(propertyStr1(0).Trim,
propertyStr1(1).Trim,endrow)
Else
mDataGridView.Item(1,endrow).Value=
propertyStr1(1).Trim
在圖像框中展示,先在屬性表中雙擊縮略圖,圖片會放大顯示在圖像框中,關(guān)鍵代碼如下:
Dim ImgItem As Integer=ListViewImg. FocusedItem. Index
showPicture(ListViewImg. Items(ImgItem). ImageKey. ToString. Trim)
圖6 地質(zhì)屬性展示設(shè)計(jì)流程圖
重慶市某水庫是一座以防洪、城鄉(xiāng)供水、灌溉為主,兼顧改善生態(tài)環(huán)境和發(fā)電等綜合利用為一體的大型水利工程。工程區(qū)出露地層有元古界、古生界、中生界及新生界,區(qū)內(nèi)出露地層均為沉積巖類,地層總厚度為4890~10750m,除缺失泥盆、石炭系及第三系外,尚缺志留系上統(tǒng)和白堊系下統(tǒng)地層?;贑ATIA軟件完成了該項(xiàng)目的三維地質(zhì)建模工作,三維模型如圖7所示。
圖7 三維模型圖
現(xiàn)擬給三維模型中每個(gè)地質(zhì)體賦予相應(yīng)的地質(zhì)屬性信息,選取其中一個(gè)三維模型體(編號J/2S//1- 2|ak)作為代表,利用開發(fā)的軟件進(jìn)行模型屬性賦值,擬賦地質(zhì)屬性見表1。
表1 擬賦地質(zhì)屬性表
首先啟動軟件,然后按照擬添加的屬性列表添加屬性。
(1)通過運(yùn)用VB編程語言對CATIA軟件進(jìn)行二次開發(fā),首次實(shí)現(xiàn)了在三維模型上定制屬性信息,成功解決了特有地質(zhì)屬性信息在三維地質(zhì)模型上可視化表達(dá)。
(2)將新增的屬性信息隨三維模型一同存儲,提高了三維地質(zhì)模型可視化程度,更有利于模型流通和使用。
(3)本軟件的成功開發(fā)與應(yīng)用,其開發(fā)思路以及功能實(shí)現(xiàn)代碼,均可為后來學(xué)者在進(jìn)行類似軟件的開發(fā)提供借鑒和參考。