摘 要: 在倉(cāng)儲(chǔ)仿真項(xiàng)目的開(kāi)發(fā)中,,圖元的創(chuàng)建和三維場(chǎng)景的布置是重要的步驟。為了簡(jiǎn)化倉(cāng)儲(chǔ)仿真項(xiàng)目的開(kāi)發(fā),,提出一種倉(cāng)儲(chǔ)三維仿真圖元管理的平臺(tái)方案,。該平臺(tái)模型由4個(gè)關(guān)鍵模塊組成。并在WPF下實(shí)現(xiàn)了關(guān)鍵模塊,,結(jié)果表明采用該平臺(tái)的相應(yīng)模塊能夠?qū)崿F(xiàn)仿真圖元對(duì)象的快速創(chuàng)建,、仿真圖元的高效管理,方便地為開(kāi)發(fā)基于WPF平臺(tái)的倉(cāng)儲(chǔ)仿真項(xiàng)目提供合適的圖元對(duì)象,。因此該平臺(tái)能夠簡(jiǎn)化倉(cāng)儲(chǔ)仿真項(xiàng)目的開(kāi)發(fā)步驟,,節(jié)省開(kāi)發(fā)時(shí)間。
關(guān)鍵詞: 倉(cāng)儲(chǔ)仿真,;三維仿真,;圖元管理
計(jì)算機(jī)仿真是應(yīng)用電子計(jì)算機(jī)對(duì)系統(tǒng)的結(jié)構(gòu)、功能和行為以及參與系統(tǒng)控制的人的思維過(guò)程和行為進(jìn)行動(dòng)態(tài)地模仿,,進(jìn)而得出數(shù)量指標(biāo),,為決策者提供有關(guān)這一過(guò)程或系統(tǒng)的定量分析結(jié)果,作為決策的理論依據(jù),。
以倉(cāng)庫(kù)仿真為例,,倉(cāng)庫(kù)管理人員可實(shí)時(shí)掌握貨物信息,直觀地了解當(dāng)前倉(cāng)庫(kù)的狀態(tài),。相較于二維圖表,,三維模型在仿真方面有著很大的優(yōu)勢(shì)。三維的圖元需要有圖形用戶界面GUI(Graphic User Interface)的支持,,在Windows系統(tǒng)平臺(tái)上從事圖形用戶界面程序開(kāi)發(fā)的工具歷經(jīng)了Win32->MFC(及同類(lèi)產(chǎn)品)->ActiveX/COM/Visual Basic->Windows Forms的變遷,,從2007年開(kāi)始微軟推出了新一代GUI開(kāi)發(fā)工具Windows Presentation Foundation,,并把它作為未來(lái)十年Windows平臺(tái)GUI開(kāi)發(fā)的主要技術(shù)。
1 平臺(tái)設(shè)計(jì)思想
1.1 平臺(tái)設(shè)計(jì)的出發(fā)點(diǎn)
在倉(cāng)儲(chǔ)物流系統(tǒng)中,,包括入庫(kù)臺(tái),、傳送帶、叉車(chē),、堆垛機(jī),、AVG小車(chē)、貨架,、貨物,、緩沖區(qū)臨時(shí)堆場(chǎng)等資源。倉(cāng)儲(chǔ)仿真應(yīng)用既需要展現(xiàn)實(shí)際倉(cāng)庫(kù)動(dòng)作的動(dòng)態(tài)信息(例如:堆垛機(jī)的實(shí)時(shí)運(yùn)動(dòng),,貨架上是否有貨物,,當(dāng)前入庫(kù)、出庫(kù)的貨物),;也要能夠顯示倉(cāng)庫(kù)的靜態(tài)信息(例如貨物的數(shù)量信息,、供應(yīng)商/客戶信息等)。因此,,仿真應(yīng)用的圖元不僅僅包含要顯示的模型信息,,從面向?qū)ο蟮慕嵌纫褢?yīng)用中的圖元對(duì)象化,增加相應(yīng)的屬性使之能夠描述現(xiàn)實(shí)中的倉(cāng)庫(kù)資源[1],。
開(kāi)發(fā)仿真應(yīng)用首先需要?jiǎng)?chuàng)建圖元,,一般通過(guò)三維軟件建模獲得,根據(jù)圖形用戶界面——GUI的標(biāo)準(zhǔn)不同,,直接使用或者進(jìn)行轉(zhuǎn)換生成符合要求的圖元文件,,此時(shí)的圖元只具有幾何信息,為了實(shí)現(xiàn)應(yīng)用中的功能,,還需要增加相應(yīng)的屬性,,使之成為一個(gè)完整的圖元對(duì)象,得到所有圖元對(duì)象后需要設(shè)置每個(gè)模型的位置,,即完成場(chǎng)景布置,。完成這些步驟往往需要多個(gè)工具的參與,工具的切換增加了開(kāi)發(fā)的繁瑣,,更重要的是這些步驟中缺乏對(duì)已有圖元的管理,,對(duì)于一些相似的圖元,重復(fù)制作浪費(fèi)時(shí)間和精力,,故需要將這些圖元管理起來(lái),,建立圖元庫(kù)。因此,本文提出的平臺(tái)模型將這些步驟封裝成相應(yīng)模塊,,并與其他模塊聯(lián)合簡(jiǎn)化開(kāi)發(fā)步驟,。
1.2 平臺(tái)的功能分析
仿真圖元的加載。單獨(dú)開(kāi)發(fā)出繪圖模塊工作量較大,,現(xiàn)有的三維軟件造型功能已十分完整,,并能支持如obj等中間圖形文件,使用三維軟件(pro/e,、SolidWorks,、3DMax等)創(chuàng)建圖元,生成的圖形文件需要由平臺(tái)的相應(yīng)模塊將其轉(zhuǎn)換為平臺(tái)可用圖元,。
仿真圖元的對(duì)象化,。被模擬的對(duì)象除了幾何信息外,應(yīng)具有很多特有的屬性,,比如貨物的基本信息,因此平臺(tái)中需要?jiǎng)?chuàng)建圖元對(duì)象,,使之更貼近現(xiàn)實(shí)倉(cāng)儲(chǔ)資源,。
仿真圖元對(duì)象的編輯與管理。平臺(tái)需要實(shí)現(xiàn)圖元對(duì)象的存儲(chǔ)及屬性修改以滿足相似圖元的重復(fù)利用提高開(kāi)發(fā)效率,,對(duì)于已保存的圖元,,平臺(tái)也需要提供基本管理的功能模塊[2]。
圖元輸出功能,,平臺(tái)的最終目的是為倉(cāng)儲(chǔ)仿真應(yīng)用提供圖元,,因此需要輸出完整的圖元文件。該圖元文件中包含了圖元的幾何信息確保模型的準(zhǔn)確外形,;包含了坐標(biāo)屬性使模型顯示在場(chǎng)景的正確位置,;包含圖元的屬性定義,使圖元對(duì)象攜帶現(xiàn)實(shí)倉(cāng)庫(kù)中資源的信息,。
2 平臺(tái)結(jié)構(gòu)及模塊分析
2.1 平臺(tái)結(jié)構(gòu)
平臺(tái)采用典型的三層架構(gòu),,圖1是平臺(tái)的內(nèi)部結(jié)構(gòu),表示層負(fù)責(zé)把仿真數(shù)據(jù)和操作工具展示給用戶,。在該平臺(tái)中,,表示層的主要作用是顯示三維模型,提供屬性的可視化編輯等工具,,管理數(shù)據(jù)層的圖元,。
業(yè)務(wù)邏輯層中需要實(shí)現(xiàn)表示層中各個(gè)工具的功能,為表示層展現(xiàn)的場(chǎng)景提供模型數(shù)據(jù),,調(diào)用和處理數(shù)據(jù)層的圖元信息,。
數(shù)據(jù)層使用數(shù)據(jù)庫(kù)軟件來(lái)保存三維圖元的屬性信息,圖元對(duì)象是在程序運(yùn)行的時(shí)候創(chuàng)建出來(lái)的,保存圖元對(duì)象就是將圖元對(duì)象的所有屬性保存數(shù)據(jù)庫(kù)表中,,通過(guò)相應(yīng)模塊能夠?qū)⑦@些信息快速還原為圖元對(duì)象,,通過(guò)數(shù)據(jù)庫(kù)操作,能夠修改表中圖元的屬性信息,,提高幾何相似圖元的利用率,。
2.2 模塊分析
邏輯層是平臺(tái)的核心層,參照?qǐng)D1平臺(tái)內(nèi)部結(jié)構(gòu),,邏輯層按照功能分為4個(gè)模塊[3],。
(1)圖元加載模塊
圖元加載工具調(diào)用加載模塊的相應(yīng)功能加載圖元,,圖元的加載有兩種方式:一種是從外部導(dǎo)入三維圖形軟件生成的中間文件,,并將其轉(zhuǎn)換為平臺(tái)可用的圖元;另一種方式是從數(shù)據(jù)庫(kù)中獲取保存的圖元,。加載模塊將圖元的幾何信息傳遞給圖元對(duì)象模塊,。
(2)圖元對(duì)象生成模塊
該模塊生成一個(gè)圖元對(duì)象,,此對(duì)象的幾何屬性來(lái)自圖元加載模塊,,同時(shí)將幾何信息顯示于表示層場(chǎng)景中,此時(shí)的對(duì)象只具有幾何屬性,,只能在場(chǎng)景中顯示,,不能承載信息,故還需要使用圖元編輯模塊完成屬性編輯,。
?。?)圖元屬性編輯模塊
表示層的屬性編輯工具調(diào)用屬性編輯模塊的相應(yīng)功能對(duì)前一模塊生成的圖元對(duì)象進(jìn)行屬性的創(chuàng)建和編輯,完成屬性編輯的圖元對(duì)象存入數(shù)據(jù)庫(kù)中,。
?。?)圖元管理模塊
此模塊的作用主要有兩個(gè):對(duì)數(shù)據(jù)庫(kù)中的圖元進(jìn)行管理,比如圖元的刪除,、重命名,、以及部分屬性的直接修改;圖元的輸出,,將數(shù)據(jù)庫(kù)中的圖元對(duì)象輸出,,為脫離本平臺(tái)的仿真應(yīng)用的開(kāi)發(fā)提供可用圖元。
3 平臺(tái)的關(guān)鍵模塊實(shí)現(xiàn)
3.1 圖元加載模塊
XAML是WPF技術(shù)中專(zhuān)門(mén)用于設(shè)計(jì)UI的語(yǔ)言,,用ViewPort3D標(biāo)簽定義一個(gè)三維場(chǎng)景,,其中幾何信息定義在標(biāo)記<GeometryModel3D.Geometry>的子標(biāo)記<MeshGeometry3D>中,其中主要由Positions,、TriangleIndices這兩個(gè)屬性決定模型的形狀,,Positions屬性的值為一系列點(diǎn)的三維坐標(biāo),,每3個(gè)點(diǎn)構(gòu)成1個(gè)三角形面作為構(gòu)成模型表面的最小單元,Positions屬性中按照3個(gè)坐標(biāo)一組,,分別對(duì)應(yīng)第i個(gè)點(diǎn)(i=0,,1,2,,3,,…),TriangleIndices屬性保存Positions中點(diǎn)的索引i,,每3個(gè)索引為一組,,構(gòu)成1個(gè)三角形面,簡(jiǎn)單的三維模型表面分割成三角形時(shí),,Positions的點(diǎn)坐標(biāo)及TriangleIndices中索引的數(shù)量不多,,但遇到稍微復(fù)雜的圖元,此時(shí)Positions中的點(diǎn)以及TriangleIndices中索引的數(shù)量將大大增加,。這將大大增加X(jué)AML代碼的篇幅,。
obj文件作為大多數(shù)三維軟件支持的輸出文件,包含了模型的全部幾何信息,。obj文件定義三維模型的方式與positions屬性不同,,不能直接使用,在WPF中使用展現(xiàn)三維模型通常需要使用微軟提供的Blend軟件的圖形導(dǎo)入功能,,使用Blend軟件在WPF項(xiàng)目中導(dǎo)入obj文件就是按照上文描述的這種規(guī)則將表面劃分成很多的三角形,并將三角形的頂點(diǎn)坐標(biāo)按照指定的規(guī)則寫(xiě)入Positions屬性中,,造成XAML代碼的大量增加[4],。因此在Blend中加載obj文件的方式并不理想。
由于Positions屬性中點(diǎn)的坐標(biāo)冗長(zhǎng),,通過(guò)改變坐標(biāo)達(dá)到改變模型形狀或位置的做法并不可取,,通過(guò)三維軟件重新編輯obj文件相對(duì)方便,因此完全可以將Positions及TriangleIndices的屬性賦值放在邏輯層完成,。在平臺(tái)界面上通過(guò)圖元加載工具通過(guò)文件對(duì)話框選擇相應(yīng)的obj文件,,此時(shí)加載模塊調(diào)用轉(zhuǎn)換功能將obj文件的幾何信息提取,生成一系列點(diǎn)的坐標(biāo),,在邏輯層將這些點(diǎn)的數(shù)據(jù)添加到Positions屬性中,,這樣在XAML代碼中就避免了加入ModelVisual3D標(biāo)簽,這種方式既保留了Blend軟件加載obj文件的方便性又減少了XAML代碼的篇幅,,使其便于維護(hù),。
3.2 圖元對(duì)象生成模塊
obj文件中的幾何信息被轉(zhuǎn)換為符合Positions屬性值規(guī)則的點(diǎn)的集合后賦給GeometryModel3D的Geometry屬性,并將此GeometryModel3D對(duì)象賦給ModelVisual3D對(duì)象的Content屬性,,該ModelVisual3D對(duì)象將被添加到一個(gè)繼承自ModelVisual3D的ModelVisual3DWithName類(lèi)的Children屬性中,。Viewport3D對(duì)象的Children屬性添加ModelVisual3D類(lèi)型對(duì)象,。此時(shí)完成了一個(gè)圖元對(duì)象的創(chuàng)建,此對(duì)象只包含幾何信息等一些內(nèi)置屬性,,再設(shè)置好相機(jī),、光線等屬性即可顯示三維模型。
3.3 圖元屬性編輯模塊
?。?)內(nèi)置屬性的編輯
內(nèi)置屬性主要包含位置信息,、顏色信息。位置信息只反映出了模型的空間坐標(biāo)及姿態(tài),,ModelVisual3D對(duì)象中通過(guò)Transform屬性來(lái)改變模型的位置屬性,、旋轉(zhuǎn)屬性、放縮屬性,;GeometryModel3D.Meterial屬性表示模型的材質(zhì)屬性,。
Transform屬性值是Transform類(lèi)型,TranslateTransform3D繼承自Transform類(lèi),,TranslateTransform3D類(lèi)有3個(gè)表示位置信息的屬性O(shè)ffsetX,、OffsetY、OffsetZ,。每個(gè)都有相應(yīng)的依賴屬性:OffsetXProperty,、OffsetYProperty、OffsetZProperty,。依賴屬性就是一種可以自己沒(méi)有值,,并能夠通過(guò)Binding從數(shù)據(jù)源獲得值的屬性[5]。因此可以將模型的依賴屬性O(shè)ffsetXProperty等屬性綁定到界面上Slider(滾動(dòng)條)控件的Value屬性,,這樣就可以控制模型的位置,。自定義的圖元對(duì)象ModelVisual3DWithName有一個(gè)location屬性,表示模型固定點(diǎn)的空間坐標(biāo),,該點(diǎn)為模型邊界立方體的固定頂點(diǎn)[5],。通過(guò)該點(diǎn)的坐標(biāo),可以確定模型的空間位置,,進(jìn)而確定模型間的相對(duì)位置,。其余內(nèi)置屬性的編輯方式可以參照上述過(guò)程。
?。?)自定義屬性的編輯
ModelVisual3D對(duì)象擁有最基本的三維模型的屬性,,比如上文提到的顏色、位置等屬性,。但在實(shí)際應(yīng)用中,,針對(duì)不同的模型還需要用到一些自定義屬性。比如說(shuō)貨物的重量屬性,、生產(chǎn)日期屬性,、客戶屬性等,。
自定義的屬性是某個(gè)圖元所特有的屬性,不必要為所有圖元對(duì)象都加上這樣的屬性否則會(huì)在應(yīng)用程序中產(chǎn)生一些不必要的內(nèi)存空間浪費(fèi),,于是在本模塊中只將自定義的屬性保存在數(shù)據(jù)庫(kù)中[6],,并與特定的圖元對(duì)象相關(guān)聯(lián)。將自定義的屬性添加到圖元對(duì)象這一步驟在下一模塊中完成,。
3.4 圖元管理模塊
圖元管理模塊實(shí)現(xiàn)數(shù)據(jù)庫(kù)中已有圖元數(shù)據(jù)的管理,。可以刪除圖元,,修改圖元的部分屬性信息,。對(duì)于需要輸出的圖元,為了實(shí)現(xiàn)其自定義屬性,,平臺(tái)通過(guò)動(dòng)態(tài)代碼為每個(gè)圖元定制一個(gè)類(lèi)型,。該類(lèi)型繼承自ModelVisual3D類(lèi),根據(jù)數(shù)據(jù)庫(kù)中的圖元信息添加自定義的CLR屬性或依賴屬性,,最終將動(dòng)態(tài)編譯成.dll文件保存,。
在應(yīng)用中,只需要引入所需圖元對(duì)象的.dll文件及名稱空間并實(shí)例化該類(lèi)就可以得到圖元對(duì)象,??梢酝ㄟ^(guò)該對(duì)象的CLR屬性獲得自定義的屬性信息,將依賴屬性綁定到相應(yīng)的數(shù)據(jù)源,,或者將此類(lèi)型作為父類(lèi)型,,擴(kuò)展方法、事件等操作,。
4 已完成模塊的測(cè)試
以一個(gè)鋼卷倉(cāng)庫(kù)為例,,使用該平臺(tái)布置倉(cāng)庫(kù)場(chǎng)景。首先用Pro/e軟件做出三維模型:立柱,、橫梁、鋼索,、鋼卷,、抓手。并導(dǎo)出各個(gè)模型的obj文件,。通過(guò)平臺(tái)圖元加載模塊加載這些obj文件,,通過(guò)圖元生成模塊生成圖元對(duì)象,顯示場(chǎng)景如圖2所示,。
使用平臺(tái)的屬性編輯模塊調(diào)整各模型的相對(duì)位置及各個(gè)模型的材質(zhì),,并將圖元信息保存,再使用圖元管理模塊導(dǎo)出dll文件,。在新的WPF項(xiàng)目中引用dll及相應(yīng)名稱空間,,實(shí)例化各個(gè)圖元及場(chǎng)景,,效果如圖3所示:布置好場(chǎng)景后后臺(tái)可以控制場(chǎng)景中的每一個(gè)模型,獲得圖元屬性,,根據(jù)邏輯需求實(shí)現(xiàn)模型的仿真動(dòng)作,。
本文提出了一個(gè)倉(cāng)儲(chǔ)仿真及三維圖元管理平臺(tái)的模型,并在WPF下實(shí)現(xiàn)了平臺(tái)關(guān)鍵模塊,,通過(guò)對(duì)平臺(tái)模塊的測(cè)試可以看出這些模塊可以簡(jiǎn)化倉(cāng)儲(chǔ)仿真的開(kāi)發(fā)步驟,,提高相似圖元的利用率,節(jié)省開(kāi)發(fā)時(shí)間,。后期任務(wù):增加仿真模塊,,即從數(shù)據(jù)庫(kù)中獲取指定場(chǎng)景的所有圖元,自動(dòng)完成場(chǎng)景布置,,通過(guò)設(shè)定參數(shù)仿真場(chǎng)景,,或者對(duì)于簡(jiǎn)單的項(xiàng)目直接將圖元相應(yīng)的屬性與實(shí)時(shí)數(shù)據(jù)相關(guān)聯(lián),以完成場(chǎng)景的實(shí)時(shí)仿真,。
參考文獻(xiàn)
[1] 蔡靖,,申婷婷,王海丹.基于Flexsim的某自動(dòng)化倉(cāng)儲(chǔ)系統(tǒng)的仿真結(jié)果和分析[J].制造業(yè)自動(dòng)化,,2012,,34(7):107-122.
[2] 張建奇,李墨翰,,鄭偉.基于WPF的工廠物流管理系統(tǒng)界面設(shè)計(jì)[J].自動(dòng)化技術(shù)與應(yīng)用,,2011,30(12):17-20.
[3] 李成剛,,馮靜,,凌玲.基于WPF的交互繪圖系統(tǒng)的開(kāi)發(fā)[J].微型機(jī)與應(yīng)用,2011,,30(6):50-52.
[4] 張洪定,,孟冬梅.基于Expression Blend4中文版WPF和Silverlight項(xiàng)目設(shè)計(jì)基礎(chǔ)[M].北京:清華大學(xué)出版社,2011.
[5] 劉鐵錳.深入淺出WPF[M].北京:中國(guó)水利水電出版社,,2010.
[6] 石怡.WPF使用XAML實(shí)現(xiàn)對(duì)SQL Server數(shù)據(jù)庫(kù)綁定的方法[J].電腦開(kāi)發(fā)與應(yīng)用,,2011,24(10):70-74.