C#ATIA

↑タイトル詐欺 主にFusion360API 偶にCATIA V5 VBA(絶賛ネタ切れ中)

Command Logger2

こちらの続きです。
Command Logger - C#ATIA

やっと出来ました。ほとんど別物となるぐらいの改造です。
今度は実行されるコマンドが入っているパネル情報も一緒に垂れ流します。
f:id:kandennti:20201224113121p:plain
あぁ緑の部分嘘出力している・・。PCBなんて使ってないのに。

アドインを作る際、特にパネルのIDが必要なのですが、今までこちらの
サンプルコードを利用して、書き出したリストから探し出していました。
Fusion 360 Help
でも、こちらはGUIで実際に操作しながら確認出来るので便利なはずです。(個人の感想)

Fusion360_Small_Tools_for_Developers/CommandLogger at master · kantoku-code/Fusion360_Small_Tools_for_Developers · GitHub
基本的に必要となる場面は少ないので、オプションとしました。



event処理に関して覚書。
恐らくこちらで散々(うんざりするほど・・・)訴えているイベントハンドラーの
解放出来ない問題に、僕も遭遇しました。
event Handlers not being released - Autodesk Community

今回使用しているのが ui.commandStarting イベントなのですが、このイベントに
ハンドラーを追加する位置によって、解放出来たり出来なかったりしました。

・ハンドラーのインスタンスはrun関数で作成し、イベントに追加するのはExecuteHandlerで
 追加・削除を行う -> これはOK
・ハンドラーのインスタンスをCommandCreatedHandlerで作成し、同様の追加・削除を
 行う -> 削除出来ないうえ、新たにハンドラーが増幅する。
 ※よく考えるとcmdDef.commandCreatedイベントは、ボタンが押される度に発生して
  いるのだろうと思う。
  そうしたら、毎回新たなインスタンスが作成され、削除する際は異なるインスタンス
  削除しようとするため削除出来ない状態になるのだろう。
  結果的にコマンドを実行した際、本来1回しかログを表示しないはずなのに、古いハンドラーの
  インスタンスの削除が出来ていない為に、大量のログを流し出す結果に・・(で、焦る)

やっぱり、イベントは難しい。説明出来る自信無い。