読者です 読者をやめる 読者になる 読者になる

C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA

ProductTree の リオーダー

今日までは暇なので、こちらの動画を見ていました。
www.youtube.com


Productのリオーダーをマクロでどうやるのか知らなかったのですが、
動画に表示されているコードを見ると、単にカット&ペーストで処理するだけ
なんですね。(動画のReorder_Tree関数部分)

単純にTreeを逆にするだけですが、マネしてみました。

'vba ReverseAssyTree

Sub CATMain()
    'Doc取得
    Dim ProDoc As ProductDocument: Set ProDoc = CATIA.ActiveDocument
    
    'オプション変更
    Dim AssyMode As AsmConstraintSettingAtt
    Set AssyMode = CATIA.SettingControllers.Item("CATAsmConstraintSettingCtrl")
    Dim OriginalMode As CatAsmPasteComponentMode
    OriginalMode = AssyMode.PasteComponentMode
    
    'オプション切り替え
    AssyMode.PasteComponentMode = catPasteWithCstOnCopyAndCut
    
    'カット
    Dim Pros As Products: Set Pros = ProDoc.Product.Products
    Dim Sel As Selection: Set Sel = ProDoc.Selection
    Dim i&
    Sel.Clear
    For i = Pros.Count To 1 Step -1
        Sel.Add Pros.Item(i)
    Next
    Sel.Cut
    
    'ペースト
    With Sel
        .Clear
        .Add Pros
        .Paste
        .Clear
    End With
    
    'オプション戻し,UpDate
    AssyMode.PasteComponentMode = OriginalMode
    ProDoc.Product.Update
End Sub

動画のコードでは、Selectionを2個使用していますが、理解していれば
1個だけで十分だとわかります。
(マクロの記録を取ると確かに2個利用したものになりました)

実際に試してみると、オプションの切り替えが肝のようです。

これ自体に利用価値は無いと思いますが、任意の順に(アルファベット順とか)
Selection.Addすれば良いだけなのです。