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

第5回「いいものは使おう、無いものは創ろう」

ArchitectLandmarkSpotlightDesigner

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

マリオネットには標準で多くのノードが搭載されていますが、目的のものがない場合もあります。そんなときは既存のノードをカスタマイズしちゃいましょう!

第4回「レイヤ追従型柱状体」でレイヤの高さを取得しましたが、2つのノードをつなげる必要がありました。

今回は、紫のLayer Popupをカスタマイズして、1つのノードでレイヤの高さを取得できるようにしてみます。

5-1. 標準のノードのソースを確認

5-1-1. ノードを配置

まずは、標準のノード「Layer Popup」を配置します。

マリオネットツールを選択し、ツールバーの選択中のノード入力関数初級にある「Layer Popup」をダブルクリックして選択します。

画面上の任意の場所でクリックしてノードを配置します。

5-2. ノードのソースを見る

配置されたノードが選択された状態で、オブジェクト情報パレットの形状タブにある編集をクリックします。

スクリプトエディタダイアログが開き、このノードのソースを見ることができます。

5-2. ソースの編集

5-2-1. ソースに書かれている内容

今回のノードは入力ポートがないものになりますが、書かれている内容はブロックごとに下図のようになっています。

5-2-2. スクリプトの参照部分

まず、スクリプトエディタの一番上にグレーで記載されている部分ですが、このノードが参照している大元のスクリプトを指しています。

#COMMAND;READONLYREFFILE;[VWLibDef]/Input/Basic\PopupLayers.py;

ノードをカスタマイズしたい場合は、参照しないようにする必要があるので、1行目を空白行にします。

5-2-3. 出力ポートを変更する

上記のオレンジの部分がノードの外見やポートの種類、説明などが記載されている部分です。

16〜18行目がレイヤのハンドルを返すようになっていますが、ここをレイヤの高さを返すように変更します。

現在は下記のようになっていますが、

#Output Ports
output = Marionette.PortOut('hLayer')
output.SetDescription('The handle to the selected layer.')

ここを下のように書き換えます。各行の先頭にTabを入力するようにしてください。

#Output Ports
output = Marionette.PortOut('nHeight')
output.SetDescription('レイヤの高さ')

スクリプトエディタを閉じてみると、出力ポートの名称が変わっているのを確認できます。

5-2-4. レイヤの高さを取得する

次に選択したレイヤの高さを取得してみます。
26〜27行目に記載されているのが、さまざまな処理をするブロックです。

#script
hLayer = vs.GetObject(layer)

現在はレイヤのハンドルを取得するだけですが、ここをレイヤの高さを取ってこれるように変更します。
現在の行の下に1行追記します。ここでも行頭のタブを忘れないようにしてください。

#script
hLayer = vs.GetObject(layer)
nHeight, nWallHeight = vs.GetLayerElevation(hLayer)

追加した1行で、レイヤの高さと壁の高さを取得できます。

5-2-5. 出力ポートに値を設定する

最後にレイヤの高さを出力ポートに設定します。
30〜31行目を下記のように変更します。

#outputs
self.Params.output.value = nHeight

これでノードの編集は終わりです。最後にデバッグをしてみましょう。

5-3. デバッグ

マリオネットツールを選択し、ツールバーの選択中のノードでデバッグDummy Endを選択します。

Layer Popupの右側に配置し、2つを接続します。

オブジェクト情報パレットでLayerを選択します。

マリオネットツールをデバッグモードに切り替え、接続線の上にカーソルを合わせて、接続線が赤く強調表示されたらクリックします。

マリオネット接続ワイヤの値ダイアログが表示され、レイヤの高さが出力されていることを確認できます。

このように、標準で搭載されているノードをカスタマイズすることで、効率的なノードに変更することができます。

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

Architect

Vectorworks Architect

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

Landmark

Vectorworks Landmark

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

Spotlight

Vectorworks Spotlight

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

Designer

Vectorworks Design Suite

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