CATIA VBA中如何實現測量功能

文章轉載自樓主本人的公眾號“CATIA那點事兒”

欲撰此文必有因

最近,很多小伙伴在寫VBA/宏代碼時,都遇到了“測量”相關的問題。鑒于最近這個話題上榜率很高,小編決定寫此文章,介紹一下如何用Automation中的Object實現測量這一功能!

在進行CATIA VBA二次開發時,需要測量的場景還是比較多的,例如:

  • 對某些元素,如球心坐標、或多對元素的間距等項目測量,并將值導出;

  • 通過測量的方式,找出多個元素中到目標元素最大/最小距離的那個,或是面積最小/最大的那個,從而實現篩選的目的。

代碼測之何所異

首先可以肯定的是,CATIA Automation中是有測量相關的API的,它雖不能像手動點擊測量命令那樣,在特征樹上生成一個“測量特征”,但可以實現同樣測量的功能,更像是手動測量時,不勾選“Keep Measure”的效果。

CATIA VBA中如何實現測量功能的圖1

持此許可方能行

測量相關的API,我們可以從Working with Space Analysis的Object中找到。

CATIA VBA中如何實現測量功能的圖2

上述Object使用的前提,是需要我們有SPA這個許可證(用盜版的小伙伴就無所謂啦)

CATIA VBA中如何實現測量功能的圖3

創建參考以測之

有了這些,我們就可以用以下的代碼實現測量的功能了!

首先, 用Document的GetWorkbench的方法,得到SPA workbench。

Dim wb

Set wb = d.GetWorkbench("SPAWorkbench")

然后,再用Workbench的GetMeasurable方法,創建一個Measurable對象。

Dim m

Set m = wb.GetMeasurable(Ref1)

需要說明的是,這里的Ref1就是你要測量的元素的參考。創建參考的方法,可以查閱Part的幾個CreateReference方法。

CATIA VBA中如何實現測量功能的圖4

當然,我們常用的,是CreateReferenceFromObject,即通過具體的集合元素創建參考。

通過參考創建了上面的Measurable對象之后,如果你是想模擬單一元素的測量(卡尺那個圖標CATIA VBA中如何實現測量功能的圖5),那么,你就可以直接使用Measurable的某些屬性或是不帶參數的方法,來獲取一些測量信息了。如:

'獲取面積

myArea=m.Area

'獲取角度

myRadius=m.Radius

'獲取坐標

Dim Coord(2)

m.GetPoint Coord

myX=Coord(0)

myY=Coord(1)

myZ=Coord(2)

而如果你想模擬的是測量兩個元素,如角度、距離這些(直尺那個圖標CATIA VBA中如何實現測量功能的圖6),那么你需要使用Meaurable的帶參數的Method,如:

’測量Ref1和Ref2之間的距離

myDis=m.GetMinimumDistance(Ref2)

以下為Measurable的屬性與方法截圖,詳細使用方法各位小伙伴請自行查閱Automation手冊。

CATIA VBA中如何實現測量功能的圖7

踐一實例以悉之

文章的最后,是一段實例,實現的功能和之前發過的這篇文章類似:

導出點的坐標到Excel

但之前的文章是有一定的局限性的:

  1. GetCoordinates是Point的Method。換句話說,如果圖形集里有提取、相交、投影等元素,雖然其本質上也是點,但由于不是Point類特征,所以無法使用GetCoordinates方法

  2. 如果所選幾何圖形集中有曲線或不規則曲面,無法將其過濾(但這段可以加防錯或判斷以優化)

  3. 如果所選幾何圖形中有球面特征,上述方法無法獲取球心坐標

而通過測量的方法,我們可以讓程序獲取坐標的容錯率更高:選中某一幾何圖形集并運行宏代碼,程序會遍歷并測量幾何圖形集內的每一個元素,如果可以測出坐標,那就意味著該元素是點類特征(不管是點,投影,提取,相交……),或是球面類特征,或是圓/橢圓類線框特征。

以下為代碼運行的效果演示動圖。

CATIA VBA中如何實現測量功能的圖8

以下為完整代碼

CATIA VBA中如何實現測量功能的圖9

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

5