SelectElement2メソッドの使い方|CATIAマクロの作成方法

Selectionオブジェクト」にはマクロ実行中にユーザーの選択を可能にするための『SelectElement2メソッド』『SelectElement3メソッド』『SelectElement4メソッド』という3種類のメソッドがあります。

今回はその中でも複数選択が可能な『SelectElement2メソッド』の使い方を解説していきます。

その他のSelectElement系メソッドの使い方は下記リンクを参照下さい。
SelectElement3メソッドの使い方
SelectElement4メソッドの使い方

 

SelectElement2メソッドとは

SelectElement2はマクロ実行中にユーザーがオブジェクトを選択することができるメソッドです。
イメージとしてはInputBox関数と同じで、マクロの処理の途中に「ユーザーのインプット」というフェーズが入り込みます。

InputBox関数の場合は文字列をインプットすることができますが、SelectElement2メソッドの場合は選択したオブジェクトをインプットすることができます。(はじめのうちはInputBoxのオブジェクト入力verと思っておけば大丈夫です)

ユーザーが選択したオブジェクトを取得できるということは、
そのオブジェクトをVBAで操作することが可能になるということです
(gif画像でいうと選択した形状セットに対して”中に形状セットを作成”という操作を行っています)

このように、このメソッドを使うことで完全に決められた動作を行うだけではなく、ユーザーが選択したものに応じて柔軟な処理を行うマクロにすることができます。
 

 icon-edit MEMO SelectedElementに注意  Selectionオブジェクトのメソッドの中には「Itemメソッド」という、選択しているオブジェクトの中から任意のオブジェクトを1つだけ取り出すことのできるメソッドが存在します。
(詳しくはSelectionオブジェクトのItemメソッドの項を参照)
 
このItemメソッドで取得したオブジェクトは「SelectedElementオブジェクト」として取得されます。あまり聞き覚えのないオブジェクトかもしれませんが、以下のように省略されて使われていることが多いです。

名前が似ているので書き間違えなどには注意しましょう。
(「SelectElement1」メソッドが無いのもこのオブジェクトの存在が原因かも?)

 

SelectElemen2メソッドの使い方

SelectElement2メソッドを使うには以下のような構文を書きます。
※このメソッドはSelectionとして宣言するとエラーが発生するためVariant型で宣言します。

 icon-code SelectElement2メソッド

Dim SEL 
Set SEL = CATIA.ActiveDocument.Selection
 
Dim Status As String
Status = SEL.SelectElement2(iArray, iMsg, iBoolean)

このメソッドによってオブジェクトが選択された場合 、文字列型の変数「Status」には“Normal”という文字列が返ってきます。また、選択前に[Esc]キーが押された場合は“Cancel”、[Ctrl]+[Z]キーが押された場合は”Undo”、[Ctrl]+[Y]キーが押された場合は“Redo”という文字列が返ってきます。

この返り値を使って「If Status <> “Normal” Then」という条件(正常に選択されなかった場合)の処理もあわせて書いておくのが一般的です。

上記の構文が基本の書き方で青文字部分を自身のマクロに合わせて書き換えていきます。
それぞれの青文字部分に入れる内容は下記のとおりです。

 

選択フィルターの設定(iArray)

iArrayにはユーザー選択時にフィルターをかけたいオブジェクトのタイプ名が入った配列を入れます。
ユーザー選択時にここで指定したオブジェクトしか選択できない状態になります。

 icon-code SelectElement2メソッド(iArray)

Dim Filter
Filter = Array(“HybridBody”) ‘HybridBody(形状セット)のみ選択可能になる

ユーザーに選択させたいオブジェクトが決まっている場合はここで指定しましょう。
オブジェクトを複数設定したい場合は「Array(“HybridBody”,”Body”)」のように配列の後ろにオブジェクト名を追加してくだけでOKです。

また、フィルターをかける必要がない場合は、配列に”AnyObject”を入れておけばOKです。

「このオブジェクトに対してフィルターをかけたいけど、オブジェクト名がわからない!」という方は、「TypeName関数」ページでオブジェクト名を調べるサンプルマクロを用意しているのでそちらをご利用ください。

 

選択時のメッセージの指定(iMsg)

iMsgにはユーザー選択時に表示するメッセージを入力します。

 icon-code SelectElement2メソッド(iMsg)

Dim Msg As String
Msg = “形状セットを選択してください。”

メッセージはメッセージボックスで立ち上がるわけではなくステータスバーに表示されます。
上記のように書くとユーザー選択時に以下のようにメッセージが表示されます。

 

事前選択の設定(iBoolean)

iBooleanには「False」もしくは「True」を入力します。
ここではユーザーが選択するとき、選択状態のものがすでにあった場合にその選択されているオブジェクトをどうするのかを指定することができます。

Falseの場合 → その選択を無視して次に選択されるオブジェクトを有効とします。
Trueの場合  → その選択を有効とします。(事前選択)

 

コピペ用コード

下記のコードは上記までの内容をまとめたサンプルコードです。
コードが難しく理解できない方は以下をコピペしてiArray, iMsg, iBooleanの中身だけ自分のマクロに合ったものに変更すればOKです。

上記コードの場合、ユーザーが選択したオブジェクトはSELItemという変数に格納されます。

あとはこのSELItemを使ったコードを上記コード以降に書いておけば、ユーザーが選択したオブジェクトに対して処理を行うことができます。

 

サンプルマクロ

最後にSelectElement2メソッドを使った簡単なサンプルマクロを紹介します。
ここで紹介するマクロは冒頭でも出てきた以下のようなマクロです。

マクロの機能をまとめると以下のとおりです。

 icon-wrench マクロの機能まとめ ・選択した形状セットの中に新たな形状セットを作成する
・その時の形状セットの名前は「New Geometrical Set」とする

ほとんど [形状セット…]コマンドと同じ機能ですが、ここで重要なのはVBAを使ってユーザーが選択したものに対して処理を行えているという点です。

SelectElement2はユーザーと”対話”ができるCATIA VBAの中でも数少ないメソッドの1つです。
以下のサンプルコードでは”どのようにして選択したオブジェクトに対して操作を行っているか”に注目してコードを読んでみて下さい。

 
サンプルマクロコード

 

まとめ

今回は「SelectElement2メソッド」についての内容でした。

SelectElement2メソッドはCATIAマクロを作るうえで非常に重要なメソッドです。
SelectElement3,4は知っていたほうが便利なメソッドですが、最悪知らなくても問題はありません。
ただSelectElement2に関しては知らないと困るメソッドです。

ユーザーの選択を受け取る方法としてSelectElement2メソッド以外の選択肢はほぼありません。
(UserformとSelectionオブジェクトを使うことでSelectElement2,3と同じような機能を作ることもできますが、それ以外の方法は今のところ思いつきません)

もし存在を今回初めて知ったという方は、ぜひこのメソッドの存在は忘れないでください。
使い方は忘れてもヘルプや本ページで確認することができるので問題ありません。
 

目次へ戻る
 

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

 

2020年9月23日CATIA, CATIAマクロ

Posted by Lic