CATIA VBA二次開發(一)快速入門之巨集指令碼
CATIA巨集(Macro)是CATIA向用戶提供的一種記錄 、重放使用者操作的工具(CATIAVBAProject也屬於巨集,本書中把VBAProject放在CATIA VBA一節中講,本節重點講巨集指令碼)。當用戶啟用錄製巨集操作時,系統把使用者操作歷史錄製成指令碼程式碼。
CATIA巨集指令碼具有兩種語法,分別是CATScript和CATVbs。在CATIA V5R7之後的UNIX系統下已經不再使用CATScript語法,取代它的是CATVbs。系統在CATVbs語法中取消了原有的型別宣告程式碼,使得巨集程式碼更加精簡。在Windows系統中仍保留CATScript,是為了向下相容早期版本巨集程式碼。
在CATIA中錄製巨集時,如果使用者沒有指明巨集目錄,則巨集被儲存在系統臨時目錄或CATIA文件中,當文件被移除後,則可能失去已經錄製或編輯的巨集。建議讀者在CATIA中設定預設目錄並指向本地硬碟路徑,保證所有錄製的巨集不會因為文件關閉而丟失。設定預設目錄的方法如下:
點選“工具->選項...”,彈出CATIA選項卡,選擇常規->巨集,在“預設巨集庫”下拉框中選擇“目錄”,點選瀏覽資料夾,新增預設目錄。
1.錄製第一個巨集檔案
在CATIA視窗中點選“工具->巨集->啟動錄製…”,如下圖:
彈出使用者介面如下:
可以選擇預設巨集目錄,以方便巨集檔案的管理和維護。或新建巨集目錄,方法是點選右上角“巨集庫…”按鈕,在“庫型別”中選擇“目錄”,然後點選右側“建立新庫”按鈕,在彈出的視窗中設定巨集檔案存放目錄。如下圖所示:
“使用語言”選擇MS VBScript(即CATVbs),使用者可以自定義巨集名稱,設定完成後點選“開始”,CATIA開始記錄使用者操作。此時使用者介面出現巨集錄製停止按鈕。
建立一個新零件,並進入“創成式曲面設計”模組。在零件中插入幾何圖形集,建立任意3個點,並建立樣條曲線,如下圖所示:
2.巨集程式碼解釋
(1)巨集檔案結構
用文字編輯器或CATIA巨集編輯器開啟剛才操作所錄製的巨集檔案,可以發現操作歷史被記錄在CATMain()函式體中,以End Sub結束。其結構如下:
Language="VBSCRIPT"
Sub CATMain()`
…
End Sub
說明: CATIA巨集指令碼需要有一個入口函式,即CATMain()。在入口函式之外,使用者也可以新增自定義子函式,子函式可以被其他函式呼叫。
(2)新建Part文件,並新增幾何圖形集
CATIA巨集是程序內程式,可以直接引用“CATIA”物件(CATIA二次開發根物件)。幾何圖形集(Geometrical Set)對應的物件為HybridBody,從HybridBodies(Collection型別)中建立。我們錄製的巨集程式碼的前幾行是這樣的(英文字元單引號後面為註釋內容):
Set documents1 = CATIA.Documents ‘獲取CATIA中文件集合
Set partDocument1 = documents1.Add("Part") ‘新增一個新的零件文件
Set part1 = partDocument1.Part ‘獲取part物件。Part物件是零件操作根物件
Set hybridBodies1 = part1.HybridBodies ‘獲取Part中的幾何圖形集集合物件
Set hybridBody1 = hybridBodies1.Add() ‘新增一個幾何圖形集
part1.Update ‘更新零件顯示
(3)建立3個座標點
如果使用者要在零件中建立線框和曲面幾何元素,首先要獲得HybridShapeFactory(“混合形狀工廠”)物件。然後呼叫建立座標點的方法AddNewPointCoord(x,y,z)建立幾何點,最後用hybridBody1.AppendHybridShape方法用來把座標點新增到幾何圖形集中。
Set hybridShapeFactory1 = part1.HybridShapeFactory‘獲得HybridShapeFactory物件
Set hybridShapePointCoord1 = hybridShapeFactory1.AddNewPointCoord(0.000000, 0.000000, 0.000000)
hybridBody1.AppendHybridShape hybridShapePointCoord1
part1.InWorkObject = hybridShapePointCoord ‘定義當前工作物件,此行程式碼可以不要
part1.Update
‘建立第二個幾何點
Set hybridShapePointCoord2 = hybridShapeFactory1.AddNewPointCoord(0.000000, 100.000000, 0.000000)
hybridBody1.AppendHybridShape hybridShapePointCoord2
part1.InWorkObject = hybridShapePointCoord2
part1.Update
‘建立第三個幾何點
Set hybridShapePointCoord3 = hybridShapeFactory1.AddNewPointCoord(0.000000, 100.000000, 100.000000)
hybridBody1.AppendHybridShape hybridShapePointCoord3
part1.InWorkObject = hybridShapePointCoord3
part1.Update
(4)建立樣條線
巨集檔案中使用AddNewSpline方法建立樣條線,並定義了樣條線格式:第一個引數SetSplineType選擇樣條線型別,0表示選擇三次樣條曲線;SetClosing方法用來設定樣條曲線是否首尾相接,0表示首尾端點不相接。然後分別為樣條曲線指定型值點,即上一步中建立的三個幾何點。
Set hybridShapeSpline1 = hybridShapeFactory1.AddNewSpline()
hybridShapeSpline1.SetSplineType 0
hybridShapeSpline1.SetClosing 0
‘指定樣條曲線的型值點
Set reference1 = part1.CreateReferenceFromObject(hybridShapePointCoord1)
hybridShapeSpline1.AddPointWithConstraintExplicit reference1, Nothing, -1.000000, 1, Nothing, 0.000000
Set reference2 = part1.CreateReferenceFromObject(hybridShapePointCoord2)
hybridShapeSpline1.AddPointWithConstraintExplicit reference2, Nothing, -1.000000, 1, Nothing, 0.000000
Set reference3 = part1.CreateReferenceFromObject(hybridShapePointCoord3)
hybridShapeSpline1.AddPointWithConstraintExplicit reference3, Nothing, -1.000000, 1, Nothing, 0.000000
hybridBody1.AppendHybridShape hybridShapeSpline1 ‘新增樣條曲線到幾何圖形集中
part1.InWorkObject = hybridShapeSpline1
part1.Update
3.編輯巨集
參考CATIA Automation中關於物件屬性和方法的定義,並依照VBScript語法可以對錄製出的巨集檔案進行編輯,以擴充套件或增強巨集檔案功能。對於上節中的巨集檔案,我們簡單編輯一下,可以實現在CATIA零件中用樣條曲線模擬正弦曲線。
為了用樣條曲線模擬正弦曲線,需要建立多個正弦曲線離散點作為樣條曲線控制點。控制點越密,生成的樣條曲線越接近於正弦曲線。
假設我們用含有100個控制點點的樣條曲線模擬正弦曲線,我們已知控制點的座標規律(按照正弦規則變化),建立點的過程可以在迴圈中實現。這裡提到的迴圈是指某個變數在一個範圍內變化時,多次執行迴圈體內的程式碼,直到滿足迴圈結束條件。VBScript中常用的迴圈語法是Do迴圈和For迴圈。例如計算0+2+4+6+…+100的演算法可以寫成如下程式碼:
Dim sum
sum = 0
For i = 0 to 100 step 2 ‘step 2表示迴圈時i每次自加2。當省略step關鍵字時預設step = 1
sum = sum + i
Next
建立單個幾何點和樣條曲線的方法可以參考已經錄製巨集中的程式碼。每個建立完成的幾何點,都在迴圈過程中依次指定樣條曲線的控制點。為了節省程式碼,我們每建立一個點,直接指定它為樣條曲線控制點,這樣我們可以把在一個迴圈中完成兩件事情。假設正弦曲線所在的平面為XZ平面,編輯之後程式碼如下(對應的程式碼見sincurve1.catvbs):
Sub CATMain()
Pi = 3.1415926 '定義圓周率常量
T = 2.5 'T是正弦曲線週期
A = 100 'A是放大量,適當增大縱座標比例,使得曲線看起來協調
N = 100 'N是控制點數量
Set documents1 = CATIA.Documents
Set partDocument1 =documents1.Add("Part")
Set part1 = partDocument1.Part
Set hybridBodies1 = part1.HybridBodies
Set hybridBody1 = hybridBodies1.Add()
part1.Update
Set oHSF = part1.HybridShapeFactory
Set hybridShapeSpline1 =oHSF.AddNewSpline()
hybridShapeSpline1.SetSplineType 0
hybridShapeSpline1.SetClosing 0
'通過迴圈完成多個點的建立
for i = 0 to N-1 '假設用N個點模擬樣條曲線
'在ZX平面建立曲線,Y座標為0
Set CtrPt = oHSF.AddNewPointCoord(A*Pi*i/N,0.0,A*Sin(T * (2* Pi)* i/N))
hybridBody1.AppendHybridShape CtrPt
Set reference1 =part1.CreateReferenceFromObject(CtrPt)
hybridShapeSpline1.AddPointWithConstraintExplicitreference1, Nothing, -1.000000, 1, Nothing, 0.000000
Next
hybridBody1.AppendHybridShapehybridShapeSpline1
part1.Update
End Sub
執行結果如下圖:
如果希望週期T是可變的,使用者可以用簡單的輸入框實現使用者資料輸入。在VBscript語法中,輸入資料可以用InputBox實現,例如把上述巨集程式中給T賦值的語句改成下面的程式碼:
<span style="font-size:10px;font-weight: normal;">T = InputBox("請輸入正弦曲線週期,實數型別","正弦曲線程式")</span>
執行時彈出對話方塊如下圖所示。當用戶輸入實數時,程式按照使用者輸入的週期繪製曲線。(對應的程式碼見sincurve2.catvbs)
4.建立巨集
當用戶熟悉CATIA V5 Automation的語法之後,也可以在巨集目錄中新建巨集,並手動編輯除錯。如圖,點選“巨集”對話方塊右側的“建立”按鈕,彈出“建立新巨集”對話方塊。在窗體中可以輸入新建巨集的檔名。
點選確定,在巨集列表中出現並預設選中了剛才建立的巨集檔案,此時點選右側的“編輯”按鈕,在彈出的“巨集編輯器”視窗中可以看到自動生成CATMain()函式結構,其內容為空,使用者可以在其中編輯自己的程式碼。
5.新增巨集到工具條
CATIA工具條是具有一定功能的圖示按鈕組合,一般停靠在使用者視窗周圍或浮動在介面上。使用者可以通過工具條快捷呼叫特定操作,使用起來比較方便。
CATIA提供了自定義工具條機制,可以把CATIA巨集或VBA專案新增到指定模組的工具條中,供使用者隨時的呼叫。假設需要將前面講到的建立正弦曲線的巨集檔案在創成式曲面設計(GSD)模組下新增工具條,其操作步驟如下:
(1)開啟“定製…”選單
先把當前CATIA環境切換到創成式曲面設計(建立完成後的工具條在當前模組中出現),然後點選“工具->定製…”(或“工具->自定義…”,不同版本漢化時有差異),彈出對話方塊如下圖:
選擇“命令”選項卡,在左側列表“類別”中選擇“巨集”,此時右側可見當前巨集庫中的巨集檔案。我們選擇sincurve2.catvbs,在“顯示屬性…”中為此命令選擇圖示並設定快捷鍵。
選擇“工具欄”選項卡,單擊右側“新建…”按鈕,在彈出的對話方塊中輸入工具欄名稱,如“正弦曲線”,則左側列表中出現正弦曲線條目。
點選“新增命令…”按鈕,在命令列表中選擇sincurve2.catvbs,操作完成,在CATIA視窗中出現新工具條。點選此工具條,則系統開始執行sinecurve2.vbs,完成正弦曲線的建立。
關於巨集的入門內容就介紹到這裡了,因為是第一篇介紹,有些地方說的很細,導致篇幅太大。下一篇部落格將介紹VBA IDE中如何快速實現程式設計,有了第一篇的基礎後面的內容就簡單多了。
【完】