C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

アクティブシートの最初のビューをコピペし形状を削除

しろくろさんがかなりヒントを書いてくれたので、
自分なりに作ってみました。

”CATIA.HSOSynchronized使った方が早い” と書きていましたが、
試した所若干遅かったです。ごめんなさい。

'vba アクティブシートの最初のビューをコピペし形状を削除

' winAPI
#If VBA7 And Win64 Then
    Private Declare PtrSafe Function timeGetTime Lib "winmm.dll" () As Long
#Else
    Private Declare Function timeGetTime Lib "winmm.dll" () As Long
#End If

Option Explicit

Sub CATMain()
    
    Dim actdoc As DrawingDocument
    Set actdoc = CATIA.ActiveDocument
    
    Dim sel As Selection
    Set sel = actdoc.Selection
    
    Dim actSheet As DrawingSheet
    Set actSheet = actdoc.Sheets.ActiveSheet
    
    Dim vi As DrawingView
    Set vi = actSheet.Views.Item(3) '一個目のビュー
    sel.Clear

    If vi.GeometricElements.Count < 2 Then
        'GeometricElements.Countが1の場合は、
        '形状が無いみたい
        Exit Sub
    End If


    Dim t As Long
    t = timeGetTime  '時間の測定開始
    
    'CATIA.HSOSynchronized = False
    
    'ビューコピー
    sel.Add vi
    sel.Copy
    
    sel.Clear
    
    'ビューペースト
    sel.Add actSheet
    sel.Paste
    
    'クローンしたビューの選択
    sel.Clear
    sel.Add actSheet.Views.Item(actSheet.Views.Count)

    '現行選択の形状を検索
    sel.Search "CATDrwSearch.2DGeometry,sel"
    
    Dim removeCount As Long
    removeCount = sel.Count
    
    '削除
    '昔はDeleteよりCutの方が早いと言われていたのですが
    'Deleteの方が早いです
    sel.Delete
    'sel.Cut
    
    'CATIA.HSOSynchronized = True
    
    '削除数と処理時間
    MsgBox removeCount & " : " & (timeGetTime - t) * 0.001 & "s"
    
End Sub

検索-削除を複数回行うより1回の方がきっと早いだろうと
思われるため、こちらの設定をマクロの記録しました。

緑部分のオン/オフがCATIA.HSOSynchronizedなのかと思って
いたのですがどうなんでしょうかねぇ。
r1 Application (Object)


どうしても複数条件が必要な検索をマクロで使用する必要が
ある場合は、拡張で何とか条件を作った方が良いかな?とも
思っています。



又、何で手動で手間がかかるのか? が少し分かりました。
実際に検索した際、こんな表示になります。

テストした際のデータに形状が14015個有るのに対して、
検索後に選択されたのは1290個 と言う状態です。
この場合、選択し検索し削除し、再度選択し検索し削除・・・
と、10回以上行う必要がある為ではないかな?と感じてます。

僕の設定が偶々1290個になっているのですが、これは
オプションの設定で変更できます。

試した所、MAXでは5000でした。量が多いとやっぱり複数回
行う必要があるかな・・・。