C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA(最近はPMillマクロとFusion360APIが多い)

指定ビュー内の2Dコンポーネントを削除する

「ビュー内の2Dコンポーネントを削除する方法」について御質問頂きました。

2Dコンポーネントについては、DrawingView内のComponentsプロパティの
コレクションが所有した状態になっています。

'vba 指定ビュー内の2Dコンポーネントを削除する
Option Explicit

Sub CATMain()

    Dim dDoc As DrawingDocument
    Set dDoc = CATIA.ActiveDocument
    
    'ビュー選択
    Dim msg As String
    msg = "2Dコンポーネントを削除するビューを選択してください / ESC-キャンセル"
    
    Dim sel 'As selection
    Set sel = dDoc.selection
    
    Dim status As String
    sel.Clear
    status = sel.SelectElement2(Array("DrawingView"), msg, False)
    If Not status = "Normal" Then Exit Sub
    
    Dim vi As DrawingView
    Set vi = sel.Item2(1).Value
    sel.Clear

    '2Dコンポーネント数確認
    If vi.Components.Count < 1 Then
        msg = vi.Name & " には、2Dコンポーネントが有りません"
        MsgBox msg
        Exit Sub
    End If
    
    '確認
    msg = vi.Name & " には、" & vi.Components.Count & _
        "個の2Dコンポーネントが有ります。" & vbCrLf & _
        "全て削除しますか?"
    
    If MsgBox(msg, vbQuestion + vbYesNo) = vbNo Then
        Exit Sub
    End If
    
    '2Dコンポーネント削除
    
    CATIA.HSOSynchronized = False
    
    Dim comp As DrawingComponent
    For Each comp In vi.Components
        sel.Add comp
    Next
    sel.Delete
    
    CATIA.HSOSynchronized = True
    
    '終わり
    MsgBox "done"
End Sub

同様に
テキスト : Texts
寸法 : Dimensions
等も検索を使用せずに同様の処理が可能です。