李 銳,李文強,漆小華,王 萌,宋悅剛,劉 漾
(1.四川大學機械工程學院,四川成都610065;2.四川大學創新方法與創新設計四川省重點實驗室,四川成都610065;3.中國電子科技集團公司第二十九研究所,四川成都610036)
CAD(computer aided design,計算機輔助設計)圖紙中不僅含有產品的幾何圖形信息,如零件圖、裝配圖等,還含有文本信息,如標題欄、明細表等。對于不同類型的CAD圖紙,幾何圖形信息和文本信息的占比是不同的。對于傳統的機械建筑類圖紙來說,幾何圖形信息是圖紙中的主要部分,文本信息較少;但對于某些文本圖紙,其信息幾乎由文字組成,如連接器電路圖,圖中清楚地標注了連接器名稱,母板連接器名稱,母板用物資代碼,各個腔口名稱及相應腔口中連接器的端子、特性和去向等信息。
為了提高文本圖紙的生成效率,利用自動生成系統讀取待生成原文件中的文本信息并在AutoCAD軟件中自動生成文本圖紙已成為一種發展趨勢。目前,該方法在實際生產中得到了越來越廣泛的應用。根據待生成原文件中文本信息的不同屬性,自動生成系統會自動生成一張或多張CAD圖紙[1‐5]。為保證自動生成的CAD圖紙的文本信息與原文件一致,須對其文本信息進行提取并與原文件文本信息進行匹配和校核。ObjectARX是AutoCAD軟件的二次開發工具,利用其單行文本類中的contents函數和多行文本類中的strings函數可分別讀取通過塊表記錄迭代器遍歷CAD圖紙獲得的單行文本和多行文本[6‐10]。然而,由于塊表記錄迭代器是按照文本信息寫入順序的逆序進行遍歷的,并非按照CAD圖紙中文本信息的位置進行遍歷,使得提取到的文本信息是混亂無序的。此外,現有CAD圖紙文本信息自動提取方法僅針對單張圖紙,而對于多張CAD圖紙,利用該方法提取到的文本信息混雜在一起,無法辨識其所屬圖紙。因此,針對自動生成的多張CAD圖紙,對其文本信息進行有序提取和校核具有重要意義。
目前,國內外學者針對CAD圖紙文本信息的提取已做了很多研究。Lu等基于對CAD圖紙中“文本”和“圖形”幾何特征的分析,提出了文本字符串提取的概念,即從混合文本信息和圖形的CAD圖紙中去除非文本元素,而不是直接從CAD圖紙中提取文本信息[11]。Chai等通過分離CAD圖紙中的文本框與周圍圖形來識別和提取文本信息[12]。何改云等通過用戶交互函數手動地選取CAD圖紙中明細表的2個頂點,或在AutoCAD軟件的命令行中直接輸入2個頂點的坐標來構建窗口選擇集,提取CAD圖紙中所有的文本信息[13]。袁瓊通過將CAD圖紙中的每個明細表定義成一個屬性塊,并根據坐標依次遍歷各屬性塊實現了CAD圖紙明細表中文本信息的提取[14]。顏立坤等通過手動選取CAD圖紙中明細表的坐標范圍,先獲取該范圍內所有文本的坐標,然后采用冒泡法對這些坐標進行排序,確定其在明細表中的位置,從而實現CAD圖紙文本信息的提取[15]。黃靖根據手動獲取的明細表對角線上2個點的位置信息來構建窗口選擇集,然后對選擇集內的文本信息進行操作,從而獲得了明細表中的文本及其位置信息[16]。張良棟等通過建立屬性塊來實現對CAD圖紙中明細表信息的提取[17]。龔雄等通過遍歷CAD圖紙來搜索水平垂直線條和文字,并定義了2個分別記錄線條端點坐標和文字字串及其坐標的結構數組,根據線條端點橫、縱坐標的最小值和最大值確定了CAD圖圖框的坐標范圍,然后依次提取圖框范圍內的文本信息[18]。
雖然上述方法可對CAD圖紙的文本信息進行有效提取,但存在以下2點不足:一是現有圖紙文本信息提取方法只能對單張CAD圖紙進行提取,無法同時提取多張CAD圖紙的文本信息;二是現有圖紙文本信息提取方法僅能提取CAD圖紙中位置固定的文本信息,無法對多張CAD圖紙中位置不確定且類型多樣的文本信息進行并行提取。基于上述不足,筆者提出了一種面向多張CAD圖紙的文本信息自動提取方法,以實現對多張CAD圖紙中多種類型文本信息的有效提取。同時,基于提出的方法開發了面向多張CAD圖紙的文本信息自動提取與校核系統。
為實現對多張CAD圖紙文本信息的自動提取,需解決2個方面的問題。一是當對單張CAD圖紙的文本信息進行提取時,由于所有文本信息都位于一張圖紙中,不存在不同圖紙之間文本信息相互干擾的問題,可直接對整張CAD圖紙中的文本屬性塊進行遍歷,然后分別提取屬性塊中的文本信息。但對于多張CAD圖紙而言,為了準確提取每張CAD圖紙的文本信息,需先確定每張CAD圖紙的位置,然后分別提取屬于不同CAD圖紙的文本信息。二是當僅對CAD圖紙中標題欄或明細表中的文本信息進行提取時,由于標題欄和明細表的位置都相對固定,且其文本信息都屬于同一種類型,可直接利用窗口選擇集對CAD圖紙中選定范圍內的文本信息進行遍歷,并根據其坐標進行提取。但在提取多張CAD圖紙中位置不固定且類型多樣的文本信息時,為了準確提取不同位置處不同類型的文本信息,需對多張CAD圖紙進行遍歷并對各位置處不同類型的文本信息進行分類提取。基于此,提出面向多張CAD圖紙的文本信息自動提取方法,其主要包括以下3個部分。
1)確定每張CAD圖紙的位置。
CAD圖紙自動生成系統可生成具有塊屬性的CAD圖紙。將不同規格的圖紙(A0、A1、A2、A3和A4紙)做成相應的屬性塊(即圖紙塊),通過直接調用或插入來生成多張CAD圖紙。采用ObjectARX中的塊表記錄迭代器對自動生成的每張CAD圖紙中的線段、圖形和屬性塊等實體進行逐個遍歷,利用實體類中的isA()函數篩選得到屬性塊,并利用塊表記錄類中的getName()函數獲取屬性塊的名稱,將遍歷得到的屬性塊與所調用圖紙塊進行對比,從而依次找出所有圖紙塊,確定CAD圖紙的數量,并根據圖紙塊對應的圖紙幅面,結合圖紙塊插入點的坐標確定其位置,從而將多張圖紙文本信息的提取轉換為單張圖紙文本信息的提取,避免了不同圖紙文本信息之間的相互干擾。
2)提取多張CAD圖紙的文本信息。
在CAD圖紙自動生成系統通過讀取原文件中產品零件信息自動生成的多張CAD圖紙中,文本信息已被分類,具有不同屬性的文本信息以不同類型的矩形框來區分。本文根據矩形框所具有的屬性特點對文本信息進行分類提取。其中,矩形框的構成方式包括多段線和屬性塊兩種。對于由多段線構成的矩形框中的文本信息,利用矩形框的任意2個對角坐標構建窗口選擇集來獲取文本信息,利用容量可動態變化的Vector
基礎病理學教學只針對疾病的普遍特征進行講授,包括疾病的病因、發病機制、病理變化、結局和轉歸,其講授的是疾病的基本特征,屬于非專業性極強的醫學課程,因此契合X型慕課,非職業“精英主義”的原則[4]。
3)自動輸出與校核多張CAD圖紙的文本信息。
由于獲得的文本信息儲存在Vector
與其他文本信息提取方法相比,面向多張CAD圖紙的文本信息自動提取方法具有以下優點:1)能夠自動地識別每張CAD圖紙并進行文本信息提取,即無論是單張或多張CAD圖紙,該方法都適用;2)不僅能對CAD圖紙中位置相對固定的標題欄和明細表中的文本信息進行提取,還能對CAD圖紙中位置不確定的文本信息進行自動識別和提取;3)可基于多段線和屬性塊的特征自動識別CAD圖紙中不同類型的文本信息并進行分類提取和輸出。
基于上述面向多張CAD圖紙的文本信息自動提取方法,建立相應的文本信息自動提取與校核流程(如圖1所示),主要步驟如下。

圖1 面向多張CAD圖紙的文本信息自動提取與校核流程Fig.1 Automatic extraction and verification process of text information for multiple CAD drawings
1)利用ObjectARX中的塊表記錄迭代器對多張CAD圖紙進行遍歷,依次獲得所有圖紙塊。
2)將獲得的圖紙塊的插入點坐標分別輸入到Vector
3)排序完成后,根據數組中圖紙塊的插入點坐標確定每張CAD圖紙的位置。循環構建窗口選擇集,對每張CAD圖紙文本信息所在的矩形框進行遍歷。
4)將遍歷得到的矩形框按屬性特點進行分類,并根據矩形框在CAD圖紙中的位置,對同類型的矩形框進行排序。
5)排序完成后,根據矩形框的構成方式,采用對應的方法對文本信息進行提取。
6)將提取得到的文本信息輸出到新生成的Excel文件中并與原文件中的文本信息進行匹配和校核。
在Visual Studio 2008平臺上通過二次開發工具ObjectARX 2010開發了一個面向多張CAD圖紙的文本信息自動提取與校核系統,其主要包括以下功能模塊。
1)啟動模塊。傳統的ObjectARX程序是通過在AutoCAD軟件的命令行中手動輸入函數生成的啟動命令來執行相應功能,但這種執行方式要求操作人員清楚地記住各個功能函數的啟動命令,當啟動命令的數量多且較長時,這種執行方式就會變得很麻煩。因此,本文開發的系統通過加載菜單資源的方法創建了快捷菜單的命令執行方式。其中,菜單資源加載函數的代碼如下:

2)文本信息提取模塊。根據屬性塊名稱遍歷得到CAD圖紙中相同類型矩形框的任意2個對角坐標或插入點坐標,并根據該類矩形框在圖紙中的位置對其對角坐標或插入點坐標進行排序,以保證所提取文本信息的準確排列,利用矩形框與文本之間的位置關系構建窗口選擇集或炸開矩形框,以獲取矩形框中的文本信息并存儲到Vector

3)文本信息輸出模塊。利用Excel操作接口,按照1張圖紙對應Excel中1個工作表的原則,將儲存在數組和變量中的文本信息輸出到Excel中。保存在Vector


4)文本信息校核模塊。利用Visual Studio 2008中的可視化技術將提取到的文本信息以窗口形式顯示出來。自定義的用戶交互函數的代碼如下:


利用前期開發的基于Excel文件中文本信息的CAD圖紙自動生成系統,通過讀取Excel文件中的文本信息,在AutoCAD軟件中生成多張連接器電路圖,如圖2所示。利用開發的面向多張CAD圖紙的文本信息自動提取與校核系統對連接器電路圖中的文本信息進行自動提取和校核。

圖2 自動生成的連接器電路圖Fig.2 Automatically generated connector circuit diagram
1)在AutoCAD軟件界面中,先點擊鼠標右鍵彈出快捷菜單,再點擊快捷菜單中的“輸出并校核”選項,啟動文本信息的提取和校核功能。然后,借助視圖調整模塊對用戶窗口進行調整,使得所有電路圖都處于用戶窗口內,保證所提取文本信息的完整性。
2)利用塊表記錄迭代器對所有連接器電路圖進行遍歷,將遍歷得到的圖紙塊名稱及其插入點坐標分別添加到Vector
在圖2所示的連接器電路圖中,文本信息被劃分為3種類型:類型1和類型3對應的矩形框名稱為“zw_table”,類型2對應的矩形框名稱為“zw_rf”,且類型3對應的矩形框被紅色多段線所包圍。首先,分別利用矩形框名稱和紅色多段線創建結果緩沖區鏈表;然后,利用窗口選擇集分別遍歷這3類文本信息所在矩形框的對角坐標和插入點坐標并排序,以保證提取的文本信息的順序;最后,根據矩形框的坐標和尺寸,再次構建窗口選擇集,分別獲取3種文本信息并存儲在Vector
3)利用添加的Excel接口程序及put_item函數將儲存在數組中的文本信息輸出到Excel的工作表中(1張電路圖對應1個工作表),并將工作表名設置為對應連接器的名稱,如圖3所示。

圖3 輸出到Excel工作表中的連接器信息Fig.3 Connector information exported to Excel worksheet
4)文本信息輸出完成后,AutoCAD軟件的界面上會彈出1個文件選擇窗口,用于提醒設計人員選擇自動生成連接器電路圖時所讀取的Excel文件,并與圖3所示的原Excel文件進行匹配和校核;然后,利用內置的可視化技術在AutoCAD軟件界面上生成一個窗口,用于顯示匹配結果。圖4所示為上述連接器電路圖文本信息匹配結果顯示窗口。

圖4 連接器電路圖文本信息匹配結果顯示窗口Fig.4 Display window of text information matching result of connector circuit diagram
針對現有圖紙文本信息提取方法無法自動提取多張圖紙中多種類型文本信息的問題,提出了一種面向多張CAD圖紙的文本信息自動提取方法,并開發了相應的自動提取和校核系統。目前,所開發的系統已成功應用于多張連接器電路圖文本信息的自動提取和校核。此外,該方法還可應用于其他產品CAD圖紙的文本信息提取,具有較好的實用性和廣闊的應用前景。