你當(dāng)前的位置>>主頁>>AutoCAD>>AutoCAD二次開發(fā)
 
                        AutoCAD普通表格轉(zhuǎn)換為表格對象的方法
 

               吳偉中, 賈長學(xué)
       ( 河南工業(yè)大學(xué)機電工程學(xué)院, 鄭州450007)
    
摘要: 表格是A utoC A D 新引入的對象類型, 使繪制和編輯表格變得相當(dāng)簡單。文中介紹了把用直線和文字制成的
“表格”轉(zhuǎn)換成表格對象的原理和方法, 并給出了轉(zhuǎn)換的流程。
    
關(guān)鍵詞: 表格對象; A utoC A D ; 二次開發(fā); A ctiveX 技術(shù)
    表格( Table) 是AutoCAD 自2005 版開始新引入的對象, 給工程圖樣中各類表格的繪制和編輯帶來了極大的方便, 同時表格對象與Excel 工作表的相互轉(zhuǎn)換也相當(dāng)簡單。早期用一般方式繪制的“表格”僅在外觀上和表格對象類似, 但不具備表格對象的特性, 不能用相關(guān)的表格命令修改, 也不能直接輸出到Excel, 而在實際設(shè)計中, 經(jīng)常要在已有圖紙基礎(chǔ)上修改,  由此想到, 若能把普通的“表格”轉(zhuǎn)換為表格對象將給以后的設(shè)計帶來許多便利。
    本文利用AutoCAD 的ActiveX 技術(shù), 用Visual LISP 編程, 實現(xiàn)了將普通"表格"轉(zhuǎn)換為表格對象。
    1. 普通“表格”繪制的方法
    工程圖中m×n 行列型的“表格”較為常見, 如明細欄、材料匯總表等, 這類表格的特點是行、列關(guān)系比較單一,文字的規(guī)律性強。AutoCAD 2005 版之前, 繪制“表格”一般采用以下幾種方法:
  ( 1) 用LINE 或PLINE 繪制表格線框, 然后在線框的單元格內(nèi)填寫單行或多行文字( TEXT 或MTEXT) 形成“表格”;
  ( 2) 用第三方制作的表格專用工具繪制表格;
  ( 3) 在Excel 中處理表格, 再用專門工具轉(zhuǎn)換或直接粘貼到AutoCAD 中。
   以上( 2) 、( 3) 兩種方式因為都要用到專門開發(fā)的表格工具, 繪制的"表格"格式和特性是程序制訂的。第( 1) 種方法較為常用, 為多數(shù)用戶采用, 故此是本文討論的重點。
    2. “表格”轉(zhuǎn)換為表格對象的方法
    在單行( 多行) 文字和線條組成的“表格”中, 文字是組成表格的主要角色, 表格線條屬于輔助性的元素, 在轉(zhuǎn)換過程中可以忽略。因此, 表格轉(zhuǎn)換的實質(zhì)就是將原“表格”中的文字轉(zhuǎn)換到新創(chuàng)建的表格對象中, 并放置在對應(yīng)的單元格內(nèi)。文字的樣式、對齊方式、顏色、圖層、高度以及表格樣式等可保留原有設(shè)置, 或者采用當(dāng)前的圖形設(shè)置。
    2.1 文字插入點坐標(biāo)的獲取
在Visual LISP 中, 可用ENTGET 方法通過圖元名取得文字的構(gòu)造參數(shù)表, 例如:
  ( ( - 1.<圖元名: 7e60fdd0>)( 0.TEXT)( 330.<圖元名:7efd8cc0>)( 5.2904A)( 100.AcDbEntity)( 67.0)( 410. Model)( 8.TXT)( 100.AcDbText)( 10 15 20 0.0)( 40. 14.0)( 1.進汽包)( 50.0.0)( 41.1.0)( 51.0.0)( 7.GBCBIG)( 71.0)( 72.0)( 110.0 0.0 0.0)( 210 0.0 0.0 1.0)( 100.AcDbText) ( 73.0) )
  其中,( 0. TEXT) 表示這是一TEXT 對象,( 8.TXT)表示所在圖層為“TXT”,( 10 15 20 0) 表示文本的插入點坐標(biāo)為( 15, 20, 0) ,( 1.進汽包) 表示文字內(nèi)容。由此可見,只要抽取文字的有關(guān)信息( 插入點坐標(biāo)、文本內(nèi)容、圖層、文字樣式等) 建立原始數(shù)據(jù)表( LISP 表) , 再以插入點坐標(biāo)為關(guān)鍵元素, 對表中的信息進行分析、篩選, 即可將該表重構(gòu)為包含行數(shù)、列數(shù)、文字內(nèi)容及對應(yīng)行列信息的表格對象所需的新表。
    2.2 表格轉(zhuǎn)換的方法
如上所述, 取得文字信息數(shù)據(jù)后, 即可根據(jù)文字插入點的坐標(biāo)來判定表格的行數(shù)和列數(shù)以及文字的歸屬, 即判定文字位于哪個單元格。
    2.2.1 總行數(shù)和列數(shù)的判定
   表格的行數(shù)、列數(shù)可以由用戶輸入, 但從方便用戶操作的角度看, 由程序自動判斷行數(shù)和列數(shù)顯然更人性化。對不存在空白單元格的“表格”, 判斷方法比較簡單, 只要多個文字具有相同的y 坐標(biāo)則判定為同屬一行, 具有相同的x 坐標(biāo)則判定為同屬一列。但是實際的表格中往往存在空白單元格, 不能簡單的采用以上辦法, 需加以改進。
   假設(shè)抽取文字的插入點x, y 坐標(biāo)和內(nèi)容text 三要素作為子表, 構(gòu)建如下形式的數(shù)據(jù)模型表tb_list:
( ( x1 y1 text1)( x2 y2 text2)( x3 y3 text3) ?( xn yn textn) )
   根據(jù)表格文字的每一行具有相同的y 坐標(biāo)、每一列具有相同的x 坐標(biāo)這一特點, 遍歷tb_list 表, 統(tǒng)計表中每個y 坐標(biāo)、x 坐標(biāo)出現(xiàn)的次數(shù)m、n, 即為表格的總行數(shù)m和總列數(shù)n。判定流程參見圖1。
    由于繪圖的不規(guī)范性, 表格內(nèi)同一行文字的y 坐標(biāo)或同一列行文字的x 坐標(biāo)可能存在一定的偏差, 故此需設(shè)置容差機制, 比如以字高的一半作為閾值, 只要文字插入點的x、y 坐標(biāo)在允許誤差范圍以內(nèi), 則可以認定其同屬一行或同屬一列。

     
     在排序后的tb_list 中, 每一個子表( xi yj textij) 均與單元格( i j) 相對應(yīng)。據(jù)此, 先用object.AddTable 方法創(chuàng)建新的表格對象, 再從tb_list 表中分離得到按單元格列順序排列的文字, 將其填充到對應(yīng)的單元格中即完成了表格對象的轉(zhuǎn)換。原始表格根據(jù)需要可以刪除或保留。
    圖2 為轉(zhuǎn)換流程圖。為簡潔計, 省去了出錯檢查、特殊情況分析判斷等輔助流程。
      

     2.3 “表格”的預(yù)處理
   有些普通“表格”在繪制時可能不是很規(guī)范, 為了降低表格轉(zhuǎn)換的難度, 提高轉(zhuǎn)換的效率和準(zhǔn)確性, 在表格轉(zhuǎn)換之前可對原始普通表格進行預(yù)處理, 處理措施包括文字的行對齊、列對齊、文字樣式和對正方式的統(tǒng)一、同一單元格內(nèi)的多個文字對象合并成一個對象等。如果有必要, 也可將所有的文字全部轉(zhuǎn)換成MEXT 或TEXT 一種類型, 這是因為單行文字和多行文字有差別, 混合處理有可能產(chǎn)生誤判。文字預(yù)處理可以通過對象特性對話框, 結(jié)合FILTER、特性匹配等工具手動進行, 也可以編制程序自動處理, 具體算法從略。
    當(dāng)然, 如果不對“表格”進行規(guī)范化預(yù)處理也是可以的, 但是需要修改以上表格轉(zhuǎn)換的算法, 由于要考慮如何處理可能出現(xiàn)的各種不規(guī)范情況, 程序的算法將變得更加復(fù)雜。由此可見, 制圖越規(guī)范, 后期對圖形數(shù)據(jù)的處理和再利用就越簡單, 效率越高, 因此規(guī)范化的設(shè)計是應(yīng)予高度重視的一項重要措施。
     3. 結(jié)語
    利用ActiveX 技術(shù)進行二次開發(fā), 實現(xiàn)了把用LINE( 或PLINE) 和TEXT( 或MTEXT) 命令繪制的普通“表格”轉(zhuǎn)換為AutoCAD 的表格對象, 為以后高效、快捷地進行表格操作創(chuàng)造了條件, 因此具有較高的實用價值。本文只針對常見的表格形式給出了轉(zhuǎn)換的算法, 在此基礎(chǔ)上修改、完善, 可實現(xiàn)將其它形式的"表格"轉(zhuǎn)換為表格對象。

   [ 參考文獻]
[ 1] 朱玉.用VBA 實現(xiàn)Excel 電子表格到AutoCAD 表格的轉(zhuǎn)換[ J] .機床與液壓, 2004( 12) : 176- 178.
[ 2] 陳伯雄, 馮偉.Visual LISP 程序設(shè)計技巧與范例[ M] .北京.人民郵電出版社, 2003.
[ 3] 杜平安.AutoCAD 明細表自動導(dǎo)入Excel 的實現(xiàn)方法[ J] .工程圖學(xué)學(xué)報, 2003( 1) : 50- 56. ( 編輯明濤)

民眾工作室.制作      版權(quán)所有