• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

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

      2020-10-17 03:26:14唐志廣
      關(guān)鍵詞:圖框二次開(kāi)發(fā)插件

      唐志廣

      (大連中遠(yuǎn)海運(yùn)重工有限公司,遼寧大連 116113)

      0 引言

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

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

      1 AutoCAD 二次開(kāi)發(fā)方法簡(jiǎn)介

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

      1.1 LISP

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

      1.2 VBA

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

      1.3 ObjectARX

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

      1.4 托管的ObjectARX

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

      2 實(shí)際應(yīng)用

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

      圖1 要提取數(shù)據(jù)的圖紙

      2.1 DWG 文件結(jié)構(gòu)分析

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

      圖2 AutoCAD圖紙數(shù)據(jù)庫(kù)結(jié)構(gòu)

      2.2 DWG 圖面信息提取

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

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

      通過(guò)上述過(guò)程獲取到文字列表和圖框列表后,再逐個(gè)遍歷圖框列表,對(duì)每個(gè)圖框列表循環(huán)查詢文字列表,檢查文字位置是否位于當(dāng)前圖框坐標(biāo)范圍內(nèi),并且檢查文字是否以從當(dāng)前圖框標(biāo)題欄里讀取到的管線名開(kāi)頭,如果是則將文字內(nèi)容作為構(gòu)件名稱寫入Joint類型的對(duì)象中。同時(shí)查詢?cè)撐淖指浇?0個(gè)文字字高大?。┓秶鷥?nèi)的其他文字,將這些文字內(nèi)容作為構(gòu)件屬性寫入Joint類型的對(duì)象中。

      2.3 導(dǎo)出EXCEL 表格

      統(tǒng)計(jì)完成后,將統(tǒng)計(jì)結(jié)果輸出到EXCEL模板,形成報(bào)表。

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

      表1 C#讀寫EXCEL方法對(duì)比

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

      2.4 最終效果

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

      圖4 提取的報(bào)表最終效果

      3 結(jié)論

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

      猜你喜歡
      圖框二次開(kāi)發(fā)插件
      淺談基于Revit平臺(tái)的二次開(kāi)發(fā)
      甘肅科技(2020年20期)2020-04-13 00:30:02
      自編插件完善App Inventor與樂(lè)高機(jī)器人通信
      電子制作(2019年22期)2020-01-14 03:16:34
      淺談Mastercam后處理器的二次開(kāi)發(fā)
      模具制造(2019年3期)2019-06-06 02:11:02
      基于Lisp的自動(dòng)圖框繪制和輸出管理技術(shù)研究
      西門子Easy Screen對(duì)倒棱機(jī)床界面二次開(kāi)發(fā)
      基于Microstation V8 XM圖紙批量打印的實(shí)現(xiàn)
      析SP3D軟件的ISO出圖模板定制
      MapWindowGIS插件機(jī)制及應(yīng)用
      基于Revit MEP的插件制作探討
      基于Pro/E二次開(kāi)發(fā)的推土鏟參數(shù)化模塊開(kāi)發(fā)
      兴和县| 东乌珠穆沁旗| 文登市| 青海省| 桐城市| 阜南县| 房山区| 民县| 庆云县| 吉安县| 万盛区| 河北省| 即墨市| 和静县| 泗阳县| 洞头县| 仙桃市| 腾冲县| 甘泉县| 观塘区| 乌海市| 扎鲁特旗| 修水县| 昌邑市| 大同市| 平泉县| 新乡县| 德化县| 敦化市| 乌拉特后旗| 上杭县| 阳泉市| 岳普湖县| 湟中县| 益阳市| 罗源县| 多伦县| 来宾市| 建阳市| 山阳县| 顺昌县|