第4回・第5回・第6回 ソートを使った並列モデリング

0.はじめに


第4回・第5回では、第3回「断面図と座標変換でモデリング」で描いたH形鋼のモデルにジョイントを組み込んでいきます。ジョイントは接合部によって形や向きが変化することがありますが、今回の例では少しずつ形が違うジョイントを「並列で同時に」モデリングします。こういったモデリングでは「Sort List」を多用するためツリー構造が複雑になり混乱しやすいので、グラスホッパーをさわる前にどういう条件でモデリングをすれば良いかを整理することがキーになります。一度システムを組めば解析でのパターン変更や設計変更に簡単に対応できるようになります。

今回作成するモデルは↓です。

 

 

第4回・第5回でベースとなるコード、ライノモデルは↓です。

 

 

 

第4回・第5回の見本コードは↓です。

 

 

 

今回から講習の進め方を少し変えて「グラスホッパーを使ったモデリングの考え方」と「グラスホッパーの細かいテクニック」を分けて、予習と講習前半では「グラスホッパーを使ったモデリングの考え方」に重点を、講習後半では演習問題として「グラスホッパーの細かいテクニック」に重点をおいて進めていきたいと思います。

 

1.条件の整理


ジョイントの資料として、以下のものを使用します。

ジョイントは法線方向にフラットで、フランジプレートの接合部にはRがかかっていることがわかります。

今回はフランジプレートとウェブプレートを別々にモデリングする方法を採用します。

 

2.基準線を「ジョイント」と「梁」で部分ごと分ける。


前回までに作成したカーブにはジョイントと梁の位置情報が含まれていません。まずはカーブを分割し、ジョイントの大きさを定義します。今回は仮に両側に250ずつ、合計500の幅をジョイントをします。ジョイントの部分を切り抜き梁の基準カーブだけを取り出すと以下のようになります。

 

 

カーブを分割するにはパラメータが必要になりますが、今回は「Reparametelize」せず長さの情報をそのまま使います。理由は、ジョイントの位置が長さで決まるからです。

 

 

「Curve | Curve」で交差する点を出すと、点情報(P)に加えてパラメータ情報(tAとtB)が出力されます

tAはカーブA上の交差点の位置、tBはカーブB上の交差点の位置を表します。今回は複数のカーブと複数のカーブの組み合わせになるので、AをGraftしてカーブA上のパラメータを出す「Curve | Curve」と、BをGraftしてカーブB上のパラメータを出す「Curve | Curve」の2つを使い、全てのカーブ上での交差点の位置を算出します。ジョイントの片側の長さを仮に250とし、交差点の位置から250ずつとって、「Shatter」でカーブを分割します。ジョイントと梁は交互に並んでいるので、「Cull Pattern」で交互に取り出せば、ジョイント部と梁部で分類されます。

 

3.「交差点」から接合断面を定義する。


ジョイント部の基準カーブだけを取り出すと、以下のようになります。

 

 

これは一見キレイにデータが取り出せているように見えますが、重なっている2本のカーブにはデータ構造上なにも関連がないため、ジョイントの設計という視点では非常に使いにくいです。例えばある交差点では1つ目のツリーの3列目の4番目と2つめのツリーの4列目の3番めのセットになっています。これをジョイントごとに2本のカーブが入ったブランチで構成される大きな一つのツリーにします。

一番シンプルな方法は「一度カーブをFlattenし、ジョイントの基点(交差点)からの距離が一番近い2つのカーブを取り出す」という方法です。

 

 

カーブはの位置はDivide CurveとAverageで算出します。ソートした後にList Itemで2つ取り出せば、2つのカーブが入ったブランチが基点の数だけできます。

この2本のカーブのセットから新たに平面を作成し、これをジョイントの基準平面とします。

 

 

ジョイントの端部の平面を定義できれば、「Orient」でジョイントと梁の結合部をセットします。

 

 

この4つの断面のセットを使って、ジョイントをモデリングしていきます。

 

4.フランジプレートのモデリング


まず、断面からフランジに関係するパーツ(上の面と下の面)を取り出します。

 

 

図で緑と黒に色わけされていますが、この上下関係がズレるとねじれてしまうので、Z座標を基準にソートして整理しておきます。

 

 

さらに向かい合う2本の線で面を張ります。面を張ることでジョイント全体の輪郭をつくります。

 

 

この面を結合して輪郭のみ取り出し、谷の部分にRをかければ、フランジプレートの形が描けます。

 

 

面を張り厚みをつければ、フランジプレートの完成です。

 

 

5.ウェブプレートのモデリング


ウェブプレートに使う部分は、接合面のカーブを分解し、「Item List」で一つずつ取り出します。

 

 

この8本のカーブを使ってウェブプレートを描くわけですが、フランジプレートより話は少し複雑です。カーブの上下の向きと、8本の並び方を整理してからサーフェスを張る必要があります。上下の向きを揃えるには、「End Point」で端点を出し、始点が上かどうかを判定し、始点が上のカーブはフリップし、始点が下のカーブはそのまま使うことで、全てのカーブは始点が下になります。判定には「Larger Than」を、分類には「Dispatch」を使います。

 

 

あとは「Sort Along Curve」で時計回りに並べ替え、サーフェスを張っていきます。

 

 

これで、ウェブプレートはモデリングできました。フランジプレートと合わせるとジョイントの形が完成します。

 

 

6.梁のモデリング


梁のモデリングは、前回と違う点が1つあります。すでに描いたジョイントの端部とこれから描く梁の端部をピッタリ合わせる必要があるということです。ジョイントは新たに定義した平面をベースに描いたので、梁の端部もこの平面を使う(入れ替える)必要がありますが、ジョイントがない端部(外周部)は入れ替える必要がありません。

 

 

赤は元々の断面を使えばよく、青は新たに定義されたジョイント端部の平面を使う必要があります。今回の最初に使った「基点からの距離が最も近いジオメトリを取り出す」というテクニックを応用し、最も近いジオメトリではなく、一定の距離内に入ったジオメトリを取り出します。うまく距離を指定すれば、一番近いカーブが遠すぎる場合のみ入れ替えを行わないということができます。

 

ここで、入れ替えるのはカーブ本体ではなく平面とします。カーブには向きや始点などの情報が複雑に入っているので、思うようにサーフェスを張れず捻れてしまう場合があるからです。ねじれると、断面の見た目は完全にただしくとも以下のようになります。これを修正するのは大変です。

 

 

 

平面のみを入れ替えたら、平面から法線ベクトルと接線ベクトルを取り出し、向きを揃え、「Orient」でオリジナルのカーブを持ってきてロフトします。これで、ジョイントとぴったり重なる梁をモデリングできました。梁は真ん中の断面を残すことで、緩やかに曲がった状態になります。

 

 

 

7.ボルトのモデリング


より詳細なモデリングをする例として、ボルトの位置だけモデリングをしてみます。

 

 

ボルトを打つ基準とするのは、フランジプレートをモデリングするときに使った面の端のラインです。このラインは4方向にあり、ツリー構造が整理されているので、ボルトの位置を決めることは簡単です。

 

 

まず「Extend」を使ってオフセットします。このラインの端部をジョイント方向と梁方向に動かせば、平面の位置は決まります。

 

 

この点をフランジプレートの法線方向(両側)に動かしてつなげれば、ボルトの基準線ができます。今回は簡潔にパイプで表現しますが、もし詳細にモデリングをしたければ、ライノで作ったモデルをラインに乗せる形で描くほうが早いです。

グラスホッパーで組むべきなのは、相対的なもの、並列で組めるものです。

 

 

コードをコピーしてフランジプレートの逆側にもボルトを配置したら、今回のモデルは完成です。

 

上図は、外周の円をパイプで肉付けし、全てベイクした後、ジョイントとボルトの色を変えています。

 

*質問・要望等がありましたら、コメント欄かSlackでお願いします。

Leave a Comment