C#ATIA

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

複数面に線を描きたい3

こちらの続きです。
複数面に線を描きたい2 - C#ATIA

ゴールにたどり着けるか不明なのですが、未だに悩んでます。
f:id:kandennti:20200508191635p:plain
こんな感じのちょっと歪んだ面があります。
それぞれの面上には点があり、この点を結ぶ線を面上で描きたいんです。

単純に2点を繋げば宙に浮いた状態です。
f:id:kandennti:20200508191704p:plain
これをゴニョゴニョすれば、こんな感じで作れます。
f:id:kandennti:20200508191712p:plain
Fusion360は結構この辺の線を作るのが面倒なのが正直な所です。


こちらで単体面上の線を作るアドインがあるのですが、こちらの手法を
簡単にご説明。
GitHub - kantoku-code/Fusion360_DrawCurveOnSurface: Fusion360 DrawCurve OnSurface

ちょっとやり方が異なるのですが、こちらのシンプルなもので説明すると
スクリプト新作時の雛形 - C#ATIA
ユーザーに選択を促す機能としてUserInterfaceオブジェクトの
selectEntityメソッドが有ります。お手軽です。
Fusion 360 Help
リンク先では選択フィルターが 'Bodies' となっていますが、 'Faces' (面を選択)
として説明します。


ユーザーに選択させた際、メソッドの戻り値は選択させたものでは無く、
Selectionオブジェクトが返ってきます。
Fusion 360 Help
実際に選択させた要素はentityプロパティに入っているのですが、それ以外にも
選択時にクリックした位置の三次元的な座標がpointプロパティに入っています。

pointプロパティに入っているのは単なる座標ではなく、Point3Dオブジェクトです。
Fusion 360 Help
面倒ですか?僕は慣れました。


一方、選択させた要素はBRepFaceオブジェクトになるのですが、
Fusion 360 Help
この中にevaluatorプロパティが有ります。・・・訳すと評価者なんですね。
これがSurfaceEvaluatorオブジェクトになるのですが、これを利用して線を作ってます。

恐らくSurfaceEvaluatorオブジェクトを使う人はほとんどいないと思いますが、
個人的にはCATIAでとても欲しかったオブジェクトです。

クリックした位置のPoint3Dオブジェクトを使用しSurfaceEvaluatorオブジェクトの
getParameterAtPointメソッドを利用するとサーフェス上のパラメータが手に入ります。
Fusion 360 Help

パラメータとなっていますが、実際の戻り値はPoint2Dオブジェクトです。
が、これがU(X)とV(Y)です。
AUJ2019の際一部の方に "Fusion360もUV有りますよ” とお話しし上手く説明できなかったのですが
これです・・・。

この2つのパラメータを利用し直線(Line2D)を作ります。
Fusion 360 Help
僕の脳内イメージとしては、歪んだ曲面をバシッと叩き潰して平面にした感じです。
曲面上では難しいのですが、平面上に直線を作るのは簡単ですよね?


このLine2DをSurfaceEvaluatorオブジェクトを利用して3Dな線に戻してやります。
幸いgetModelCurveFromParametricCurveメソッドが用意されていたので助かります!
Fusion 360 Help


こんな感じで単体面上にUV的な直線を作り出しました。
詳しくはこちらの "Evaluating Topology Objects" に記載されています。
Fusion 360 Help


こんな手法で隣り合った面に線を描きたいんです。
但し、これをクリアしてももう一つ大きなハードルが待っているのは、
既に気が付いているのですが・・・。
(リンクだらけだな)