見出し画像

Grasshopperで小屋をモデリング#4”柱高さに合わせて梁をモデル化”

小さな小屋組をGrasshopperを使ってモデリングすることで、

  1. Grasshopperに慣れる

  2. モデリングでどんな場面でGrasshopperを使えるか考える

  3. 今のスキルで何ができて何ができないかを見つける

上記を目的として実践していく


前回までのあらすじ


前回は梁(大梁)をモデル化する際に
軸となる梁芯を通すための点を柱頭にGrasshopperで作った

これによりNumber Sliderで柱高さを調整しても
高さに合わせて柱頭に点が置かれている状況を作り出すことに成功した

今回は柱頭の点を用いて梁をつくっていく
大まかな手順は以下となる

  1. 柱頭の中心点をからCurve(梁断面の中心線)をつくる

  2. 梁の断面を生成する

  3. 梁を不自然の無いように調整する


RhinoとGrasshopperは前回の記事の状態から始める



前回の記事にも書いたが
今回つくる梁は大梁を対象とする(おいおい小梁も作ろうとは思うが)
なので用意する柱頭の中心点も四隅の4か所だけ


ちなみにここでいう大梁とは
梁の両端部が柱に架けられている梁を指している

建築の構造設計をやっていると
大梁の定義は地震時に水平力を負担する梁
という意味ととらえる人もいる(主に鉄骨やRCの設計者)

そうなると
木造住宅の梁なんかは解析モデル上両端ピン接合なので
木造住宅には大梁は存在しない、などということになるが
それはそれで梁の識別が1項目減るので
ここでは大梁を前述の定義とした

この状態からスタート


柱頭の中心点をからCurveをつくる

そもそもCurveをつくる必要があるのかどうか、だが
理由としては以下になる

  • 梁断面はCenter Boxコンポーネントで生成する

  • Center Boxには平面情報が必要

  • 平面情報にはPerp Frameを使用する

  • Perp Frameには曲線の情報が必要

よって曲線を用意しておく必要がある

梁断面の生成には他にもあるかもしれないが
僕が学んできた範囲でできることが上記の方法だった
というのが正直なところだ

Center Boxによる梁断面の生成は実は#2で一度やっている


曲線生成時に使用したコンポーネントは
・Line
・Shift List
・Number Slider
・Boolean Toggle


悩んだのはPointコンポーネントの中に
Lineコンポーネントで使いたい
Start PointとEnd Pointが全部入っていることだ


下図のようにただPointコンポーネントから
Lineの入力につなげるだけでは曲線はつくれない

Start PointとEnd Pointが互いに同じ点を参照しているから曲線ができない


そこでLineの入力のうちの片方を
Shift Listを使って参照するPointのインデックスを一つずつずらしてみた

元のインデックスの並びから一つずつずらした

Shift ListのShift端子はどれだけインデックスをずらすか
ということで1を入力している

Wrap端子は
True:後ろにずれたインデックスが最初に巻き戻る
False:後ろにずれたインデックスが最初に巻き戻らずに消えてなくなる

今回はPointのリスト内のアイテムが
消えてもらっては困るのでTrueとなる

こうすることでLineコンポーネントの入力をが完了し
曲線をつくることができた

これが梁断面の基準線(中心線)となる


梁の断面を生成する

前述したが#2で一度やっているので
そちらを参照されたい

ただ、今回の曲線の生成で追加した部分がある

追加したのはExpessionコンポーネントだ


赤〇でExpession追加
要は梁の長さを柱の端部~端部にしたいというだけの話


目的としては梁の長さを柱の端部~端部にするためだ

Expessionの入力は
x:梁幅(本当は柱幅だが便宜的に梁幅)の1/2=105/2=52.5mm
y:梁の中心線の長さの1/2

Expessionがない場合


Expessionがある場合

おさらいになるが
Divisionコンポーネントで指定の数値を2で割っている
これ梁断面を生成するCenter Boxが
入力値で基準平面の両サイドに断面を押し出すから

ここでは自分が設定したい数値をNumber Sliderで見えるように
Center Boxにつなげる直前でDivisionを介している


梁を見やすくするため柱をベイクした


梁の端部 互いの梁が交差しており柱にも重複している


梁を不自然の無いように調整する

#2ではすでに行っているが梁が柱に重複しているので
これを整える

コンポーネントは下図の通りだ
MoveでZ軸方向に梁せいの1/2だけ上に移動させる


基準線が柱頭の位置なので
このような調整が必要になる



あと気になるのは梁同士の重なりだ

ここでは以下のコンポーネントを使った
・Dispatch
・Solid Difference
・Geometry


先にどのような結果になるかを示す

Solid Difference部分
Solid Differenceをしなかった梁はGeometryにまとめた


Dispatchコンポーネントは
入力に使ったリストを出力のList AとList Bに振り分けることができるコンポーネントだ

振り分けるパターンはシンプルにTrueとFalseでBoxのリスト内のインデックスを交互に振り分けるようにした

True、Falseの順だとこのように交互に出力AとBに振り分けられる


Solid DifferenceはRhinoでいうBoolean Differenceコマンドだ
オブジェクトを削る側、削られる側のそれぞれでオブジェクトが必要になる
それをDispatchコンポーネントで振り分けて用意した

Solid Differenceコンポーネントでは削り取られたオブジェクトしか出力しないので
削られていない方はDispatchからの出力をGeometryコンポーネントに格納した


これで柱高さの調整で梁も合わせて位置が追随されるようになった



最後に

いや~
時間かかった笑

まだ全然小屋組できてないけど笑


noteに記事を投稿しながら
Grasshopperを勉強して約1か月になる

note自体初めて使うものだから
全然要領わかっていなかったけど
ダッシュボードでアクセス状況を確認すると
多少僕の記事を見てくれている人がいるみたい


圧倒的感謝です


これからもできる限り毎日投稿したいな


もしよかったらスキや
フォローしてくれると狂喜します!


この記事が気に入ったらサポートをしてみませんか?