C#ATIA

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

同一平面上の接続した平らな面を色分けする

先日、こちらのお題に取り組みました。
Detect Coplanar Faces - Autodesk Community
テーマとしては面白そうだったので。
f:id:kandennti:20210611185246p:plain
パッと見た感じ、アイアンマンかな?違う?


元が何のデータか不明ですが、ポリゴンデータをFusion360にインポート
したところ、四角ポリゴンが三角ポリゴンに勝手に変換されたようです。
まぁメッシュ作業スペースは三角ポリゴンな世界なのでしょうがないでしょう。

メッシュボディから変換したソリッド面を・・・要は元のポリゴン時と
同じように多角形の面にしたいので色分けしたい、出来るか?
と解釈しました。

最初は1枚1枚法線ベクトルを取得して、隣の面と比較して・・・と、
面倒な事を考えていたのですが、驚くほど簡単なtangentiallyConnectedFaces
プロパティを発見しました。
Fusion 360 Help
接線接続している隣の面を取得するだけでは無く、その先も見てくれてます。
(接線接続が途切れるまで探し出してくれます。探すわけじゃないかも)

groupByFlattenSurfaces関数が、元で1つだった面毎にグループ分けしている
キモとなる関数です。(デバッグ用の無駄コードを消し忘れると言う失態)
実はこれ自体は直ぐ出来ました。

手間取ったのは色を付ける部分。何でFusion360の色はメンドクサイ仕様なんだろうか?
GUIでも面倒)