趙洪利,陳 飛,謝亞偉,郭 慶
(1.中國民航大學 航空工程學院,天津 300300;2.北京飛機維修工程有限公司,北京 100621)
S1000D規范下交互式IPC發布技術研究
趙洪利1,陳 飛1,謝亞偉2,郭 慶1
(1.中國民航大學 航空工程學院,天津 300300;2.北京飛機維修工程有限公司,北京 100621)
基于S1000D規范編制電子技術手冊是目前電子手冊發展趨勢;為促進S1000D規范在以信息化為中心的綜合保障技術中的應用,提高技術資料的使用性和經濟性,在研究了S1000D規范下IPC數據模塊及交互性問題的基礎上,采用VRML編寫的3D模型作為IPC的技術插圖,利用VRML自身優秀的交互性能并配合Javascript網頁腳本,實現了3D下的IPC圖文交互式發布功能,提升了IPC使用效率。
IPC; S1000D; VRML; 交互式發布
在飛機發動機各類技術文檔中,圖解零部件目錄(illustrated parts catalog: IPC)手冊是其中之一,它把零件件號、構型標準、零件名稱、零件數量、供應商等相關信息與零部件圖形相對應,以方便維修人員進行部件查找、識別和定位部件位置。
基于S1000D規范編制IPC時,可以用VRML編寫的3D圖形替代以往的2D圖或CGM(computer graphics metafile)圖形作為IPC的技術插圖,從而以立體的形式展示零部件,以增強可視化效果。為了實現IPC的交互功能,本文探討了如何利用VRML語言本身所具備的交互能力,并結合Javascript網頁腳本,來實現網頁式IPC中的3D圖形和文本之間的交互功能。
S1000D規范中,數據模塊是最小的數據單元,采用XML語言進行編制。數據模塊分為兩部分,即標識狀態段和內容段。S1000D根據技術信息的類別,將數據模塊進行了分類,并且分別給出了各類數據模塊所對應的XML Schema。編寫IPC數據模塊時,采用IPD(illustrated parts data) Schema即可。
依據具體項目的業務規則和S1000D對IPD數據模塊中各元素的定義和元素屬性取值的規定,將IPC中涉及技術資料信息填入IPD數據模塊所對應的元素中,即可完成數據模塊的編寫。
VRML(virtual reality modeling language)即虛擬現實建模語言,它具有平臺獨立性、可擴展性、實時圖形渲染、基于事件交互等特點。本文制作IPC時之所以采用VRML編寫3D模型,是因為一方面考慮到文件大小對頁面加載速度的影響,另一方面是基于VRML本身良好的交互特性。VRML語言編輯而成的3D模型文件是以.wrl或者.wrz為擴展名,本身是不能被目前常用的瀏覽器直接解析的,需要安裝專門的瀏覽器或者插件才能使用,本文采用的插件是Cortona 3D viewer。
2.1 VRML節點
VRML語言建立的3D模型是一個虛擬的三維空間,VRML空間采用的是卡式右手立體坐標系統(Cartesian right-handed dimensional system),由X、Y、Z 3個坐標方向構成,其方向可以用右手規則來確定。而在VRML空間中,空間單位統一使用VRML單位,與尺寸單位不具有可比性,實際應用時由開發者自主協調。
一個VRML文件通常由文件頭、節點和路由3個部分組成。節點是VRML中構成虛擬場景的基本單元,是VRML對現實世界各種對象和概念的抽象描述。VRML 2.0版本提供了54種節點,可以分為七類:幾何節點、屬性節點、編組節點、傳感器節點、插補器節點、腳本節點和其他節點。節點由域和事件組成。域的概念類似于其他計算機語言如C、C++中所說的“變量”、“數組”等,域的取值決定了虛擬場景的狀態。事件是由操作者、節點、系統本身、程序代碼產生的行為動作,節點通過事件來從外界接收信息及向外界發送信息。
VRML中的幾何圖形是通過造型節點來構造的。造型(Shape)節點定義了幾何圖形的尺寸和外觀,其節點的語法如下:
Shape{
exposedField SFNode appearance NULL
exposedField SFNode geometry NULL
}
Shape節點通過appearance 域定義了物體造型的外觀,如顏色和紋理等,通過geometry域設定幾何造型節點。VRML中幾何造型節點分為五類:原始幾何造型節點(Box、Cone、Cylinder、Sphere),點、線、面集節點(PointSet、IndexedLineSet、IndexedFaceSet、Coordinate),高度節點(ElevationGrid),突出節點(Extrusion)和文本造型節點(Text)。一般來講,對于形狀較為復雜的幾何圖形的建立,采用的多為面集結點,通過設定連接坐標并將坐標編號,然后按照坐標索引號設定點的連接順序,按此順序連接形成平面封閉的邊界線,再將平面填充,構成完整的平面造型,由此可以看出采用此方法制作的圖形相當于是中空的,但由于圖形都是封閉的,IPC圖解所展現的也并不涉及質量等物理性參數,所以并不影響幾何圖形的視覺表現。
2.2 VRML交互
交互過程實際相當于一個動畫,因此動畫過程的描述和動畫時間控制的描述是必不可少的,對于VRML語言,前者使用插補器節點和腳本節點實現,后者則需要借助傳感器節點。
插補器節點是為制作線性關鍵幀動畫而設計的,每個插補器節點都使用一個關鍵時刻和關鍵值的列表來描述動畫,關鍵時刻列表作為插補器key域值給出,關鍵值列表作為插補器keyValue域值給出。腳本Script節點是一個與VRML場景外的程序相結合的節點,它是事件處理的核心部分。Script節點內包含一個可被瀏覽器理解并執行的腳本程序。Script節點接收入事件,通過腳本程序產生結果,然后以出事件進行輸出。
傳感器節點用來感知用戶行為和目的,接收輸入信息。VRML 2.0中傳感器分為三類:時間傳感器、觸動傳感器和感知傳感器。時間傳感器的作用就是創建一個虛擬時鐘,并對其他節點發送時間值。觸動傳感器通過感知瀏覽者對于鼠標的操作,觸發并輸出事件。感知傳感器通過感知瀏覽者在虛擬場景中的觀察位置,觸發并輸出事件。
節點間的輸入、輸出事件傳遞路線即為路由。一般節點都有兩種事件即:入事件和出事件。通過路由可以從一個節點A發往另一個節點B一個值,將A節點出事件值賦予B節點入事件,從而B改變節點中某些域的域值。
2.3 視圖轉換功能集成
傳統IPC插圖,往往將一個組件主結構中各部件單獨剝離,然后標定各部分所包含的零件,如圖1所示,這種方法雖然能夠顯示組件中所有零件的信息,但也使得插圖頁面排版復雜,給使用帶來一定阻礙,這是2D平面圖本身所帶有的缺陷。而使用VRML語言編寫的3D模型則沒有這方面的顧慮,對于一個組件模型,可以在其VRML文件內部創建視圖轉換按鈕,結合插補器節點實現組件整體主視圖和爆炸視圖之間的切換。

圖1 傳統IPC插圖
利用Cortona提供的Transform2D和Layer3D這兩個擴展原型節點,可以實現創建一個獨立于3D幾何圖形的VRML場景的造型,它不會隨著場景的動作(如旋轉、縮放等)而變化位置,通過為這兩個節點添加傳感器和插補器即可完成與3D圖形的交互,實現視角切換。兩個原型節點的定義如下:
EXTERNPROTO Transform2D [
eventIn MFNode addChildren
eventIn MFNode removeChildren
exposedField SFVec2f center 0,0
exposedField MFNode children []
exposedField SFFloat rotationAngle 0.0
exposedField SFVec2f scale 1,1
exposedField SFFloat scaleOrientation 0.0
exposedField SFVec2f translation 0,0
]
[
"urn:inet:parallelgraphics.com:cortona:Transform2D"
"http://www.parallelgraphics.com/vrml/proto/Cortona/extensions.wrl Transform2D"
]
EXTERNPROTO Layer3D [
eventIn MFNode addChildren
eventIn MFNode removeChildren
exposedField MFNode children NULL
exposedField SFVec2f size -1, -1
exposedField SFNode background NULL
exposedField SFNode fog NULL
exposedField SFNode navigationInfo NULL
exposedField SFNode viewpoint NULL
]
[
"urn:inet:parallelgraphics.com:cortona:Layer3D"
"http://www.parallelgraphics.com/vrml/proto/Cortona/extensions.wrl
Layer3D"
]
圖2是利用Transform2D節點和Layer3D節點為某泵體模型創建的view1和view2兩個視圖切換按鈕,view1是泵體的主視圖,view2是部分拆解視圖。

圖2 view1(上)和view2(下)
借助VRML語言本身的優秀交互性,可以實現部分交互功能,而IPC發布形式為HTML網頁,VRML文件作為網頁的一部分嵌入其中,網頁的另一部分內容是IPC零件目錄表格。本文實現的IPC交互功能是圖文交互,即實現3D模型中的零件和零件信息之間的一一對應,為此需要用到VRML與網頁間的交互技術。
3.1 交互理論基礎
最初的交互技術中,VRML與網頁的交互功能實現主要通過兩種方式:一種是Java腳本創作接口(Java Script Authoring Interface, JSAI),另一種是外部創作接口(External Authoring Interface, EAI)。
JSAI使用Java和VRML相結合來實現VRML腳本。應用Java編寫腳本來讀取場景中的節點、向虛擬場景中的其他節點發送事件、在場景中創建新節點等等,實現腳本驅動場景動畫和場景交互的行為邏輯。
EAI的主要目的是增強VRML場景與外部環境通信聯系和整合能力,使得一個外部程序使用VRML事件模型就可以訪問和控制VRML場景中的節點。EAI的實質是同HTML頁面內的Java Applet與VRML場景間通過EAI進行交互。
然而隨著技術的發展,Java的功能不斷增強,若繼續采用JSAI和EAI進行交互編碼的話會導致無法正常交互,為了解決這個問題,新的交互機制應運而生,這種機制以Javascript腳本語言為橋梁來連接起VRML與Java Applet之間的通信,Javascript既可以訪問VRML虛擬場景又可以訪問Java Applet程序,因此通過Javascript編寫的函數,采用VRML-Javascript-Java Applet的通信機制就可以實現VRML與Java Applet間的通信,從而實現復雜交互功能。
Java Applet程序能夠實現較為復雜的交互功能,如VRML場景節點的域值參數修改、動畫的參數控制等等。本文所要實現的IPC交互功能不涉及這些參數的變動,所有參數設置、動畫路徑等等都集成在了VRML文件本身,交互所要控制的內容主要在于事件的觸發,因此單純通過嵌入網頁的Javascript腳本即可實現事件觸發功能。
3.2 圖文交互功能實現
采用Javascript腳本來實現簡單交互,在VRML文件已嵌入網頁的基礎上,首先要定義VRML虛擬場景的引擎,獲得對于虛擬場景的引用:
MyEngine=Scene.Engine
Scene.Engine中的Scene對應于嵌入代碼中的
建立虛擬場景引擎后,就可以借助引擎對象來訪問場景節點,引用場景節點的一般語法形式如下:
MySceneEngine.Nodes(”NodeName”).Fields(”fieldName”);
NodeName為VRML虛擬場景中的節點名稱,fieldName為該節點的域名。
建立好虛擬場景引擎,采用正確的語法引用虛擬場景的節點之后,其余交互功能的代碼編寫則要依靠根據所需功能編寫適當的Javascript函數。
要在瀏覽器上正常加載VRML文件需要安裝相應的插件,本文選用了Cortona 3D viewer插件,同時利用Cortona公司的SDK文件進行代碼解析能夠有效理解IPC API文件。以下是根據API文件中的函數編寫的具有交互功能的部分主程序代碼:
function initialize_api(data) {
if(with3D){
ipcApi = new IPCApi(cortona);
if(!isMSIE)ipcApi.ATP=1;
workTable = new IPCTable(document.getElementById("mainTable"));
if(ipcApi.checkCortonaComponent()){
var verC3D = 7;
if(!isMSIE){
try{verC3D= parseInt(cortona.Version);}catch(err){}
}
if(!("Version" in cortona) || verC3D<7){
alertx(iWarningCortonaOldVersion);
}
workTable.on_selection_changed= on_3D_selection;
ipcApi.SKIP_TRANSPARENCY_THRESHOLD_LEVEL=0;
ipcApi.on_part_over = new Function('n', 'if (!isCalloutsMode) workTable.onOver3D(n);');
ipcApi.on_part_click = new Function('part', 'button', 'shift', 'X', 'Y','if(!isCalloutsMode)workTable.onClick3D(part, button, shift, X, Y);');
ipcApi.on_mouse_up = _onCortonaMouseUp;
ipcApi.on_mouse_down = _onCortonaMouseDown;
ipcApi.on_mouse_move = _onCortonaMouseMove;
ipcApi.on_reset = new Function('workTable.clearHighlight(); navControl.checkMode();');
ipcApi.on_simulation_load = on_simulation_load;
ipcApi.on_view_changed = on_view_changed;
ipcApi.loadMetadate(data);
on_set_properties(data);
}else{
…
}
}
這段代碼主要功能就是設置鼠標在懸停、點擊、移出等操作時所需要的交互函數設置,具體各個函數的完整定義的程序代碼這里不作詳細解釋。在Javascript腳本中定義的函數想要起到作用需要在網頁代碼中進行函數的調用,調用函數如下:
這幾個調用函數大體結構式非常相似,其意義為,對于嵌入VRML文件的名稱為”cortonaControl”的
IPC數據模塊是存儲信息的載體,要想看到信息內容,需要發布引擎根據發布樣式表,把XML數據模塊轉換成希望的展現樣式。本文采用HTML網頁形式展現信息內容的,從XML到HTML的轉換是通過XSL樣式表進行的。實現的交互式功能包括:1)部件主視圖和爆炸視圖的切換;2)當鼠標懸停于IPC表格某一行上方(或3D幾何圖形某一零件上)
時,相對應的3D圖上的零件(或IPC表格中對應的零部件描述行)的顏色顯示會產生變化,參見圖3。3)當進行鼠標點擊操作時,則產生更加明顯的顏色變化。場景視圖的切換不會影響圖形與文本的交互功能。這些效果簡化了IPC查詢操作,同時3D模型的使用也使得零件位置信息和外觀信息更為立體直觀,更好識別。

圖3 鼠標懸停(左)與點擊(右)交互效果
本文基于S1000D規范創建IPC數據模塊,采用VRML語言編制的3D模型代替以往的2D圖形作為IPC技術插圖,基于VRML交互技術實現視圖切換功能,結合VRML自身優秀的交互性能和Javascript腳本程序,實現了交互式IPC發布,優化了IPC的使用方式和使用效率。
[1] 薛慶文,辛允東.虛擬現實VRML程序設計與實例[M].北京:清華大學出版社,2012.
[2] 周 偉.基于S1000D標準交互式電子技術手冊的研究[D].青島:青島科技大學.2012.
[3] 王 哲.基于VRML的三維交互式網頁的設計[J].吉林省經濟管理干部學院學報,2010,10(5):69-71.
[4] Nicholas C.Zakes著,李松峰,曹力 譯. Javascript高級程序設計[M].北京:人民郵電出版社,2012.
[5] 張金釗,張金銳,等. VRML編程實訓教程[M].北京:北京交通大學出版社,2008
[6] Micheal Moncur. JavaScript入門經典[M].王 軍譯.北京:人民郵電出版社,2012.
Study on Publishing Technology of Interactive IPC ased on S1000D Specification
Zhao Hongli1, Chen Fei1, Xie Yawei2, Guo Qing1
(1.College of Aeronautical Engineering, Civil Aviation University of China, Tianjin 300300, China; 2.Aircraft Maintenance and Engineering Corporation, Beijing 100621, China)
It is the tendency of electronic manual publishing by adopting S1000D specification to generate electronic technical manual. In order to promote the application of S1000D standard in the integrated logistics support with information as the center, and improve the operation and economy of technical materials, the problem of IPC data module and the interaction based on S1000D is studied. Using VRML 3D models as IPC technical illustrations,benefited from VRML convenient interactive characters, 3D IPC graphical interactive publishing features were programmed in Javascript web scripts and serviced, which improves IPC performance.
IPC; S1000D; VRML; interactive publishing
2016-07-17;
2016-09-06。
趙洪利(1964-),天津人,副教授,碩士研究生導師,主要從事發動機維修與維修管理方向的研究。
1671-4598(2017)01-0152-04
10.16526/j.cnki.11-4762/tp.2017.01.043
TP311
A