C#ATIA

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

領域の内側?外側?を判断する

Fusion360のCAMAPIのこちらの質問に挑戦しました。
Is a curve Reverted or not?! - Autodesk Community

元々はこちらの回答への新たな疑問です。
Solved: Re: Pocket 2d operation causes Fusion 360 to crash - Autodesk Community

そうです。原因を作ったのが僕だったので、ちょっと責任を感じていました。


2Dポケットの指定した領域での"リバース"にチェックを入れるか?
入れないか?の問題です。

APIでもこれを操作する事は可能です。問題は入れるか?入れないか?
をどうやって判断するか? が問題です。

この違いは大きいです。こうなるか、

こうなるかです。

2Dの機能は、3Dモデルの形状を無視しますからね。

それで、思いついた方法はこの様な感じです。

緑矢印は面の境界の始点(正確には何処かわかりませんが)上での接線で、
紫矢印は底面の法線です。
これの外積を利用して直行ベクトル(オレンジ)を求めます。

境界の始点のクローンを作り、直行ベクトル方向にちょっとだけ
移動させます。(黒点)

この時の移動させた点が、元の底面上に乗っていれば領域の内側、
逆に乗っていなければ外側を示しているだろう と推測して
作ったのが、こちらのis_outside関数です。
Re: Is a curve Reverted or not?! - Autodesk Community

幾つかテストした範囲では、正しく判断出来ています。
出来てから思い出したのですが、これは自分で作っていた時には
分からず未解決でした。
自分の悩みだと答えが出ないのに、他人の質問だと答えられるの、
なぁぜなぁぜ?

但し、テストした感覚的に、
領域の内側を加工したい → isReverted = True
領域の外側を加工したい → isReverted = Fales
で良いような気もしています。