張小麗
(吉林工商學(xué)院,吉林 長春130507)
在實際的CAD 設(shè)計工作中,經(jīng)常遇到這樣的零件或零部件,雖然他們結(jié)構(gòu)相同但尺寸卻有所不同,如果能事先在CAD 系統(tǒng)中存儲這些零件或零部件,設(shè)計過程中如果遇到相似結(jié)構(gòu),就可以按照實際尺寸在存儲中調(diào)取,將調(diào)取的存儲作為一個整體設(shè)計零件,這樣就可以大幅度提升零件的設(shè)計效率。[1]UDF 把特征和參數(shù)化設(shè)計融合在一起,把特征作為基本執(zhí)行單元,通過不斷的修改參數(shù)實現(xiàn)形狀特征的調(diào)整,實現(xiàn)了用戶定義的特征參數(shù)化,大大提升了CAD 設(shè)計效率。[2]
在語義特征造型中,是一個不可再分的幾何實體單元[3],具有一定的通用性。CAD 設(shè)計過程中,根據(jù)零部件實際數(shù)值可以對存儲模型進(jìn)行設(shè)計變體,把得到的變體作為一個整體進(jìn)行設(shè)計的布爾運算??蓪DF定義為:
其中:UDF 的唯一標(biāo)識用ID 來表示;圖中UDF 對應(yīng)的幾何形狀我們用Gty 來表示;一些特征屬性,如名稱、類型等我們用Pty 來表示;Cot 是構(gòu)成UDF 的元素之間的約束,如拓?fù)浼s束等;Hoy 表示UDF 的設(shè)計過程,在UDF 的重構(gòu)中使用。
如圖1 所示,每個UDF 類都能分成部分,即形狀、屬性、約束、設(shè)計歷史和用戶接口。UDF 類中各部分之間相互作用,即UDF 的形狀由內(nèi)部特征形狀組成,每一個內(nèi)部特征的形狀上都具有形狀屬性,通過存在于內(nèi)部特征形狀之間的幾何約束來調(diào)整UDF 的形狀;形狀和屬性之間通過UDF 的約束相互聯(lián)系;在設(shè)計歷史過程中我們把形狀特征的添加次序記錄下來;把屬性和約束一起封存在用戶接口中,同時,通過接口得到的UDF類與外部進(jìn)行交互的方法,我們能夠獲得用戶給出的信息參數(shù),利用這些參數(shù)來驅(qū)動UDF 類模板,最終實現(xiàn)UDF 類的實例化。
圖1 UDF 類結(jié)構(gòu)
由于隨著特征形狀的創(chuàng)建而建立了UDF 的設(shè)計歷史,所以,我們把它UDF 的定義過程分成四個步驟:特征形狀的定義、特征屬性的定義、特征約束的定義和特征接口的定義。
1.特征形狀的定義
特征形狀是定義UDF 類的基礎(chǔ)。有兩種方法可以定義特征形狀:
(1)形狀繼承。如果一個實際基本形狀和所期望的特征形狀完全相符,就可以啟用形狀繼承。這樣,就可以使用直接繼承重新構(gòu)成其它UDF 類的形狀。在新形成的特征類中我們可以利用繼承為全部父類外形屬性重新命名,并另外增加新的屬性和約束。
(2)形狀組合。如果實際設(shè)計的特征類在CAD 系統(tǒng)存儲的所有基本形狀中都找不到,我們可以啟用形狀組合。通過順序增加特征和約束的方法,利用形狀組合實現(xiàn)所需特征形狀的組合。首先增加主特征,主特征完全不參考任何其它特征,之后的特征的定義和特征定位都參照前面定義的特征。順序增加完所有特征后,就把它們存儲在新的UDF 中。
2.特征屬性的定義
特征名稱、類型、尺寸、公差等信息的載體就是特征屬性。這里,我們使用雙向鏈表來存儲特征屬性,通對雙向鏈表進(jìn)行刪除、修改和添加最終完成特征屬性的刪除、修改和添加。
3.特征約束的定義
我們把特征約束定義成數(shù)學(xué)公式,這個數(shù)學(xué)公式是我們在設(shè)計時所依賴的變量間的關(guān)系,我們通過特征約束捕獲設(shè)計者的意圖,一些幾何尺寸、技術(shù)參數(shù)和工程變量等我們用約束中的變量來表示。用雙向鏈表來存儲約束,約束的刪除、修改和添加可通過對雙向鏈表的刪除、修改和添加來實現(xiàn)。
4.特征接口的定義
我們通過特征接口把具有工程意義的參數(shù)如尺寸和約束等暴露給設(shè)計人員,UDF 的參數(shù)化設(shè)計也因此實現(xiàn)。設(shè)計人員在實際設(shè)計過程中可以指定這些具有工程意義的參數(shù)。
特征接口分為兩個部分,即一個唯一的ID 和一組符號參數(shù)。這些參數(shù)共分三個訪問級別,分別為公開型、保護(hù)型和公開型。
設(shè)計參數(shù)分為兩種,即獨立參數(shù)、依賴參數(shù)。所謂的獨立參數(shù)是指那些一直通過外部供給的值。那些在UDF 中被其它實體約束的值就是依賴參數(shù)。在接口中,我們只定義獨立參數(shù)就可以。
圖2 法蘭盤
5.UDF 定義實例
本文所提出的UDF 的定義方法,現(xiàn)以法蘭盤類(圖2)的定義過程進(jìn)行說明。定義步驟如下:
(1)特征形狀的定義
1)選取形狀特征。選用孔兩個:中心孔circumHole,圓柱體一個:cylinderl,圓周孔circumHole。
2)幾何約束的定義。centerHole 與cylinderl 之間有一個同軸約束和兩個共面約束。
cstrCoaxiall(cylinderl.top,centerHole.top)
cstrCoplanar1(cylinderl.top,centerHole.top)
cstrCoplanar2(cylinderl.bottom,centerHole.bottom)
circumHole 與cylinderl 之間有一個軸平行約束和兩個共面約束。
cstrPrarllel1(cylinderl.axile,circumHole.axile)
cstrCoplanar3(cylinderl.top,circumHole.top)
cstrCoplanar4(cylinderl.bottom,circumHole.bottom)
cstrCoaxial2(cylinder.axile,arr.axile)
(2)特征屬性的定義
名稱:name=faLan
特征類型:加特征natre=1
尺寸屬性:
外半徑outerRadius=cylinder1.radius
內(nèi)半徑innerRadius=cylinder1.radius
圓周上孔半徑holeRadius=circumHole.radius
圓周上孔到法蘭中心的距離dist
厚度thickness=cylinder.height
約束屬性:孔個數(shù)holeCount。
拓?fù)涿鎸傩裕?/p>
頂面top={cylinderl.top-centerHole.top-circumHole.top}
外側(cè)面outerSide={cylinder1.side}
內(nèi)側(cè)面i inneSide={centerHole.side+circumHole.side}
底面bottom={cylinder.bottom-centerHole.bottom-circumHole.bottom}
(3)特征約束的定義
代數(shù)約束:centerHole 的半徑大于0,cylinderl 的半徑大于centerHole 的半徑,dist 減circumHoled 的半徑大于centerHole 的半徑,dist 加circumHole 的半徑小于cylinderl 的半徑。
cstrOver1(centerHole.radius,0)
cstrOver2(cylinder1.radius,cylinder2.radius)
cstrOver3(dist-circumHoled.radius,certerHole.radius)
cstrOver4(cylinder.radius,dist+circumHoled.radius)
拓?fù)浼s束:
cstrOnBoumdery(top,1)
cstrOnBoumdery(outerSide,1)
cstrOnBoundery(innerSide,1)
cstrOnBoundery(bottom,1)
cstrAttachl(top,topFace)
cstrAttach2(cylinder1.frontplane,frontFace)
cstrAttach3(cyliner1.rightPlane,rightFace)
(4)特征接口的定義
尺寸參數(shù):outerRadius,innerRadius,holeRadius,dist,thickness
定位和定向參數(shù):topFace,frontFace,rightFace
約束參數(shù):holeCount。
法蘭盤類的用戶定義界面如圖3 所示:
圖3 法蘭盤類的用戶定義界面
在傳統(tǒng)使用的CAD 系統(tǒng)中,每一個樹形結(jié)構(gòu)中的一個結(jié)點只有一個父結(jié)點,所以結(jié)點無法實現(xiàn)共享,從而導(dǎo)致UDF 分類模型也無法實現(xiàn)共享。而實際的UDF 分類結(jié)構(gòu)只是與樹形結(jié)構(gòu)的DAG 相似,UDF 文件可以在DAG 中以多個分類的公共子結(jié)點存在,這樣就使UDF 文件的共享成為了可能。
1.基于DAG 的UDF 分類模型
支持UDF共享的分類關(guān)系是一個類似樹形結(jié)構(gòu)的DAG,為了真正實現(xiàn)對UDF的分類和共享,本文引出了基于DAG 的UDF 分類模型(圖4)。
圖4 基于DAG 的UDF 分類模型
圖5 基于DAG 的UDF 分類模型實例
可用DAG 圖表示UDF 分類模型,其中:
(1)r 是根結(jié)點,根節(jié)點只有一個,我們用它表示UDF 庫的根分類。
(2)V 是結(jié)點的集合,即:分類結(jié)點、UDF 結(jié)點、UDF 鏈接結(jié)點和UDF 文件結(jié)點。
(3)E 是有向邊的集合,共有五類有向邊。
(4)C 是約束條件的集合,它包括五類約束:一個分類結(jié)點不能屬于多個分類結(jié)點、分類結(jié)點之間不能直接或間接相互從屬、一個UDF 結(jié)點不能屬于多個分類結(jié)點、一個UDF 結(jié)點只能有一條到UDF 鏈接結(jié)點的有向邊和一個UDF 鏈接結(jié)點只能有一條到UDF 文件結(jié)點的有向邊。
由于DAG 中結(jié)點和有向邊的用途存和功能都有所不同,所以在基于DAG 的UDF 分類模型中,我們可以把模型進(jìn)行分類,分成根、映射和文件三個層次(見圖4)。分類層由三類節(jié)點和四類有向邊構(gòu)成,我們是通過樹形結(jié)構(gòu)最終實現(xiàn)對UDF 的分類的;通過映射層來連接分類層和文件層,從而實現(xiàn)UDF 鏈接到文件的映射,同時我們利用UDF 鏈接結(jié)點最終實現(xiàn)對其鏈接結(jié)點的共享,最后間接完成了對UDF 文件的共享;我們將所有物理UDF 文件都存儲在文件層。基于DAG 的UDF 分類模型既有樹形結(jié)構(gòu)的優(yōu)勢又同時具備無環(huán)圖的優(yōu)點,這就使得有效對UDF 的分類和共享成為可能。圖5 所示的是一個基于DAG 的UDF 分類模型的實例,UDF 庫是DAG 的根結(jié)點,它由鉆模庫和標(biāo)準(zhǔn)件庫兩個分類節(jié)點構(gòu)成,其中鉆模庫中有兩個節(jié)點,即叉形頁根和定位銷,其中叉形頁根我們把它映射到1 號UDF鏈接結(jié)點;定位銷和標(biāo)準(zhǔn)件庫中的銷共同映射到2號UDF 鏈接結(jié)點,而2 號鏈接結(jié)點我們又把它映射到另外一個銷文件,這樣兩個庫中的不同銷雖然名稱不同卻共享了同一個銷文件。
2.UDF 分類模型的建立過程
如圖6 所示,在UDF 分類模型建立過程中,我們順序的向模型中添加結(jié)點和有向邊,同時所有UDF 也被添加到UDF 庫中,UDF 入庫具體步驟如下:
(1)首先,通過文件編號、文件名稱或文件路徑等信息在映射層查找UDF 鏈接信息,如果能查找到,則跳轉(zhuǎn)到步驟5,否則進(jìn)入下一步。
(2)在操作系統(tǒng)目錄中,我們通過文件名稱或文件路徑查找UDF 文件類信息,如果能查找到文件,則跳轉(zhuǎn)到步驟4,否則進(jìn)入下一步。
(3)利用UDF 創(chuàng)建功能我們創(chuàng)建UDF 類文件,從而形成了UDF 文件結(jié)點。
(4)UDF類的注冊過程中,將UDF 類文件生成一個編號,同時將共享計數(shù)和文件路徑等有用信息記錄下來。注冊成功后UDF 鏈接結(jié)點和從鏈接結(jié)點到結(jié)點的有向邊也同時產(chǎn)生。
(5)在分類層我們通過名稱來查找UDF 所屬分類,如果能查找到,則跳轉(zhuǎn)到步驟7,否則進(jìn)入下一步。
(6)利用分類名稱首先形成分類結(jié)點,然后利用父結(jié)點類型之間存在的差異產(chǎn)生兩種有向邊,即從根結(jié)點到分類結(jié)點的有向邊或兩分類結(jié)點之間的有向邊。
(7)在添加UDF 過程中,我們把它的別名和它所對應(yīng)的文件編號記錄下來,同時它所對應(yīng)的共享計數(shù)被加1,最后,我們把UDF 添加到它所在的分類中。
圖6 UDF 入庫流程圖
為了解決目前CAD 系統(tǒng)中UDF 定義和分類中存在的問題,本文提出了一種快速定義UDF 的過程性方法,通過詳細(xì)分析UDF 的組成,通過四個步驟對UDF 類進(jìn)行定義。定義過程中,文章詳細(xì)說明了每一步中定義的內(nèi)容,從而大大提升了UDF 設(shè)計效率。另外,為了解決UDF 分類不支持特征類共享的問題,文章又提出了基于有向無環(huán)圖的UDF分類模型,利用該模型的樹形結(jié)構(gòu)實現(xiàn)對UDF的分類的同時也實現(xiàn)了對UDF的共享,最后給出了UDF 分類模型的建立過程。
[1]Bronsvoort WF,Bidarra R,and Nyirenda PJ,Developments in feature modeling[J].Computer-Aided Design and Applications,2006,3(5):655-664.
[2]Rafael Bidarra,Alex Noort,Advanced Direct Manipulation of Feature Models[C],Proceedings of the 2nd International Conference on Computer Graphics Theory and Applications–GRAPP 07,2007,8-11 March,Barcelona,Spain.
[3]Daniel Louren?o,Pedro Oliveira,Alex Noort,and Rafael Bidarra.Constraint solving for direct manipulation of features[J],Journal of Artificial Intelligence for Engineering Design,Analysis and Manufacturing,2006,20(4):369-382.