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

第25回「マリオネットTips」

ArchitectLandmarkSpotlightDesigner2022

この記事は【2022年4月26日】に公開されたもので、2年以上経過しています。
記事の内容が古くなっていたり、新機能の追加・機能の改善が図られていることがあります。

今回は、マリオネットでの作業の質を高める豆知識やテクニックをいくつかご紹介します。

マリオネットは600を超えるノードの数もさることながら、オブジェクトの種類やノードのカスタマイズ、デバッグモード、Pythonライブラリの活用など、解説するポイントの多い奥の深いツールです。

マリオネットTipsでは、皆さんがマリオネットを理解するためのヒントとなるべく、マニュアルにサラッと書いてあるマリオネットの便利な仕様や、どこにも書いてないお作法などいくつか掘り下げて解説します。

マリオネットはノードをワイヤーで繋ぐだけでプログラムを作れる簡単さが売りのツールですが、なんとなく繋いでもプログラムが動いてしまうので、そのように作ったプログラムは応用が難しく、何か問題が起きた場合や小さな変更にも対応できなかったりします。

マリオネットのツールの仕様やノードの挙動について理解を深めることで、よく使うプログラムは再利用しながら最小限のノード数で無駄のないプログラムを作成できるようになります。

25-1. Dim と Real の違い

機能が似ているノードにDimRealがあります。どちらも小数や整数で値を入力することができるノードですが、実際に使ってみても得られる結果が同じで、どちらを使うのが適切なのか判断に困ることがあります。

Dimは寸法値、Realは実数値を入力するノードです。Dimに入力した値は書類の単位に追従しますので、書類の単位を変えたとき自動的に値が調整されます。

百聞は一見に如かずです。ここに、高さをそれぞれDimとRealで入力した円柱を作成するプログラムを用意しました。

現在の書類の単位はmmです。どちらも値に100を入れて実行すると、同じ高さの柱が作成されます。

書類の単位をcmに変更しました。

Dimの値を見ると、10に変わっています。Realは100のままです。

この状態で実行すると、当然ですがRealの方が高い柱になります。

Dimは手入力したときの寸法値を記憶し、その後図面の縮尺が変わったとしても図形の大きさを固定して作図することができます。

対してRealは図形の大きさとして使用した場合には実行時の書類の単位を使用します。Realは図形の大きさ以外の部分で、単位に依存しない割合の入力や、単位が固定される物性値などで強みを発揮します。

25-2.  ノードのカスタマイズの注意点

標準のノードだけでは物足りなくなった場合、マリオネットではオリジナルの機能を持った自作のノードを作成することができます。

自作のノードは、既存のノードの中身(ソースコード)を書き換えて作成します。最初は、Sliderノードの値の間隔を調整するような2、3文字だけの修正から、入力ポートやパラメータを増設した100行を超えるようなハードな修正まで幅がありますが、初級者から上級者までノードのカスタマイズに挑戦した方は、このメッセージを一度は目にしたことがあるのではないでしょうか。

ノードの中身を編集した後にこのアラートが表示されて、よく分からずに「キャンセル」を押してしまうと、、、

編集した内容がリセットされてしまった!ということが起こります。私も経験があります。

マリオネットツールに標準で搭載されているノードは全て、Vectorworksアプリケーションのライブラリに保管されたソースコードに紐づけられています。誤ってノード内のコードを変更してしまった場合でも、元のソースコードを呼び出して自動的に正常なコードに戻る仕組みになっています。

ですので、この紐付けの設定を切断しない限りユーザーはノードのカスタマイズに手を付けることができません。

この紐付けの設定を切るにはノード内に記述された「READONLYREFFILE」を含む行を丸ごと削除します。ほとんどの場合は1行目に記述されていますので、すぐに見つけられます。

ノードのカスタマイズに取り掛かる時は、まず最初にこの記述を削除して安心してカスタマイズできる環境を作りましょう。

25-3. デフォルト値の利用

入力ポートにワイヤーがつながっていない状態でプログラムを実行したとき、何が起こるのでしょうか。

答えは、「ポートに設定されたデフォルト値を使用してプログラムを実行する」です。

ポートに何もつながっていないとなんだか不安になりますが、仕組みを理解していれば問題なく便利に使うことができます。

デフォルト値はノード内のソースコードで確認することができます。例えば数列を生成するSriesノードの中身を見ると、11行目の記述が入力ポートnStartを定義している部分です。

start = Marionette.PortIn( 0, 'nStart' )

PortInのあとのカッコ内第1引数の“0”がデフォルト値となります。

nStartは数列の始まりの値ですので、0で始まる数列を作りたい場合はこのデフォルト値が利用できるということになります。

同様にnStepのデフォルト値は“1”です。nStepは数列の刻みの値ですのでこのまま使えるケースが多いでしょう。

例えば0〜9の数列を作成する場合、全ての入力ポートにノードを繋ぐと次のようになります。

デフォルト値を使うと次のようになります。

どちらも0〜9の数列を生成するという同じ結果を得ることができますが、ノードを置いたり値を入力したりする作業についてはデフォルト値を利用する場合は半分の工程で済んでしまいます。

25-4. ラッパーノードの不要なポートの非表示

ラッパーノードに表示するポートは、ラッパーノードに内包する名前が設定されているノードのポートのうち、ワイヤーの接続がないものです。ラッパーノードに表示したいポートがあれば、そのポートが属するノードに名前を設定すれば良いのですが、表示したくないポートまで表示されてしまいます。

前述したデフォルト値を利用してノード数の少ないネットワークを作っているとよくあるシチュエーションです。

そんなときは、表示したくないポートの中心に2D基準点を配置します。

スッキリしました。

25-5. コントロールポイントの追加

マリオネットオブジェクトではコントロールジオメトリ以外にも、オブジェクトのコントロールポイントを追加することができるノードがあります。

Control Point 2Dノード、Control Point 3Dノードはマリオネットオブジェクトに任意の座標のコントロールポイントを追加します。

コントロールジオメトリと違い、元の図形の仕様に依存せずに個別に配置ができ、オブジェクト情報パレットでも値を編集できますので、より自由度が高いオブジェクトを作ることができるようになります。

例として、円柱の中心と半径と高さの位置にコントロールポイントを置いてみました。(※ Control Point 2Dのコントロールポイントは2D/平面表示でのみ表示されます。)

寸法の値を手で入れることなく3点を図面にスナップさせながら柱を立てることができます。

中身のプログラムでは、円柱の中心と半径のコントロールポイントにControl Point 2Dを、円柱の高さのコントールポイントにControl Point 3Dを使用しています。

25-6. 複数の図形をコントロールジオメトリに登録する

コントロールジオメトリは多角形などひとつの図形をオブジェクトの概形として登録できる機能ですが、例えば形状の異なる複数の断面を持つオブジェクトなど、複数のジオメトリが欲しい場面があります。

そんなときはジオメトリとして使用したい図形をグループ化して、そのグループ図形をコントールジオメトリに登録します。

マリオネットオブジェクト内のプログラムではUngroupノードでグループを分解することで中の図形にアクセスできます。

例として、5つの断面をコントロールジオメトリに登録して多段注状体のオブジェクトを作成します。

断面となる四角形を任意の形状で5つ重ねて作図して、グループ化します。

このグループ図形と、Contorol Geometoryノードで作成したラッパーノードを選択して、

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

スクリプトの編集画面を開いて、Ungroupでコントロールジオメトリを分解したら、多段柱状体を作成するMultiple Extrudeノードに入力します。高さをパラメータとして設定できるようにDimに名前「高さ」をつけてnTopポートに繋いでおきます。

スクリプトの編集画面を出ると、先ほど作図した断面を使用した多段柱状体のオブジェクトが生成されます。

断面を編集します。コントロールジオメトリの編集画面を開いて、さらにグループの編集画面の中に入ります。断面の形状や位置を変更して編集画面から出ます。

多段柱状体の断面に反映されました。

25-7. グリッド状の座標をつくる

汎用的に使用できる、グリッド状の座標リストを作成するサンプルプログラムを紹介します。

まずは、x-yの2Dグリッドです。

xの要素数とyの要素数で作成した数列をMix2で掛け合わせることによって、2次元配列の番地のリスト作っています。番地にグリッド間隔を掛け合わせることで、x-y平面のグリッド状の座標リストを作成できます。

ポイントはMix2ノードのList MatchingパラメータをCross Referenceに設定することです。

2Dグリッドに基準点を配置しました。

続いて、x-y-zの3Dグリッドです。

3Dのグリッドでも2Dと同様にMix2ノードを使用します。2Dグリッドに対してさらにzの要素数の数列を掛け合わせます。このように、Mix2のCross Referenceは次元をひとつ増やす機能があります。最後に番地のリストにグリッド間隔を掛け合わせてx-y-zの座標のリストを作成しています。

3Dグリッドにも基準点を配置しました。


マリオネットTips 第2弾もお楽しみにお待ちください。

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

Architect

Vectorworks Architect

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

Landmark

Vectorworks Landmark

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

Spotlight

Vectorworks Spotlight

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

Designer

Vectorworks Design Suite

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