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

C#ATIA

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

選択セットを利用する

普段選択セットを利用しないのですが、何となくマクロで操作できるものか
調べてみました。 無いんですよね、サンプルが。

SelectionSetsクラスが存在しているのは判るのですが、どうやって取得
すれば良いのか全く不明だったのですが、こちらに記載されていました。
COE : Forums : CreateSelectionSet

どうやってこんなの調べるんだろう・・・。

サンプルコードです。

'vba
Sub CATMain()
    '準備
    Dim PDoc As PartDocument: Set PDoc = CATIA.ActiveDocument
    Dim Pt As Part: Set Pt = PDoc.Part
    Dim Sel As Selection: Set Sel = PDoc.Selection
    
    '選択セットコレクションの取得
    Dim SelSets As SelectionSets '型指定してもエラーになりませんでした
    Set SelSets = PDoc.Product.GetItem("CATIAVBSelectionSetsImpl")
    
    '選択セット作成
    Call SelSets.CreateSelectionSet("hoge")
    
    '指定した選択セットにエレメント追加
    '事前に選択する事で可能です。試しにパーツボディを入れます。
    Sel.Add Pt.MainBody
    Call SelSets.AddCSOIntoSelectionSet("hoge")
    
    Stop '確認用
    
    '選択セットをリネーム
    Call SelSets.RenameSelectionSet("hoge", "piyo")
    
    '選択セットを利用し選択状態にする
    '動作確認の為、事前にクリアしておきます
    Sel.Clear
    Call SelSets.PutSelectionSetIntoCSO("piyo")
    
    '選択セットのリストを取得 - エラーで使い方判らない
    Dim SSList As Variant
    'Call SelSets.GetListOfSelectionSet(SSList) 'NG
    
    '選択セット削除
    '削除後も選択状態は保たれています
    Call SelSets.DeleteSelectionSet("piyo")
End Sub

個別の "SelectionSet" のようなクラスは存在していないようで、
選択セット名とSelectionクラスを使っての利用になるようです。

既存の選択セットにエレメントを追加するAddCSOIntoSelectionSet関数は
存在しているのですが、"エレメントを除去" に該当する関数が
無さそうです。
f:id:kandennti:20160525175210p:plain

GetListOfSelectionSet関数は、Partファイル内の選択セットのリストを
取得する為の関数のようですが、エラーになり使い方が判らなかったです。
選択セットを作成する際、重複する名前でもエラーにならなかった為、
事前にチェックする必要があるような気がするので、リストを取得したかった
のですが・・・。ちょっと危険な香りがします。


同一の複数の要素を何度も選択するようなマクロの場合、ループ内で
Selection.Addを使ってグリグリやらなきゃならないのですが、
一度選択セットを作ってしまえば、すっきりしたコードで書けそうな
予感です。
(でも選択セットは、手動の時の方が価値が高いと思いますが)


以下は、忘れちゃいそうなので個人的なメモです。
AutomationManual内の説明書きで略語がチラホラ出てくるのですが、
何の略語かわからない時が多いです。
CSO → Current Set of Objects
・HSO → Highlighted Set of Objects
・COG → Center of Gravity