CATIA VBA中如何實現測量功能
文章轉載自樓主本人的公眾號“CATIA那點事兒”
欲撰此文必有因
最近,很多小伙伴在寫VBA/宏代碼時,都遇到了“測量”相關的問題。鑒于最近這個話題上榜率很高,小編決定寫此文章,介紹一下如何用Automation中的Object實現測量這一功能!
在進行CATIA VBA二次開發時,需要測量的場景還是比較多的,例如:
對某些元素,如球心坐標、或多對元素的間距等項目測量,并將值導出;
通過測量的方式,找出多個元素中到目標元素最大/最小距離的那個,或是面積最小/最大的那個,從而實現篩選的目的。
代碼測之何所異
首先可以肯定的是,CATIA Automation中是有測量相關的API的,它雖不能像手動點擊測量命令那樣,在特征樹上生成一個“測量特征”,但可以實現同樣測量的功能,更像是手動測量時,不勾選“Keep Measure”的效果。
持此許可方能行
測量相關的API,我們可以從Working with Space Analysis的Object中找到。
上述Object使用的前提,是需要我們有SPA這個許可證(用盜版的小伙伴就無所謂啦)
創建參考以測之
有了這些,我們就可以用以下的代碼實現測量的功能了!
首先, 用Document的GetWorkbench的方法,得到SPA workbench。
Dim wb
Set wb = d.GetWorkbench("SPAWorkbench")
然后,再用Workbench的GetMeasurable方法,創建一個Measurable對象。
Dim m
Set m = wb.GetMeasurable(Ref1)
需要說明的是,這里的Ref1就是你要測量的元素的參考。創建參考的方法,可以查閱Part的幾個CreateReference方法。
當然,我們常用的,是CreateReferenceFromObject,即通過具體的集合元素創建參考。
通過參考創建了上面的Measurable對象之后,如果你是想模擬單一元素的測量(卡尺那個圖標),那么,你就可以直接使用Measurable的某些屬性或是不帶參數的方法,來獲取一些測量信息了。如:
'獲取面積
myArea=m.Area
'獲取角度
myRadius=m.Radius
'獲取坐標
Dim Coord(2)
m.GetPoint Coord
myX=Coord(0)
myY=Coord(1)
myZ=Coord(2)
而如果你想模擬的是測量兩個元素,如角度、距離這些(直尺那個圖標
),那么你需要使用Meaurable的帶參數的Method,如:
’測量Ref1和Ref2之間的距離
myDis=m.GetMinimumDistance(Ref2)
以下為Measurable的屬性與方法截圖,詳細使用方法各位小伙伴請自行查閱Automation手冊。
踐一實例以悉之
文章的最后,是一段實例,實現的功能和之前發過的這篇文章類似:
但之前的文章是有一定的局限性的:
GetCoordinates是Point的Method。換句話說,如果圖形集里有提取、相交、投影等元素,雖然其本質上也是點,但由于不是Point類特征,所以無法使用GetCoordinates方法
如果所選幾何圖形集中有曲線或不規則曲面,無法將其過濾(但這段可以加防錯或判斷以優化)
如果所選幾何圖形中有球面特征,上述方法無法獲取球心坐標
而通過測量的方法,我們可以讓程序獲取坐標的容錯率更高:選中某一幾何圖形集并運行宏代碼,程序會遍歷并測量幾何圖形集內的每一個元素,如果可以測出坐標,那就意味著該元素是點類特征(不管是點,投影,提取,相交……),或是球面類特征,或是圓/橢圓類線框特征。
以下為代碼運行的效果演示動圖。
以下為完整代碼
工程師必備
- 項目客服
- 培訓客服
- 平臺客服
TOP




















