第2回 図形ベースのモデリング

0.はじめに


第2回では、一般的なCADでも使われる円・直線・多角形といった図形ベースのモデリングをグラスホッパーで組んでみます。加えて、図形を条件に合わせて変形させることで、より複雑なモデルへの対処法を学びます。

 

1. 球を使ってモデリング

2. カーブをベースにして自由度を上げる

3. 演習問題

 

第2回で使用するコードは↓からダウンロードできます。

 

1.図形ベースのモデリング


まず「図形ベースのモデリング」というのはどういう意味で言っているかを説明します。

 

従来のCADは、直線や円のようなあらかじめ定義された形を組み合わせて図面を描きますよね。ライノでも基本的にはツールから図形を選んで配置していきます。

 

一方で、グラスホッパーでは図形を使わずに、関数を使ってモデリングすることもできます。予め定義されていないパターンを作り出すことで、自由度の高い形状が描けたり、厳しい複雑な条件に合わせてモデルを作ったりできます。今回は、入門としてまず親しみのある図形ベースのモデリングをやってみます。

 

今回モデリングするために使う資料はこちらです。

 

シンプルな形態であり寸法もある程度入っているので、グラスホッパーに慣れるとこのモデルは2,3分で組むことができるようになります。難しいのは形状を最適化したりディテールを設計する部分になってきます。この資料は

 

①膨らみの部分の定義(球なのか、カテナリーなのか等)

②グリッドの制約条件(直交しているのか、部材の長さが一定なのか等)

 

の2点が不明です。今回の講習では最も簡単な方法として、①球を使って②上から見て直交するグリッド、という条件でモデリングをしてみたいと思います。

 

まず直感的に簡単な図形ベースのモデリングとして球をベースにしてモデリングします。下のようなイメージです。

 

このモデルが既存のモデルの一部として(例えば何かの部材に接続しているといった状態で)作られる場合、その条件に合わせてモデリングをスタートしますが、今回は特にないので「Construct Point」で基準点を作りその周りに枠となる円を描きます。半径は指定されていないので適当に4000としておきます。

 

 

ここで円を描く時に半径に「R」と書いた「Data」コンポーネントを挟んでいますが、これは後で値を変更する場合の手間を省くためです。このRは今は一箇所にしか使われていませんが、後々複数のコンポーネントに繋がれるかもしれません。そしてさらに、4000だけでなく6000と4000の2つを入力にしたいといった単にスライドさせるだけでは変えられない入力の変更が必要になるかもしれません。そうした時に「Data」を挟んで置くとスムースに変えることができます。また4000が何の数字なのかもわかりやすくなります。この「R」という文字はコンポーネントを単体でグループ化し、グループの色がついたところから右クリックで入力することができます。

 

↑グループ化(選択して中クリック)

 

↑色のところで右クリック

 

次に、頂点の位置に点を打ちます。高さは861.4です。

 

 

次に、この枠に収まり、かつ今打った点が頂点となるような球を描きます。球は4点が決まると一意に描くことができる性質を使い、枠に点を3つ打ち、4点から球を描く「Sphere 4Pt」を使います。

 

 

前回使った「Divide Curve」と「List Item」で入力する4つの点を作っています。ここで、「Sphere 4Pt」によってC(中心点)、R(半径)、S(球)の4つが出力されました。今回使いたい部分は最初に描いた円より上の部分だけなので、「Split Brep」でサーフェスを切り分けます。

 

パネルで確認してわかるように「Split Srface」でサーフェスが分かれましたが、当然欲しい片方だけ出してくれるわけではありませんので、この2つを分類し1つだけ特定する必要があります。ここで使うのが「Sort List」です。「Sort List」は基準の値のツリーをKに、並び替えるアイテムのツリーをAに、同じツリー構造で入力すると基準の値が小さい順にアイテムを並び替え、Aで出力してくれます。今回は、「Didivde Surface」と「Average」でそれぞれのサーフェスの中心点を出し、この点のZ座標を基準に並び替えます。

 

「Didivde Surface」でSimplifyをしているのは「Shift Paths」でブランチをまとめるためで、「Average」でFlattenしているのは元々の並び替えるアイテムとツリー構造を揃えるためです。最後に「Sort List」でReverseしているのは、デフォルトでは値が小さい順に並べられますが、今回欲しいのは高いほう、つまりZが大きい方なので順番を逆転させるためです。ここまでで緑の部分、つまり膨らみを定義するジオメトリができました。この緑の部分は最終的に生成するモデルは表向き出てきませんが全体の形を定義する部分で「ドライバー」と呼ばれるものになります。

 

次に、ドライバーにグリッドを張って実際のモデルの形状を作っていきます。「Rectangular」を使って平面的なグリッドを描きます。

 

ExとEy(グリッド数)を「奇数」とした理由は後で説明します。このグリッドの中心が円の中心になるように、グリッドを動かします。「Rectangular」では長方形(C)と頂点(P)のデータが出力されますが、今回使うのは頂点だけなので頂点を移動します。

 

ここで移動された点群を使ってカーブを引きます。わざわざ長方形ではなく点群を移動して線を引き直す理由は、閉じたカーブ(長方形)は使い勝手が悪く、今回はグリッドを規定する縦横の直線が欲しいからです。当然、場合によっては長方形を有効に使うこともできます。

 

 

点群に対して「Interpolate」をすると、同じブランチに入っている点が繋がってカーブになります。今回の場合縦方向に繋がりました。ここで横方向に繋げるために「Flip Matrix」を使います。「Flip Matrix」によって行と列を反転させ直交方向の線を引くことができます。ここで、円の中心とグリッドの関係を見てください。グリッドの分割数は「奇数」なのでグリッドのラインと中心点は重なりません。「偶数」であれば重なります。グリッド数はいくつであっても結局ドライバーで形が決まるので良いですが、「奇数」か「偶数」かだけは資料から読み取れる条件を考える必要があるため、グリッド数(Ex, Ey)を「奇数」と書いたわけです。

次に、このグリッドのラインと先程つくったドライバーに「Project」で投影します。

「Project」にはいくつか種類がありますが、今回は「カーブをサーフェスに投影するタイプ」を使いました。これはアイコンで見分けてください。このカーブの端点から柱をだせば、資料と同じモデルは完成です。

 

 

柱を描くために二回ほど「Merge」を使って複数のジオメトリをまとめていますが、Shiftを押しながら1つのコンポーネントに繋げることもできます。しかし、Shiftで繋げてしまうとツリー構造がわかりにくくなるうえに、片方だけ外すといった作業も面倒になるので、「Merge」を使うようにしましょう。

 

2.カーブをベースにして自由度を上げる


直感的にわかりやすい球を使ってモデリングをしてみましたが、今回のモデルはもっと簡単に、自由度の高い方法でモデリングすることもできます。円と頂点を描いたところまで戻ってみましょう。ここで、球ではなく円弧を1つ描きます。

 

「Divide Curve」を使うのは同じですが、分割数を3ではなく4とし、インデックス0と2を取り出すことで、つなぐと直径にあたる2点を取り出します。これを両端にして頂点を中点として「Arc 3Pt」を使えば、上の図のように円弧を描くことができます。

 

 

 

この円弧をつかって「Revolution」を使うと、あっという間に先程のドライバーと同じものができます。(「Revolution」には軸が必要なので、基準点と頂点を「Line」で結んで軸を作りました。)このドライバーだけを先程のコードに繋げ直せば、コードを一気に短縮させることができますし、自由度を上げて例えば円弧でないカーブを基準にドライバーを描くこともできます。ドライバーの性質は多少わかりにくくなりますが、適切に使えば非常に有効な方法です。

*次回(第3回)は、この「Revolution」のような規則性を使ってモデリングをする方法を学びます。

 

3.演習問題


以下の条件でライノにモデルを作ってください。

<モデリング条件>

・フレームは円ではなく楕円(R1=4000, R2 =7000)とする。*「Ellipse」コンポーネント使用

・頂点の高さをフレームから2000とする

・半径40の円を断面として肉付けする*「Pipe」コンポーネント使用

・レイヤーは「フレーム」、「グリッド」、「柱」に分け、グループ化してベイクし、色分けする。

 

 

5.今回のまとめ


第2回は、図形を使ってモデリングをする方法を学びました。

 

1.図形ベースのモデリング


(1)グループ化して名前を付ける
(2)SplitしてSort Listで分類
(3)ドライバーとプロジェクト(投影)

 

2.カーブをベースにして自由度を上げる


(1)基準の円弧を定義する
(2)Revolutionでサーフェスをつくる

 

6.宿題


演習問題のモデルに変更を加え、フレームを「円」、断面を円弧ではなく「カテナリー」としたモデルを作ってください。頂点の高さ等の寸法は好きな値で良いです。

「Catenary」コンポーネントを使うことでカテナリー曲線を引くことができます。

コンポーネントの使い方は色々試して探ってみてください。ヒントは「Distance」と「Multiplication」を使うことです。

 

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

Leave a Comment