Civil 3D 2017本地化中VBA程序移植到2018版中
中國本地化包簡直就是一塊雞肋,
但對於某些朋友來說還真離不了;
可惜中國本地化包的退出一直滯後,
在最新版軟件出來後1年多,
本地化還不一定能夠出來,
即使出來了,
也只能是購買了速博服務的用戶才能得到。
在2017版的本地化包中,
包含了一些2009版的VBA源代碼,
雖然不全,
沒有包含本地化包的所有功能,
但對於想學習使用VBA進行Civil 3D二次開發的朋友來說,
作為樣例文件,還是不錯的選擇。
下面就以AlignSectionDataPortTool.dvb為例,
演示一下如何讓這些代碼在2018版中運行起來。
1.下載並安裝VBA編輯器,
2014版之後,VBA編輯器就不隨Civil 3d主程序一起發行了,
需要單獨下載並安裝。
點擊管理→應用程序→Visual Basic 編輯器,
會彈出對話框,
並有相應的下載鏈接。
安裝後的界面如下:
2.加載VBA項目
如果已經安裝civil 3d 2017及本地化包,
可以在如下位置找到.dvb文件:
C:\ProgramData\Autodesk\C3D 2017\chs\Data\Countrification VBA
如果沒有安裝Civil 3D 2017及本地化包,
可以單獨解壓2017版的本地化包msi文件,
從中復制相應的.dvb文件到合適位置。
可以使用菜單"加載工程"來加載,
也可以直接拖放.dvb文件到Civil 3D程序窗口中。
之後打開VBA編輯器進行編輯。
3.修改代碼
1)修改對象版本
Application模塊中,
修改如下:
‘ Const sAppName = "AeccXUiLand.AeccApplication.6.0" //修改前
Const sAppName = "AeccXUiLand.AeccApplication.12.0" //修改後
如何查詢對象版本,
在我的書《AutoCAD Civil 3D .NET二次開發》中有簡單的介紹,
2)添加PtrSafe
‘Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long //修改前
Private Declare PtrSafe Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long 修改後
代碼中有多處需要修改,
如果直接運行程序,
會彈出對話框進行提示,
代碼顏色為紅色,
比較好找,
不再贅述。
3)添加引用
菜單:工具→引用
瀏覽到:
切換文件類型為"所有文件"
選擇相應的.tlb文件。
4)修改CFileDialog類模塊
‘ hwndOwner As Long //修改前
‘ hInstance As Long
hwndOwner As LongPtr //修改後
hInstance As LongPtr
‘ lCustData As Long
‘ lpfnHook As Long
lCustData As LongPtr
lpfnHook As LongPtr
將上述四個變量類型由Long修改為LongPtr,
否則打開文件對話框將不能顯示。
5)修改配置文件路徑並創建配置文件
打開setting模塊修改如下:
Public Function GetConfigFileName() As String
‘ m_sFileName = WindowsDisk & "\Documents and Settings\All Users\Application Data\Autodesk\C3D 2018\chs\Data\Countrification VBA\AlignSectionConfig.dat"
m_sFileName = WindowsDisk & "\ProgramData\Autodesk\C3D 2017\chs\Data\Countrification VBA\AlignSectionConfig.dat"
End Function
這裏的路徑是Civil 3D 2017本地化包的路徑,
並在相應的位置創建一個文本文件,
名稱為AlignSectionConfig.dat,
文件內容為空即可,
這個文件如果不存在,
程序運行可能會彈出錯誤對話框;
程序正常運行後,
設置信息將保存在此文件中。
4運行導出命令
創建曲面、路線、采樣線,
註意路線要從屬於某一場地,
不能是非場地路線。
出現以下對話框:
選擇橫斷面數據文件:
點擊 導出
導出文件的內容:
後記:
上述操作將VBA程序由低版本移植到了高版本,
使本地化包中的個別功能在最新版的Civil 3D中能夠使用,
但並不是所有功能都能升級,
個別程序使用其他的庫文件,
沒有這些文件從而使代碼無法運行。
如果要讓Civil 3D的功能更符合自己的需求,
建議大家還是自己動手,
學習Civil 3D的二次開發。
Civil 3D 2017本地化中VBA程序移植到2018版中