Grasshopperで小屋をモデリング#4”柱高さに合わせて梁をモデル化”
小さな小屋組をGrasshopperを使ってモデリングすることで、
Grasshopperに慣れる
モデリングでどんな場面でGrasshopperを使えるか考える
今のスキルで何ができて何ができないかを見つける
上記を目的として実践していく
前回までのあらすじ
前回は梁(大梁)をモデル化する際に
軸となる梁芯を通すための点を柱頭にGrasshopperで作った
これによりNumber Sliderで柱高さを調整しても
高さに合わせて柱頭に点が置かれている状況を作り出すことに成功した
今回は柱頭の点を用いて梁をつくっていく
大まかな手順は以下となる
柱頭の中心点をからCurve(梁断面の中心線)をつくる
梁の断面を生成する
梁を不自然の無いように調整する
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の入力につなげるだけでは曲線はつくれない
そこでLineの入力のうちの片方を
Shift Listを使って参照するPointのインデックスを一つずつずらしてみた
Shift ListのShift端子はどれだけインデックスをずらすか
ということで1を入力している
Wrap端子は
True:後ろにずれたインデックスが最初に巻き戻る
False:後ろにずれたインデックスが最初に巻き戻らずに消えてなくなる
今回はPointのリスト内のアイテムが
消えてもらっては困るのでTrueとなる
こうすることでLineコンポーネントの入力をが完了し
曲線をつくることができた
梁の断面を生成する
前述したが#2で一度やっているので
そちらを参照されたい
ただ、今回の曲線の生成で追加した部分がある
追加したのはExpessionコンポーネントだ
目的としては梁の長さを柱の端部~端部にするためだ
Expessionの入力は
x:梁幅(本当は柱幅だが便宜的に梁幅)の1/2=105/2=52.5mm
y:梁の中心線の長さの1/2
おさらいになるが
Divisionコンポーネントで指定の数値を2で割っている
これ梁断面を生成するCenter Boxが
入力値で基準平面の両サイドに断面を押し出すから
ここでは自分が設定したい数値をNumber Sliderで見えるように
Center Boxにつなげる直前でDivisionを介している
梁を不自然の無いように調整する
#2ではすでに行っているが梁が柱に重複しているので
これを整える
コンポーネントは下図の通りだ
MoveでZ軸方向に梁せいの1/2だけ上に移動させる
基準線が柱頭の位置なので
このような調整が必要になる
あと気になるのは梁同士の重なりだ
ここでは以下のコンポーネントを使った
・Dispatch
・Solid Difference
・Geometry
先にどのような結果になるかを示す
Dispatchコンポーネントは
入力に使ったリストを出力のList AとList Bに振り分けることができるコンポーネントだ
振り分けるパターンはシンプルにTrueとFalseでBoxのリスト内のインデックスを交互に振り分けるようにした
Solid DifferenceはRhinoでいうBoolean Differenceコマンドだ
オブジェクトを削る側、削られる側のそれぞれでオブジェクトが必要になる
それをDispatchコンポーネントで振り分けて用意した
Solid Differenceコンポーネントでは削り取られたオブジェクトしか出力しないので
削られていない方はDispatchからの出力をGeometryコンポーネントに格納した
これで柱高さの調整で梁も合わせて位置が追随されるようになった
最後に
いや~
時間かかった笑
まだ全然小屋組できてないけど笑
noteに記事を投稿しながら
Grasshopperを勉強して約1か月になる
note自体初めて使うものだから
全然要領わかっていなかったけど
ダッシュボードでアクセス状況を確認すると
多少僕の記事を見てくれている人がいるみたい
圧倒的感謝です
これからもできる限り毎日投稿したいな
もしよかったらスキや
フォローしてくれると狂喜します!
この記事が気に入ったらサポートをしてみませんか?