Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Dynamo が多様で複雑なジオメトリ形状を作成できる一方で、単純なジオメトリ プリミティブは、任意の計算設計の中核となり、設計された最終形状で直接表現されるか、より複雑なジオメトリを生成するための足場として使用されます。
厳密にはジオメトリの一部ではありませんが、CoordinateSystem はジオメトリを構築するための重要なツールです。CoordinateSystem オブジェクトは、位置および回転、せん断変形、スケーリングなどのジオメトリ変換の両方を把握します。
x = 0、y = 0、z = 0 の点を中心とし、回転、スケーリング、せん断変形などの変換がない CoordinateSystem の作成に必要なのは、Identity コンストラクタを呼び出すことのみです。
CoordinateSystem.ByOriginVectors という別のコンストラクタを使用すると、次のように特定の点に座標系を作成できますが、ジオメトリ変換された CoordinateSystem については、この章で説明しません。
最も単純なジオメトリ プリミティブは点であり、3 次元空間でゼロ次元の場所を表します。前に説明したように、特定の座標系での点の作成には、いくつかの異なる方法があります。Point.ByCoordinates は X、Y、Z 座標を指定して点を作成し、Point.ByCartesianCoordinates は特定の座標系で X、Y、Z 座標を指定して点を作成し、Point.ByCylindricalCoordinates は半径、回転角度、および高さを使用して円柱上にある点を作成し、Point.BySphericalCoordinates は半径と 2 つの回転角度を使用して球上にある点を作成します。
この例は、さまざまな座標系で作成された点を示しています。
次に高い次元の Dynamo プリミティブは線分セグメントで、2 つの端点間にある無限の数の点を表します。Line.ByStartPointEndPoint コンストラクタを使用して 2 つの境界点を明示的に指定するか、Line.ByStartPointDirectionLength で開始点、方向、およびその方向の長さを指定することで、線分を作成できます。
Dynamo には、最も基本的なタイプのジオメトリ プリミティブを 3 次元で表すオブジェクトがあります。Cuboid.ByLengths で作成される直方体、Cone.ByPointsRadius および Cone.ByPointsRadii で作成される円錐、Cylinder.ByRadiusHeight で作成される円柱、Sphere.ByCenterPointRadius で作成される球です。
このセクションでは、DesignScript を使用するジオメトリの作成に関する一連の演習を紹介します。サンプルの DesignScript を Dynamo のコード ブロックにコピーしながら操作してください。
計算設計ではオブジェクトが最終的な位置や形状で明示的に作成されることはほとんどなく、通常は既存のジオメトリに基づいて、移動、回転、およびその他の方法で配置されます。ベクトル計算は、幾何学的な足場の一種として機能することで方向およびジオメトリに対する向きを示し、視覚的に表示せずに 3D 空間での動きを概念化します。
最も基本的には、ベクトルは 3D 空間における位置を表し、通常は(0, 0, 0)の位置からその位置までの矢印の終了点と考えられます。ベクトルは ByCoordinates コンストラクタで、新しく作成される Vector オブジェクトの X、Y、Z の位置を指定することで作成できます。Vector オブジェクトはジオメトリ オブジェクトではないため、Dynamo ウィンドウには表示されません。ただし、新しく作成または修正されたベクトルに関する情報は、コンソール ウィンドウに出力されます。
一連の算術演算が Vector オブジェクトで定義されることによって数直線上の 1 次元空間で実数を移動するように、3 次元空間で加算、減算、乗算、およびその他の方法でオブジェクトを移動できます。
ベクトルの加算は、2 つのベクトルのコンポーネントの合計として定義され、2 つのコンポーネントのベクトルの矢印が「後端に先端が付く」形で配置された場合に結果として得られるベクトルと考えることができます。 ベクトルの加算は Add メソッドを使用して実行され、左側のダイアグラムで表示されます。
同様に、2 つの Vector オブジェクトは、Subtract メソッドを使用して互いに減算できます。ベクトルの減算は 1 番目のベクトルから 2 番目のベクトルへの方向と考えることができます。
ベクトルの乗算はベクトルの終了点がそのベクトル自身の方向に所定のスケール係数だけ移動すると考えることができます。
通常、ベクトルのスケールを変更する場合には、結果として得られるベクトルの長さをスケール変更された量と正確に同じにすることが求められます。これは、最初にベクトルを正規化する、つまり、ベクトルの長さが正確に 1 に等しくなるように設定することで、容易に実行できます。
c の長さは正確に 5 に等しいですが、a (1, 2, 3)と同じ方向を向いたままです。
ベクトル計算には 1 次元の計算とは明確な類似点のないメソッドがさらに 2 つあります。外積と内積です。外積は、2 つの既存のベクトルに対して(90 度で)直交するベクトルを生成する手段です。たとえば、X 軸と Y 軸の外積は Z 軸です。ただし、2 つの入力ベクトルが互いに直交している必要はありません。外積ベクトルは Cross メソッドを使用して計算されます。
ベクトル計算のさらに少し高度な関数が内積です。2 つのベクトル間の内積は、2 つのベクトル間の角度に関係する実数(Vector オブジェクトではない)ですが、角度そのものではありません。内積の便利なプロパティの 1 つとして、2 つのベクトルが垂直の場合、かつ垂直の場合に限り、そのベクトル間の内積が 0 となります。内積は Dot メソッドを使用して計算されます。
Dynamo の標準のジオメトリ ライブラリで最も単純なジオメトリ オブジェクトは、点です。すべてのジオメトリはコンストラクタという特別な関数を使用して作成され、各関数はその特定のジオメトリ タイプの新しいインスタンスを返します。Dynamo では、コンストラクタの名前はオブジェクトのタイプ(この場合は Point)で始まり、構築メソッドが続きます。X、Y、Z のデカルト座標で指定された 3 次元の点を作成するには、次のように ByCoordinates コンストラクタを使用します。
Dynamo では、コンストラクタは通常、接頭表記「By」を使用して指定され、これらの関数を呼び出すと、そのタイプの新しく作成されたオブジェクトを返します。この新しく作成されたオブジェクトは、等号の左側にある名前の変数に格納されます。
ほとんどのオブジェクトには、多種多様なコンストラクタがあり、次のように BySphericalCoordinates コンストラクタを使用すると、球の半径、1 番目の回転角度、2 番目の回転角度(度単位)を指定して、球体上の点を作成できます。
点を使用して、線分などのより高い次元のジオメトリを構築できます。次のように ByStartPointEndPoint コンストラクタを使用すると、2 つの点の間に Line オブジェクトを作成できます。
同様に、線分を使用してより高い次元のサーフェス ジオメトリを作成できます。たとえば、Loft コンストラクタを使用すると、一連の線分または曲線を使用してその間にサーフェスを補間します。
サーフェスを使用してより高い次元のソリッド ジオメトリを作成することもできます。たとえば指定した距離だけサーフェスに厚みを付けてソリッドを作成します。多くのオブジェクトには、メソッドと呼ばれる関数がアタッチされ、これを使用することでプログラマはその特定のオブジェクトに関するコマンドを実行できます。ジオメトリのすべてのピースに共通するメソッドには、Translate および Rotate があり、それぞれ指定した量だけジオメトリを移動および回転します。サーフェスには Thicken メソッドがあり、1 つの数字を入力してサーフェスの新しい厚みを指定します。
Intersection コマンドによって、高い次元のオブジェクトから低い次元のジオメトリを抽出できます。この抽出された低い次元のジオメトリは、ジオメトリの作成、抽出、再作成を繰り返すことで、高い次元のジオメトリの基盤を形成できます。この例では、生成されたソリッドを使用してサーフェスを作成し、そのサーフェスを使用して曲線を作成します。
計算設計では、曲線とサーフェスが、以降のジオメトリの構築の基礎となる足場として頻繁に使用されます。この初期のジオメトリを後のジオメトリの基盤として使用するために、オブジェクトの領域全体での位置や向きなどの属性を、スクリプトによって抽出できる必要があります。曲線とサーフェスの両方によってサポートされるこの抽出はパラメータ化と呼ばれます。
曲線上のすべての点は 0 から 1 までの範囲の一意のパラメータを持つと考えることができます。いくつかの制御点や補間された点に基づいて NURBS 曲線を作成する場合、最初の点のパラメータは 0、最後の点のパラメータは 1 となります。中間点の正確なパラメータを事前に知ることはできません。そのため、一連のユーティリティ関数で緩和されるものの、厳しい制限のように感じられるかもしれません。サーフェスのパラメータ化は曲線の場合と同様ですが、1 つではなく、u と v という 2 つのパラメータがあります。次の点を使用してサーフェスを作成する場合、
p1 のパラメータは u = 0 v = 0 で、p9 のパラメータは u = 1 v = 1 です。
パラメータ化は、曲線の生成に使用する点を決定する場合にはそれほど有用ではなく、主に、中間点が NurbsCurve コンストラクタおよび NurbsSurface コンストラクタで生成された場合にその位置を判断するために使用します。
曲線には PointAtParameter メソッドがあり、0 から 1 の double 型の引数を 1 つ使用して、そのパラメータの Point オブジェクトを返します。たとえば、このスクリプトでは、パラメータが 0、0.1、0.2、0.3、0.4、0.5、0.6、0.7、0.8、0.9、1 の点を見つけます。
同様に、サーフェスには PointAtParameter メソッドがあり、生成された点の u パラメータと v パラメータという 2 つの引数を使用します。
曲線上およびサーフェス上の個々の点を抽出することは便利ですが、スクリプトでは通常、曲線やサーフェスが向いている方向など、パラメータの特定の幾何学的特性を知る必要があります。CoordinateSystemAtParameter メソッドでは、曲線やサーフェスのパラメータでの位置だけでなく、方向が設定された座標系も見つかります。たとえば、次のスクリプトによって、回転サーフェスに沿って方向が設定された座標系が抽出され、その座標系の向きを使用して、サーフェスに垂直な線分が生成されます。
前に述べたように、曲線やサーフェスの長さ全体で常に均一にパラメータ化されるわけではありません。つまり、0.5 のパラメータが常に中点に対応したり、0.25 が常に曲線またはサーフェスの 1/4 の点に対応するわけではありません。この制限を回避するため、曲線にはパラメータ化のコマンドの追加のセットがあり、これによって、曲線に沿った特定の長さにある点を検索できます。
Dynamo でのフリーフォーム曲線の作成には、基本的な方法が 2 つあります。点の集合を指定して、Dynamo によってその間に滑らかな曲線を補間する方法と、特定の次数の曲線の基礎となる制御点を指定する、より低レベルのメソッドです。補間による曲線は、線分が取るべき形状を設計者が正確に認識している場合や、曲線が通過できる場所と通過できない場所に対する特定の拘束が設計に含まれている場合に便利です。制御点を介して指定された曲線は、本質的には一連の直線セグメントであり、アルゴリズムによってスムージングされて最終的な曲線形状となります。制御点を介して曲線を指定することは、さまざまな次数のスムージングで曲線形状を検討する場合や、曲線セグメント間でスムーズな連続性が必要な場合に便利です。
補間された曲線を作成するには、点の集合を NurbsCurve.ByPoints メソッドに渡すのみです。
生成された曲線は入力された点それぞれと交差し、集合の最初の点から始まり、最後の点で終わります。オプションの周期パラメータを使用すると、閉じた周期的な曲線を作成できます。Dynamo では欠落しているセグメントは自動的に入力されるので、重複する終了点(開始点と同一)は必要ありません。
NURBS 曲線はほぼ同じ方法で生成され、入力された点は直線セグメントの端点を表し、次数と呼ばれる 2 番目のパラメータによって、曲線のスムージングの量とタイプが指定されます。* 次数が 1 の曲線はスムーズな部分がなく、ポリラインとなります。
次数が 2 の曲線は、曲線が交差し、ポリライン セグメントの中点と正接するようにスムージングされます。
Dynamo では、次数 20 までの NURBS (Non-Uniform Rational B Spline、非一様有理 B スプライン)曲線がサポートされます。次のスクリプトは、スムージング レベルの増加が曲線の形状に与える効果を示します。
制御点の数は、曲線の次数よりも少なくとも 1 つ多くする必要があります。
制御頂点による曲線の構築には、個々の曲線セグメント間で正接状態を維持できるという利点もあります。最後の 2 つの制御点間の方向が抽出され、この方向がそれに続く曲線の最初の 2 つの制御点で継続されることによって正接を維持します。次の例では、別々であっても 1 つの曲線のようにスムーズな 2 つの NURBS 曲線が作成されます。
*これは、NURBS 曲線ジオメトリについての非常に簡単な説明です。より正確かつ詳細な説明については、Pottmann 氏その他(2007 年)の考察を参照してください。
これまでの多くの例では、低い次元のオブジェクトから高い次元のジオメトリを構築することに注目してきました。交差メソッドを使用すると、この高い次元のジオメトリから低い次元のオブジェクトを生成でき、一方でトリム コマンドを選択すると、ジオメトリ形状を作成した後にスクリプトによって大幅に修正できます。
Intersect メソッドは Dynamo のジオメトリのすべてのピース上で定義されます。つまり、理論的にはジオメトリのどのピースもジオメトリの他の任意のピースと交差できます。点に関する交差では結果として得られるオブジェクトは常に入力された点そのものとなるなど、意味のない交差も当然あります。オブジェクト間での交差のその他の可能な組み合わせについて、次の表で概要を示します。次の表はさまざまな交差の操作の結果の概要を示しています。
次の非常に簡単な例では、平面と NURBS 曲面の交差を示しています。交差によって NURBS 曲線の配列が生成され、これを他の NURBS 曲線のように使用できます。
Trim メソッドは Intersect メソッドに非常によく似ており、ジオメトリのほぼすべてのピースに対して定義されます。ただし Trim には Intersect よりもはるかに多くの制限があります。
Trim メソッドについては、「選択」点が必要であることに注意が必要です。この点によってどのジオメトリを破棄してどの部分を保持するかが決まります。Dynamo は、選択点に最も近いトリムされたジオメトリを見つけて破棄します。
3 次元空間で X、Y、Z 座標を明示的に指定することで、特定のジオメトリ オブジェクトを作成できます。ただし、多くの場合、オブジェクト自体またはその基礎となる座標系でジオメトリ変換を使用して、ジオメトリを最終的な位置に移動します。
最も単純な幾何学的変換は移動であり、オブジェクトを X、Y、Z 軸方向に指定した単位の数だけ動かします。
Dynamo 内のすべてのオブジェクトは、オブジェクト名の末尾に .Translate メソッドを追加することで移動できますが、より複雑な変換では、基礎となる座標系から新しい座標系にオブジェクトを変換する必要があります。たとえば、オブジェクトを X 軸を中心にして 45 度回転させるには、回転していない既存の座標系から、.Transform メソッドで X 軸を中心にして 45 度回転した座標系にオブジェクトを移動します。
移動と回転に加えて、スケール変更やせん断変形された座標系も作成できます。座標系のスケールは .Scale メソッドを使用して変更できます。
せん断変形された座標系は、非直交ベクトルを CoordinateSystem コンストラクタに入力することで作成されます。
スケール変更とせん断変形は回転や移動よりも比較的複雑なジオメトリ変換であるため、すべての Dynamo オブジェクトで実行できるわけではありません。次の表は、スケールが均一でない座標系およびせん断変形された座標系を持つことができる Dynamo オブジェクトの概略です。
次の Python スクリプトは、点の配列を生成する例をいくつか示しています。これらは、次のように、Python Script ノードに貼り付ける必要があります。
python_points_1
python_points_2
python_points_3
python_points_4
python_points_5
2 次元のアナログから NURBS 曲線への変換が NURBS 曲面であり、フリーフォーム NURBS 曲線のように、2 つの基本的な方法で NURBS 曲面を構築できます。その方法とは、基点のセットを入力して Dynamo によってその間を補間する方法と、サーフェスの制御点を明示的に指定する方法です。また、フリーフォーム曲線のように、補間によるサーフェスは、サーフェスが取るべき形状を設計者が正確に認識している場合や、サーフェスが拘束点を通過することが必要な設計の場合に便利です。一方、制御点によって作成されたサーフェスは、さまざまなスムージング レベルで実験的な設計を行う場合に便利です。
補間されたサーフェスを作成するには、サーフェスの形状を近似する 2 次元の点の集合を生成するだけです。集合は、長方形であることが必要です。つまり、ギザギザではありません。NurbsSurface.ByPoints メソッドで、これらの点からサーフェスが構築されます。
フリーフォーム NURBS 曲面も、サーフェスの基礎となる制御点を指定することで作成できます。NURBS 曲線のように、制御点は直線セグメントによる四角形のメッシュを表すと考えることができ、このメッシュはサーフェスの次数に応じてスムージングされて最終的なサーフェス形状となります。NURBS 曲面を制御点によって作成するには、2 つのパラメータを NurbsSurface.ByPoints に追加して、サーフェスの両方向での基礎となる曲線の次数を示します。
NURBS 曲面の次数を増やして、結果として得られるサーフェス ジオメトリを変更できます。
サーフェスは、一連の入力された点の間を補間することで作成できるのと同様に、一連のベースとなる曲線の間を補間することで作成できます。これをロフトと呼びます。ロフトによるサーフェスは、Surface.ByLoft コンストラクタを使用して、入力された曲線の集合のみをパラメータとして作成されます。
回転のサーフェスは別のタイプのサーフェスで、中心軸を中心にベースとなる曲線をスイープして作成されます。補間されたサーフェスが 2 次元のアナログから補間された曲線への変換だとすると、回転のサーフェスは、2 次元のアナログから円や円弧への変換です。
回転のサーフェスは、サーフェスの「エッジ」を表すベースとなる曲線、サーフェスの基点となる軸の原点、中心の「核」の方向となる軸方向、スイープの開始角度、およびスイープの終了角度によって指定されます。これらは Surface.Revolve コンストラクタへの入力として使用されます。
Intersect、Trim、および SelectTrim は、点、曲線、サーフェスなどの低い次元のジオメトリに主に使用されます。一方、ソリッド ジオメトリには、Trim と同様の方法でマテリアルを取り除くことおよび要素を結合して全体を大きくすることの両方によって構築後に形状を修正するための、一連のメソッドが追加されています。
Union メソッドでは、2 つのソリッド オブジェクトが使用され、両方のオブジェクトによってカバーされる空間から単一のソリッド オブジェクトが作成されます。オブジェクト間で重複する空間は最終形状に結合されます。この例では、球と直方体が結合して単一のソリッドの球-立方体形状となります。
Difference メソッドでは、Trim のように、ベースとなるソリッドから入力されたツールとなるソリッドの内容が取り除かれます。この例では、球から小さなくぼみが削り出されています。
Intersect メソッドでは、2 つのソリッド入力間の重複するソリッドが生成されます。次の例では、Difference が Intersect に変更され、結果として得られるソリッドは、最初に削り出されていた空間がなくなっています。
クラス | スケールが均一でない座標系 | せん断変形された座標系 |
---|---|---|
使用: 点
曲線
平面
サーフェス
ソリッド
対象: 曲線
可
不可
不可
不可
不可
ポリゴン
-
不可
可
不可
不可
サーフェス
-
可
可
可
可
ソリッド
-
-
可
可
可
円弧
不可
不可
NURBS 曲線
可
可
NURBS 曲面
不可
不可
円
不可
不可
線分
可
可
平面
不可
不可
点
可
可
ポリゴン
不可
不可
ソリッド
不可
不可
サーフェス
不可
不可
文字
不可
不可
対象:
サーフェス
曲線
平面
ソリッド
サーフェス
曲線
点
点、曲線
サーフェス
曲線
点
点
点
曲線
平面
曲線
点
曲線
曲線
ソリッド
サーフェス
曲線
曲線
ソリッド