張衛(wèi)國 王雅光 羅年猛
華中科技大學國家CAD支撐軟件工程技術研究中心,武漢,430074
CAD圖紙多明細表功能的研究與實現(xiàn)
張衛(wèi)國 王雅光 羅年猛
華中科技大學國家CAD支撐軟件工程技術研究中心,武漢,430074
提出了一種適用于二維CAD軟件的多明細表實現(xiàn)方案,該方案具有在一張CAD圖紙中繪制多張裝配圖且每張裝配圖具有獨立的明細表功能。采用“觀察者-目標”模式對各明細表相關對象進行組織,實現(xiàn)零部件信息與具體圖形表達的分離,減少了數(shù)據(jù)冗余,降低了對象耦合度,簡化了數(shù)據(jù)的組織與提取,同時支持明細表的智能化修改和更新。實際應用表明,該方案提高了工程人員的設計效率,減少了錯誤的發(fā)生。
二維CAD;裝配圖設計;多明細表;BOM
明細表是裝配圖的重要組成部分。裝配圖中,明細表與零件標簽(也稱標簽、件號、指引線等)協(xié)同工作,可以標記出組成裝配體的各個零部件的具體信息[1]。同時,明細表也是報表統(tǒng)計、BOM(bill of material)匯總輸出等工作的基本依據(jù)。
傳統(tǒng)情況下,一張CAD圖紙(即CAD軟件保存的圖紙格式,如AutoCAD的DWG文件等)中僅僅繪制一個零件(或者一張裝配圖)。隨著二維CAD軟件的圖形處理能力日益增強,越來越多的企業(yè)傾向于在一張CAD圖紙中表達較多的信息。特別是在建筑等行業(yè),一張CAD圖中往往繪制了多張圖紙,它們之間相互參照,可以更好地表達出一個復雜的模型。機械行業(yè)也逐漸出現(xiàn)在一張CAD圖紙中繪制多張零件圖,甚至多張裝配圖的需求。
但是,當前的CAD系統(tǒng)大都只支持在一張CAD圖紙中繪制至多一張裝配圖。這是因為:一般情況下,每張裝配圖都有自己獨立的明細表,在出現(xiàn)多張裝配圖的情況下,多個明細表維護起來較為復雜,數(shù)據(jù)的集成和提取也較為困難。同時,在使用二維CAD軟件進行裝配體設計的過程中,明細表的填寫與修改也是重復性高、易于出錯的地方。
目前,CAD軟件明細表功能的實現(xiàn)方式一般可以分為以下兩大類:
(1)零件標簽、明細表作為純粹的圖形而存在,二者之間不存在關聯(lián)關系,最多僅保證在創(chuàng)建零件標簽的同時,明細表中也添加一條對應信息[2-3]。該方案屬于比較初級的實現(xiàn)方式,必須手工維護標簽和明細表之間的對應關系,不僅繪圖效率低,而且容易出錯。單一明細表環(huán)境下,該方案的功能已經(jīng)較弱,更談不上對多明細表的支持。
(2)將圖紙中的每個零部件當作一個整體的對象來進行處理,所有零件信息均作為擴展屬性與圖紙中對應的圖元綁定,將圖紙中所有圖元的擴展信息匯總后生成明細表[4]。該方案中,零件信息的正確性與唯一性得到了保證,零件信息的修改較為方便,但是該方案也存在如下缺點:①某一零部件一般都是由多個直線、圓弧、樣條曲線等簡單圖形組合而成,因此,必須將這些圖元組織成一個整體的對象才能進行信息填寫。如果將這些圖元全部組合成為圖塊,會導致圖紙的修改較為復雜。如果將零件信息記錄于零件的每一個圖形之上,則會增加數(shù)據(jù)冗余,導致零件信息更新困難。②在多明細表環(huán)境下,必須指定圖元上的零件屬于哪一個裝配圖,才能對零部件信息進行正確的統(tǒng)計。③將零件信息分散記錄在具體的圖形中,也會造成BOM數(shù)據(jù)的集成與提取的困難。
針對上述問題,筆者提出了一種新的多明細表實現(xiàn)方案,不僅較好地解決了多明細表實現(xiàn)與維護的復雜性問題,簡化了BOM信息的組織與提取,而且在明細表數(shù)據(jù)的修改更新方面,也具有較高的靈活性。該方案的總體實現(xiàn)框架如圖1所示(為簡化問題,僅以兩個裝配圖為例進行介紹,同時略去裝配圖b中的部分關聯(lián)關系表述)。
圖1 多明細表實現(xiàn)框架
具體實現(xiàn)方案如下:
(1)在一張CAD圖紙中,允許存在多張裝配圖,每張裝配圖可以有自己獨立的標簽和明細表。
(2)每一張裝配圖由裝配體圖形、裝配圖圖框、BOM 表、明細表、零件標簽五部分組成,后四者是實現(xiàn)明細表功能的主要對象。每張裝配圖中,圖框、BOM 表有且僅有一個,明細表至多存在一個,零件標簽可以有任意多個。BOM表作為一個數(shù)據(jù)載體而存在,不在圖紙中反映出來。其他三種實體,均以圖形的形式呈現(xiàn)在圖紙上。
(3)在一張裝配圖中,采用“觀察者-目標”模式[5]對BOM 表、零件標簽、明細表進行組織(圖2)。所謂“觀察者-目標”模式,就是定義一種一對多的依賴關系,當目標對象的狀態(tài)發(fā)生改變時,所有依賴于它的觀察者都得到通知并被自動更新。具體的實現(xiàn)方案是:BOM 表作為“目標”,以零件序號值為索引,對其所對應的裝配圖中的所有零部件的信息進行記錄。零件標簽記錄其所指向的零部件的序號,明細表記錄其所關聯(lián)的BOM表句柄,它們作為要在圖紙中顯示的圖形實體,自身并不記錄任何零件信息,而是以“觀察者”的身份從BOM表中獲取零件信息,并根據(jù)需要在圖紙上顯示。
圖2 采用“觀察者-目標”模式組織關聯(lián)關系
(4)BOM表以一個擴展數(shù)據(jù)的形式寄生于裝配圖圖框之上。在一張裝配圖中,圖框所包圍的范圍確定了BOM表的作用范圍。某個零件標簽屬于哪一張裝配圖,對應哪個BOM 表,是由該標簽指引線基點坐標處于哪個圖框的包容范圍所決定的。BOM表中也記錄其關聯(lián)的明細表的句柄,從而實現(xiàn)明細表與BOM表之間的雙向關聯(lián)。
(5)BOM注冊表作為一個全圖紙范圍內的單一數(shù)據(jù)對象,對整張圖紙中的裝配圖圖框進行記錄。通過它可以獲取包容某一區(qū)域的圖框及其所承載的BOM表。
上述解決方案具有以下特點:①采用“觀察者-目標”模式實現(xiàn)了數(shù)據(jù)表達與顯示內容的分離,降低了各實體之間的耦合度,減少了數(shù)據(jù)冗余;②通過幾何位置確定零件標簽與BOM表之間的關聯(lián)關系,避免了復雜的一對多雙向關聯(lián)關系的維護;③隔離了各明細表相關對象與具體的裝配體圖形之間的關系,簡化了零部件信息的更新;④零部件信息集中保存,便于BOM 信息的組織、修改與提取。整個框架具有較大的彈性,可擴充性較強。除了對多明細表的支持之外,針對當前企業(yè)的各種不同的定制需求,上述方案也對以下幾個問題給出了較好的解決辦法。
(1)智能化修改更新,即在對零件標簽(或BOM表內容)進行修改時(包括添加、插入新零件信息,修改現(xiàn)有零件序號或者其他信息等),及時更新相關的明細表和零件標簽的顯示信息,并且時刻保證指引標簽與明細表對應關系正確。
(2)零件標簽上可以表達一些必要的零件信息(如零件名稱、代號、數(shù)量等),同時保證在任何情況下,其上所表達的零件信息與明細表中顯示的信息完全一致。
(3)支持多個零件標簽共享同一個序號、對應明細表中同一條信息的情況,并保證在零件序號或者信息變動時對應的所有標簽全部更新。
(4)支持零件信息的自由化顯示。如某些零件(如標準件)的信息僅在零件標簽中顯示,無需在明細表中出現(xiàn)。
多明細表實現(xiàn)方案中,BOM表是唯一的零件信息載體,零件標簽和明細表屬于具體的圖形表現(xiàn),這三個對象之間的“觀察者-目標”關聯(lián)關系實現(xiàn)是整個方案的核心。標簽和明細表作為具體的圖形,還必須支持一些通用的圖形編輯操作,而這些操作在某些情況下也會對BOM表中的數(shù)據(jù)造成影響,如圖3所示。同時,在對BOM 進行編輯時,零部件信息的更新過程,也是多明細表實現(xiàn)方案中的技術關鍵。
圖3 一張裝配圖中各對象關聯(lián)關系的實現(xiàn)方式
對于僅支持單明細表的CAD系統(tǒng),可以將BOM表作為一個全局的對象記錄在圖紙中,所有的零件標簽均對應同一個BOM表。但是在多明細表環(huán)境下,情況將變得復雜。零件標簽必須要知道自己對應的是哪一個BOM表,才能進行正確的顯示。BOM表必須知道自己與哪些零件標簽關聯(lián),才能正確地實現(xiàn)更新。
一般情況下,一張裝配圖中所有的圖元都處于該裝配圖圖框的包容范圍之內。因此,位于同一個圖框內的所有標簽,一般都是對應的同一個BOM表。我們可以利用這一特性來建立零件標簽與BOM 表之間的關聯(lián)關系,具體的方案是:作為所有零部件信息載體的BOM表寄生于裝配圖圖框而存在(作為圖框的擴展數(shù)據(jù))。同時以一個全圖紙范圍內的變量(BOM注冊表)來記錄圖紙中所有的圖框。當零件標簽需要從BOM表中獲取具體的零件信息時:①獲取全局的BOM注冊表;②根據(jù)其自身的位置,在BOM注冊表中找到包容其自身的裝配圖圖框;③找到對應圖框所承載的BOM表并進行查詢。當BOM表需要更新其對應的零件標簽時,亦只需通過對其所寄生的裝配圖圖框范圍內的圖元進行搜索,獲取圖框范圍內的所有標簽。這樣,實際上就通過零件標簽和裝配圖圖框之間的幾何關系,確定了零件標簽與BOM表之間的雙向關聯(lián)關系。
明細表是BOM表的圖形化表達,BOM表中的零部件信息通過明細表最終呈現(xiàn)在圖紙上,二者是一對一的關聯(lián)關系,這種關聯(lián)關系通過相互記錄對方句柄來實現(xiàn)。為了保證整體數(shù)據(jù)的唯一性,同時避免數(shù)據(jù)冗余,明細表中不記錄零部件相關的信息,僅記錄明細表的具體幾何信息(包括明細表折返信息、各折返塊的坐標等),并在圖紙中合適的位置進行顯示。
在多明細表的實現(xiàn)方案中,零件標簽、明細表以及裝配圖圖框是作為具體的圖形而存在的。因此這些對象必須支持圖形數(shù)據(jù)通用的刪除、移動等操作。但是,這些操作可能會導致BOM數(shù)據(jù)或者圖形顯示內容的更新。具體包括:
(1)某一零件標簽被刪除,可以被認為是在BOM表中刪除這一零件標簽所指引的零件。
(2)當某一零件標簽從裝配圖a中被移動到同一張CAD圖紙中的裝配圖b中時,必須對標簽的顯示信息進行更新。具體包括:①如果該標簽需要顯示零件的細節(jié)信息,則其必須從裝配圖b所對應的BOM表中查詢零件信息并重新顯示;②如果該標簽中包含了裝配圖b中并不存在的零件序號,則應及時將該序號刪除,以免造成混亂。
(3)如果某一裝配圖圖框被刪除,則該裝配圖中的所有明細表相關便不再有效,應當將關聯(lián)該裝配圖BOM表的所有零件標簽、明細表一并刪除。
為了保證CAD系統(tǒng)各種一般操作(刪除、移動等)的通用化,不應當針對上述各圖形對象而引入新的命令,此時,系統(tǒng)應當在這些操作進行之時,悄無聲息地實現(xiàn)BOM表信息以及相關對象顯示內容的更新。在明細表的實現(xiàn)方案中,這些更新操作主要是基于“觸發(fā)器”實現(xiàn)的。
應用程序中,觸發(fā)器是個特殊的消息機制,它的執(zhí)行不是由程序調用的,也不是手工啟動的,而是由事件來觸發(fā)的。當應用程序啟動時,或者特定的模塊被加載時,觸發(fā)器被注入到CAD系統(tǒng)之中,響應特定的消息事件。當這些特定的消息事件發(fā)生后,CAD系統(tǒng)便會根據(jù)所注入的觸發(fā)器,調用相應的函數(shù)來實現(xiàn)一些特定的操作。
多明細表實現(xiàn)方案要求CAD平臺提供一些必要的觸發(fā)器功能,來實現(xiàn)各個對象的協(xié)同更新。具體包括:
(1)對象觸發(fā)器。當特定的圖元對象添加到圖紙空間、從圖紙空間刪除或者被修改時,對象觸發(fā)器可以捕捉到這一消息并進行處理。
(2)命令觸發(fā)器。通過觸發(fā)器捕捉到特定命令的開始、結束以及取消的消息(如刪除、移動等)。
下面以刪除某一零件標簽為例,闡述基于觸發(fā)器的更新機制(為簡化問題,假設該標簽中僅記錄了一個序號)。
(1)用戶手動刪除了某一零件標簽,設其為Label。
(2)在Label真正被刪除之前,事先注入的對象觸發(fā)器捕捉到Label即將被刪除的消息,調用預先設置的回調函數(shù),并將Label作為參數(shù)傳遞進來。
(3)獲取Label中記錄的序號值Order,同時根據(jù) Label的基點坐標,找到其對應的 BOM表。
(4)在BOM表中刪除Order所對應的零件信息,同時完成其他更新操作。
零件序號是連接零件標簽、BOM表、明細表三者之間的紐帶。一般情況下,每一種零件都需要一個獨立的正數(shù)零件標簽,因此,在 BOM表中,我們可以用零件序號作為鍵,零件信息作為值,來組織零件信息。但是,上文提到,有的企業(yè)有一種較為特殊的需求:“某些零件(如標準件)不需要在明細表中做零件信息記錄,只需在零件標簽上顯示其全部信息即可”。為了滿足企業(yè)的這種需求,采用下述方式來組織零件序號(其中,INT_M IN和INT_M AX分別為計算機可以表達的最小和最大整數(shù))。
(1)序號區(qū)間[INT_M IN,0):如果某一零件只在零件標簽上標注,不在明細表中添加記錄,則其序號位于該區(qū)間內。該序號值由系統(tǒng)進行分配與管理,用戶不可見(BOM信息界面顯示為0),也無法修改。
(2)序號值0:該序號值僅用于零件信息輸入,BOM表中禁止出現(xiàn)序號為0的零件。
(3)序號區(qū)間[1,INT_MAX):一般情況下的序號。所有正數(shù)序號均在明細表中被顯示。
BOM信息的生成,一般通過如下兩種方案來實現(xiàn):①在創(chuàng)建零件標簽的同時,填寫標簽指向零件的信息;②直接在BOM表中添加新的零件信息。在對某一個標簽或者BOM表進行編輯時,會涉及零件序號的變更,包括添加新序號、插入新序號、修改現(xiàn)有序號、刪除某一序號等。定義數(shù)據(jù)結構EditIn fo,對BOM信息生成和編輯過程中的操作進行記錄,并通過對該數(shù)據(jù)的解析,保證修改完成后零件標簽和明細表之間依然維持正確的映射關系:
其中,Item為編輯完成后某一條零件的信息;O O為某個零件在編輯之前的序號值(OrderOld);PartIn fo為經(jīng)過編輯之后的零件信息;OE為編輯過程中被刪除掉的零件在編輯之前的序號(OrderErased);SI和SE分別為 Item和OE的集合。
對于每一個 Item,其 OrderOld和OrderNew之間的組合形式只可能出現(xiàn)6種情況,意義分別如下:
(1)O O=0,O N=0:添加新的,只在零件標簽中顯示的零件,系統(tǒng)將自動為該零件分配一個負數(shù)的零件序號。其中,O N為某個零件在經(jīng)過編輯之后的序號值(OrderNew)。
(2)OO=0,ON>0:添加新的,需要在明細表中顯示的零件。
(3)OO>0,ON>0:如果原序號與新序號相同,表明沒有對序號進行修改,只是簡單地更新零件信息;否則,表示對某一需要在明細表中顯示的零件的序號進行修改。
(4)O O>0,O N=0:某一序號原來是需要在明細表中顯示的,現(xiàn)在令其只在零件標簽中顯示,系統(tǒng)將自動為該零件分配一個負數(shù)的零件序號。
(5)OO<0,ON=0:該序號對應的零件只在零件標簽中顯示,同時,編輯過程中沒有對該零件的序號進行修改。
(6)OO<0,ON>0:某一序號原來只在零件標簽中顯示,現(xiàn)在讓其也在明細表中顯示。
通過如下算法,來對BOM表的信息以及零件標簽和明細表的顯示內容進行更新。
基于 AutoCAD平臺,利用VC++以及Ob jectARX實現(xiàn)了本文所論述的多明細表的建立,并采用此方法完成了與標準件庫與PDM系統(tǒng)的完全集成。
如圖4所示,在一張CAD圖紙中繪制了兩張裝配圖,每張裝配圖均有自己獨立的明細表和標簽。在對裝配圖a進行件號標注、BOM信息修改、零件標簽刪除等操作時,裝配圖b不會受到任何影響,也不需要特殊的指令來標記當前是對圖a而不是圖b進行操作。對裝配圖b也有相同的特性。
在裝配圖b中,如上文所描述的,所有的標準件均未在明細表中給出,而是直接在零件標簽中標明其全部信息,其線上文字的顯示格式為“數(shù)量-名稱”,線下顯示內容為零件的國標代號。如圖5所示,這些零件的信息依然記錄在BOM表中,其真實的序號值為一個負數(shù),但是以數(shù)值“0”展示給用戶。如果在BOM表中對這些零件的信息進行修改,那么修改完成后,零件標簽的顯示內容也會相應改變。
在對BOM信息的修改方面,實現(xiàn)了操作的智能化。例如,圖4中的兩張裝配圖中存在以下幾個問題需要修改:①裝配圖a漏標了鉆套;②裝配圖b中,M 8螺母的數(shù)量應該為 3而不是2;③裝配圖b中因為某些原因,需要刪除對5號零件的標注。對這些問題進行修正后,結果如圖6所示。特別標記了改變的部分:①在裝配圖a中新建零件標簽,指向鉆套,并設定其零件序號為4。添加標簽完成后,原有的4、5、6號零件將依次順延成為5、6、7號零件,并立即引發(fā)圖形顯示的變更。②在裝配圖b的BOM表編輯界面(圖5)中修改M 8螺母數(shù)量為3,或者雙擊對應的零件標簽進行信息修改。修改完成后,標簽顯示信息會立即更新。③在裝配圖b中直接選中標簽5并刪除。原有的6、7號零件將自動遞補為5、6號,并保證零件標簽與明細表中的信息一致。
圖4 在一張CAD圖紙中繪制兩張裝配圖的實例
圖5 裝配圖b(圖4b)對應的BOM表信息
其他方面,多明細表實現(xiàn)方案還支持零件標簽或者整體裝配圖的復制粘貼。同時,在充分挖掘現(xiàn)有實現(xiàn)框架潛力的基礎上,還提供了引用標簽、依照標簽位置重排序號等擴展功能。
[1] GB/T 4457.4-2002機械制圖圖樣畫法圖線[S].北京:中國標準出版社,2005.
[2] 張靜,齊學義,侯祎華,等.AutoCAD中裝配圖明細表的自動填寫[J].排灌機械,2006(8):37-39.
[3] 徐金娟,沈精虎.基于AutoCAD的裝配圖明細表自動生成系統(tǒng)開發(fā)[J].青島大學學報(工程技術版),2009(2):24-28.
[4] AutoCAD Mechanical 2010產(chǎn)品說明書[EB/OL].http://www.autodesk.com.cn/adsk/serv let/index?id=9460102&siteID=1170359.
[5] Erich G,Richard Helm,Ralph J,et al.Design Patterns:Elements of Reusable Object-Oriented software[M].李英軍,馬曉星,蔡敏,等譯.北京:機械工業(yè)出版社,2007.
Research and Implementation of Multip le Parts List for Assembly Drawings in CAD
Zhang Weiguo Wang Yaguang Luo Nianmeng
National CAD Support Software Engineering Research Center,Huazhong University of Science and Technology,Wuhan,430074
A solution which supported mu ltiple parts lists for two-dim ensional CAD software was p resent.In the solution,mu ltip leassemb ly d raw ingsw ere supported in a CAD d raw ing,and each of them had independent parts list.W ith organizing the parts list related objects by“observersubject”mode,the parts information and the graphic com ponents were separated,data redundancy and object coupling were reduced,and the organization and retrieval of datawere simp lified.A t the sam e time,intelligentm odification and data updatewere supported.The app lications show that the design efficiency for assem b ly body is im p roved by the solution,and the incidence of errors is reduced.
2D-CAD;assem bly draw ing design;multiple parts list;BOM(bill ofmaterial)
TP391.72
1004—132X(2011)12—1459—07
2010—07—07
圖6 對圖4中兩張裝配圖進行修改后的結果
(編輯 王艷麗)
張衛(wèi)國,男,1 9 5 7年生。華中科技大學機械科學與工程學院教授。主要研究方向為機械設計及理論。發(fā)表論文2 0余篇。王雅光,男,1 9 8 7年生。華中科技大學機械科學與工程學院碩士研究生。羅年猛,男,1 9 7 2年生。華中科技大學機械科學與工程學院副教授。