-1

以下を選択するマクロをプログラムしたいと思います。

  • 「name_1」という名前のすべてのボディを、「新しいグループ 1」という名前の新しいボディに追加します
  • 「name_2」という名前のすべてのボディを、「新しいグループ 2」という名前の新しいボディに追加します
  • 「name_3」という名前のすべてのボディを、「新しいグループ 3」という名前の新しいボディに追加します

CATIA R20 でこのコードを書き、正常に動作しました。すべてのボディを新しいボディに追加します。しかし、CATIA R19 と R24 でマクロを実行しようとしましたが、うまくいきません! R19/R24 では、「name_1」という名前のすべてのボディを追加するのではなく、新しいボディに 1 つのボディのみを追加します!

Sub CATMain()
    Dim partDocument1 As PartDocument    
    Set partDocument1 = CATIA.ActiveDocument    
    Set objSel = partDocument1.Selection

    Dim part1 As Part    
    Set part1 = partDocument1.Part
    Dim bodies1 As Bodies    
    Set bodies1 = part1.Bodies

    Set shapeFactory1 = part1.ShapeFactory    
    Set bodies1 = part1.Bodies    
    Dim body1 As Body    
    Set body1 = bodies1.Item("PartBody")    
    Dim shapes1 As Shapes    
    Set shapes1 = body1.Shapes    
    objSel.Clear

    '******************name_1*********************    
    objSel.Search ("Name=name_1,all")    
    objcount = objSel.Count    

    Set body1 = bodies1.Add()    
    body1.Name = "new_name_1"

    Set body1 = bodies1.Item("new_name_1")
    part1.InWorkObject = body1

    For i = 1 To objcount
    Set body11 = bodies1.Item("name_1")
    Set add1 = shapeFactory1.AddNewAdd(body11)
    Next
    objSel.Clear

End Sub
4

1 に答える 1

0

Catia では、同じ名前のフィーチャーが複数ある場合、Catia は最初のフィーチャーのみを認識します。したがって、次の場合:

Set body11 = bodies1.Item("name_1")

以前に「name_1」という名前のすべてのボディを検索しましたが、複数ある場合は最初のボディのみが取得されます。

だから私は次のようなことをします:

Sub CATMain()
Dim partDocument1 As PartDocument    
Set partDocument1 = CATIA.ActiveDocument    
Set objSel = partDocument1.Selection

Dim part1 As Part    
Set part1 = partDocument1.Part
Dim bodies1 As Bodies    
Set bodies1 = part1.Bodies

Dim cBodies as new collection

Set shapeFactory1 = part1.ShapeFactory    
Set bodies1 = part1.Bodies    
Dim body1 As Body    
Set body1 = bodies1.Item("PartBody")    
Dim shapes1 As Shapes    
Set shapes1 = body1.Shapes    
objSel.Clear

'******************name_1*********************    
objSel.Search ("Name=name_1,all")    
objcount = objSel.Count    

'Check if search found something
If objcount > 0 then
    'add selected objects to a collection
     For i = 1 To objcount
        cBodies.Add objSel.Item(i).value
     next
     objSel.clear

     Set body1 = bodies1.Add()    
     body1.Name = "new_name_1"

    'Set body1 = bodies1.Item("new_name_1") 'You dont need to do this because you set it 3 lines up
    'part1.InWorkObject = body1 'Not needed, Any new feature will automatically be the inworkobject

For i = 1 To objcount
    Set add1 = shapeFactory1.AddNewAdd(cBodies1.Item(i))
Next

part1.UpdateObject body1 'Update the body

End if

End Sub
于 2015-09-20T12:30:45.720 に答える