今回は、グラスホッパーで指定した点に向きを変えるボックスのデザイン方法について解説します。
動画で見る
全体の様子


上2枚の画像は、グラスホッパーの様子です。


上2枚の画像は、ライノセラス上に書き出した様子です。




上4枚の画像は、指定する点の位置を変えた際の様子です。

上の画像は、最終的にレンダリングした様子です。
それでは、順番に解説していきます。
今回使用したグラスホッパーとライノセラスのデータダウンロードはこちら
ダウンロードできるデータのご利用に関しては、利用規約をご覧ください。
全体コンポーネント
全体コンポーネント:①Rectangle ②Unit Z ③Extrude ④Deconstruct Brep ⑤Area ⑥Scale ⑦Explode Tree ⑧MD Slider ⑨Evaluate Surface ⑩Move ⑪Line ⑫Curve Middle ⑬Divide Surface ⑭Divide Curve ⑮Vector 2Pt ⑯Plane Normal ⑰Center Box ⑱Merge ⑲Flip Matrix ⑳PolyLine ㉑Pipe ㉒Cap Holes


4つの正方形のサーフェスのスケールを変える
最初に、4つの正方形のサーフェスを作成し、スケールを変えていきます。
スケールを変える理由は、スケールを変えないと、最終的に作成するボックスが、両端で重複してしますからです。

RectangleのXとY端子に、辺の長さの数値を入力します。
今回は、どちらにも10000の数値を入力しています。
すると、上の画像のように、正方形の線データが作成されました。

その後、先程の10000の数値を、Unit Zにつなげます。
さらに、Unit Zを、ExtrudeのD端子につなげます。
さらに、RectangleのR端子を、ExtrudeのB端子につなげます。
すると、上の画像のように、正方形の線データが押し出されました。

その後、Extrudeを、Deconstruct Brepにつなげます。
すると、押し出されたモデルが分解され、Deconstruct BrepのF端子から4つのサーフェスが出力されます。

その後、Deconstruct BrepのF端子を、Areaにつなげます。
すると、上の画像のように、各サーフェスの中心点を取得できます。

その後、AreaのC端子を、ScaleのC端子につなげます。
さらに、Deconstruct BrepのF端子を、ScaleのG端子につなげます。
さらに、倍率の数値を、ScaleのF端子につなげます。
今回は、0.9の数値を入力しています。
すると、上の画像のように、各サーフェスのスケールが小さくなりました。

この際に、Scaleの右側のG端子を右クリックし、Graftに設定してください。

その後、ScaleのG端子を、Explode Treeにつなげます。
この際に、Explode Treeを右クリックし、Match outputsに設定してください。
すると、4つの階層があるため、Explode Treeの右側に4つの端子が表れます。

Explode Treeの右側の端子からは、1つの端子から各サーフェスデータが出力されます。
これで、4つの正方形のサーフェスのスケールを変えることができました。
向きの基準となる線を作成する
次に、向きの基準となる線を作成していきます。

最初のRectangleのR端子を、Evaluate SurfaceのS端子につなげます。
この際に、Evaluate SurfaceのS端子を右クリックし、Reparameterizeに設定してください。
さらに、MD Sliderを、Evaluate Surfaceのuv端子につなげます。

すると、上の画像のように、正方形内の点を取得できます。
今回は、MD Sliderの値が0.5 ; 0.5になっているため中心点が取得されていますが、値を変えることで正方形内の様々な場所の点を取得できます。

その後、先程のUnit Zを、MoveのT端子につなげます。
さらに、Evaluate SurfaceのP端子を、MoveのG端子につなげます。
すると、上の画像のように、点が真上方向に移動しました。

その後、Evaluate SurfaceのP端子とMoveのG端子を、Lineにつなげます。
すると、上の画像のように、2つの点をつなぐ線が作成されました。

その後、Lineを、Curve Middleにつなげます。
すると、上の画像のように、線の中点を取得できます。

さらに、Curve Middleを、ScaleのC端子につなげます。
さらに、先程使用した倍率の0.9の数値を、ScaleのF端子につなげます。
すると、上の画像のように、線のスケールが変わりました。
これで、向きの基準となる線を作成することができました。
サーフェスと線を分割する点を作成する
次に、サーフェスと線を分割する点を作成していきます。

4つのDivide Surfaceを用意します。
そして、Explode Treeの右側の4つの端子を、それぞれ各Divide SurfaceのS端子につなげます。
さらに、分割数の数値を、各Divide SurfaceのUとV端子につなげます。
今回は、どちらにも15の数値を入力しています。
すると、上の画像のように、各サーフェスを15×15に分割する位置に、点が作成されます。

その後、線の方のScaleのG端子を、Divide CurveのC端子につなげます。
さらに、先程の15の分割数の数値を、Divide CurveのN端子につなげます。
すると、上の画像のように、線を15に分割する位置に、点が作成されました。

この際に、Divide CurveのP端子を右クリックし、Graftに選択してください。
これで、サーフェスと線を分割する点を作成することができました。
サーフェス上の点にボックスを作成する
最後に、サーフェス上の点にボックスを作成していきます。

4つのVector 2Ptを用意します。
Divide CurveのP端子を、各Vector 2PtのA端子につなげます。
さらに、各Divide SurfaceのP端子を、各Vector 2PtのB端子につなげます。
すると、サーフェス上の点から、中心にある同じ高さの点までのベクトルが作成されます。
その後、4つのPlane Normalを用意します。
そして、各Vector 2PtのV端子を、各Plane NormalのZ端子につなげます。
さらに、各Divide SurfaceのP端子を、各Plane NormalのO端子につなげます。
すると、サーフェス上の点の位置に、作成したベクトルをZ軸とする作業平面が作成されます。
その後、4つのCenter Boxを用意します。
そして、各Plane Normalを、各Center BoxのB端子につなげます。
さらに、各Center BoxのXYZ端子に、各辺の長さの半分の長さの数値を入力します。
今回は、XとY端子に50、Z端子に1000の数値を入力しています。
すると、上の画像のように、100×100×2000のボックスが作成されました。
その後、4つのCenter Boxを、Mergeにつなげてデータを結合します。

その後、4つのFlip Matrixを用意します。
そして、各Divide SurfaceのP端子を、各Flip Matrixにつなげます。
すると、サーフェス上の点データの行と列が入れ替わります。
その後、4つのPolyLineを用意します。
そして、各Flip Matrixを、各PolyLineのV端子につなげます。
すると、上の画像のように、縦方向の線が作成されます。
この際に、Flip Matrixを使わないと、横方向の線になってしまいます。

その後、4つのPipeを用意します。
そして、各PolyLineを、PipeのC端子につなげます。
さらに、半径の数値を、PipeのR端子につなげます。
今回は、10の数値を入力しています。
すると、上の画像のように、各ボックスを通るパイプが作成されました。

その後、4つのPipeを、Mergeにつなげてデータを結合します。
その後、Mergeを、Cap Holesにつなげて、パイプの穴を塞ぎます。
これで完成です。
今回は以上になります。
Comment