2019年6月22日土曜日

【Grasshopper_23】ガラスコップの再現


日本の伝統工芸品の一つである、ガラスのコップを再現してみました。

完成状態は以下の図のような感じになります。
すべてNurbsサーフェスによるモデリングです。

Step1.コップの側面を作成する

・まずは円を上下に二つとセクションカーブを作成し、側面を作成します。

・手作業によるモデリングでもOKですが、ノードで組む場合は上の図のように、高さ90mm、下の円の直径52φ、上の円の直径80φとします。

Step2.コップ内側を作成する

・まずはStep1で作成したコップ側面を0.3mmオフセットさせて、内側の面を作成します。

・底から3mmの位置に、底面も作成しておきます。

・同時に、上端のカーブ同士を使って上面をLoftコンポーネントを使って作成します。

・この工程も手作業でもOKです。

Step3.コップ側面を分割する

・続いて、Step.1で作成した、コップ表側の側面をXZ平面で分割します。(できたサーフェスをSurf_A,Surf_Bとします)

Step4.基準カーブの作成 その1

・次に、カーブの作成にとりかかります。

・カーブを作成する際のパラメータをノードで組みます。まずは上の図のように組んでみます。

・左端のpt_numは点の数です。ここでは100としています。RangeコンポーネントのN入力でExpressionにx-1を入力しています。

・0から1までの実数を100分割し、グラフで均等な分割割合に変化をつけ、それらの値を0から120°(ラジアンに換算します)の範囲にリマップしています。

・さらに、同じく0から1の範囲を100分割した数値に100を掛け算した数値も作成します。

Step5.基準カーブの作成 その2

・Step4で求めた数値を使って曲線を二本、作成します。

・原点を中心に、A入力がStep4で作成した数列、E入力が同じくStep4で作成した二つ目の数列を入力します。(下の点群のA入力はExpressionにx*-1を入力して反転させます)

・Rは、ここでは40としています。(直径を半分に)

・点をInterpolateコンポーネントでつないで曲線化します。

Step6.基準カーブを回転コピーさせる

・Step.5で作成した二本のカーブを回転コピーします。

・回転の角度は、カーブ本数(ここでは24に設定)を360で割った数値をstepとしてSeriesコンポーネントで数列を作り、RotateコンポーネントのA入力につないでいます。
※Degreesのチェックを忘れずにONしておきます。

Step7.基準カーブのマッピング

・Step.6で作成したカーブを、Step.1で作成したコップ側面にMap to Surfaceコンポーネントを使ってマッピングします(Curv_A,Curv_Bとします)。

・コップ側面と同じ高さ、半径の円筒を作成し、Map to SurfaceコンポーネントのS入力につなぎます。

Step8.コップ側面の分割と三角形サーフェスの取り出し

・Step.3で分割したサーフェス(Surf_AとSurf_B)を、Step.7でマッピングした基準カーブでSurf Splitコンポーネントで分割していきます。

・分割したサーフェスをBrep Edgeコンポーネントでエッジを取り出し、List Lengthコンポーネントでそのエッジの本数を数え、3の場合のみ、EqualityコンポーネントとDispatchコンポーネントを使って分別します。(つまり、三角形サーフェスのみ取り出します)

Step9.三角形サーフェスの上端と下端を分類

・Step.8で取り出した三角形サーフェスのうち、上端と下端部分をさらに取り出します。
※ここでは、三角形サーフェスの中心点が特定の四角形に入るor入らないの判定を使って分類しています。

Step10.三角形サーフェスをさらに分類する

・同じようなやり方で、Step.9で分類した三角形サーフェスを上下で分類し、合計で4つに分けます。

Step11.三角形サーフェス(上側)を3D化する

・まずは三角形サーフェス(上側)を立体化させます。

・Step.11で分類した4つのサーフェス群のうち、Tri_Srf_A_2とTri_Srf_B_2のエッジをBrep Edgeコンポーネントで抽出し、Join Curveコンポーネントで結合したあと、Offset on Surfaceコンポーネントで若干量、内側に移動させてからSurf Splitコンポーネントで分割します。

・上記分割した面のうち、内側をサーフェス法線方向に若干量移動させ、側面をLoftコンポーネントでつなぐと台形の3D形状が完成します。

・この時の高さは0.3mmとします。(最小高さという名前にします)

Step12.三角形サーフェス(下側)を3D化する

・次は、三角形サーフェス(下側)を立体化させます。

・Step.11で分類した4つのサーフェス群のうち、Tri_Srf_A_1とTri_Srf_B_1の中心点をAreaコンポーネントで取得し、サーフェスの法線方向に向かって若干量移動させてからExtrude Pointコンポーネントを使い、三角錐の形状を作成します。

・この時の高さは2mmとします。(最大高さという名前にします)

Step13.側面サーフェスを分割する

つぎは、側面の中間部分の立体化を行います。
・Step.8のノードの中から、上の図のようにSurf_Aを、Curv_Aで分割した状態のサーフェスを取り出します。

Step14.分割した側面サーフェスを取り出す

・Step.13で分割したサーフェスのうち、上から下まできれいにつながっている部分をList Itemコンポーネントで取り出し、Step.7で求めたCurv_Bで分割します。

・この時点で、分割したサーフェスが端から順番に並んでいないことを想定し、中心点のZ座標値を使ってソートしておきます。

Step15.側面サーフェスを分類する

・Step.14で求めたサーフェスのうち、Cull Indexコンポーネントで上端と下端の三角形サーフェスを除外します(インデックスを0と-1で指定します)

・台形形状と三角錐形状を途中で切り替えるため、Split Listコンポーネントを使って二つのリストに分割します。

・次に、高さの徐変量を求めるため、MAX高さとMIN高さ(ここでは2.0と0.3)の範囲で、Rangeコンポーネント及びList Lengthコンポーネントを使って数列を作り、同じくSplit Listコンポーネントで二つに分割します(Num_A,Num_Bとします)。

Step16.側面サーフェス(下側)を3D化する

・下側の三角錐については、Step.12と同じ要領で立体化します。
※高さはStep.15で求めたNum_LWRを使います。

Step17.側面サーフェス(上側)を3D化する

・次に、上側の台形の立体化です。

・まず、サーフェスのエッジを取得し、Network Surfaceコンポーネントで面を張りなおします(後で登場する、isoTrimコンポーネントを使うため、UntrimmedSurface化しておきます)

・台形の上面の大きさを徐変させる量を計算します。U方向とV方向で縮めていくので、若干量(ここでは0.04)から0.5までの範囲をRangeコンポーネントと使いサーフェスの数の分だけ数列を作り、Construct Domain2コンポーネントを使いDomainデータを作成します。
※0.5にすると面が残らないので、Cull Indexコンポーネントを使い0番目を削除しておきます。

・上記数値を使い、itoTrimコンポーネントで徐変縮小させます。

・次に、各サーフェスの法線方向を求め、中心点をその方向に、Step.15で求めたNum_UPRの分だけ移動させます。

・後は、側面をLoftでつなぐと完成です。

Step18.回転コピーさせる

・Step.16とStep.17で求めた立体形状を原点周りに回転コピーします。

Step19.合体させる

・Step.2の内側、Step.18の側面、Step.11とStep.12の三角形を合体させると上記のような形状が完成します。

次は、底面を作って行きます。

Step21.底面を分割する

・Step.1の、底面カーブを内側に2mmほどオフセットさせ、底面を分割します。

Step22.直線群を作成する

・Step.21で求めた、内側にオフセットさせた円を32分割し、中心から直線を引きます。

・引いた直線をCull PatternのTrue FalseおよびFalse Trueの各パターンで2通りに分離します。

・True Falseパターンで分離した曲線を、Shift List コンポーネントでずらしたカーブも同時に作成しておきます。

Step23.直線群を作成する その2

・その後、上図のような直線の組み合わせを作成します。

Step24.底面凹み部のサーフェスを作成する

・今度はStep.1の底面カーブを使い中心から任意の一点まで直線を引き、3分割します。

Step25.底面凹み部のサーフェスを作成する その2

・Step.24の分割点をZ方向に湾曲するように移動させ、Revolutionコンポーネントを使いサーフェス化します。

・ここでは、高さの異なる2種類のサーフェスを作ります。

Step26.底面凹み部のサーフェスを作成する その3

・Step.23の直線群をStep.25で求めた2種類の高さ違いのサーフェスに投影し、Loftを組み合せて上図のような立体形状を作成します。

Step27.底面の完成

・底面をまとめると上の図のようになります。

Step28.完成

・これまでに作ったサーフェスをすべてまとめたら完成です。

0 件のコメント:

コメントを投稿

【Grasshopper_98】SporphとSurface Morphingの特徴、違いなどについて

今年もまたGWに突入しましたね。コロナ明けに円安、インバウンド特需のおかげで東京から郊外に出かけると例年以上に混雑に巻き込まれそうなので、昨年と同様、連休中は家に籠ってブログを更新します。今回のテーマは、Surface MorphingとSporphの違いについてまとめてみました。