李克鋒 王建東 任曉東
河道實測橫斷面數據生成AutoCAD斷面圖后,由于設計的變更或其他方面的原因,有時需要在沒有成圖原始數據的情況下,根據AutoCAD電子文檔,將某條線的高程整體上移或下移一定距離,人工逐一修改顯然不是一種簡單高效的方法,也不符合實際。利用VBA技術批量地將提供的AutoCAD電子文檔快速、準確地轉換成符合要求的文檔,不失為解決此類問題的一種方法。
某設計院生成的DWG文件格式如下:一個DWG文件僅包含一個斷面圖,一條河道如有十幾個實測斷面,那就有相應的十幾個DWG文件,圖1為AutoCAD清淤斷面圖,假定虛線是需要整體修改數據的線。
修改數據時,首先采用AutoCAD過濾組碼與組碼值創建選擇集,過濾組碼與組碼值可以查詢AutoCAD開發文檔獲取,也可以通過命令(entget(car(entsel)))獲取的對象基本特性。以下為執行該命令后得到如下信息:
((-1 .<圖元名: 7ff4fce09a90>) (0 ."LWPOLYLINE") (330 .<圖元名:
7ff4fce06a10>) (5 ."121") (100 ."AcDbEntity") (67 .0) (410 ."Model") (8 ."Dash") (62 .0) (6 ."DASHED") (100 ."AcDbPolyline") (90 .13) (70 .0) (43 .0.0) (38 .0.0) (39 .0.0) (10 0.0 36.7) (40 .0.0) (41 .0.0) (42 .0.0) (91 .0) (10 10.0 35.4) (40 .0.0) (41 .0.0) (42 .0.0) (91 .0) (10 14.0 24.1) ……
其中比較常用的為:
(0 ."LWPOLYLINE") 0表示圖元名稱,例如“ARC”、“LINE”、“CIRCLE”...等等,本例中表示圖元對象類型是輕量多義線;
(8 ."Dash") 8表示圖層名稱,本例中表示圖元對象在Dash層;
(62 .0) 62表示顏色編號,本例中表示對象顏色為BYLAYER,即隨層;
(6 ."DASHED") 6表示線型名稱,本例中表示線型DASHED。
在AutoCAD命令欄輸入vbaide命令,啟動AutoCAD自帶的Visual Basci for Application(即VBA)環境,來到AutoCAD的vba界面。根據所繪圖形的特點創建過濾器,以下為創建滿足條件的過濾器代碼過程:


圖1 AutoCAD清淤斷面圖

圖2 線型信息圖

圖3 黑色虛線相關信息圖
End Sub
通過擴展或收縮過濾器,就可以選擇需要讀取數據的對象,以下為調用創建過濾器過程的代碼,例如:
BuildFilter pType, pData, 0, "LWPOLYLINE":表示建立圖上所有的多段線過濾器;
BuildFilter pType, pData, 0, "LWPOLYLINE", 8, "Dash":表示建立圖層是Dash的多段線過濾器;
BuildFilter pType, pData, 0, "LWPOLYLINE", 8, “Dash”, 62, 0:表示建立圖層是Dash、顏色為BYLAYER的多段線過濾器。
由上所獲取的多義線的信息可知,要修改黑色虛線的值,用BuildFilter(pType, pData, 0, "LWPOLYLINE", 8, " Dash")即可創建所需過濾器。
創建過濾器后,根據過濾條件,將符合條件的所有實體對象,加入到選擇集中,以下為創建選擇集函數代碼:


根據以上所指定的過濾器,以下為將所有滿足條件的實體加入到選擇集的部分代碼。
sset.Select acSelectionSetAll, , , pType, pData
選擇集創建后,就可以將選擇集中所有相應坐標點的數據按需要進行修改。
在AutoCAD的命令欄輸入List命令,選擇需要修改的黑色虛線多段線,回車后會生成所選線型的相關信息,包括一系列成圖的坐標點,如圖2所示。
由圖2和圖3中同為(50,5,0)的XYZ坐標信息點可知,圖2中的點在圖3的AutoCAD狀態欄顯示為(50,5,0),在圖3的斷面圖中實際所對應的點為(5,0.5,0),即成圖時的X坐標(即起點距)、Y坐標(即河底高程)分別是將實測數據放大10倍后所得,因此對該黑色虛線整體上移或下移時,也就是需要將Y坐標數據擴大10倍。如需要上移0.15m,則實際修改的數字為1.5。修改Y坐標數據時,在創建的選擇集中遍歷所有坐標點,對所有的Y坐標數據加一個常數,然后更新所選線的坐標信息,最后刪除選擇集,以下為遍歷選擇集將所有Y坐標數據整體上移0.15m的部分代碼示例:

一個DWG文件修改完畢后,接下來的工作遍歷同一目錄下所有DWG文件,重復打開→修改→保存→關閉的步驟。
本文主要介紹了在AutoCAD VBA環境下,通過遍歷生成的DWG文件,采用AutoCAD過濾組碼與組碼值創建選擇集,從生成的DWG斷面圖中選擇需要修改的斷面數據,然后對所選斷面數據進行整體批量修改的方法。實踐證明,該方法切實可行,實用性強,大大提高了工作效率,為缺少斷面原始數據而需要批量修改DWG文件中某條線的高程數據提供了一種簡便快捷的方法■