我能夠編寫循環遍歷所有幾何集和有序幾何集的遞歸子例程,因爲每個GS和OGS下面分別有一個用於HybridBodies和OrderedGeometricalSets的集合。但是,當我找到部分級別(根級別)的機構時,其中沒有Bodies集合。所以,當我有一個包含多個集合布爾運算Bodies的模型時,我無法在VBA,C#.net或VB.net的標準集合操作中找到它們。如何從CATIA API中的CATPart獲取聚合的實體?
我怎樣才能找到身體內的這些身體?
我能夠編寫循環遍歷所有幾何集和有序幾何集的遞歸子例程,因爲每個GS和OGS下面分別有一個用於HybridBodies和OrderedGeometricalSets的集合。但是,當我找到部分級別(根級別)的機構時,其中沒有Bodies集合。所以,當我有一個包含多個集合布爾運算Bodies的模型時,我無法在VBA,C#.net或VB.net的標準集合操作中找到它們。如何從CATIA API中的CATPart獲取聚合的實體?
我怎樣才能找到身體內的這些身體?
這花了一段時間才弄清楚,我肯定會把它發佈到網絡上,因爲它幾乎沒有記錄。
機構自動化的問題是全部機構存儲在零件級集合中。起初我沒有看到,因爲在使用CATIA spec樹形導航時,我習慣了幾何集和OGS遞歸。
但是,全部機構存儲在根級別集合中的事實實際上更多是一種障礙而非益處,因爲它不允許遞歸循環。
我試圖使用選擇對象搜索來查找聚集的物體,但它太麻煩了,並且很麻煩。
確定Body是否通過另一個Body中的布爾實體操作進行聚合的最佳解決方案是使用「InBooleanOperation」方法。這沒有很好的記錄,這就是爲什麼我在這裏發佈。
它返回一個簡單的真或假。就像這樣:
Body CurB = MyBodies.Item(x);
Boolean InBoolOpp = CurB.InBooleanOperation;
if (InBoolOpp == false)
{
// Code here
}
作爲認定嵌套機構的家長,我還沒有想出來,但我會後一旦我做的。
您是對的,所有主體都被視爲在結構樹的根部。在VBA中,您可以選擇一個物體,然後在裏面搜索物體。因此,首先使用.InBooleanOperation屬性來查看主體是否位於樹的根部...如果是,選擇它並使用下面的代碼搜索其他主體。
Dim oPartDoc as PartDocument
Set oPartDoc = CATIA.ActiveDocument
Dim oPart as Part
set oPart = oPartDoc.part
Dim oSelection as Selection
Set oSelection = oPartDoc.Selection
Dim cBodies as New Collection
Dim oBody As Body
Set oBody = oPart.Bodies.Item(1)
oSelection.Clear
oSelection.Add oBody 'Add the body to the selection object
oSelection.Search "Type=Body,sel" 'Search in the selected object
'All bodies in the selected body are added to the selection object
'Loop through selected bodies and add to collection
For i = 1 to oSelection.Count
cBodies.add oSelection.Item(i).Value
Next
強烈建議不要使用選擇對象,除非絕對必要。它慢了1000倍,幾乎可以使用所有的處理器。 – 2016-10-13 20:53:01
我完全同意,如果您找到其他解決方案,我會很樂意聽到。 – Lardman363 2017-11-11 14:09:41
是的,我發佈它作爲上面的答案。 – 2017-11-13 07:17:51