国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

利用AutoCAD 二次開發(fā)批量提取圖紙中的BOM 表

2020-10-17 03:26唐志廣
船舶標準化工程師 2020年5期
關鍵詞:二次開發(fā)插件列表

唐志廣

(大連中遠海運重工有限公司,遼寧大連 116113)

0 引言

AutoCAD軟件是美國AutoDesk公司研發(fā)的目前世界上最為先進的計算機輔助設計軟件,它功能全面,界面十分美觀,操作特別方便,能夠幫助用戶輕松地進行2D、3D繪圖與建模設計[1]。廣泛應用于工程制圖、裝飾裝潢、土木建筑、船舶海工、機械設計等行業(yè)。

AutoCAD的圖形功能十分強大,可是表格處理功能比較弱,在日常工作中經常需要在AutoCAD軟件中處理許多表格,如BOM表等[2]。而且經常需要將這些表格數據與EXCEL、ERP等軟件進行導入導出操作,當圖紙數量較少時,手工處理尚能應付。但實際項目中圖紙數量往往有成百上千份,數量巨大。如果全部由手工轉換,不僅浪費大量的設計工時,還需要花費很大的心血去檢查正確性,比較繁瑣。針對這種需求,可以利用AutoCAD提供的多種 二次開發(fā)方法,為設計師開發(fā)出定制化的功能應用于設計實踐中,幫助設計師提高自動化設計水平,提高生產力。

1 AutoCAD 二次開發(fā)方法簡介

為方便客戶化開發(fā),AutoCAD提供了多種開發(fā)方式,LISP、VBA、ObjectARX、托管ARX等,它們各有千秋,都可以做出有強大功能的插件。下面對其進行簡單進行簡單介紹。

1.1 LISP

LISP語言為函數式編程,它的代碼都是以函數形式給出的,沒有語句概念或其他語法結構,語法簡單,所以上手很快。它內置于AutoCAD,可以直接執(zhí)行AutoCAD的命令,編寫的代碼一般不受AutoCAD版本限制,可以各個版本通用,受到眾多初學者的青睞。但它是一種解釋性語言,效率較差[3]。

1.2 VBA

AutoCAD VBA(Visual Basic for Application)是一種嵌入AutoCAD內部的集成開發(fā)方式,利用ActiveX Automation接口對AutoCAD進行編程控制。VBA是VB的一個子集,利用VB的語法進行編程使得入門十分容易。不過從AutoCAD 2009版本開始VBA編輯器不再隨AutoCAD主程序一起安裝,需要單獨到AutoDesk公司網站下載,受此影響利用VBA編程的開發(fā)人員也越來越少了[4]。

1.3 ObjectARX

ObjectARX提供了以C++為基礎的面向對象的開發(fā)環(huán)境及應用程序接口,能真正快速的訪問AutoCAD圖形數據庫和AutoCAD的軟件界面,開發(fā)出的插件可以和AutoCAD軟件原生功能媲美[5]。ObjectARX方式開發(fā)的插件程序其實是一個動態(tài)鏈接庫,加載后可以共享AutoCAD的地址空間,對AutoCAD內部的許多功能進行直接函數調用。所以,使用ObjectARX編寫的插件的執(zhí)行速度非常高[6]。由于使用C++語言開發(fā),需要開發(fā)者具有較高軟件開發(fā)實力。

1.4 托管的ObjectARX

托管ObjectARX既能利用ObjectARX的高效率等優(yōu)點,又可以借助.NET框架的很多優(yōu)秀特征進行AutoCAD的二次開發(fā)。經綜合分析對比,本文采用托管的ObjectARX方法編寫插件。

2 實際應用

本次項目中涉及的幾批圖紙每一批都有一千多份,累計超過兩萬份,都需要將圖紙中的管線信息提取出來,按指定格式輸入到EXCEL表格中,供后續(xù)工序使用。如圖1所示,藍色字部分為示例圖紙中要提取的報表信息。

圖1 要提取數據的圖紙

2.1 DWG 文件結構分析

在本項目涉及的圖紙文件中,圖紙名為管線號,每份圖紙中有一頁或多頁圖紙,繪制在一個或多個橫版A3(420 mm×297 mm)尺寸的矩形圖框中,矩形右下角為標題欄,標題欄里有管線編號和系統(tǒng)編號[7]。需要提取的信息處,第二行是管線號下的子系統(tǒng)編碼,所有這些文字都是單行文字。因此可遍歷當前圖紙中的所有單行文字,再查詢哪些文字的開頭是當前圖紙名對應的管線號就可以讀取到子系統(tǒng)編碼,再利用子系統(tǒng)編碼文字對象尋找附近的文字對象,作為該子系統(tǒng)的屬性填入EXCEL表格。

圖2 AutoCAD圖紙數據庫結構

2.2 DWG 圖面信息提取

一個AutoCAD圖紙文件是一個圖形數據庫,有特定的文件結構,要讀取其中的信息可以利用托管ObjectARX提供的類庫對圖形數據庫進行操作。如圖2所示,要讀取的圖形和文本信息就在BlockTable塊表中的ModelSpace記錄中,需要編寫程序代碼逐個遍歷ModelSpace下的所有圖元,篩選出符合條件的信息,寫入到EXCEL表格中。

程序首先打開圖紙數據庫,定位到ModelSpace模型空間,遍歷ModelSpace空間中的所有ObjectId,利用此ObjectId查詢此對象的類型,如果對象類型是單行文字的,就放入文字列表備用,如果對象類型是矩形框并且矩形大小滿足A3幅面(420 mm×297 mm)的,就放入圖框列表備用。部分代碼如下:

通過上述過程獲取到文字列表和圖框列表后,再逐個遍歷圖框列表,對每個圖框列表循環(huán)查詢文字列表,檢查文字位置是否位于當前圖框坐標范圍內,并且檢查文字是否以從當前圖框標題欄里讀取到的管線名開頭,如果是則將文字內容作為構件名稱寫入Joint類型的對象中。同時查詢該文字附近(10個文字字高大小)范圍內的其他文字,將這些文字內容作為構件屬性寫入Joint類型的對象中。

2.3 導出EXCEL 表格

統(tǒng)計完成后,將統(tǒng)計結果輸出到EXCEL模板,形成報表。

在C#開發(fā)中有許多對EXCEL操作的方法,有收費的也有免費的,對性能、兼容性等簡單對比見表1。

表1 C#讀寫EXCEL方法對比

經過對比發(fā)現,如果開發(fā)獨立的應用程序,使用NPOI和ClosedXml是不分伯仲,但是AutoCAD開發(fā)中,需要引用的.NET F ramework必須和AutoCAD的版本保持一致[8],所以在這里采用了比較成熟和編譯起來相對方便的NPOI來輸出表格。NPOI的使用示例在網上還是比較多的,輸出表格的操作也都比較類似,簡單改一下就可以使用了。程序代碼比較簡單,在此不再贅述。

2.4 最終效果

如圖4的套料圖,圖面下部是本文開發(fā)的自動生成套料列表功能自動生成的套料列表;圖面上的余量符號和坡口文字經過本文開發(fā)的圖面處理功能處理完成后,完全符合本廠的設計規(guī)范。

圖4 提取的報表最終效果

3 結論

此功能開發(fā)完成后避免了大量的手工設計工時。以本系統(tǒng)圖紙為例,共有1 056份圖紙需要提取構件數據生成報表,每份圖紙手工操作一般需要約3.5 min,一個設計員連續(xù)不斷的操作,累計需要大約7天時間。采用本程序一次性選擇所有圖紙,批量運行提取每份圖紙中的數據匯總到報表中只需不到5 min即可完成,快速方便。通常一條船有幾十個這樣的系統(tǒng),效率提升十分明顯。

猜你喜歡
二次開發(fā)插件列表
AutoCAD 與PDMS 二次開發(fā)在三維復雜形體設計建模上的應用
用好插件瀏覽器標簽頁管理更輕松
例談對高中數學教材中習題的二次開發(fā)
擴列吧
淺談CAD軟件二次開發(fā)的方法及工具
例談課本習題的“二次開發(fā)”
請個瀏覽器插件全能管家
列表法解分式方程問題探索
基于jQUerY的自定義插件開發(fā)
列表畫樹狀圖各有所長
雷州市| 黄陵县| 个旧市| 武安市| 瑞丽市| 社旗县| 门源| 唐河县| 高碑店市| 阿拉尔市| 寿宁县| 商洛市| 右玉县| 喀喇沁旗| 吉水县| 华容县| 桂东县| 井研县| 施甸县| 三江| 洛川县| 梁河县| 新丰县| 龙里县| 昂仁县| 伊春市| 弥渡县| 阳西县| 巴彦县| 黄冈市| 河津市| 左贡县| 集贤县| 绥宁县| 鄂托克旗| 怀化市| 海原县| 江西省| 安徽省| 开平市| 华容县|