マリオネット・スクリプト解説講座

第55回「パラメトリックなベンチ その2」

ArchitectLandmarkSpotlightDesigner

前回に引き続きパラメトリックなベンチのマリオネットオブジェクトを作成します。今回は”その2″として、ベンチの3D化から一気に完成までご紹介していきます。

55-1. 断面を3D化する

前回作成したベンチの断面を柱状体に変換して3Dのベンチを作成します。

柱状体の作成にはExtrudeノードを使用します。

この時、ベンチの長さを柱状体の高さとして、断面の高さ(高さ0)が中心となるように、底面の高さと上面の高さを設定します。負の値を作成するときに-1を乗算するのも一つの方法ですが、negativeノードを使用して符号を反転する方法もあります。

断面形状が押し出されて柱状体に変換されました。

55-2. 向きを整える

このままでは、ベンチが寝そべって地面に埋まっているような状態ですので、適切な向きになるように回転します。

(0,0,0)を回転の中心として、x軸を90度、z軸を90度回転させます。

埋まることなく地面に置いてあるような位置に修正されました。

55-3. パスの作成

今回パスに沿ってベンチを複製します。パスはマウス操作で編集する想定として、後でコントロールジオメトリとして登録します。

ここでは、図面上に曲線ツールで2Dのパスを作図して任意の名前を設定したあと、nameノードでパスの図形のハンドルを取得しておきます。

55-4. 曲線上の座標

今回は、パスに対して分割数をパラメータで指定して、複製図形をプロットするパス上の座標を計算します。

Get Point On Polyノードは長さを指定して曲線上の座標と接線ベクトルを取得することができます。

あわせて、Get Lengthノードで取得した曲線の全長を分割数で割ることで、ベンチを配置する座標までの距離を計算します。

n個目の配置座標までの距離 = (曲線の全長/分割数) * n

取得する座標の数は終点を含める場合は分割数+1となります。終点に配置する場合、長さの値は計算の過程で必ず丸め誤差が出ますのでGet Point On PolyのTolerance(許容誤差)のパラメータを大きめに設定しておきましょう。

Get Point On Polyから取得した座標に基準点を置いて確認してみましょう。

55-5. ベンチの複製配置

それでは、ベンチを複製してパス上に並べていきます。

Duplicate Objectノードを使用してベンチを複製しますが、ここでは3Dに変換した後の図形ではなく、2Dの断面の時点で複製処理をします。あとで背もたれの高さを調整する際に2D図形の状態の方が加工が簡単なためです。

3D化したときのワイヤーを一度切断して、Duplicate Objectに繋ぎ直します。複製数は配置数-1です(今回は分割数と一致します)。

複製した断面から変換された柱状体のベンチを、Moveノードを使用してパス上の座標に移動します。

ベンチの向きの調整

パスに沿って複製できましたが、同じ方を向いていてイマイチですね。Get Point On Polyノードで取得できる曲線の接線ベクトルを使って、向きを調整します。

Vector to Angleノードでベクトル値を角度に変換したあと、Rotateノードでz軸を回転させます。回転の中心はパス上への移動で使用した座標を指定します。

パスに対して垂直な向きに調整できました。

ベンチの向きはパスの方向が関係しています。今回の場合はパスを時計回りに作図すると外に、反時計回りに作図すると内に向きます。

55-6. 背もたれのデザイン

背もたれの高さを個別に変更して、デザイン性のあるベンチを作ってみましょう。

まず前回のおさらいです。2Dの断面に対して、頂点番号0番と1番の座標をy方向に移動することで背もたれの高さを変化させていました。

Set 2D Vertexノードを使用して次のようなプログラムを作成しました。

前回は高さの変化を1000mmとしていましたが、今回は複製後の図形の高さにそれぞれ異なる値が入るようにプログラムを変更します。

1000mmの入力部分を削除してPassノードに置き換えます。このPassノードに入力される値が変われば、高さに反映される仕組みです。

この高さの変更プログラムについては、あとで整理しやすいようにラッパーノードに変換します。入力部分と出力部分のノードには名前を設定して、ラッパーの外からアクセスできるようにしておきます。

55-6-1. 関数曲線の作成

ここでは、指定した関数の曲線に沿って背もたれの高さが変わるプログラムを考えます。

functionノードを使用して、f(x)フィールドにxを変数とした式を入力します。

cosカーブを使用した関数の場合は次のように入力します。

math.cos(x)+1

xの変数の値の範囲は次のプログラムで設定することができます。

基準点を置いて確認してみると、関数のグラフのようにプロットされます。(値が小さいので拡大して確認してください。)

分割数を増やすとなめらかに変化します(分割数:50)。

例えば放物線の場合は式に「x*x」を入力します。

    • function : x*x
    • -2 ≦ x ≦ 2
    • 分割数 : 50

functionを2つ使えば、螺旋など媒介変数表示の計算もできます。

    • function1 : x*math.cos(x)
    • function2 : x*math.sin(x)
    • 0 ≦ x ≦ 31.4
    • 分割数 : 255

その他、Pythonのmathモジュールで利用可能な関数はこちらを参照してください。

55-6-2. 高さの反映

今回はcosカーブ[math.cos(x)+1]の計算結果を背もたれの高さに反映していきます。

計算結果に500mmを掛け合わせて、高さに加算する値を作成します。関数の計算結果は0.0〜2.0の間で増減するため、高さとしては+0〜1000mmの間での変化になります。

高さの計算結果は、高さの変更プログラムのラッパーノードheightupに入力します。もう一つ、複製後の断面図形のリストはExtrudeへの入力を切断して、高さ変更プログラムのもう一方のポートに繋ぎます。

高さ変更プログラムheightupの結果をExtrudeに入力します。

最後に共通している分割数のノードを繋ぎ直してネットワーク全体の出来上がりです。

実行するとベンチの背もたれの高さがカーブに沿って変化します。

55-7. パラメトリックオブジェクトに変換

作成したネットワークからマリオネットオブジェクトを作成します。

パスの曲線はコントロールジオメトリを参照するように変更します。Nameノードを削除してControl Geometryノードに置き換えます。

次に、パラメーターとして操作する値のノードに名前をつけます。ここで高さの変化量とベンチの幅の値はスライダーに置き換えています。

ネットワークをラッパーノードに変換して、コントロールジオメトリに登録する曲線と一緒に選択します。

コンテキストメニューから「オブジェクトノードに変換」を選択してマリオネットオブジェクトに変換します。

2Dではパスの曲線が、3D表示ではベンチの3Dオブジェクトが表示されます。

 

2D表示でもベンチを表示する場合は、パスの曲線のControl Geometryに対してDeleteノードを追加します。

以上で、パラメトリックなベンチの完成です。パラメータを変更して結果を確認してみましょう。

変形ツールでコントロールポイントを操作してパスを編集することができます。

背もたれの高さを制御する曲線は変数の範囲(xmax,xmin)を変更したり、スクリプトの編集からオブジェクトの中に入りfunctionノードの式を直接編集します。

今回紹介したプログラムのサンプルファイルをユーザーフォーラムにて配布しています。自由にアレンジして使ってみてください!

Vectorworksユーザーフォーラム(アカウント登録が必要です)

 

この機能を利用できる製品

Architect

Vectorworks Architect

建築設計や内装、ディスプレイデザインに対応した先進的なBIM・インテリア設計支援機能、拡張機能、さらには豊富な建築向けのデータライブラリを搭載した建築/内装業界向け製品
詳細情報 購入ページ

Landmark

Vectorworks Landmark

地形モデルや多彩な植栽、灌水設備計画等に対応するランドスケープデザイン機能、さらには豊富な造園向けのデータライブラリを搭載した都市計画/造園業界向け製品
詳細情報 購入ページ

Spotlight

Vectorworks Spotlight

ステージプランニングやライティング計画に対応した先進的な舞台照明計画支援機能、さらには各種メーカー製のトラスや照明機材、音響機器等の豊富なデータライブラリを搭載したエンタテインメント業界向け製品
詳細情報 購入ページ

Designer

Vectorworks Design Suite

専門分野別(建築設計/ディスプレイデザイン、ランドスケープデザイン、ステージデザイン&スポットライトプランニング)の設計支援機能、拡張機能、さらには豊富なデータライブラリを搭載した最上位の製品
詳細情報 購入ページ