Selectionオブジェクト|CATIAマクロの作成方法

CATIAマクロを作成している時、仕様ツリー上にあるオブジェクトを選択し、そのオブジェクトに対して操作を行いたい場合があると思います。
今回はそんなときに有効な『Selectionオブジェクト』について詳しく解説していきます。

今回学べる内容は以下のとおりです。

 Selectionオブジェクトとは
 Selectionオブジェクトのプロパティの使い方
Selectionオブジェクトのメソッドの使い方

 icon-exclamation-triangle 注意 

CATIAのオブジェクトを理解するには前提として『Infrastructure Automation Objects』について理解している必要があります。
『Infrastructure Automation Objects』が何を意味しているのか分からない方は、まずオブジェクトとコレクション/プロパティとメソッドとは 』を先に読むことをオススメします。

 

Selectionオブジェクトとは

Selectionオブジェクトとはその名のとおり、『選択(Selection)』を行うためのオブジェクトです。
このオブジェクトを使うことで仕様ツリー上のオブジェクトの選択、コピー、削除などの主にコンテキストメニューから行うことのできる操作をマクロで行うことができるようになります。

Selectionオブジェクトは以下のとおり『Document』の直下のオブジェクトです。

そのためSelectionオブジェクトを使うには、まずはじめにDocumentから定義する必要があります。

何かを選択するということはそのドキュメントは常にアクティブ状態となるため、Documentとしてはアクティブドキュメントを定義します。

アクティブドキュメントの定義は、そのさらに親である[Application]の[ActiveDocument]プロパティを使います。[Application]はコードでは「CATIA」と書くので最終的に以下のような構文ができあがります。

 icon-code Selectionオブジェクトの定義

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つ用意し、以下のように書くことで選択しているオブジェクト数を取得することができます。

 icon-code Countプロパティ

Dim SelectInt As Integer
SelectInt = sel.Count

 
たとえば仕様ツリー上のオブジェクトをいくつか選択した状態で以下のコードを実行すれば、選択しているオブジェクトの数をメッセージボックスで表示することができます。

 icon-code 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メソッドで任意のオブジェクトを追加するには以下のように書きます。

 icon-code Addメソッド

sel.Add = オブジェクト

オブジェクト」にはオブジェクトの入った変数もしくはオブジェクトを表すコードを書きます。
(任意のオブジェクトを取得するには『VBAでオブジェクトを取得』ページを参照ください)

たとえば「サーフェス.1」というオブジェクトが入った「surf1」という変数があったとします。
このときこの「サーフェス.1」を選択するには以下のように書きます。

 icon-code Countプロパティ使用例

Dim sel As Selection
Set sel = CATIA.ActiveDocument.Selection

 

sel.Add surf1

 

Clearメソッド

Clearメソッドは現在の選択状態をすべて解除することができます。
Clearメソッドを使うには以下のように書きます。

 icon-code Clearメソッド

sel.Clear

通常マウスで選択する場合は何かを選択したら、それまで選択していたものが解除されます。
しかしVBAではそのような操作は行われないため、しっかりとコードで「解除する」という操作を記述する必要があります

Clearメソッドはすべて解除しますが、どれか1つだけ解除したいという場合には後述している「Removeメソッド」を使います。

 

Copyメソッド

Copyメソッドは現在選択しているオブジェクトをコピーすることができます。
Copyメソッドを使うには以下のように書きます。

 icon-code Copyメソッド

sel.Copy

 

Cutメソッド

Cutメソッドは現在選択しているオブジェクトを切り取ることができます。
Cutメソッドを使うには以下のように書きます。

 icon-code Cutメソッド

sel.Cut

 

Deleteメソッド

Deleteメソッドは現在選択しているオブジェクトを削除することができます。
Deleteメソッドを使うには以下のように書きます。

 icon-code Deleteメソッド

sel.Delete

 

Itemメソッド

Itemメソッドは現在選択しているオブジェクトの中から任意のオブジェクトのみを取り出すことができます。
Itemメソッドを使うには以下のように書きます。

 icon-code Itemメソッド

sel.Item(インデックスもしくは“オブジェクト名”)

 
インデックス

インデックスとは自動で設定される番号です。
Selectionオブジェクトの場合、選択したものから順に1,2,3…と割り振られていきます
そのため以下の画像のように選択状態のオブジェクトをコードで表すことができます。
(下の画像はツリーの上にあるものから順に選択していった場合)

ただ注意しなければならない点もあります。
上の画像の場合、選択しているオブジェクトは4つですが、これに対して「sel.Item(5)」などの数のあっていないものを使おうとするとエラーが発生するため注意が必要です。
 

オブジェクト名

“オブジェクト名”はその名のとおりオブジェクトの名前です。
選択しているオブジェクトの中から名指しでオブジェクトを取り出すことができます。
上の画像の場合、「sel.Item(1)」と「sel.Item(“XY平面”)」は同じものを表します。

コチラの場合も「sel.Item(“サーフェス.1”)」のように選択しているオブジェクトたちと名指しするオブジェクト名が一致していない場合にはエラーが発生するので注意が必要です。

 

Pasteメソッド

Pasteメソッドは現在選択しているオブジェクトに対して、クリップボードの中身を貼り付けることができます。Pasteメソッドを使うには以下のように書きます。

 icon-code Pasteメソッド

sel.Paste

 

PasteSpecialメソッド

PasteSpecialメソッドは現在選択しているオブジェクトに対して、クリップボードの中身を”形式を選択して“貼り付けることができます。PasteSpecialメソッドを使うには以下のように書きます。

 icon-code PasteSpecialメソッド

sel.PasteSpecial(“フォーマット“)

フォーマットには貼り付ける際の”形式”を表す文字列を入力します
以下はCATPartで主に使われる3種の形式で貼り付ける場合の書き方です。

 icon-code PasteSpecialメソッド

sel.PasteSpecial(“CATPrtCont“)         ‘パーツドキュメントで指定されている通り
sel.PasteSpecial(“CATPrtResult“)        ‘リンクの結果として
sel.PasteSpecial(“CATPrtResultWithOutLink“) ‘結果として

その他の形式を表す文字列はr1 Selection(Object) – PasteSpecialもしくはCAA V5 Visual Basic help(オンラインヘルプ)に記載されています。

 

Removeメソッド

Removeメソッドは現在の選択内容から任意のオブジェクトの選択を解除することができます。
Clearメソッドと違い、任意のオブジェクトのみの選択を解除したい場合に有効なメソッドです。
Removeメソッドを使うには以下のように書きます。

 icon-code Pasteメソッド

sel.Remove(インデックス)

インデックスはItemメソッドのときと同じ考え方で、選択したものから順に自動で割り振られていきます。

 

Searchメソッド

Searchメソッドは任意の条件を付けてオブジェクトを検索し、その検索結果を変数selに代入(つまりは検索結果をすべて選択状態に)することができます。
Searchメソッドを使うには以下のように書きます。

 icon-code Searchメソッド

sel.Search(“照会コード)

メソッドの内容からもわかる通り、Searchメソッドは[検索]コマンドと同じ操作を行います
実際 [検索]コマンドを『マクロの記録』で記録すると上記のコードが取得できます。

照会コードとは簡単にいうと「検索の条件をコード化したもの」のことです。
[検索]コマンドには以下のような[照会:]というエリアがあります。

(上の画像は「ジェネレーティブ・シェイプ・デザイン」の「形状セット」を「すべての範囲」で検索したとき)

Searchメソッドの構文にこの照会コードを入力することで[検索]コマンドで検索した内容と同じ検索を行うことができます。つまり以下のコードではGSDワークベンチの形状セットを全範囲で検索し、その検索結果をすべて選択状態にすることができます。

 icon-code Searchメソッド例

sel.Search(“ジェネレーティブ・シェイプ・デザイン.形状セット,all)

 icon-edit 照会コードをコピーする [照会:]の横にある[お気に入りに追加…]コマンドを押すと以下のような[お気に入りの紹介を作成…]ウィンドウが立ち上がります。
 

 
このウィンドウ内では照会コードをコピーをすることができるので、Searchメソッドを使う場合にはうまく活用しましょう。
コピー後は[キャンセル]で閉じれば何も作成されずにウィンドウを閉じることができます。

 

SelectElement2,3,4メソッド

「SelectElement2メソッド」「SelectElement3メソッド」「SelectElement4メソッド」はユーザーが選択したオブジェクトを取得することができます。

これらのメソッドを使うことで、以下のように“ユーザーが選択したオブジェクト”に対して”何らかの操作を行う”ということが可能になります。(たとえば選択した形状セット内に何かを作成/コピペしたり、選択したオブジェクトの名前を取得したりなど)

 
それぞれのメソッドはユーザー選択時に以下のような違いがあります。

SelectElement2:アクティブドキュメント内で1つのオブジェクトの選択が可能
SelectElement3:アクティブドキュメント内で複数のオブジェクトの選択が可能
SelectElement4:非アクティブドキュメント内で1つのオブジェクトの選択が可能 

各メソッドの詳細/使い方については下記リンクの解説ページを参照ください。
SelectElement2の使い方』『SelectElement3の使い方』『SelectElement4の使い方

 

IndicateOrSelectElement2Dメソッド

IndicateOrSelectElement2Dメソッドはユーザーがクリックした地点の座標を取得することのできます。

このメソッドを使うことで、ユーザーのクリックした位置にテキストボックスやテーブルを作成することが可能になります。上記のSelectElement2,3,4メソッドと同じくユーザー選択を取得し以降の処理で利用することのできる非常に有能なメソッドです。

本メソッドの詳細/使い方については下記リンクの解説ページを参照ください。
IndicateOrSelectElement2Dメソッドの使い方

 

まとめ

今回はCATIAマクロでのSelectionオブジェクトについての内容でした。
マクロではこのSelectionオブジェクトはかなり使用頻度が多く、実用性も高いのでしっかりと覚えておきましょう。

 

目次へ戻る
 

icon-book CATIAマクロを本気で勉強するなら

 

2022年7月28日CATIA, CATIAマクロ, VBA

Posted by Lic