カスタム ノードは、他のノードとカスタム ノードを「Dynamo のカスタム ノード」内にネストすることによって作成されます。Dynamo のカスタム ノードは、コンテナとして考えることができます。このコンテナ ノードをグラフ内で実行すると、コンテナ ノード内のすべてのノードが実行されるため、ノードを自由に組み合わせて再利用や共有を行うことができます。
グラフ内でカスタム ノードの複数のコピーを使用している場合、基準となるカスタム ノードを編集することにより、一度にすべてのコピーを更新することができます。これにより、ワークフローや設計にどのような変更が生じた場合でも、グラフをシームレスに更新して変更に対応することができます。
カスタム ノードの最も便利な機能は、ワーク シェアリング機能です。たとえば、Dynamo の上級ユーザが複雑な Dynamo グラフを作成し、そのグラフを Dynamo を初めて使用する設計者に渡したとします。この場合、グラフを渡されたユーザはそのグラフを簡素化し、設計についてのやり取りに必要な最小限の要素だけに絞り込むことができます。カスタム ノードを開いて内部のグラフを編集することができますが、「コンテナ」はシンプルな状態に保たれます。このプロセスにより、カスタム ノードを使用する Dynamo ユーザは、直感的で見やすいグラフを設計することができます。
Dynamo では、さまざまな方法でカスタム ノードを作成することができます。この章の例では、Dynamo UI からカスタム ノードを直接作成します。C# や Zero-Touch の構文の詳細については、Dynamo Wiki のこのページを参照してください。
カスタム ノード環境を実際に使用して、パーセンテージを計算する単純なノードを作成してみましょう。カスタム ノード環境は、Dynamo のグラフ環境とは異なりますが、インタラクションは基本的に同じです。では、最初のカスタム ノードを作成してみましょう。
カスタム ノードを一から作成するには、Dynamo を起動して[カスタム ノード]を選択するか、キャンバスで[Ctrl]+[Shift]+[N]を押します。
[カスタム ノード プロパティ]ダイアログ ボックスで、カスタム ノードの名前、説明、カテゴリを入力します。
名前: Percentage
説明: Calculate the percentage of one value in relation to another (一方の値に対するもう一方の値のパーセンテージを計算)
カテゴリ: Math.Functions
キャンバスの背景色が黄色で表示されます。これは、カスタム ノードの内部を表しています。このキャンバス内では、Input ノードや Output ノードなど、Dynamo の核となるすべてのノードを使用することができます。この 2 つのノードにより、カスタム ノードでやり取りされるデータにラベルが付けられます。これらは[Input] > [Basic]にあります。
Input ノードは、カスタム ノード上に入力ポートを作成します。入力ノードの構文は、input_name : datatype = default_value(オプション) です。
Output ノードは、Input ノードと同様に、カスタム ノード上に出力ポートを作成して名前を付けます。カスタム コメントを入力ポートと出力ポートに追加して、入力タイプと出力タイプがわかるようにすることをお勧めします。詳細については、「カスタム ノードを作成する」セクションを参照してください。
作成したカスタム ノードは、.dyf ファイルとして保存することができます(標準ノードの場合は .dyn ファイルとして保存されます)。保存したファイルは、現在のセッションと将来のセッションに自動的に追加されます。カスタム ノードは、ライブラリの[Add-ons]セクションにあります。
ここまでの手順では、最初のカスタム ノードを作成しました。これ以降の各セクションでは、カスタム ノードの機能と、一般的なワークフローをパブリッシュする方法について詳しく説明します。次のセクションでは、ジオメトリを特定のサーフェスから別のサーフェスに転送するカスタム ノードを作成する方法について説明します。
Dynamo では、いくつかの方法でカスタム ノードを作成することができます。最初からカスタム ノードを作成することも、既存のグラフから作成することも、C# を使用して明示的に作成することもできます。このセクションでは、既存のグラフを使用して Dynamo UI 内にカスタム ノードを作成する方法について説明します。ワークスペースを整理し、一連のノードをパッケージ化して別の場所で再利用する場合は、この方法が最適です。
次の図は、UV 座標を使用して、1 つのサーフェスから別のサーフェスに点をマッピングする場合の例を示しています。この概念を適用して、XY 平面上の曲線を参照する、複数の小さなパネルから構成されるサーフェスを作成してみましょう。ここでは、パネル化用の四角形のパネルを作成しますが、同じ概念を適用して、UV マッピングを使用する多様なパネルを作成することもできます。この演習を行うと、このグラフや Dynamo の別のワークフローで同様のプロセスを簡単に繰り返すことができるようになるため、カスタム ノード開発のよい練習になります。
下のリンクをクリックして、サンプル ファイルをダウンロードします。
すべてのサンプルファイルの一覧については、付録を参照してください。
最初に、カスタム ノード内にネストするグラフを作成します。この例では、UV 座標を使用して、基準となるサーフェスから目的のサーフェスにポリゴンをマッピングするグラフを作成します。この UV マッピング プロセスは頻繁に使用するプロセスであるため、カスタム ノードの演習素材として適しています。サーフェスと UV 空間の詳細については、「サーフェス」ページを参照してください。完全なグラフは、上記でダウンロードした .zip ファイルの UVmapping_Custom-Node.dyn になります。
Code Block: この行を使用して、-45 ~ 45
45..45..#10;
の範囲の 10 個の数値を作成します。Point.ByCoordinates: Code Block ノードの出力を x 入力と y 入力に接続し、[レーシング]を[外積]に設定します。これで、点のグリッドが作成されます。
Plane.ByOriginNormal: Point 出力を origin 入力に接続して、各点に平面を作成します。この操作では、既定の法線ベクトル(0,0,1)が使用されます。
Rectangle.ByWidthLength: 前の手順で作成した平面を plane 入力に接続し、値 10 の Code Block ノードを使用して幅と長さを指定します。
これで、長方形のグリッドが作成されます。UV 座標を使用して、これらの長方形を目的のサーフェスにマッピングします。
Polygon.Points: 前の手順の Rectangle.ByWidthLength 出力を polygon 入力に接続し、各長方形の頂点を抽出します。これらの点を、目的のサーフェスにマッピングします。
Rectangle.ByWidthLength: 値 100 で Code Block ノードを使用して、長方形の幅と長さを指定します。これが、基準サーフェスの境界線になります。
Surface.ByPatch: 前の手順の Rectangle.ByWidthLength 出力を closedCurve 入力に接続し、基準となるサーフェスを作成します。
Surface.UVParameterAtPoint: Polygon.Points ノードの Point 出力と Surface.ByPatch ノードの Surface 出力を接続して、各点で UV パラメータを返します。
これで、基準となるサーフェスと UV 座標のセットが作成されました。次に、目的のサーフェスを読み込み、2 つのサーフェス間で点をマッピングします。
File Path: 読み込むサーフェスのファイル パスを選択します。ファイル タイプは .sat にしてください。[参照...]ボタンをクリックして、上でダウンロードした .zip ファイルの UVmapping_srf.sat にナビゲートします。
Geometry.ImportFromSAT: ファイル パスを接続して、サーフェスを読み込みます。読み込んだサーフェスがジオメトリのプレビューに表示されます。
UV: UV パラメータ出力を UV.U ノードと UV.V ノードに接続します。
Surface.PointAtParameter: 読み込んだサーフェス、U 座標、V 座標を接続します。これで、目的のサーフェス上に 3D の点のグリッドが表示されます。
最後に、3D の点を使用して長方形のサーフェス パッチを作成します。
PolyCurve.ByPoints: サーフェス上の点群を接続し、その点群からポリカーブを作成します。
Boolean: Boolean ノードをワークスペースに追加して connectLastToFirst 入力に接続し、値を True に切り替えてポリカーブを閉じます。これで、サーフェスに長方形がマッピングされて表示されます。
Surface.ByPatch: ポリカーブを closedCurve 入力に接続し、サーフェス パッチを作成します。
次に、ノードの入力と出力を考慮しながら、カスタム ノード内にネストするノードを選択します。長方形以外の任意のポリゴンをマッピングできるように、カスタム ノードの柔軟性を可能な限り高めてみましょう。
次のノード(Polygon.Points から始まる)を選択し、ワークスペースを右クリックして[カスタム ノードを作成]を選択します。
[カスタム ノード プロパティ]ダイアログボックスで、カスタム ノードに名前、説明、カテゴリを割り当てます。
名前: MapPolygonsToSurface
説明: 基準点からターゲット サーフェスにポリゴンをマッピングします
アドオン カテゴリ: Geometry.Curve
カスタム ノードにより、ワークスペースが見やすくなりました。入力と出力には、元のノードに基づいて名前が付いています。カスタム ノードを編集して、これらの名前をもっとわかりやすい名前に変更しましょう。
編集するカスタム ノードをダブルクリックします。ワークスペースの背景色が黄色で表示されます。これは、カスタム ノードの内部を表しています。
各 Input ノードの入力名を baseSurface と targetSurface に変更します。
マッピングするポリゴン用に Output ノードを追加します。
カスタム ノードを保存し、ホーム ワークスペースに戻ります。MapPolygonsToSurface ノードに変更内容が反映されます。
カスタム コメントを追加して、カスタム ノードの内容をさらにわかりやすくすることもできます。コメントを入力すると、入力タイプと出力タイプの内容だけでなく、ノードの機能を説明することができます。カスタム ノードの入力や出力にカーソルを置くと、コメントが表示されます。
編集するカスタム ノードをダブルクリックします。背景が黄色のワークスペースがもう一度表示されます。
Input の Code Block ノードの編集を開始します。コメントを入力する場合は、最初に「//」を入力してから、コメント テキストを入力します。ノードの内容を説明するためのコメントを入力してください。ここでは、targetSurface ノードの説明を入力します。
特定の値に一致する入力タイプを設定して、inputSurface ノードの既定値を設定します。ここでは、既定値を元の Surface.ByPatch のセットに設定します。
コメントは、Output に適用することもできます。
Output の Code Block ノードのテキストを編集します。「//」の後ろにコメント テキストを入力します。ここでは、Polygons と surfacePatches の Output の詳細な説明を追加します。
カスタム ノード入力にカーソルを置いてコメントを表示します。
inputSurface ノードの既定値が設定されているため、Surface 入力を使用することなく定義を実行することができます。
Dynamo には、ビジュアル プログラミングのさまざまなタスクで使用できる多くのコア ノードが用意されています。ただし、独自のノードを作成した方が、迅速かつ効率的な方法で、簡単に問題を解決できる場合があります。これらの独自のノードは複数の異なるプロジェクトで再利用できるため、グラフが見やすくなります。これらのノードを Package Manager にプッシュして、世界中の Dynamo コミュニティと共有することもできます。
ここまでの手順で、カスタム ノードを作成して Dynamo グラフ内の特定のプロセスに適用しました。このセクションでは、このノードを他の Dynamo グラフでも参照できるように、このノードをライブラリに保存します。これを実行するには、目的のノードをローカルにパブリッシュします。これは、パッケージをパブリッシュする場合と同様の手順です。パッケージのパブリッシュについては、次の章で詳しく説明します。
ノードをローカルにパブリッシュすると、新しいセッションを開いたときに、Dynamo ライブラリからそのノードにアクセスできるようになります。ノードをパブリッシュせずに Dynamo グラフからカスタム ノードを参照する場合、グラフのフォルダ内に、そのカスタム ノードを含めておく必要があります。または、[ファイル] > [ライブラリを読み込み] を使用してカスタム ノードを Dynamo に読み込む必要があります。
ホスト API の依存関係がない限り、バージョン 2.17 以降で Dynamo Sandbox からカスタム ノードとパッケージをパブリッシュすることができます。旧バージョンでは、カスタム ノードとパッケージのパブリッシュは、Dynamo for Revit と Dynamo for Civil 3D でのみ有効です。
下のリンクをクリックして、サンプル ファイルをダウンロードします。
すべてのサンプルファイルの一覧については、付録を参照してください。
前のセクションで作成したカスタム ノードを使用して、次の手順に進みましょう。PointsToSurface カスタム ノードを開くと、Dynamo のカスタム ノード エディタにグラフが表示されます。または、Dynamo グラフ エディタ内でカスタム ノードをダブルクリックしてカスタム ノードを開くこともできます。
カスタム ノードをローカルにパブリッシュするには、キャンバス上で右クリックして、[このカスタム ノードをパブリッシュ...]を選択します。
上図のように、関連情報を入力して[ローカルにパブリッシュ]を選択します。[グループ]フィールドで、Dynamo メニューからアクセスできる主要な要素を定義します。
ローカルにパブリッシュするすべてのカスタム ノードを格納するフォルダを 1 つ選択します。Dynamo を読み込むたびにこのフォルダが確認されるため、このフォルダの場所は変更しないでください。このフォルダにナビゲートし、[フォルダを選択]を選択します。これで、Dynamo ノードがローカルにパブリッシュされ、プログラムを読み込むたびに、このフォルダが Dynamo ライブラリに表示されるようになります。
カスタム ノードのフォルダの場所を確認するには、[Dynamo] > [基本設定] > [パッケージ設定] > [ノードとパッケージのパス] に移動します。
このウィンドウには、パスのリストが表示されます。
Documents\DynamoCustomNodes... は、ローカルにパブリッシュされたカスタム ノードの場所を参照します。
AppData\Roaming\Dynamo... は、オンラインでインストールされる Dynamo パッケージの既定の場所を示しています。
リスト内でローカル フォルダ パスを下に移動する場合は、パス名の左側にある下向き矢印をクリックします。一番上に表示されているフォルダが、パッケージがインストールされる既定のパスになります。そのため、Dynamo パッケージの既定のインストール パスを既定のフォルダのままにすると、オンライン パッケージをローカルにパブリッシュしたノードと区別することができます。
Dynamo の既定のパスをパッケージのインストール場所に設定するため、パス名の順序を変更しました。
このローカル フォルダにナビゲートすると、Dynamo のカスタム ノード ファイルの拡張である元のカスタム ノードが .dyf フォルダに表示されます。このフォルダ内のファイルを編集すると、UI 上でノードが更新されます。また、メインの DynamoCustomNode フォルダにノードを追加すると、Dynamo の再起動時に、それらのノードがライブラリに追加されます。
これで、Dynamo を読み込むたびに、PointsToSurface ノードが Dynamo ライブラリの[DynamoPrimer]グループに表示されるようになります。