普段選択セットを利用しないのですが、何となくマクロで操作できるものか
調べてみました。 無いんですよね、サンプルが。
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関数は
存在しているのですが、"エレメントを除去" に該当する関数が
無さそうです。
GetListOfSelectionSet関数は、Partファイル内の選択セットのリストを
取得する為の関数のようですが、エラーになり使い方が判らなかったです。
選択セットを作成する際、重複する名前でもエラーにならなかった為、
事前にチェックする必要があるような気がするので、リストを取得したかった
のですが・・・。ちょっと危険な香りがします。
同一の複数の要素を何度も選択するようなマクロの場合、ループ内で
Selection.Addを使ってグリグリやらなきゃならないのですが、
一度選択セットを作ってしまえば、すっきりしたコードで書けそうな
予感です。
(でも選択セットは、手動の時の方が価値が高いと思いますが)
以下は、忘れちゃいそうなので個人的なメモです。
AutomationManual内の説明書きで略語がチラホラ出てくるのですが、
何の略語かわからない時が多いです。
・CSO → Current Set of Objects
・HSO → Highlighted Set of Objects
・COG → Center of Gravity