前回、Fusion 360 API:ジオメトリとトポロジ ~ その1 で、Fusion 360 API で B-Rep 情報を扱う基本的な概念をご案内しました。ここでは、B-Rep を扱う上での注意点とトポロジからジオメトリを取得する際のクラスについてご紹介します。
ソリッドとサーフェスの違い
Fusion 360 API でB-Rep 情報を扱う上で、ソリッドとサーフェスの違いが微々たるものです。いずれも BRepBody 配下に B-Rep オブジェクトがある構造は同じです。ただ、次の例のように、特定の面のエッジが他の面のエッジに接していない場合には、BRepBody.isSolid プロパティによってサーフェスと判定されます。
BRepFace から取得できる法線ベクトル(Normal Vector)は、ソリッドの場合、外側に向かって法線ベクトルが一定になりますが、サーフェスと判定された場合には、法線ベクトルは不定になります。
B-Rep データの作成と編集
B-Rep データを意図的に構築することは出来ません。B-Rep データは、フィーチャを作成したり、3D データをインポートした際に、Fusion 360 によって自動的に生成されるものです。編集も同様にフィーチャ編集によって B-Rep データが間接的に編集されることになります。現在、一部のデータ コンバータで利用されているように、B-Rep が持つトポロジ データから Fusion 360 上にB-Rep を直接生成することは出来ませんが、将来、そのような処理が実装される可能性はあります。
T-Spline の API サポート
FormFeature オブジェクトは、T-Spline によって形状定義されるフリーフォーム オブジェクトです。残念ながら、この T-Spline データは、現時点で Fusion 360 API ではサポートされていません。ただし、FormFeature.bodies プロパティから、BRepBodies コレクションを取得することは可能です。
エンティティとジオメトリ
Fusion 360 API を扱う上で、Entity(エンティティ)とGeometory(ジオメトリ)という言葉が利用されることがあります。エンティティとは、一般に、Fusion 360 上で選択できる面やエッジなどのトポロジ オブジェクトを指しています。選択したエンティティ オブジェクトには Geometry プロパティがあり、形状を構成する幾何データ、つまり、ジオメトリを取得することが出来ます。トポロジは論理構造(位相情報)を提供し、ジオメトリは形状を決定する幾何情報を提供します。
ジオメトリ オブジェクト
Fusion 360 API でエンティティ オブジェクトの Geometry プロパティ取得して、直接扱うことができるジオメトリ オブジェクトは次のとおりです。サーフェス ジオメトリは主に BRepFace、3D ワイヤフレーム ジオメトリは BRepEdge 経由で取得可能と考えることが出来ます。また、2D ジオメトリはスケッチ上の幾何情報でもあり、BRepCoEdge からも得ることが出来ます。
Curve Evaluator と Surface Evaluator
B-Rep を利用することで、自由曲線や自由曲面を含む曲線やサーフェスを評価して、特定のパラメータ位置のジオメトリを取得することが出来ます。例えば、BRepEdge の evaluator プロパティから CurveEvaluator3D オブジェクトを取得すると、CurveEvaluator3D.getPointAtParameter メソッドで任意の1次パラメータ位置に相当する場所の Point3D ジオメトリを取得できます。
曲線範囲のパラメータは Fusion 360 が設定していて、CurveEvaluator3D.getParameterExtents メソッドで曲線の開始位置のパラメータ値と終了位置のパラメータ値得ることができるので、あとは getPointAtParameter メソッドで範囲内の任意の値を与えることで、そのパラメータ値に相当する位置のジオメトリを Point3D ジオメトリを取得できるわけです。下図の例では、4.5 のパラメータ値に相当する Point3D ジオメトリを得ることが出来るわけです。
この考え方は、曲面にも対応しています。BRepFace.evaluator プロパティから SurfaceEvaluator オブジェクトを取得して、UV 座標で表現される 2 次パラメータの値で曲面上の位置と特定し、getPointAtParameter メソッドで Point3D ジオメトリを、getNormalAtParameter メソッドで法線ベクトルを、それぞれ取得することが出来ます。
U パラメータと V パラメータの範囲は、SurfaceEvaluator.parametricRange メソッドで得ることが出来ます。下図では、UVの各範囲が 0 から 1 と仮定して、U パラメータが 0.3、V パラメータが 0.1 の位置を取得するイメージです。
Surface Evaluator を利用した Python サンプルが、GitHub 上で公開されていますので、B-Rep を利用した例として参照してみてください。該当するアドイン名は GeometryEval で、パラメータ位置の点や法線ベクトルを描画します。
By Toshiaki Isezaki
コメント