張俊,申瑋,宋英華,張嵐
(中國重汽集團汽車研究總院,山東 濟南 250002)
線束系統作為車輛的“神經”,對汽車電氣功能的實現起著至關重要且不可替代的作用,隨著汽車電器配置越來越高,線束系統隨之變得越來越復雜。目前,車輛系統的線束設計主要采用AutoCAD等軟件進行二維設計。隨著制圖要求的不斷提高,在AutoCAD設計龐大的線束時,線束圖中的文字顏色與直線的顏色會依據公司傳統或個人習慣加以區分,這樣可以使得線束圖直觀、清晰明了,易于區分。而在線束圖紙設計或者更改時,往往拿到的Auto-CAD線束圖紙中文字與直線等內容顏色沒有統一,使得圖紙顯著很亂,不易區分,這樣就得花費大量時間去統一線束圖紙中文字、直線的顏色,作者曾在設計線束圖紙的過程中,花費大量時間去統一顏色,使得設計效率很低。借助AutoCAD的二次開發,開發一個程序集,可以快速地將文字與直線顏色進行統一就十分的必要。本文以初學者的視角,利用C#二次開發AutoCAD在重卡線束圖做了簡單的應用研究,詳細論述了開發程序集的過程以及簡單的應用過程。通過本文的簡單應用研究,理清了C#二次開發Auto-CAD的原理,為后續線束設計輔助軟件、線束工藝軟件等的開發奠定了基礎。
AutoCAD是一款通用的計算機輔助設計軟件,具有完善的繪圖功能,提供了多種接口,易于不同行業的人員采用高級編程語言對其進行擴充和修改,豐富其附加功能,能最大限度地滿足用戶的特殊需求。AutoCAD第一版于1982年11月推出,其二次開發語言及工具也在不斷地涌現。開發環境對應的編程語言有:AutoLISP、ADS、ObjectARX、VisualLISP、VBA、AutoCAD.NET等。本 文 利 用AutoCAD.NET框架,使用C#語言對AutoCAD進行二次開發。
AutoCAD有強大的數據庫而沒有數據分析能力,借助二次開發提取其數據庫中的數據,同時利用Windows自帶的函數庫,可以對大量數據進行分析,提高AutoCAD的使用效率。
眾所周知,C#是一種面向對象的編程語言,把一切當成對象來處理。在C#二次開發AutoCAD過程中,AutoCAD圖紙中的直線、圓弧、文字和標注等圖形是對象,圖層、組合、塊等都是對象。和其他二次開發語言相比,C#語言簡單易學,成為二次開發AutoCAD的首選語言。
AutoCAD.NET API由不同的DLL文件組成,這些DLL文件包含有大量的類、結構、方法及事件,用于訪問圖形文件對象或AutoCAD程序對象。常用的AutoCAD.NET API的3個主要DLL文件如下。
1)acdbmgd.dll:當處理圖形文件中存儲的對象時引用。
2)acmgd.dll:當處理AutoCAD應用程序和用戶接口時引用。
3)accui.dll:當處理自定義文件時引用。
本文所引用的接口為acdbmgd.dll與acmgd.dll。
在Visual Studio軟件中新建一個類庫項目,如圖1所示。不同版本的AutoCAD對應不同的.net框架,由于本文是在AutoCAD2007版本中進行的,故框架選擇.net3.5。

圖1 新建類庫項目
在Visual Studio軟件中添加AutoCAD的程序接口acdbmgd.dll、acmgd.dll,將復 制 本地改為False,如圖2所示。

圖2 添加引用
在編寫程序集之前,需使用如圖3所示的命名空間。命名空間里包含大量的類、結構、方法及事件,用于訪問圖形文件對象或AutoCAD程序對象。

圖3 使用命名空間
注冊命令“TH7”如圖4所示。此命令相當于程序集的指令,當發送此指令后,程序才開始運行。后續在AutoCAD命令欄輸入“TH7”后,編寫的程序集才開始執行。

圖4 注冊命令“TH7”
重卡的線束圖紙中主要包括導線信息(線號、線色、線徑、端子等)、波紋管長度、文字說明、插接器圖例等,如圖5所示。

圖5 重卡線束圖紙
在二次開發過程中,可以籠統地把線束圖紙分為單行文本與直線等數據組成,這些數據記錄在AutoCAD數據庫中,通過調用其數據庫,然后通過選擇集的操作,可以分別得到單行文本與直線信息,分別對其屬性進行更改,將得到我們想要的效果。
在遍歷AutoCAD數據庫之前,需要理解AutoCAD對象層次,如圖6所示。

圖6 AutoCAD對象層次示意圖
Application對 象 是AutoCAD.NET API的 根 對 象,從Application對象,可以訪問AutoCAD主窗口,以及任何打開的圖形,并進而訪問圖形里的各個對象。Application對象有一個DocumentManager屬性,用來返回DocumentCollection對象,該對象提供了訪問當前打開的AutoCAD圖形的功能,并允許創建、保存、打開圖形文件。
Document對 象,實 際 上 就 是 一 個AutoCAD圖 形,是DocumentCollection對象的一部分,提供了訪問與Document對象相關聯的Database對象的功能。
Database對象包含AutoCAD所有的圖形對象和絕大部分非圖形對象,其中包括實體(圖元)、符號表、命名字典等。實體(圖元)表示圖形里的圖形對象,直線、圓、弧線、文字、填充和多義線等都是實體。
由此可以編程遍歷AutoCAD數據庫Database,并通過選擇集的操作可分別得到單行文本與直線的數據,獲取程序如圖7所示。

圖7 獲取單行文本與直線程序
通過以上代碼,程序將遍歷線束圖紙的數據庫,通過選擇集的設置,分別得到單行文本對象與直線對象。
通過遍歷AutoCAD數據庫得到的單行文本對象與直線對象,對其顏色的屬性值ColorIndex進行賦值,即可改變其顏色。ColorIndex值可在AutoCAD圖紙中,通過命令欄鍵入LI,即可得到。本文因公司傳統習慣,將文字顏色更改為青色,直線更改為綠色,這樣可以使圖紙較為整齊,清晰明了。青色與綠色的ColorIndex賦值通過鍵入LI得到,如圖8~圖9所示。

圖8 綠色的ColorIndex值

圖9 青色的ColorIndex值
由圖8~圖9可以看出,綠色的ColorIndex值為3,青色的ColorIndex值為4,通過編寫函數分別對其ColorIndex進行相應的賦值,編寫更改顏色的函數代碼如圖10所示。

圖10 編寫更改顏色的函數
將改變顏色的函數寫入主函數,便可以實現線束圖紙顏色的改變。主程序如圖11所示。

圖11 主程序
在程序集的屬性里將名稱更改為“更改線色和文字顏色”,如圖12所示,然后生成解決方案,在默認文件夾下,就會生成“更改線色和文字顏色.dll”的程序集。

圖12 更改程序集名稱
打開已完成或者正在設計的AutoCAD線束圖紙,在AutoCAD命令欄鍵入“netload”命令,加載“更改線色和文字顏色.dll”程序集,如圖13所示。最后鍵入之前的注冊命令“TH7”,就會發現線束圖紙中的文字顏色與直線顏色迅速改變成設定的顏色。

圖13 加載編輯好的程序集
本文以初學者的視角,利用C#二次開發AutoCAD在重卡線束圖的應用做了簡單的研究,詳細論述了開發程序集的過程以及簡單的應用過程。通過對AutoCAD二次開發在重卡線束圖的簡單應用研究,收獲與優勢有以下幾點。
1)利用C#二次開發AutoCAD,可以節省設計員的時間,極大地提高設計員設計效率,相對比人工更改圖紙而言,速度快且準確度高。
2)AutoCAD具有強大的數據庫而沒有數據分析能力,借助二次開發可以對其數據庫中的大量數據進行操作,得到想要的結果。
3)摸清了C#二次開發AutoCAD的原理,為后續開發線束圖紙設計輔助軟件的開發、線束圖紙工藝軟件的開發奠定了扎實的基礎。
本文介紹了C#二次開發AutoCAD在重卡線束圖紙的開發過程,對線束圖紙中更改文字顏色與直線顏色的簡單應用做了研究。在此次開發過程中,作者查閱了大量資料,學到二次開發很多知識與方法,為后續開發輔助軟件開發打下扎實的基礎。本文所闡述的程序集,已經集成于后續線束輔助軟件里,得到普遍的應用。