[Grasshopper]鍾乳洞のような途切れる直方体の作成方法[データも配布]

grasshopper
本サイトはプロモーションが含まれています

今回は、グラスホッパーで鍾乳洞のような途切れる直方体の作成方法について解説します。

本記事では、コンポーネントはアイコン表示になっています。


↑YouTube始めました。

本サイトIArchwayでは、GrasshopperやRhinocerousのサポートや相談をココナラで受け付けています。


動画で見る

全体の様子

全体の様子1
全体の様子3
全体の様子4
全体の様子5

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

全体の様子6
全体の様子7
全体の様子8
全体の様子9

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

レンダリング

上の画像は、最終的にレンダリングした様子です。

それでは、順番に解説していきます。

今回使用したグラスホッパーとライノセラスのデータダウンロードはこちら

ダウンロードできるデータのご利用に関しては、利用規約をご覧ください。

全体コンポーネント

全体コンポーネント:①RectangleSurfaceDivisionDivide Domain²IsotrimUnit ZMoveAreaLineList LengthConstruct DomainRandomIntegerShatter ⑮Equality ⑯DispatchCurveClean TreeList ItemLengthNegative ㉒Extend Curve ㉓MergePerp FramesDeconstruct PlaneVector 2PtLoftCap HolesBoolean Toggle

全体コンポーネント1
画像をクリックして拡大して見る
全体コンポーネント2
画像をクリックして拡大して見る
全体コンポーネント3
画像をクリックして拡大して見る
全体コンポーネント4
画像をクリックして拡大して見る
全体コンポーネント5
画像をクリックして拡大して見る
全体コンポーネント6
画像をクリックして拡大して見る

縦方向の線を作成する

最初に、縦方向の線を作成していきます。

四角形

RectangleのXとY端子に、辺の長さの数値を入力します。

今回は、X端子に8000、Y端子に4000の数値を入力しています。

すると、上の画像のように、四角形の線データが作成されました。

サーフェス

その後、RectangleのR端子を、Surfaceにつなげます。

すると、上の画像のように、四角形の線データからサーフェスが作成されました。

サーフェスを分割する数値

次に、サーフェスを分割する数値を作成していきます。

2つのDivisionのB端子に、割り算の分母の数値を入力します。

今回は、どちらにも200の数値を入力しています。

その後、辺の長さの8000の数値を、1つ目のDivisionのA端子につなげます。

すると、8000÷200=40の数値が出力されます。

さらに、辺の長さの4000の数値を、2つ目のDivisionのA端子につなげます。

すると、4000÷200=20の数値が出力されます。

辺の数値を同じ200で割った理由は、辺の長さの比を維持するためです。

これにより、サーフェスを分割した際に、正方形で分割できるようになります。

分割

その後、1つ目のDivisionを、Divide Domain²のU端子につなげます。

さらに、2つ目のDivisionを、Divide Domain²のV端子につなげます。

さらに、Surfaceを、Divide Domain²のI端子につなげます。

その後、Divide Domain²を、IsotrimのD端子につなげます。

さらに、Surfaceを、IsotrimのS端子につなげます。

すると、上の画像のように、サーフェスが40×20に分割されました。

真上に移動

その後、真上に移動させる距離の数値を、Unit Zにつなげます。

今回は、3000の数値を入力しています。

その後、Unit Zを、MoveのT端子につなげます。

さらに、Isotrimを、MoveのG端子につなげます。

すると、上の画像のように、各サーフェスが真上方向に移動しました。

中心点

その後、2つのAreaを用意します。

IsotrimMoveのG端子を、それぞれAreaにつなげます。

すると、上の画像のように、各サーフェスの中心点を取得できました。

縦方向の線

その後、2つのAreaのC端子を、Lineにつなげます。

すると、上の画像のように、上と下の中心点をつなぐ線が作成されました。

Graft

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

これで、縦方向の線を作成することができました。

ランダムな位置で線を分割する

次に、ランダムな位置で線を分割していきます。

ランダムな数値

どちらかのAreaのC端子を、List Lengthにつなげます。

すると、線の個数の数値を取得できます。

今回の場合、800の数値が取得されています。

その後、0の数値を、Construct DomainのA端子につなげます。

さらに、10の数値を、Construct DomainのB端子につなげます。

すると、0 To 10という数値範囲が作成されました。

Graft

その後、Construct Domainを、RandomのR端子につなげます。

さらに、List Lengthを、RandomのN端子につなげます。

さらに、任意のランダムさを変えるシード値を、RandomのS端子につなげます。

今回は、100の数値を入力しています。

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

すると、0~10の範囲で、ランダムな数値が800個作成されます。

その後、Randomを、Integerにつなげます。

すると、小数の数値が、整数に変換されました。

その後、Integerを、DivisionのA端子につなげます。

さらに、10の数値を、DivisionのB端子につなげます。

すると、ランダムな数値が、0~1.0の数値に変換されます。

その後、Divisionを、Shatterのt端子につなげます。

さらに、Lineを、ShatterのC端子につなげます。

すると、線の長さを0~1とした場合の位置で、線が分割されます。

例を挙げると、数値が0.5の場合は、線の真ん中の位置で分割されます。

数値が0の場合、線は分割されません。

場合分け

Shatterから出力されるデータを見てみると、1つの階層の中に1つの線の場合と、2つの線がある場合があることが分かります。

1つの線の場合、線は分割されていません。

2つの線の場合、線が分割されています。

1つの線の場合と2つの線の場合で、場合分けしていきます。

Shatterを、List Lengthにつなげます。

すると、各階層の線のデータの個数が出力されます。

その後、List Lengthを、EqualityのB端子につなげます。

さらに、1の数値を、EqualityのA端子につなげます。

すると、Equalityの=端子から、1の場合はTrue、2の場合はFalseのデータが出力されます。

その後、Equalityの=端子を、DispatchのP端子につなげます。

さらに、Shatterを、DispatchのL端子につなげます。

その後、DispatchのAとB端子を、それぞれCurveにつなげます。

A端子

すると、A端子の方のCurveからは、分割された線データを取得できます。

B端子

B端子の方のCurveからは、分割されていない線データを取得できます。

Clean Tree

DispatchのB端子の方のCurveを進めていきます。

DispatchのB端子の方のCurveを、Clean TreeのT端子につなげます。

さらに、Trueの情報を、Clean TreeのE端子につなげます。

今回は、Boolean ToggleでTrueの情報を作成しています。

すると、空っぽの階層を削除することができました。

その後、Clean Treeを、2つのList ItemのL端子につなげます。

さらに、0の数値を、1つ目のList Itemのi端子につなげます。

さらに、1の数値を、2つ目のList Itemのi端子につなげます。

下側
上側

すると、上2枚の画像のように、0の数値の方は分割された下側の線、1の数値の方は分割された上側の線を取得できます。

その後、2つのList Itemを、それぞれLengthにつなげます。

すると、各線の長さの数値を取得できます。

その後、2つのLengthを、それぞれDivisionのA端子につなげます。

さらに、2の数値を、2つのDivisionのB端子につなげます。

すると、取得した線の長さの数値を、2で割った数値を取得できます。

その後、2つのDivisionを、それぞれNegativeにつなげます。

すると、数値がマイナスになります。

その後、2つのList Itemを、それぞれExtend CurveのC端子につなげます。

さらに、1つ目のExtend CurveのL0端子に、0の数値をつなげます。

さらに、2つ目のExtend CurveのL1端子に、0の数値をつなげます。

さらに、1つ目のExtend CurveのL1端子に、1つ目のNegativeをつなげます。

さらに、2つ目のExtend CurveのL0端子に、Negativeをつなげます。

縮める
縮める2

すると、上の画像のように、線の長さが短くなり、中心部分に空洞ができました。

結合

その後、DispatchのA端子の方のCurveと2つのExtend Curveを、Mergeにつなげます。

すると、上の画像のように、分割されていない線と分割された線データを結合できました。

Flatten

この際に、MergeのR端子を右クリックし、Flattenに設定してください。

これで、ランダムな位置で線を分割することができました。

線から直方体を作成する

次に、線から直方体を作成していきます。

正方形

Mergeを、Perp FramesのC端子につなげます。

さらに、1の数値を、Perp FramesのN端子につなげます。

すると、各線の両端に、作業平面が作成されます。

その後、最初の方に使用した200の数値を、DivisionのA端子につなげます。

さらに、3の数値を、DivisionのB端子につなげます。

すると、200÷3の数値が出力されます。

この数値は、直方体の縦と横の長さの数値になります。

その後、Perp FramesのF端子を、RectangleのP端子につなげます。

さらに、Divisionを、RectangleのXとY端子に入力します。

すると、上の画像のように、線の両端に正方形の線データが作成されました。

点

その後、Perp FramesのF端子を、Deconstruct Planeにつなげます。

すると、作業平面の原点の点データを取得できます。

さらに、RectangleのR端子を、Areaにつなげます。

すると、正方形の中心点の点データを取得できます。

移動

その後、AreaのC端子を、Vector 2PtのA端子につなげます。

さらに、Deconstruct PlaneのO端子を、Vector 2PtのB端子につなげます。

すると、正方形の中心点から、作業平面の原点までのベクトルデータを取得できます。

その後、Vector 2PtのV端子を、MoveのT端子につなげます。

さらに、RectangleのR端子を、MoveのG端子につなげます。

すると、上の画像のように、正方形の線データが、作業平面の原点を中心にする位置に移動しました。

完成

その後、MoveのG端子を、Loftにつなげます。

すると、上の画像のように、四角形の線データをつないで直方体が作成されました。

その後、LoftCap Holesにつなぎ、穴を塞ぎます。

これで完成です。

今回は以上になります。

Comment

Translate »