C#ATIA

↑タイトル詐欺 主にCATIA V5 の VBA(最近はPMillマクロとFusion360APIが多い)

アクティブなツールの取得

忘れちゃうから、完全な覚書です。

アクティブなツールをエンティティとして取得するには

 entity tl = entity('tool','')

空の名前を渡すみたい。 と思ったらダイレクトに

 entity tl = tool

と、こんな感じでも良いみたいです。 tool が予約されているなら
イチイチ変数に代入する意味も無いような・・・。

つまりアクティブなツール名を取得したい場合は

 string tl = tool.name

でOKなんですね、通常は。

困ったのがツールが全くアクティブではない場合なんです。
空の文字やエンティティが返って来るのかと思っていたら、エラーとなります。
通常であれば例外で引っ掛ける様な気もするのですが
生憎、そんな処理がこの独自言語で可能なものかどうか・・・。

念の為、ツールをノンアクティブな状態でこちらを試してみると

 dialogs error off
 entity tl = tool

やっぱりエラーで止まっちゃいます。 あくまで通常処理のエラーダイアログの
表示をOFFにするだけのようです。

何か方法あるだろうと探しまくっていたら(基本的過ぎてナカナカ見つからなかった)
こんなコードで判断出来るようです。

	if entity_exists(entity('tool','')) {
		message info  'アクティブなツールは' + tool.name + 'です'
	} else {
		message info  'ツールがアクティブな状態じゃありません'
	}

entity_exists関数は、指定したエンティティがプロジェクト内に存在するかどうかを返すのですが
まさか、空の文字列指定するとは・・・。
最初の例を考えると

	if entity_exists(tool) {
・・・

これでも動きます。

個人的には、より直感的な

 bool = IsActive('フォルダ名')

のような関数を用意して欲しかった気持ちがヤマヤマ。