Selectionオブジェクト|CATIAマクロの作成方法
CATIAマクロを作成している時、仕様ツリー上にあるオブジェクトを選択し、そのオブジェクトに対して操作を行いたい場合があると思います。
今回はそんなときに有効な『Selectionオブジェクト』について詳しく解説していきます。
今回学べる内容は以下のとおりです。
Selectionオブジェクトとは
Selectionオブジェクトのプロパティの使い方
Selectionオブジェクトのメソッドの使い方
CATIAのオブジェクトを理解するには前提として『Infrastructure Automation Objects』について理解している必要があります。
『Infrastructure Automation Objects』が何を意味しているのか分からない方は、まず『オブジェクトとコレクション/プロパティとメソッドとは 』を先に読むことをオススメします。
Selectionオブジェクトとは
Selectionオブジェクトとはその名のとおり、『選択(Selection)』を行うためのオブジェクトです。
このオブジェクトを使うことで仕様ツリー上のオブジェクトの選択、コピー、削除などの主にコンテキストメニューから行うことのできる操作をマクロで行うことができるようになります。
Selectionオブジェクトは以下のとおり『Document』の直下のオブジェクトです。
そのためSelectionオブジェクトを使うには、まずはじめにDocumentから定義する必要があります。
何かを選択するということはそのドキュメントは常にアクティブ状態となるため、Documentとしてはアクティブドキュメントを定義します。
アクティブドキュメントの定義は、そのさらに親である[Application]の[ActiveDocument]プロパティを使います。[Application]はコードでは「CATIA」と書くので最終的に以下のような構文ができあがります。
Dim sel As Selection
Set sel = CATIA.ActiveDocument.Selection
この構文により、「アクティブウィンドウ内の選択に関する操作」を扱うことのできる変数『sel』を定義することができます。(変数名は好きに変えてもらって構いません)
あとはこの変数selに対してプロパティとメソッドを使い、さまざまな操作を行っていきます。
Selectionオブジェクトにはかなり多くのプロパティとメソッドがあるため、代表的なものを抜粋すると以下のようなものがあります。
プロパティ名 | プロパティ内容 |
Count | 現在選択しているオブジェクトの数を返す |
VisProperties | 現在選択しているオブジェクトのグラフィックプロパティを管理 |
メソッド名 | メソッド内容 |
Add | 現在の選択状態に新たなオブジェクトを追加する |
Clear | 現在の選択状態をすべて解除する |
Copy | 現在選択しているオブジェクトをコピーする |
Cut | 現在選択しているオブジェクトを切り取る |
Delete | 現在選択しているオブジェクトを削除する |
Item | 現在選択している複数のオブジェクトの中から1つだけを取り出す |
Paste | 現在選択しているオブジェクトにクリップボードの中身を貼り付け |
PasteSpecial | 〃 クリップボードの中身を形式を選択して貼り付け |
Remove | 現在の選択内容から任意のオブジェクトの選択を解除する |
Search | オブジェクト検索をし、その結果をすべて選択状態にする |
SelectElement2,3,4 | ユーザーが選択したオブジェクトを取得する |
IndicateOrSelectElement2D | ユーザーがクリックした地点の座標を取得する(CATDrawing) |
そのほかのプロパティ/メソッドに関しては『CAA V5 Visual Basic Help』で『Infrastructure Automation Objects』のページから確認ください。
プロパティ
Selectionオブジェクトのプロパティでは選択しているオブジェクトの数を数えたり、選択しているオブジェクトの見た目を変更したりすることができます。
見た目の変更に関しては別の『VisPropertySetオブジェクト』というものを理解する必要があるので、ここでの詳しい操作の説明は割愛していきます。
Countプロパティ
Countプロパティは現在選択しているオブジェクトの数を整数型で返します。
つまりは整数型の変数を1つ用意し、以下のように書くことで選択しているオブジェクト数を取得することができます。
Dim SelectInt As Integer
SelectInt = sel.Count
たとえば仕様ツリー上のオブジェクトをいくつか選択した状態で以下のコードを実行すれば、選択しているオブジェクトの数をメッセージボックスで表示することができます。
Dim sel As Selection
Set sel = CATIA.ActiveDocument.Selection
Dim SelInt As Integer
SelInt = sel.Count
MsgBox “現在選択しているオブジェクトは” & SelInt & “個です。”
これにより「SelInt」という整数型の変数に、選択しているオブジェクトの個数がしっかりと入っていることが確認できます。
VisPropertiesプロパティ
VisPropertiesプロパティでは、現在選択しているオブジェクトのグラフィックプロパティを取得したり、変更したりすることができます。(簡単に言えば色や線種、透明度の変更など)
VisPropertiesプロパティを使うにはSelectionオブジェクトの直下にある
『VisPropertySetオブジェクト』を使用する必要があります。
VisPropertySetオブジェクトについては『VisPropertySetオブジェクト』ページを参照ください。
メソッド
Selectionオブジェクトのメソッドはコピーや貼り付け、切り取り、削除などのコンテキストメニューを使ってマウスで操作することのできるものが主となっています。
そのため考え方はマウスでの操作をイメージすると取っ掛かりやすい内容となっています。
Addメソッド
Addメソッドは変数selに任意のオブジェクトを追加することができます。
簡単にいうと、現在選択しているオブジェクトに加え、任意のオブジェクトも選択状態にすることができます。([Ctrl]キーを押しながら複数選択しているイメージ)
Addメソッドで任意のオブジェクトを追加するには以下のように書きます。
sel.Add = オブジェクト
「オブジェクト」にはオブジェクトの入った変数もしくはオブジェクトを表すコードを書きます。
(任意のオブジェクトを取得するには『VBAでオブジェクトを取得』ページを参照ください)
たとえば「サーフェス.1」というオブジェクトが入った「surf1」という変数があったとします。
このときこの「サーフェス.1」を選択するには以下のように書きます。
Dim sel As Selection
Set sel = CATIA.ActiveDocument.Selection
sel.Add surf1
Clearメソッド
Clearメソッドは現在の選択状態をすべて解除することができます。
Clearメソッドを使うには以下のように書きます。
sel.Clear
通常マウスで選択する場合は何かを選択したら、それまで選択していたものが解除されます。
しかしVBAではそのような操作は行われないため、しっかりとコードで「解除する」という操作を記述する必要があります。
Clearメソッドはすべて解除しますが、どれか1つだけ解除したいという場合には後述している「Removeメソッド」を使います。
Copyメソッド
Copyメソッドは現在選択しているオブジェクトをコピーすることができます。
Copyメソッドを使うには以下のように書きます。
sel.Copy
Cutメソッド
Cutメソッドは現在選択しているオブジェクトを切り取ることができます。
Cutメソッドを使うには以下のように書きます。
sel.Cut
Deleteメソッド
Deleteメソッドは現在選択しているオブジェクトを削除することができます。
Deleteメソッドを使うには以下のように書きます。
sel.Delete
Itemメソッド
Itemメソッドは現在選択しているオブジェクトの中から任意のオブジェクトのみを取り出すことができます。
Itemメソッドを使うには以下のように書きます。
sel.Item(インデックスもしくは“オブジェクト名”)
インデックス
インデックスとは自動で設定される番号です。
Selectionオブジェクトの場合、選択したものから順に1,2,3…と割り振られていきます。
そのため以下の画像のように選択状態のオブジェクトをコードで表すことができます。
(下の画像はツリーの上にあるものから順に選択していった場合)
ただ注意しなければならない点もあります。
上の画像の場合、選択しているオブジェクトは4つですが、これに対して「sel.Item(5)」などの数のあっていないものを使おうとするとエラーが発生するため注意が必要です。
オブジェクト名
“オブジェクト名”はその名のとおりオブジェクトの名前です。
選択しているオブジェクトの中から名指しでオブジェクトを取り出すことができます。
上の画像の場合、「sel.Item(1)」と「sel.Item(“XY平面”)」は同じものを表します。
コチラの場合も「sel.Item(“サーフェス.1”)」のように選択しているオブジェクトたちと名指しするオブジェクト名が一致していない場合にはエラーが発生するので注意が必要です。
Pasteメソッド
Pasteメソッドは現在選択しているオブジェクトに対して、クリップボードの中身を貼り付けることができます。Pasteメソッドを使うには以下のように書きます。
sel.Paste
PasteSpecialメソッド
PasteSpecialメソッドは現在選択しているオブジェクトに対して、クリップボードの中身を”形式を選択して“貼り付けることができます。PasteSpecialメソッドを使うには以下のように書きます。
sel.PasteSpecial(“フォーマット“)
フォーマットには貼り付ける際の”形式”を表す文字列を入力します
以下はCATPartで主に使われる3種の形式で貼り付ける場合の書き方です。
sel.PasteSpecial(“CATPrtCont“) ‘パーツドキュメントで指定されている通り
sel.PasteSpecial(“CATPrtResult“) ‘リンクの結果として
sel.PasteSpecial(“CATPrtResultWithOutLink“) ‘結果として
その他の形式を表す文字列はr1 Selection(Object) – PasteSpecialもしくはCAA V5 Visual Basic help(オンラインヘルプ)に記載されています。
Removeメソッド
Removeメソッドは現在の選択内容から任意のオブジェクトの選択を解除することができます。
Clearメソッドと違い、任意のオブジェクトのみの選択を解除したい場合に有効なメソッドです。
Removeメソッドを使うには以下のように書きます。
sel.Remove(インデックス)
インデックスはItemメソッドのときと同じ考え方で、選択したものから順に自動で割り振られていきます。
Searchメソッド
Searchメソッドは任意の条件を付けてオブジェクトを検索し、その検索結果を変数selに代入(つまりは検索結果をすべて選択状態に)することができます。
Searchメソッドを使うには以下のように書きます。
sel.Search(“照会コード“)
メソッドの内容からもわかる通り、Searchメソッドは[検索]コマンドと同じ操作を行います。
実際 [検索]コマンドを『マクロの記録』で記録すると上記のコードが取得できます。
照会コードとは簡単にいうと「検索の条件をコード化したもの」のことです。
[検索]コマンドには以下のような[照会:]というエリアがあります。
(上の画像は「ジェネレーティブ・シェイプ・デザイン」の「形状セット」を「すべての範囲」で検索したとき)
Searchメソッドの構文にこの照会コードを入力することで[検索]コマンドで検索した内容と同じ検索を行うことができます。つまり以下のコードではGSDワークベンチの形状セットを全範囲で検索し、その検索結果をすべて選択状態にすることができます。
sel.Search(“ジェネレーティブ・シェイプ・デザイン.形状セット,all“)
このウィンドウ内では照会コードをコピーをすることができるので、Searchメソッドを使う場合にはうまく活用しましょう。
コピー後は[キャンセル]で閉じれば何も作成されずにウィンドウを閉じることができます。
SelectElement2,3,4メソッド
「SelectElement2メソッド」「SelectElement3メソッド」「SelectElement4メソッド」はユーザーが選択したオブジェクトを取得することができます。
これらのメソッドを使うことで、以下のように“ユーザーが選択したオブジェクト”に対して”何らかの操作を行う”ということが可能になります。(たとえば選択した形状セット内に何かを作成/コピペしたり、選択したオブジェクトの名前を取得したりなど)
それぞれのメソッドはユーザー選択時に以下のような違いがあります。
SelectElement2:アクティブドキュメント内で1つのオブジェクトの選択が可能
SelectElement3:アクティブドキュメント内で複数のオブジェクトの選択が可能
SelectElement4:非アクティブドキュメント内で1つのオブジェクトの選択が可能
各メソッドの詳細/使い方については下記リンクの解説ページを参照ください。
『SelectElement2の使い方』『SelectElement3の使い方』『SelectElement4の使い方』
IndicateOrSelectElement2Dメソッド
IndicateOrSelectElement2Dメソッドはユーザーがクリックした地点の座標を取得することのできます。
このメソッドを使うことで、ユーザーのクリックした位置にテキストボックスやテーブルを作成することが可能になります。上記のSelectElement2,3,4メソッドと同じくユーザー選択を取得し以降の処理で利用することのできる非常に有能なメソッドです。
本メソッドの詳細/使い方については下記リンクの解説ページを参照ください。
『IndicateOrSelectElement2Dメソッドの使い方』
まとめ
今回はCATIAマクロでのSelectionオブジェクトについての内容でした。
マクロではこのSelectionオブジェクトはかなり使用頻度が多く、実用性も高いのでしっかりと覚えておきましょう。
CATIAマクロを本気で勉強するなら