Geometry.BoundingBox
前回まではライノのデータをダイナモにデザインスクリプトとして取り込みました。この段階でPolySurfaceという要素に変換されています。PolySurfaceとは複数のSurfaceを一つとして扱っている、ということです。AutoCADをご存じであれば、ポリラインを思い出してください。直線や円弧を一つのオブジェクトして扱えます。これと同じように複数のSurfaceを一つにしたものです。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiTpY7eDF904Hwejr3QUBglyOvb61XOcdnOSjWS2XSM6DCl3KAFENzJIEtwM_Frg-8-ySImWlXi6M-hCwHWMIA__TE4HL6NPiL0QRoilfSdM3NFNkKMQo-MC55HFFdcfa81F6ik-vPdsiWv/s400/901.png) |
GeometryからはPolySurfaceのListが出力される |
このPolySurfaceを分割する方法はさまざまに用意されていますが、今回は形状全体を取り囲む矩形を作成し、そのX軸とY軸で分割してみます。形状全体を取り囲む立方体をBoundingBoxといいます。
まず、Rhino_BrepToDSのGeometryから出力されるのはPolySurfaceのリストなので、これをGetItemAtIndexで取り出します。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgviz3o0_a2TxmcGikzMh13z3alOovYmWUIA4QlfPDMR_CZWAzzFZWrertuCtOtHg0tN6_71mjKQ03dQHMTbiYgotycgpvr8RcH7JlXE7QBtH1IvUt9dEKs5gjKc0V-pQHN7zlyFPGn5_62/s400/902.png) |
ListのアイテムであるPolySurfaceを取り出す |
次に、取り出したPolySurfaceにGeometry.BoundingBoxをつなぎます。この時点ではメモリ上に立方体ができただけで、Dynamo上には何も現れません。このBoundingBoxをBoundingBox.ToPolySurfaceで立方体のポリサーフェスに変換します。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhP8kRJ7NKH7bUvbrzsBZZFuBg6pmM9cO6yRuP2R0pz2o9mbIYph2Wk1LXOxI3KMKu5Pcx9oFF_EObezEV-NZNXpirfbdiz5W4-wGfHXq0mEJhvTxzoenOkS0sVgw9qriRssBvSY-MSiL-u/s400/903.png) |
形状を取り囲む立方体が作成された。 |
Geometry.Explode
PolySurfaceは複数のSurfaceが固まっているので、Geometry.Explodeを使って、これを分解して6面の長方形にします。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhvQ-4mmH08tl1tnvcS-zIQn5V0Ft7e5BeRc-8EXteA8fS1Dnb6kNNDzCARwsSrpTPQe7Ogamu0teaaLGisui_d99wm77czZXZScJgUWKb6GU9rq4bOAdHU3hcxFuDruNK5vqRzpKvlY19j/s400/904.png) |
6面のうちindexが2の面を取り出したところ |
この6つの面のうち分割の基準として利用する一つの面を、GetItemAtIndexとIntegerSliderを使って見つけます。このとき、このとき必要のないジオメトリは、ノードを右クリックして「プレビュー」を外しておきます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhkRw3ivGfec3MW6ZfiIglq1PYvy-cmQ9wjuDFh-SfQIcSpPKAV6wyMCUUiKqiXhpKKe_luwO7-_Af1TYUyHpoKV35TV3OtonUDurbox3SexycjduZCScymPPR2FDvzkPVccQnNLd0klk3W/s400/905.png) |
プレビューを外す |
Surface.GetIsoLine
矩形の端部の線を分割の基準線として取り出します。このためにはGetIsoLineを利用すると便利です。IsoLineはSurfaceをUVに分割した等値カーブを取り出します。対象としている平面は単純な矩形です。isoDirectionとparameterにともに0を設定すると、図のようなエッジのカーブ(直線)を取り出すことができます。(isoDirectionを試しに1にして違いを確認してみましょう。)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjVSCayBO2staW4j9eiUGT04ve55hoPhXv0_eCXeY7JRK8Buawyj0JgFYVp6iWKzRG5n5Z2yAL9ZboC-Y72drhVwVw1WbOv6vxL7N8n5srpfBrtoYboe4iAT0MyRuHyS-DvYQQN1kg-I-l8/s400/906.png) |
IsoLineでエッジを抽出 |
Curve.PlaneAtParameter
抽出した線上に平面(Plane)をCurve.PlaneAtParameterを使って等間隔に作成します。このパラメータとは、カーブの全体の長さを1としますので、カーブ上の点を比率で指定することができます。今回は分割数を指定して平面を作成してみます。Numberノードを追加して
0.01..0.99..#DivNum
と入力し、IntegerSliderを接続します。これにより、パラメータ 0.01から0.99までをDivNum数で分割したパラメーターのリストが作成されます。0から1としなかったのは端部の「空振り」を避けるためです。これをPlaneAtParameterにつなぐと、線上にたくさん平面が現れます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0L_YqQ69iCVSz16_e1QKsFbSSWfXxMA0KrofiIeWeqp_MMgx6jTDTRDl4nY3dtlGF9CgR1e_xkP7P-fUovJ_q6WhzL6T-ikThMuN0I0xuAZiUQkrR3rVeTO3uvEYf493Bqo7qMg4eYTrk/s400/907.png) |
抽出した直線上に平面が作成される |
この平面で、ライノから取り込んだPolySurfaceをカットします。
Geometry.IntersectAll
IntersectAllノードでは、[geometry]で[entity]を切断し、切り口のカーブを抽出します。切るもの、着られるもの、の順番でつなぎますので、今回はgeometryに先ほど作成した平面を、切られるものとしてentityにライノから取り込んだPolySurfacdをつなぎます。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjX00sGspsibVhm9rTanhbueDKIxkKz1tUnYCjisyl2aGJ1T31Lqe6RqStMEjYifJpYt0c3TD9VqHmOXpPVzjoov1nO0RY0uPc3W9nXpcN2dKjiVFOgVNj-8EmCvFfDcPQxJgITNBTxcWGu/s400/908.png) |
geometryにはPlaneAtParameterを、entityには下の図のPolySurfaceをつなぐ |
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmc_gC1H2FFcRjIkxZJDI52z92NHures31IqkdbWuPMlEXFAE9hEFP_RVipDMxpVjLHHoSEvK21vlZdkANabWTgx1ibJ3lhE_pTnMrZ7b8A-p3rZPMfv8Y48sIS0wscAOH-BzoRGvvQUSU/s320/909.png) |
これをentityにつなぐ |
この
BoundingBox→GetIsoLine→PlaneAtParameter→IntersectAllは定番なので、流れを覚えておくとよいでしょう。
下の図は、BoundingBoxの面を選択するスライダを3に設定し、さらのIsoLineをもう一つ加えて等分割した状態です。どのように作成したか、もうお分かりになるでしょう。
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgKByIWh0_ZzwadM479lz_x9-YRA5dhn5kJcL9d_fjXoxkZ-EEQWFt0KnIyGxWh_vW8R8LhWx-9mLWGtQf0G1ZhWhbmiYeEjZvJ2TCgnBvBaArnvUPm_nZydy3e_LbGVQNZ8sL2LwIiua6p/s400/911.png) |
2方向で切断したところ |