AutoCAD塊屬性的生成與提取
2013-05-25 by:廣州有限元分析、培訓(xùn)中心-1CAE.COM 來源:仿真在線
AutoCAD中塊的屬性是在一個(gè)塊內(nèi)的變量文字區(qū),利用塊屬性可以給塊加上文字或數(shù)據(jù)信息,利用塊屬性來提取文件信息,避免文件信息提取時(shí)無效信息過多,提取、處理復(fù)雜的情況,提取的信息即為所需要的明細(xì)表信息,而且采用塊屬性建立明細(xì)表,這樣建立的明細(xì)表具有統(tǒng)一的樣式,也便于在AutoCAD中的管理,更能滿足企業(yè)對(duì)文件標(biāo)準(zhǔn)化的要求。
1引言
目前,AutoCAD提供了五種二次開發(fā)手段,分別是:AutoLISP, ADS ,ARX , VisualLlSP, VBA和Visual Basic。這五種開發(fā)工具都具有強(qiáng)大和豐富的二次開發(fā)能力及自己鮮明的特點(diǎn)。由于有些工具不適應(yīng)目前的可視化編程要求,而逐漸被其他工具所替代。與其他幾種二次開發(fā)方法相對(duì)比,VBA具有全開放式的對(duì)象模型、良好的運(yùn)行速度、能夠使AutoCAD與其他應(yīng)用程序直接共享數(shù)據(jù)等優(yōu)點(diǎn)。
本文研究利用VBA操作AutoCAD文件中Block對(duì)象的屬性,將其中包含的明細(xì)欄信息導(dǎo)人Microsoft Excel的Worksheet對(duì)象中,生成符合要求明細(xì)表。研究基于對(duì)象模型的AutoCAD文件信息處理技術(shù),研究介于AutoCAD和Excel之間的數(shù)據(jù)信息交換程序的開發(fā),以及對(duì)產(chǎn)生的明細(xì)表進(jìn)行后續(xù)處理的方法。
2明細(xì)表自動(dòng)提取的實(shí)現(xiàn)
將AutoCAD中的明細(xì)表信息自動(dòng)導(dǎo)人Excel的實(shí)現(xiàn)過程為:首先通過VBA訪問AutoCAD,然后從AutoCAD中獲取明細(xì)表信息,接著將明細(xì)表信息導(dǎo)人Excel,最后再Excel中對(duì)提取出來的明細(xì)表信息進(jìn)行進(jìn)一步的處理。
提取明細(xì)欄信息的過程主要包括通過塊屬性建立明細(xì)欄、利用VBA提取明細(xì)欄信息、在Excel中對(duì)提取的明細(xì)欄信息進(jìn)行整理等幾個(gè)步驟。
現(xiàn)在以一個(gè)實(shí)際工作中碰到的例子來具體說明利用VBA從AutoCAD文件中提取明細(xì)表信息到Excel的全過程。因?yàn)樯婕氨C艿脑?刪去了圖紙中原有的具體設(shè)計(jì)內(nèi)容,僅保留了有關(guān)的圖框和明細(xì)欄的內(nèi)容。
2.1 明細(xì)欄的建立
當(dāng)裝配圖中需要輸人明細(xì)欄信息時(shí),按照國(guó)標(biāo)及所標(biāo)的要求,明細(xì)欄位于圖紙標(biāo)題欄的上方,按由下到上的順序填寫。首先在指定位置插入事先生成的標(biāo)示明細(xì)欄各項(xiàng)名稱的明細(xì)欄表頭圖塊:明細(xì)欄頭.dwg,如圖1所示。
插人明細(xì)欄表頭后,就可以依次輸人明細(xì)欄的各項(xiàng)內(nèi)容了。為了統(tǒng)一明細(xì)欄的格式和便于以后的明細(xì)欄信息提取,這里采用了帶屬性的塊插人來輸入各項(xiàng)明細(xì)欄信息。
達(dá)到這個(gè)目的,需要建立一個(gè)帶有屬性的塊mxl。屬性是在一個(gè)塊內(nèi)的變量文字區(qū),利用屬性可以給塊加上文字或數(shù)據(jù)信息。首先按照有關(guān)明細(xì)欄的標(biāo)準(zhǔn)要求畫出一行符合要求的明細(xì)欄表格,然后選擇AutoCAD的下拉菜單中的繪圖Draw-塊Block-定義屬性Define Attributes,或者直接在命令行輸人attdef命令來生成明細(xì)欄的各項(xiàng)內(nèi)容屬性,此時(shí)彈出的對(duì)話框如圖2所示。
使用帶屬性的塊插人來創(chuàng)建明細(xì)欄,沒有具體格式限制,用戶可以根據(jù)實(shí)際需要設(shè)計(jì)白己的格式,具有很大的靈活性,也利于信息的統(tǒng)一提取。
在帶屬性的塊中有Attribute和Block兩個(gè)圖形對(duì)象,一個(gè)Attribute對(duì)象對(duì)應(yīng)明細(xì)欄中的一個(gè)欄月項(xiàng),將對(duì)應(yīng)明細(xì)欄中的所有欄目的Attribute對(duì)象組合在一起放人Block對(duì)象中,該對(duì)象就是用戶定義的一個(gè)明細(xì)欄記錄,然后將定義好的Block插人到圖中,就是在圖紙中放置了一條明細(xì)欄。
由于每張總裝圖或部件裝配圖中明細(xì)欄記錄的個(gè)數(shù)是不定的,因此只需為一個(gè)明細(xì)欄記錄定義一個(gè)Block,該Block包含若干Attribute對(duì)象,對(duì)應(yīng)于名稱、材料和數(shù)量等欄目,在AutoCAD圖形中生成明細(xì)欄時(shí),有多少個(gè)明細(xì)欄記錄就插人多少個(gè)明細(xì)欄Block。
我們用InsertBlock方法將塊插人到圖形中,用AddAttribute方法往塊中添加屬性,屬性的參數(shù)有標(biāo)記、屬性值、插入屬性時(shí)的提示、文本的插人點(diǎn)。
創(chuàng)建了明細(xì)欄圖塊后,其它明細(xì)欄內(nèi)容均可通過插人mxl圖塊,依照命令行的提示輸人各項(xiàng)明細(xì)欄的具體內(nèi)容而生成。
明細(xì)欄圖塊只需創(chuàng)建一次,以后其他裝配圖需要輸人明細(xì)欄時(shí)就可以同樣插人這次創(chuàng)建的mxl圖塊。
因?yàn)樵趧?chuàng)建圖塊屬性時(shí)已經(jīng)規(guī)定了各屬性文字的位置、格式,所以以后插人的各條明細(xì)欄的文字位置、格式均保持一致,保證了圖樣的統(tǒng)一,也便于管理,避免每次確定明細(xì)欄文字位置、格式的重復(fù)勞動(dòng),提高了輸入欄信息的速度。
通過反復(fù)插人mxl圖塊,并分別輸人各項(xiàng)明細(xì)欄內(nèi)容,直到完成各條明細(xì)欄信息的輸人,即可完成在裝配圖中建立明細(xì)表的工作。
2.2 明細(xì)表提取
將按上述方法定義好的明細(xì)欄插人到AutoCAD圖形中,就可以通過VBA利用ActiveX Automation技術(shù)就能將其明細(xì)表信息提取出來,再導(dǎo)人Excel進(jìn)行排序、統(tǒng)計(jì)等處理了。
基本算法是:歷遍當(dāng)前圖紙中的所有實(shí)體,訪問實(shí)體的EntityType屬性判斷該實(shí)體是否為BlockRef對(duì)象,如果是,則判斷該BlockRef對(duì)象是否包含AttributeRef對(duì)象,如果包含,則獲取AtteibuteRef對(duì)象的列表,歷遍此列表,通過TagString和TextString屬性獲取每個(gè)AttributeRef對(duì)象中的數(shù)據(jù)。歷遍結(jié)束后,明細(xì)欄信息就被提取出來,然后導(dǎo)人Excel中即可形成初步的明細(xì)表。
2. 3明細(xì)表的后處理
剛提取出來的明細(xì)表排列比較混亂,還不能達(dá)到進(jìn)行清晰統(tǒng)計(jì)的目的,為此需要對(duì)Excel文件進(jìn)行整理。首先對(duì)序號(hào)欄進(jìn)行排序,然后調(diào)整各欄的寬度,使得各欄內(nèi)的內(nèi)容均顯示完全、清晰。再對(duì)明細(xì)表信息進(jìn)行分門別類的整理,才能產(chǎn)生符合要求的明細(xì)表,滿足實(shí)際的需要。
3結(jié)束語
經(jīng)過對(duì)AutoCAD裝配圖中的明細(xì)欄的組成進(jìn)行認(rèn)真分析,結(jié)合本單位在設(shè)計(jì)、生產(chǎn)等領(lǐng)域的實(shí)際情況,實(shí)現(xiàn)一種利用AutoCAD塊屬性提取AutoCAD裝配圖中明細(xì)欄信息的開發(fā)模式,成功地應(yīng)用于實(shí)際的日常工作項(xiàng)目中,提高工作效率和所提取的明細(xì)表數(shù)據(jù)的準(zhǔn)確性。這種方式具有復(fù)雜程度低、易于掌握的特點(diǎn),在各種機(jī)械設(shè)計(jì)加工行業(yè)具有推廣價(jià)值。
相關(guān)標(biāo)簽搜索:AutoCAD塊屬性的生成與提取 AutoCAD培訓(xùn) AutoCAD培訓(xùn)課程 AutoCAD圖紙?jiān)O(shè)計(jì) AutoCAD在線視頻 AutoCAD技術(shù)學(xué)習(xí)教程 AutoCAD軟件教程 AutoCAD資料下載 Fluent、CFX流體分析 HFSS電磁分析 Ansys培訓(xùn) Abaqus培訓(xùn) Autoform培訓(xùn)