C#ATIA

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

プレビューの為の行列演算

こちらに記載したお悩みが解決しました。
コンポーネントの座標系のベクトルの取得が面倒 - C#ATIA

こんな条件です。
f:id:kandennti:20210108184937p:plain
ルートコンポーネントと原点が一致しない、”コンポーネント1:1” 内の
XY平面以外の平面をサポートとしたスケッチ内にある
曲線上に点を作りたい と言う事です。
・・・言葉と画像を使っても表現しにくいです。

作っているアドインで画像のように、点を作ることは案外すんなり出来ました。
が、お悩みはコマンドを確定する前のプレビューの表示が作られる
点の位置と一致しない と言う何とも悩ましい状況に陥っていました。

f:id:kandennti:20210108190028p:plain
左が望んでいる状態で、右が悩まされていた状態。
悩まされていたのは、この位置だけではなくいたるところで・・・。


結果的に原因は、
・コマンドで作成される点:スケッチのマトリックスで作成される(だからOK)
・プレビューで表示される点:オカレンスのマトリックスで作成される
この違いだと先日やっと気が付きました。

原因が分かったものの、この違いを修正する為の行列の演算が分からない・・・。
数学知らないと損しますね。

で、半分寝ながら解決したのがこちら。
f:id:kandennti:20210108190342p:plain
コメントにしている部分の多さは、僕の努力の痕跡と受け止めてもらって大丈夫です。

結局、オカレンスのマトリックスを逆にして、スケッチのマトリックス
トランスフォーム!
その後、目的の点に
トランスフォーム!

でOKです。

解決して良かった良かった と思ったのもつかの間、1個のコマンドを実行しただけで
Undo歴が3つになってしまう と言う迷惑な現象。
f:id:kandennti:20210108191107p:plain
プレビューの実行と削除なのですが、明らかに不自然。

解決策があるのかな?