摘要:介紹了基于IDL和.NET集成的可視化程序設計方法。通過在VB.NET中集成IDLDrawWidget控件,方便、高效地建立了可視化系統原型。實踐表明,在可視化應用領域中,IDL和.NET結合編程實現了優勢互補,具有較高的實用性。
關鍵詞:交互式數據語言; .NET; 可視化; 對象圖形系統
中圖分類號:TP311
文獻標志碼:A
文章編號:1001-3695(2007)09-0149-03
科學計算可視化(visualization in scientific computing)概念提出后,可視化技術作為一門學科得到了長足發展。作為可視化技術的核心,數據可視化技術的應用最為活躍。當前數據可視化的核心研究問題包括三維空間數據場及多元數據的建模、計算及表示技術,面繪制和體繪制的理論與算法,以及在一些專業領域的應用研究等。針對數據可視化的應用需求,可視化軟件平臺也不斷推出,如IDL、AVS/Express開發版、PVWAVE以及CTech等公司的產品[1]。其中,以交互式數據分析和數據可視化為特色的第四代計算機語言——IDL在國內外的應用最為普遍,已被廣泛應用于海洋、氣象、醫學、生物、空間科學、地球科學、天文學和商業開發等各個領域。
IDL既是便捷的軟件工具,也是高效的開發平臺,它擁有強大的編譯環境和與其他語言集成的能力。IDL可以調用其他語言編寫的程序或算法,或從其他語言調用IDL程序,利用ActiveX技術可以將IDL的圖形功能嵌入到其他Windows應用程序中;利用IDLJava Bridge功能可以在IDL代碼中訪問Java對象;通過DLL方式可以在IDL中調用C和Fortran程序;通過鏈接外部程序或將IDL作為其他語言的圖形引擎,可以使IDL成為現有開發工具的有力補充[2]。目前,基于IDL ActiveX控件的多語言混合編程已成為IDL可視化開發的一大趨勢[3~5]。 然而,IDL(Research System Inc.)尚未正式宣稱對微軟公司新一代Windows開發平臺Microsoft.NET的支持,但Microsoft設計了Assembly(程序集)兼容ActiveX的機制,通過封裝ActiveX與控件的交互來實現基于COM的ActiveX控件應用方式,這使得在.NET環境中集成IDL成為可能[6]。
1IDL與.NET的集成
1.1ActiveX控件與.NET的集成機制
.NET提供了對COM和ActiveX組件的互操作機制。.NET應用程序可以調用COM組件,包括ActiveX DLL(本地和DCOM)或ActiveX控件;.NET也可以為.NET組件提供COM接口。因此.NET程序集能夠通過基于COM的應用程序實現雙向訪問。當將COM DLL導入.NET中時,在.NET中創建了一個可以用來引用組件的runtimecallable wrapper(RCW,運行庫可調用的包裝器程序)。RCW提供了在COM組件周圍的一個.NET接口,并委托對ActiveX控件所有方法的調用,而實際上是RCW保存了對COM對象的引用。包裝器類是基于AxHost類的。AxHost類提供了ActiveX控件,使控件好像在ActiveX容器中運行一樣。當控件被添加到開發環境中的工具箱中后,就可以像使用其他預定義控件一樣使用它。默認情況下,為與Windows forms控件相區別,ActiveX控件被加載到窗體中時,其名字均以Ax開始,如AxIDLDrawWidget(IDL ActiveX控件)。由于RCW是一個.NET對象,當不再需要引用對象時,RCW由.NET銷毀,而在.NET包裝器對象終止前COM組件不會被釋放。
1.2IDLDrawWidget控件在.NET中的初始化
IDL的Windows版本提供了稱為IDLDrawWidget的IDL ActiveX控件,該控件提供了在Windows應用程序中以ActiveX組件形式集成IDL的機制,以此來為外部程序提供數據分析和可視化的功能。
當在.NET應用程序中添加IDLDrawWidget控件后,對其進行初始化設置。以VB.NET為例,首先在程序窗體中添加命名為IDLDrawWidget1的IDL ActiveX 控件,然后設置控件的各種屬性。在VB.NET中可通過調用IDLDrawWidget1的ExecuteStr方法實現對IDL的操作。該操作包括兩部分:執行IDL 內部命令、函數或過程;調用自定義的IDL函數或過程。具體程序如下:
1.3IDLDrawWidget控件在.NET中的事件響應機制
當IDLDrawWidget控件嵌入到.NET窗體后,將通過“自動事件(autoevent)”屬性響應用戶的交互操作。它以獨占形式管理用戶的鼠標事件,并在其控件區域內屏蔽了.NET的標準鼠標事件,如MouseUp、MouseDown、MouseMove等。IDL共提供了六個自動事件屬性,包括OnInit、OnExpose、OnButtonPress、OnButtonRelease、OnDblClick和OnMotion。系統設計時需要在IDLDrawWidget控件的屬性欄中依次為自動事件指定用IDL程序編寫的響應過程。其中:OnInit用于設置系統初始化時被自動編譯的IDL項目文件名;OnExpose事件一般在窗體激活或需要強制窗口重畫時發生,在.NET中可通過IDLDrawWidget的DoExpose()方法調用OnExpose屬性指定的響應過程;其余四個事件分別對應發生在控件上的鼠標事件,即OnButtonPress(鼠標按下事件)、OnButtonRelease(鼠標釋放事件)、OnDblClick(鼠標雙擊事件)、OnMotion(鼠標拖拽事件)。
2應用實例
2.1三維可視化系統設計
利用成都金沙遺址的考古地層數據,筆者設計了一個三維可視化系統原型。系統主要目的是對遺址地層的三維空間數據場進行可視化再現,實現地層的三維交互瀏覽和斷面切割,并生成地層空間數據的統計圖。系統總體結構如圖1所示。
a)地層界面數據庫由IDL對地層界線樣點內插建立,通過數據庫接口ADO.NET與系統連接,提供地層體三維建模的基礎數據源。
b)地層體模型由IDL內置的體素模型(voxel)及內插函數進行空間建模后生成,按地層層號劃分層位并渲染。
c)地層交互瀏覽功能在IDLDrawWidget控件中實現,瀏覽場景內嵌在基于VB.NET構建的系統主界面中。
d)地層斷面切割模塊,按照體素的矩陣索引和空間坐標位置對地層進行各方向和各空間卦限的切割,以顯示地層體在不同方向的斷面視圖。
e)空間坐標定位模塊用戶可選擇任意空間坐標記錄(x,y,z),在地層體內部以相應地層的顏色指示其空間位置。
f)空間數據挖掘模塊主要提取了地層的空間幾何特征和空間分布規律。由IDL計算地層面的最大值、最小值、平均值和標準差,地層的體積,以及地層厚度的最大值、最小值、平均值,并得出地層厚度極值(最大值、最小值)出現的空間位置。
g)圖形打印輸出模塊將地層各種形態的三維視圖或統計圖輸出到打印機。
2.2三維可視化功能實現
系統通過IDL 6.2編程實現前六個模塊,打印功能由VB.NET實現。應用程序從VB.NET執行IDL命令驅動IDL過程或函數,并傳遞相關參數,同時,IDLDrawWidget控件接收用戶在系統上交互操作激發的事件,并予以響應。
系統的核心功能為地層的三維建模和斷面切割,主要由IDL的對象圖形系統實現。不同于直接圖形系統(direct graphics system),對象圖形系統采用了面向對象思想,提供了大量的對象類,并支持用戶創建自己的對象類。對象圖形法支持GB級數據的渲染和操作,通過對象圖形法可以實現三維曲面的旋轉和飛行、多光源的陰影或光照處理、觀察實體內部的復雜細節以及從各個不同視角對空間對象進行可視化分析。圖形對象必須按層次結構來創建圖形場景,層次結構用于描述各種圖形對象在類庫中的層次關系,是應用各對象類實現三維可視化的關鍵,如圖2所示。
依據以上層次結構,系統開發過程中創建了下列圖形對象,如圖3所示。
a)oHolder(容器對象),將所有實例化后的對象,如原子圖形對象,添加到容器中,顯示在輸出設備上。
b)oView(視圖對象),將所有實例化后的對象模型添加到視圖。
c)oTrackBall(軌跡球對象),用于用戶在三維場景中使用鼠標對地層體進行交互操作。
d)oMainModel(主體對象),包含IDLgrVolume體對象、IDLgrAxis坐標軸對象、IDLgrText文本對象、IDLgrPloyine構造的盒框對象。
e)oLegendModel(圖例對象),包含IDLgrLegend圖例對象、IDLgrFont字體對象、IDLgrText文本對象。
f)oStatisticModel(統計圖對象),包含IDLgrModel統計圖模型對象、IDLgrPloygon構造的直方圖對象、IDLgrPlot曲線圖對象。
g)oLightModel(光照對象),包含IDLgrModel光照模型對象、IDLgrLight光照對象。
上述圖形對象創建后,依次被添加到IDLDrawWidget控件的圖形窗口中,最后與VB.NET建立的應用程序一起發布。系統運行主窗體如圖4所示。
3結束語
基于IDL與.NET平臺構建的三維可視化系統綜合了兩種開發工具的優勢。IDL面向數組操作的特性使三維建模變得更加容易,同時IDL提供的對象圖形系統使可視化場景的建立也較之基于OpenGL的底層開發更加快捷;而.NET作為主流Windows應用程序開發平臺,對系統界面設計及數據庫操作的支持更加完善。實踐表明,在可視化應用領域中,IDL與.NET結合編程實現了優勢互補,具有較高的實用性。
參考文獻:
[1]闞璦珂. 考古地層的三維可視化及應用研究——以成都金沙遺址為例[D]. 成都:成都理工大學,2006.
[2]IDL 6.2功能介紹白皮書[EB/OL]. [2006-05]. http://www.imagetekinfo.com/Download/.
[3]閻磊,曹俊興. Delphi調用IDL接口混合編程技術研究[J].河北工業大學學報,2005,34(1):85-88.
[4]黃修東,劉立民,曹君渉. VB調用IDL接口混合編程技術[J]. 微型電腦應用,2006,22(2):34-36.
[5]朱玉偉,拾兵,黃勇,等. 基于IDL與VB的遙感數據提取[J]. 計算機應用研究,2006,23(3):181-182,201.
[6]蓋迎春,馮敏,郭建文,等. IDL與.NET環境通信機制研究[J]. 遙感技術與應用,2005,20(3):350-354.
注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”