Home > 3D-CAD > Fusion 360 > ドキュメント > API

ベクトルドロー・レベルゼロ

Fusionのソリッドとサーフェス

広告

新規作成日 2017-05-02
最終更新日

公式ドキュメントの和訳です。

原文:「Fusion Solids and Surfaces

Fusionのソリッドとサーフェス

Fusion Solids and Surfaces

Fusionのソリッド・モデルは、密閉された容積を形成する、サーフェスのグループで表されます。これは、一般に、境界表現やB-Repモデリングとして、知られています。B-Repモデルは、ソリッドやサーフェス・モデルの完全な幾何学的な記述を提供します。ソリッドの場合、定義しているサーフェスは、閉じた(『水を通さない』)容積を作成するために、すべての稜線に沿ってぴったりと接続します。この容積では、Fusionは、あたかも、実際の『現実世界の』ソリッド・オブジェクトのように、質量プロパティのようなものを計算する、そして、サーフェスで操作を実行することができます。新しいフィーチャが、定義されるとき、Fusionは、フィーチャを表現するために必要なサーフェスを作成します。既存のボディで、それらと交差します。そして、その次に、影響を受けたサーフェスを、後ろにトリムします。そして、継目の全ては、密着しています。

B-Repモデルは、トポロジーとジオメトリーの2つによって定義されています。;下記の節では、トポロジーとジオメトリーの概念を説明します。APIの機能と同様に、それは、ソリッドの位相的な、そして、幾何学的な定義にアクセスを提供します。Fusionモデルの編集は、パラメトリック・モデルのフィーチャを使用して、あるいは、ダイレクト編集(ノンパラメトリック)モデルで、直接、修正することにより、行います。

定義されたトポロジ

Topology Defined

モデルのトポロジは、オブジェクトの階層構造によって定義されます。B-Repトポロジの完全なAPIオブジェクト階層を次の図に示します。以下の説明では、階層のオブジェクトの各々について説明します。あなたは、チャートで、いくつかのオブジェクトは、それを別の方法で取得することができることに、気がついたかもしれません。例えば、あなたは、BRepBody、BRepLumpやBrepShellオブジェクトから、BRepFacesを取得することができます。あなたは、あなたが設定したい面に応じて、面を取得するために、オブジェクトを決定します。ボディから面を取得すると、ボディ内の面の全てを返すでしょう。シェルから面を取得すると、ボディの面のサブセットのシェルに属している面だけを返します。それは、その建築物の一人部屋の中の人々のリストに対して、建築全体の全ての人々のリストを取得することに似ています。部屋リストは、建築物リストのサブセットです。

オブジェクトの階層構造

BRepBody

BRepBody

B-Repモデルは、Componentオブジェクトによって呼び出されます。コンポーネントには、0から任意の数のボディを含めることができます。最上位のオブジェクトは、BRepBodyオブジェクト(あるいは「ボディ」)です。下記の画像は、ボディに取得するためのAPI階層の図です。BRepBodyオブジェクトは、BRepBodiesコレクション・オブジェクトから呼び出されます。BRepBodiesコレクション・オブジェクトは、Componentから取得されます。

BRepBodyオブジェクトの例 API階層

BRepLump

BRepLump

BRepLump(あるいは、「Lump)オブジェクトは、1セットの接続した面、そして、くり抜かれた容積の面のセットを表します。理論的には、Fusionを強化するどんな方法でも、ボディのために、複数のかたまりを持つことは、可能です。そのボディは、常に、一つのかたまりだけが、含まれているでしょう。例えば、下記において、部品の穴は、部品を2つの部分に切断するのに必要なだけ、拡大していました。複数のかたまりがサポートされている場合、結果は、2つのかたまりを持つ、一つのボディになるでしょう。しかしながら、Fusionは、この場合、新しいボディを作成するでしょう。それで、結果は、各々一つのかたまりが含まれる2つのボディになるでしょう。Shellフィーチャを使用して、どちらかの断片が、面を開かずにくり抜かれた場合、まだ、一つのボディが、存在し、そして、また、かたまりと新しいサーフェスが定義する内部の空洞は、かたまりの一部です。

部品を2つの部分に切断する

BRepLumpオブジェクトは、親のBRepBodyオブジェクトから取得される、BRepLumpsコレクションによってボディとして呼び出されます。

部品が分断される場合、新しいボディを作成する

BRepShell

BRepShell(あるいは「Shell」)オブジェクトは、接続した面の一つのまとまりを表現します。ほとんどのボディのため、一つのBRepShellから構成されている一つのBRepLumpがあります。しかしながら、ボディが、複数のシェルを持つことは、可能です。これは、以下の例に示されています。Shellフィーチャーを使用して球がくり抜かれています。結果は、2つのシェルを持つ、一つのかたまりが含まれている一つのボディです。;面の外側と内部のセット。このモデルで穴を作成すると、それを一つのシェルに減らします。なぜなら、穴を表現している面は、接続した一つのまとまりで結果として、内側と外側の面を結合します。

内部がくりぬかれた球は、2つのサーフェスを持っています。

シェルが、部品の外側か部品の中の空洞を表すか判断することは、BRepShellオブジェクト上で、isVoidプロパティを使用します。

ボディ内のBRepShellオブジェクトは、親のBRepBodyから、あるいは、BRepLumpオブジェクトから得ることができる、BRepShellsコレクションを通じて呼び出されます。BRepBodyからのコレクションには、そのLump内のシェルだけが含まれているBRepLumpから、ボディとコレクションの中に存在する、シェルのすべてが含まれています。

BRepShellオブジェクトは、BRepLumpオブジェクトからBRepShellsコレクションを通じて呼び出されます。

BRepFace

BRepFaceオブジェクトは、ボディ内で、特定のサーフェスを表します。下記の図は、構成するモデルを、更に明確に確かめることができる、ボディのそれぞれの面の分解バージョンを示します。面は、BRepBody、BRepLumpやBRepShellオブジェクトから取得することができる、BRepFacesコレクションを通して呼び出されます。

BRepFaceオブジェクトは、ボディ内で、特定のサーフェスを表します。 面は、BRepFacesコレクションを通して呼び出されます。

BRepLoop

BRepLoop(あるいは「Loop)オブジェクトは、特定の面の境界を定義します。すべての面は、外側に1つのループを持っています。そして、0個以上の内側のループを持つことができます。下記の図の中では、面の2つのループは、赤で強調されています。4つの稜線から構成されている1つの外側のループ、そして、一つの円の稜線から構成されている1つの内側のループがあります。ループは、BRepLoopsコレクションを通して呼び出されます。それは、親のBRepFaceオブジェクトから取得されます。

BRepLoop(あるいは「Loop)オブジェクトは、特定の面の境界を定義します。 ループは、BRepLoopsコレクションを通して呼び出されます。

BRepEdge

BRepEdgeオブジェクトは、稜線のループ内で、それぞれの曲線を表します。稜線の重要な目的は、2つの面の間の接続を定義することです。下記の図は、赤で強調される1つのエッジを示しています。この1つのエッジは、2つの隣接した面によって共有されます。

BRepEdgeオブジェクトは、稜線のループ内で、それぞれの曲線を表します。

APIを通じて、稜線にアクセスするための、いくつかの方法があります。あなたは、その全ての稜線のために、BRepFaceオブジェクトのBRepLoopsプロパティを使用して、一度にすべて、あるいは、ループごとにループで、BRepFaceを問い合わせることができます。また、あなたは、BRepBody、BRepLumpやBRepShell内のすべての稜線を問い合わせることができます。稜線から、それが接続する、2つの面を取得することが、可能です。サーフェスの開いた境界に沿った稜線は、一つの面だけに接続しています。

その全ての稜線のために、BRepFaceオブジェクトのBRepLoopsプロパティを使用して、一度にすべて、あるいは、ループごとにループで、BRepFaceを問い合わせることができます。

BRepVertex

BRepVertexオブジェクトは、稜線の終点を表します。下記の画像は、赤で強調される一つの頂点を示しています。この頂点は、3つの稜線で共有されています。頂点は、BRepBody、BRepLump、BRepShellとBRepFaceオブジェクトで、利用可能なBRepVerticesコレクションからアクセスできます。始点の頂点と稜線の末端は、StartVertexとBRepEdgeオブジェクトのEndVertexプロパティを使用して呼び出すことができます。頂点そのものは、接続する稜線と面への、アクセスを提供します。

BRepVertexオブジェクトは、稜線の終点を表します。 頂点は、BRepBody、BRepLump、BRepShellとBRepFaceオブジェクトで、利用可能なBRepVerticesコレクションからアクセスできます。

BRepCoEdge

BRepCoEdgeオブジェクトは、それら両方が、面の境界を定義するという点で、BRepEdgeオブジェクトと類似しています。BRepEdgeとBRepCoEdgeオブジェクトの2つの間には、違いがあります。:まず、BRepCoEdgeオブジェクトは、稜線が、面の間で共有される個々の面に対して、ユニークです。BRepCoEdgeオブジェクトは、面の境界のまわりに、頭からしっぽへの向きで、順序づけられています。BRepCoEdgeオブジェクトは、外側の境界のまわりで、反時計回りの方向に伝わります。そして、それらは、以下の図で示すように、内側の境界のまわりで、時計回り方向に(マテリアルは常に左に)伝わります。これは、稜線が共有されていることで、方向に競合が生じる可能性があるため、BRepEdgeオブジェクトでは不可能です。

BRepCoEdgeオブジェクトは、面の境界を定義する BRepEdgeとBRepCoEdgeオブジェクトの2つの間には、違いがあります。

BRepCoEdgeオブジェクトとBRepEdgeオブジェクトの2つ目の違いは、BRepCoEdgeオブジェクトが、3Dオブジェクトでないということです。(他の全てのB-Repオブジェクトは3Dオブジェクトです)。BRepCoEdgeオブジェクトは、その親の面の2Dパラメトリック空間内で定義されています。パラメトリック空間の概念については、後述のエバリュエータのセクションで詳しく説明します。

トポロジ・オブジェクトを呼び出す

Accessing Topology Objects

オブジェクト階層を走査する他に、場合によっては、使用すると更に便利な、B-Repオブジェクトにアクセスするための、他の方法があります。これらのメソッドを以下に示します。

フィーチャから

From Features

FeatureオブジェクトのFacesプロパティは、そのフィーチャによって作成された面を取得するために使用できます。また、いくつかのフィーチャは、それらが作成する面に、分類されたアクセスを提供します。例えば、押出しフィーチャは、EndFaces、StartFacesとSideFacesプロパティを提供します。それは、エンド・キャップと押し出しの方向を返します。

選択で

By Selection

場合によっては、自動的に必要なエンティティを判断することは不可能ですが、ユーザーに、選択を促すことができます。ソリッド・モデルからのユーザー選択は、BRepBody、BRepFace、BRepEdgeやBRepVertexオブジェクトを返します。

Associationで

By Association

また、特定のB-Repエンティティは、いくつかの他のオブジェクトで、その関連付けによって呼び出すことができます。例えば、アセンブリでは、ジョイントが、その間の関係を定義するために、あなたは、2つのエンティティを取得することができます。

ジオメトリーで

By Geometry

また、特定の基準を満たすBRepジオメトリを取得することは、『エバリュエータ・オブジェクト』の使用を通じて可能です。例えば、1つは、X-Y平面に平行で、そして、「上へ」向いている、全ての平面を問い合わせることができました。上で説明したように、面の全てにアクセスするために、これは、B-Rep階層、そして、その次に、これから説明するように、基準を満たす面を検索するために、ジオメトリー・エバリュエータを使用して、行うことができます。

トポロジ・オブジェクトを評価する

Evaluating Topology Objects

トポロジは、その形状を定義するジオメトリーのモデルの構造だけを定義します。;トポロジは、6つの面と12の稜線を持つものとして、モデルを説明することができますが、この説明は、そのようなモデルの実際の形状を伝えるには不十分です。以下に示す単純なブロックは、6つの面と12の稜線で、モデルが持つことができる形状の無限の数の中の1つだけです。

トポロジは、その形状を定義するジオメトリーのモデルの構造だけを定義します。

また、6つの面と12の稜線で構成される3つ以上のモデルを、以下に示します。

6つの面と12の稜線で構成されるモデル

面は、サーフェスを表現しますが、そのサーフェスの形状について、何も意味しないか、伝えません。稜線についても同じことが言えます。;それは、曲線を表現しますが、曲線の形状について、何も意味しないか、伝えません。面と稜線は、さまざまなジオメトリが、どのように接続されているか、定義しますが、モデルの形状を理解するためには、関連するジオメトリが必要です。

一般的な形状に関連する情報を提供するB-Repオブジェクトで実行することができる、いくつかの一般的な問合せがあります。これらの問合せは、以下に示すように、APIエバリュエータ・オブジェクトを使用して実行されます。

APIエバリュエータ・オブジェクト

エバリュエータは、面や曲面のパラメトリック空間に関連する、それらの『評価』の多くを実行します。座標は、三次元デザイン空間内で、x、yとzの値を指定して、モデル空間で位置を定義します。Parameter空間では、座標は、特定のサーフェスのパラメトリック空間内で、uとvの値を指定して、位置を定義します。すべてのサーフェスは、それ自体の独自の2Dパラメーター空間を持っています。下記の画像は、そのパラメトリック空間を表すグリッドが描画されている平らな面を示しています。サーフェス上のどこかの位置は、2つの値を使用して、正確に指定することができます。パラメトリック空間では、xとyの代わりに、文字uとvは、座標の値を指定するために使用されます。領域やパラメトリック空間の寸法は、サーフェスのジオメトリーよって、そして、面がその境界によって、どのように、切り取られたか、異なる場合があります。切り取られていないNURBSサーフェスは、最小の値(0、0)そして、最大値(1、1)を持っています。次の図で示すように、しかしながら、円柱は、円柱の周りで、-πから、πにの方向に進みます。そして、円柱の軸に沿って無制限です。平面は無制限であり、両方向で無限ですが、サーフェスが、面で関連付けられている場合、面の境界は、サーフェスを制限するために使用されます。また、あなたは、パラメーターが、サーフェス全体で、均一と想定することができません。これは、NURBSサーフェス(0.5,0.5)が、必ずしも、サーフェスの幾何学的な中心ではないことを示しています。

パラメトリック空間を表すグリッドが描画されている平らな面

下記の画像は、それらのパラメータ空間のグリッドで、他のサーフェス形状のいくつかの例を示しています。一番左のサーフェスは、平面サーフェスのバリエーションのように見えます。;上の平面がゴム製で、下の形に伸びて曲がっていると想像してください。まだ、サーフェスのどこかの点は、u-v座標によって指定することができます。中央のサーフェスは、平らな面を円柱にころがすことによって、形成できます。2つの値で、サーフェス上の任意の点を定義できます。右のサーフェスを作成するために、平面上の2つの稜線は、0の長さに縮小されていますが、u-v値は、依然、同様に、このサーフェスで、いずれかを点を定義します。

他のサーフェス形状

先に述べたように、BRepCoEdgeオブジェクトは2D オブジェクトです。これは、面に関連付けられたサーフェスのパラメトリック空間内の面の境界を定義します。BRepEdgeは、稜線に接続している各々の面に1つ、最高2つのBRepCoEdgeオブジェクトを返すことができます。;BRepCoEdgeオブジェクトに関連付けられているジオメトリーは、二次元です。そして、ジオメトリの座標は、サーフェスのパラメトリック空間にあります。

また、曲線は、一次元のパラメトリック空間を持っています。これは、曲線上の任意の点を単一のパラメータ値で識別できることを示しています。以下の図で示すように、始点と終点のパラメータ値は、曲線の範囲です。そして、その間の任意の値は、稜線に沿った特定の点を表します。

始点と終点のパラメータ値は、曲線の範囲です。

最も一般的に使用される評価関数のいくつかを次に示します。

SurfaceEvaluator

  • getNormalAtParameter

    指定されたパラメーターの点で、面の法線ベクトルを計算します。法線は、常に、ソリッドの外側を指しています。

  • getNormalAtPoint

    指定されたモデル空間の点で、面の法線ベクトルを計算します。法線は、常に、ソリッドの外側を指しています。

  • getParameterAtPoint

    3次元モデルの点を与えると、これは同等の2Dパラメトリックの点を返します。

  • getPointAtParameter

    2Dパラメトリックの点を与えると、同等の3Dの点を返します。

  • isParamOnFace

    2Dパラメトリックの点を与えると、点が、面に存在するかどうかを、示します。これは、与えられた点が、面の見える部分、あるいは、空洞にある場合、面の境界を考慮して、決定するための役に立ちます。

  • parametricRange

    面の最大と最小のパラメータ空間の座標を返します。

CurveEvaluator3DとCurveEvaluator2D

  • getEndPoints

    稜線の始点と終点を取得します。

  • getLengthAtParameter

    2つの入力パラメータの間で、稜線の実際の長さを返します。

  • getParameterAtLength

    指定されたパラメータの点から、曲線に沿って指定された距離にあるパラメータ値を返します。

  • getParameterAtPoint

    3次元モデルの点を与えると、稜線に沿った、同等のパラメトリック値を返します。

  • getPointAtParameter

    パラメトリックの値を与えると、同等の3Dの点を返します。

  • getParameterExtents

    稜線の最小と最大のパラメーター値を返します。

SurfaceEvaluatorオブジェクトは、getNormalAtPointとgetNormalAtParameter関数のような、サーフェスから法線を取得するために、役に立つ関数を提供します。; 法線は、特定の位置で、面と垂直なベクトルです。与えられた平面上の法線は、その面上の位置に関係なく、すべて同じです。球面上の法線は、その面上のすべての場所で異なります。ソリッドの法線の方向は、常に外向きです。(すなわち、ソリッドの容積から離れている向き)。下記の図は、スプライン面に表示される一連の法線を示しています。法線は、面に、すべて直角です。そして、向きは、ソリッドから外向きの方向性です。

スプライン面に表示される一連の法線

下記のJavaScriptサンプルコードは、面のパラメトリック中心を、どのように、見つけるかを説明します。そして、その次に、その位置で、サーフェスの法線を返します。複数の法線を取得する作業の場合、また、Point2Dオブジェクトの配列、そして、戻り値とVector3Dオブジェクトの配列をとる、getNormalsAtParameters関数が、あります。

function getNormalAtParametricCenter(face) {
    // 入力面から、エバリュエーターを取得します。
    var surfEval = face.evaluator;
        
    // サーフェスの最小と最大パラメーター値を取得します。
    var range = surfEval.parametricRange();
        
    // パラメトリック領域の中心点を計算します。
    var paramPoint = adsk.core.Point2D.create(
                           (range.minPoint.x + range.maxPoint.x)/2, 
                           (range.minPoint.y + range.maxPoint.y)/2);
        
    // パラメータ空間の点によって定義される位置で、法線を取得します。
    var normalObj = [];
    surfEval.getNormalAtParameter(paramPoint, normalObj);
    var normal = normalObj.value;

    // Vector3Dオブジェクトの法線を返します。
    return normal;
}

ジオメトリー

Geometry

先に述べたように、トポロジは、モデルの形状を記述しませんが、むしろ、その構造と、モデルのさまざまな要素が、どのように接続されているかを定義します。それは、モデルの形状を記述するジオメトリーです。各々の面と稜線のためのジオメトリーは、BRepFace、BrepEdgeやBRepCoEdgeオブジェクトのジオメトリー・プロパティを使用して、呼び出されることができます。このプロパティは、面、稜線やコエッジ・オブジェクトの実際の形状に応じて、いくつかの別のオブジェクト型を返します。下記の図は、各々のB-Rep型で、返されるオブジェクトを示しています。

各々のB-Rep型で、返されるオブジェクト

また、上記の図は、エバリュエータは、B-Repオブジェクトだけで利用できるわけではないことを明らかにしますが、さまざまなジオメトリオブジェクト型についても同様です。一般に、B-Repオブジェクトで、BRepオブジェクト・エバリュエータは、残りのボディを考慮するため、ジオメトリー・オブジェクトよりはむしろ、エバリュエータを使用することが最良です。例えば、法線方向が、ソリッドの外側を向いているか保証することができないジオメトリ・オブジェクトからエバリュエータを使用して、法線を取得します。これは、ジオメトリー・エバリュエータが、ソリッドの構造について何も知らないからです。

Geometryオブジェクトの各々は、ジオメトリーの形状を記述するプロパティを提供します。例えば、Cylinderオブジェクトは、円柱を定義するために必要なすべて、axisVector、basePointとradiusプロパティを提供します。;Planeオブジェクトは、どちらも平面を完全に定義するrootPointとnormalプロパティを提供します。;これらの例の両方のジオメトリには、境界がありません。円柱は、その長さに沿って、両方向に無制限です。そして、平面は、あらゆる方向に無制限です。面の境界は、そのB-Repのループによって定義されます。

ジオメトリー・オブジェクトは、それらの親のB-Repオブジェクトから「切り取る」と考えることができます。それは、ジオメトリー・オブジェクトが取得されたB-Repオブジェクトと関係が無いことを示しています。例えば、面から取得されるCylinderオブジェクトは、面の現在の形状を表していますが、続いて、モデルを変更します。面の影響は、以前に取得された円柱オブジェクトに反映されません。CylinderとFaceオブジェクトは、完全に独立しています。いずれかの変更が面に作成されたあと、再び、ジオメトリー・プロパティを呼び出すことによって、Cylinderオブジェクトの更新されたバージョンを取得できます。修正は、Cylinderオブジェクトに順番に行われます。(その半径のような)、同様に、Faceオブジェクトには、反映されません。

代替表示

Alternate Representations

また、モデル情報は、B-Repモデル以外のフォ-ムでも取得することができます。例えば、現在、Fusionは、以下の画像で示すように、「三角メッシュ表示」モデルを返すことをサポートしています。Fusionは、モデルのグラフィック表示に使用される三角メッシュを維持します。この既存の表示メッシュは、取得することができます。あるいは、新しいものは、望む精度で作成することができます。この機能は、BRepBodyとBRepFaceオブジェクトを取得する、MeshManagerオブジェクトによって公開されています。

「三角メッシュ表示」モデルを返す

CurveEvaluator3DとCurveEvaluator2Dオブジェクトの両方は、指定された公差内で、その曲線の近似を定義する、曲線に沿って点を取得するために使用される、getStrokesメソッドを提供します。

Home 3D-CAD 2D-CAD 3D-モデラー 学生版 モデリング資料

Copyright (C) 2011 Horio Kazuhiko(kukekko) All Rights Reserved.
kukekko@gmail.com
ご連絡の際は、お問い合わせページのURLの明記をお願いします。
「掲載内容は私自身の見解であり、所属する組織を代表するものではありません。」