マリオネット解説講座

第3回「ノードの入出力ポート」

ArchitectLandmarkSpotlightDesigner

マリオネットのノードをつないでスクリプトを作るには、ノード同士を接続するポートを知る必要があります。今回はポートに関する解説です。

3-1. ポートについて

3-1-1. そもそもポートとは

マリオネットのノード同士を繋ぐ入口と出口のことです。マリオネットは単体のノードだけで使うことはほとんどなく、複数のノードをつないでネットワークを作成していきます。

このとき、正しいポート同士を繋ぐ必要があります。正しく繋ぐことで、データを流し、カタチを作ったり、ダイアログの入力値を取得できるようになります。

ちなみに、1つのポートから複数のポートに接続できるので、1つの入力値をさまざまなノードで使い回すことができます。

3-1-2. ポートのデータタイプの見分け方

ノードを配置すると、ノードの両端(ノードによっては片側)に白丸があります。これがポートですが、このポートの横にアルファベットでノードのデータタイプが記載されています。

下図の赤で囲んだ小文字部分がデータタイプになります。
pのポートには、pから出力されたデータを繋ぐ必要があります。ここが正しく繋がれていないと、ネットワークとして成立しません。

3-2. ポートのデータタイプ

では実際にどのようなデータタイプがあるのか見てみましょう。
まずは前のセクションのRectangle(四角形作成)のノードを例にとってみます。

3-2-1. p [座標]

Pointの頭文字になります。
図形を作成する際の基準点や、多角形の指定した頂点の座標を取得するときなどに使用するデータタイプです。

3-2-2. n [実数値/寸法]

Numberの頭文字です。
小数点を含む数値を扱うときに使用します。図形の幅や高さなどの寸法を設定するときも、このデータタイプを使います。寸法のときは、ファイル設定の単位になります。

3-2-3. v [方向]

Vector(ベクトル)の頭文字です。
高校数学で見た記憶がある方が多いと思います。そして拒否反応も…
簡単に言ってしまえば、X方向の大きさとY方向の大きさで向きを表すためのものです。3DだとZ方向も加わります。受け側のポートが2Dのベクトルにしか対応していない場合は、Z方向の数値があっても無視されます。

例)45度を表現したいとき
45度は、X方向に「1」進んで、Y方向に「1」上がったところになるので、
v = (1, 1, 0) という表現になります。(2Dの場合、Z方向には上らないため)
「Vec2」というノードはもともと2Dベクトルのため、Zの入力項目はありません。

3-2-4. h [ハンドル]

Handleの頭文字です。
マリオネットにしろ、VectorScriptにしろ、ハンドルという概念を無視することはできません。しかし、プログラミングでつまずきやすいのが「ハンドル」だと思います。
一般にVectorworksを使っているとき、図形を操作したいときにセレクションツールで図形を選択しますが、この選択状態がハンドルだと思ってください。ただ、プログラム内で直接的にクリックするわけではないので、ある検索条件に合致する図形とか、直前に作成された図形という感じで図形を指定します。

例えば、上記の四角形を作成するノードの場合、作成後の出力ポートがハンドルになっています。作成した図形をベースに柱状体にしたい場合は、RectangleからExtrude(柱状体作成)のhObjに繋ぎます。

こうすることで、Extrudeは柱状体のベースとなる図形を認識できるようになります。

3-2-5. i [整数値]

Integerの頭文字です。
nは実数でしたが、iは小数点を含まない整数値になります。もし小数点を含むデータが流れてきた場合は、四捨五入されて整数化されます。

下図の場合、hPolyで指定した多角形/曲線のi番目の座標を取得するノードです。iIndexに整数値を入力することで、pVertexに座標が出力されます。

3-2-6. s [文字列]

Stringの頭文字になります。
レイヤやクラスを作成するときなどは、どのような名前にするのかを指定する必要があります。このとき、このデータタイプを使います。

下図は、入力した文字列のクラスを作成するネットワークです。同じ名前のクラスがすでに存在する場合、そのクラスをアクティブにします。

3-2-7. b [理論値]

Booleanの頭文字です。
True(真)とFalse(偽)で表現するものです。
例えば、2D多角形が時計回りか反時計回りかを判定するノードの場合、下図のようになります。

hPolyで入力された2D多角形/曲線が時計回りに作成されていれば「True」を、反時計回りに作成されていれば「Flase」をbCWから出力します。

3-2-8. item [項目:任意のオブジェクト]

項目Itemを表します。データタイプは任意のものを流すことができます。
下図は複数のアイテムを1つのリスト(後述するデータのかたまり)にまとめるためのノードです。
itemに入力するものは、座標でも、単なる数値でも、オブジェクトハンドルでも構いません。

3-2-9. list [リスト:任意のオブジェクト]

リストlistを意味します。
下図のように、item0〜item8までの9つの項目を1つのリストとして扱うことができ、リストの中の一つひとつのデータに対して処理をしていくことができます。

itemとlistを利用すると、下図のようなネットワークを作成できます。
item0〜item5まで別々の座標を入力しています。これがlistとして1つのかたまりとなって、Rectangleのp(座標)に流れます。Rectangleでは、流れてきたlistの中の一つひとつの座標に対して、150mm角の正方形を作図します。
赤丸で囲んだ部分が作成された四角形です。

もう少しパラメトリックにしたい場合、Seriesというノードを使います。このノードは、指定した間隔と個数のリストを作成するものです。

例えば、間隔を50、個数を5とすると、{0, 50, 100, 150, 200} という内容のリストを作成できます。
開始の数値を指定しない場合は、デフォルトで「0」になります。
赤丸が実行結果です。

X方向のピッチが間隔で、個数のノードで指定した数の分だけ繰り返し、1つのlistとして出力します。それが、X座標としてRectangleに接続され、1辺の大きさで指定した正方形を作図する、という内容です。

今後の回で詳しく紹介できると思いますが、マリオネットネットワークは、1つのラッパーノード(グループ化のようなもの)に変換することができます。

上図のノードの上で右クリックし、マリオネットネットワークをラップするを選択すると、ラッパーノードの名前と説明を入力して、1つのノードに変換できます。

ラッパーノードに内包されるピッチや個数などはオブジェクト情報パレットのパラメータとして表示されます。

ラッパーノードをさらに右クリックして、オブジェクトノードに変換を選択すると、パラメトリックオブジェクトにすることができます。各ノードに設定されたデフォルト値で作成されたオブジェクトが画面上に表示されます。

オブジェクト情報パレットの数値を変更すると、画面上の図形も更新されます。

3-2-10. m [行列]

Matrixの頭文字です。
高校の線形代数学で習った方も多いと思います。n行m列とかいう数字の集合です。何に使うかというと、座標の回転などに使えます。

下図は、三角関数を用いた回転行列をMatrixで作成し、Point2で定義されている座標を指定した角度Realで回転させるためのものです。

Realで90と指定すると、元の座標と90度回転した座標が表示されます。

これをベースに、少し改良してオブジェクトノードにしたのが下図です。
元の座標と角度をパラメータ化しているので、自由な座標と角度を入力することで、回転後の座標を表示してくれます。
(破線と角度寸法は手動で追記しています)

このように、マリオネットのノードには10種類のポートがあります。これらのデータの種類を使い分け、接続することでマリオネットを組み立てることができます。

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください