Geometry.BoundingBox
前回まではライノのデータをダイナモにデザインスクリプトとして取り込みました。この段階でPolySurfaceという要素に変換されています。PolySurfaceとは複数のSurfaceを一つとして扱っている、ということです。AutoCADをご存じであれば、ポリラインを思い出してください。直線や円弧を一つのオブジェクトして扱えます。これと同じように複数のSurfaceを一つにしたものです。
|
GeometryからはPolySurfaceのListが出力される |
このPolySurfaceを分割する方法はさまざまに用意されていますが、今回は形状全体を取り囲む矩形を作成し、そのX軸とY軸で分割してみます。形状全体を取り囲む立方体をBoundingBoxといいます。
まず、Rhino_BrepToDSのGeometryから出力されるのはPolySurfaceのリストなので、これをGetItemAtIndexで取り出します。
|
ListのアイテムであるPolySurfaceを取り出す |
次に、取り出したPolySurfaceにGeometry.BoundingBoxをつなぎます。この時点ではメモリ上に立方体ができただけで、Dynamo上には何も現れません。このBoundingBoxをBoundingBox.ToPolySurfaceで立方体のポリサーフェスに変換します。
|
形状を取り囲む立方体が作成された。 |
Geometry.Explode
PolySurfaceは複数のSurfaceが固まっているので、Geometry.Explodeを使って、これを分解して6面の長方形にします。
|
6面のうちindexが2の面を取り出したところ |
この6つの面のうち分割の基準として利用する一つの面を、GetItemAtIndexとIntegerSliderを使って見つけます。このとき、このとき必要のないジオメトリは、ノードを右クリックして「プレビュー」を外しておきます。
|
プレビューを外す |
Surface.GetIsoLine
矩形の端部の線を分割の基準線として取り出します。このためにはGetIsoLineを利用すると便利です。IsoLineはSurfaceをUVに分割した等値カーブを取り出します。対象としている平面は単純な矩形です。isoDirectionとparameterにともに0を設定すると、図のようなエッジのカーブ(直線)を取り出すことができます。(isoDirectionを試しに1にして違いを確認してみましょう。)
|
IsoLineでエッジを抽出 |
Curve.PlaneAtParameter
抽出した線上に平面(Plane)をCurve.PlaneAtParameterを使って等間隔に作成します。このパラメータとは、カーブの全体の長さを1としますので、カーブ上の点を比率で指定することができます。今回は分割数を指定して平面を作成してみます。Numberノードを追加して
0.01..0.99..#DivNum
と入力し、IntegerSliderを接続します。これにより、パラメータ 0.01から0.99までをDivNum数で分割したパラメーターのリストが作成されます。0から1としなかったのは端部の「空振り」を避けるためです。これをPlaneAtParameterにつなぐと、線上にたくさん平面が現れます。
|
抽出した直線上に平面が作成される |
この平面で、ライノから取り込んだPolySurfaceをカットします。
Geometry.IntersectAll
IntersectAllノードでは、[geometry]で[entity]を切断し、切り口のカーブを抽出します。切るもの、着られるもの、の順番でつなぎますので、今回はgeometryに先ほど作成した平面を、切られるものとしてentityにライノから取り込んだPolySurfacdをつなぎます。
|
geometryにはPlaneAtParameterを、entityには下の図のPolySurfaceをつなぐ |
|
これをentityにつなぐ |
この
BoundingBox→GetIsoLine→PlaneAtParameter→IntersectAllは定番なので、流れを覚えておくとよいでしょう。
下の図は、BoundingBoxの面を選択するスライダを3に設定し、さらのIsoLineをもう一つ加えて等分割した状態です。どのように作成したか、もうお分かりになるでしょう。
|
2方向で切断したところ |