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

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

今回はその中でも2つのドキュメント間をまたいでの選択が可能な『SelectElement4メソッド』の使い方を解説していきます。

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

 

SelectElemen4メソッドとは

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

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

SelectElement2,3ではアクティブドキュメント内のオブジェクトしか選択できませんが、SelectElement4メソッドでは非アクティブのドキュメント内にあるオブジェクトを選択することができます。

これによりアクティブドキュメントにその他のドキュメントの情報(オブジェクト)を取り込むことができます。

使いどころとして「CATDrawingからCATPartに切り替えて図面に投影する形状を取得する」という例がヘルプに記載されています。

 

SelectElement4の構文

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

 icon-code SelectElement4メソッド

Dim SEL
Set SEL = CATIA.ActiveDocument.Selection
 
Dim Status As String
Status = SEL.SelectElement4(iArray, iMsg1, iMsg2, iBooleaniDocument)

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

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

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

※SelectElement4では2つのドキュメント間でのやり取りになるため、以降では初めにアクティブなドキュメント(マクロを実行するときにアクティブなドキュメント)を『ドキュメント1』切り替えて選択をする側のドキュメントを『ドキュメント2』として解説していきます。

 
  

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

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

 icon-code SelectElement4メソッド(iArray)

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

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

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

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

 

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

iMsg1にはユーザー選択時に「ドキュメント1」に表示するメッセージを入力します。
(本メソッドではドキュメント1内のオブジェクトを選択するとマクロが中断されるため、ここでは「どのドキュメントに変更するか」などのドキュメント切り替えを促すメッセージを表示させます。)

 icon-code SelectElement4メソッド(iMsg1)

Dim Msg1 As String
Msg1 = “ドキュメントを切り替えて下さい。”

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

 

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

iMsg2にはユーザー選択時に「ドキュメント2」に表示するメッセージを入力します。

 icon-code SelectElement4メソッド(iMsg2)

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

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

 

ツールチップの設定(iBoolean)

iBooleanには「False」もしくは「True」を入力します。
ここではツールチップの表示/非表示を指定することができます。

※ツールチップ:マウスをオブジェクトに重ねた時に表示される小さなメッセ―ジ

Falseの場合 → ツールチップを非表示
Trueの場合  → ツールチップを表示

CATIAの設定でツールチップが[表示]となっている場合はどちらを入力しても表示になります。

 

ドキュメント2の設定(iDocument)

iDocumentには「ドキュメント2」となるドキュメントを入力します。

 icon-code SelectElement4メソッド(iDocument)

Dim DOC2 As Document
Set DOC2 = CATIA.Documents.Item(1)

上記のコードの場合はDocumentsコレクションの1番目にあるドキュメント(簡単にいえば1番初めに開いたドキュメント)内での選択が可能になります。
 

ドキュメントを指定しない場合は変数の宣言だけしておきます。
(「Option Explicit」でのエラーを回避するため)

 icon-code SelectElement4メソッド(iDocument)

Dim DOC2 As Document

ドキュメントを指定する/しないに関わらず、ドキュメント2のタイプがすでに決まっている場合は「Document」の部分を「PartDocument」「DrawingDocument」等に書き換えて入力して下さい。

 

コピペ用コード

下記のコードは上記までの内容をまとめたサンプルコードです。
コードが難しく理解できない方は以下をコピペしてiArray,iMsg1,iMsg2,iBoolean,iDocumentの中身だけ書き換えればOKです。

上記コードの場合、ユーザーが選択したオブジェクトはSELItemという変数に格納されます。
SelectElement2,3メソッドとは違い、選択したオブジェクトの取得方法が「DOC2.Selection.Item(1).Value」となる点だけ注意しておきましょう。

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

 

サンプルマクロ

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

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

 icon-wrench マクロの機能まとめ ・CATDrawingの「シート.1」を選択したオブジェクトの名前にする
※アクティブドキュメントがCATDrawingの状態でマクロを実行しないとエラーが発生

このマクロの肝はSelectElement4メソッド特有の非アクティブのドキュメントからオブジェクトをインプットするという点です。
2つのドキュメント間でのやりとりのため少しややこしく感じますが、上記で設定した内容がそれぞれどう関わってくるかをそれぞれ把握しておきましょう。

 
サンプルマクロコード

 

まとめ

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

SelectElement4メソッドは他のSelectElement系のメソッドとは違い、ユーザーに非アクティブのドキュメントにあるオブジェクトを選択させることができます

マクロの内容によっては複数のドキュメント間を行き来する動作が必要になってくる時があります。
その場合はこメソッドを使うことで解決できるので、存在自体は覚えておきましょう。

 

目次へ戻る
 

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

 

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

Posted by Lic