Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Dynamo には、ビジュアル プログラミングのさまざまなタスクで使用できる多くのコア ノードが用意されています。ただし、独自のノードを作成した方が、迅速かつ効率的な方法で、簡単に問題を解決できる場合があります。これらの独自のノードは複数の異なるプロジェクトで再利用できるため、グラフが見やすくなります。これらのノードを Package Manager にプッシュして、世界中の Dynamo コミュニティと共有することもできます。
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 のカスタム ノード」内にネストすることによって作成されます。Dynamo のカスタム ノードは、コンテナとして考えることができます。このコンテナ ノードをグラフ内で実行すると、コンテナ ノード内のすべてのノードが実行されるため、ノードを自由に組み合わせて再利用や共有を行うことができます。
グラフ内でカスタム ノードの複数のコピーを使用している場合、基準となるカスタム ノードを編集することにより、一度にすべてのコピーを更新することができます。これにより、ワークフローや設計にどのような変更が生じた場合でも、グラフをシームレスに更新して変更に対応することができます。
カスタム ノードの最も便利な機能は、ワーク シェアリング機能です。たとえば、Dynamo の上級ユーザが複雑な Dynamo グラフを作成し、そのグラフを Dynamo を初めて使用する設計者に渡したとします。この場合、グラフを渡されたユーザはそのグラフを簡素化し、設計についてのやり取りに必要な最小限の要素だけに絞り込むことができます。カスタム ノードを開いて内部のグラフを編集することができますが、「コンテナ」はシンプルな状態に保たれます。このプロセスにより、カスタム ノードを使用する Dynamo ユーザは、直感的で見やすいグラフを設計することができます。
カスタム ノード環境を実際に使用して、パーセンテージを計算する単純なノードを作成してみましょう。カスタム ノード環境は、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(オプション) です。
作成したカスタム ノードは、.dyf ファイルとして保存することができます(標準ノードの場合は .dyn ファイルとして保存されます)。保存したファイルは、現在のセッションと将来のセッションに自動的に追加されます。カスタム ノードは、ライブラリの[Add-ons]セクションにあります。
ここまでの手順では、最初のカスタム ノードを作成しました。これ以降の各セクションでは、カスタム ノードの機能と、一般的なワークフローをパブリッシュする方法について詳しく説明します。次のセクションでは、ジオメトリを特定のサーフェスから別のサーフェスに転送するカスタム ノードを作成する方法について説明します。
前の章では、いくつかのカスタム ノードを作成しました。ここでは、パッケージを使用してカスタム ノードを整理し、パブリッシュしてみましょう。パッケージは、独自のノードを保存し、Dynamo コミュニティと共有できる便利な方法です。
Dynamo には豊富な機能が用意されており、Dynamo の機能を大幅に拡張できる広範なパッケージ ライブラリも保持されています。パッケージは、カスタム ノードまたは追加機能のコレクションです。Dynamo Package Manager は、オンラインでパブリッシュされたパッケージをダウンロードするためのコミュニティ ポータルです。これらのツールセットは、Dynamo の基本機能を拡張するためにサード パーティによって開発されたもので、すべてのユーザがアクセスでき、ボタンをクリックするだけでダウンロードすることができます。
Dynamo のようなオープンソース プロジェクトは、このようなコミュニティによって成長しています。サード パーティの専任開発者の取り組みにより、Dynamo はさまざまな業界のワークフローで採用されています。そのため、Dynamo チームは、パッケージの開発とパブリッシュの合理化を連携して進めています。これについては、以降のセクションで詳しく説明します。
パッケージを最も簡単にインストールするには、Dynamo インタフェースの[パッケージ]メニュー オプションを使用します。では、実際にパッケージをインストールしてみましょう。ここでは、次に示す簡単な例を使用して、グリッド上に四角いパネルを作成するためのパッケージをインストールします。
Dynamo で、[パッケージ] > [Package Manager...] に移動します。
[検索]バーで、「quads from rectangular grid」を検索してみましょう。しばらくすると、この検索クエリーに一致するパッケージがすべて表示されます。一致する名前を持つ最初のパッケージを選択します。
[インストール]をクリックしてこのパッケージをライブラリに追加し、確認を承諾します。以上です。
Dynamo ライブラリに「buildz」という名前の新しいグループが表示されます。この名前は、パッケージの開発者を参照して付けられます。また、カスタム ノードはこのグループ内に配置されます。このグループは、すぐに使用することができます。
Code Block ノードを使用して長方形のグリッドをすばやく定義し、その結果を Polygon.ByPoints ノードに、続いて Surface.ByPatch ノードに出力して、作成した長方形のパネルのリストを表示します。
上記の例では、1 つのカスタム ノードが含まれているパッケージを使用しましたが、複数のカスタム ノードやサポート データ ファイルが含まれているパッケージをダウンロードする場合も、同じプロセスを実行します。ここでは、より包括的な Dynamo Unfold パッケージを使用して手順を説明します。
上記の例と同様に、[パッケージ] > [Package Manager...] を選択します。
今回は、「DynamoUnfold」 という、スペースを入れない 1 つの単語を検索します。パッケージが表示されたら、[インストール]をクリックして Dynamo Unfold をダウンロードし、Dynamo ライブラリに追加します。
Dynamo ライブラリに DynamoUnfold グループが表示されます。このグループに、複数のカテゴリとカスタム ノードが含まれているのがわかります。
ここで、パッケージのファイル構造を確認しましょう。
まず、[パッケージ] > [Package Manager] > [インストール済みパッケージ]に移動します。
次に、[ルート フォルダを表示]をクリックして、このパッケージのルート フォルダを開きます。
この操作により、パッケージのルート フォルダが表示されます。このルート フォルダには、3 つのフォルダと 1 つのファイルが格納されています。
bin フォルダには .dll ファイルが格納されます。この Dynamo パッケージは Zero-Touch を使用して開発されているため、カスタム ノードはこのフォルダに格納されます。
dyf フォルダにはカスタム ノードが格納されます。このパッケージは Dynamo カスタム ノードを使用して開発されたものではないため、このフォルダには格納されません。
extra フォルダには、サンプル ファイルを含め、すべての追加ファイルが格納されます。
pkg ファイルは、パッケージの設定を定義する基本のテキスト ファイルです。ここでは、このファイルは無視してかまいません。
extra フォルダを開くと、インストール時にダウンロードされた多数のサンプル ファイルが格納されていることがわかります。すべてのパッケージにサンプル ファイルが付属しているわけではありませんが、付属のサンプル ファイルはこのフォルダに格納されています。
ここで、SphereUnfold ファイルを開いてみましょう。
ファイルを開いてからソルバで[実行]をクリックすると、展開された球形が表示されます。これらのサンプル ファイルは、新しい Dynamo パッケージの使用方法を理解するのに役立ちます。
Package Manager では、[パッケージの検索]タブで並べ替えとフィルタ オプションを使用してパッケージを参照できます。ホスト プログラム、ステータス(新規、非推奨、非推奨解除)、およびパッケージに依存関係があるかどうかを示すフィルタがいくつかあります。
パッケージを並べ替えることで、評価の高いパッケージや最もダウンロードされているパッケージを特定したり、最新の更新プログラムが適用されたパッケージを検索することができます。
[詳細を表示]をクリックして、各パッケージの詳細にアクセスすることもできます。これにより、Package Manager のサイド パネルが開き、バージョン情報や依存関係、Web サイトまたはリポジトリの URL、ライセンス情報などの情報を検索できます。
パッケージ ファイルの保存場所を確認する場合は、一番上のナビゲーションで[Dynamo] > [基本設定] > [パッケージ設定] > [ノードとパッケージ ファイルの場所]をクリックします。ここから現在のルート フォルダを見つけることができます。
既定では、パッケージは C:/Users/[ユーザ名]/AppData/Roaming/Dynamo/[Dynamo バージョン] というフォルダ パスにインストールされます。
Dynamo コミュニティは、常に成長と進化を続けています。Dynamo Package Manager を定期的に確認して、便利な新機能を発見してください。これ以降のセクションでは、エンドユーザの視点から見た独自の Dynamo パッケージの作成など、パッケージについてより詳しく確認していきます。
Dynamo Mesh Toolkit は、外部ファイル形式からメッシュを読み込む機能、Dynamo のジオメトリ オブジェクトからメッシュを作成する機能、頂点とインデックスからメッシュを手動で作成する機能を提供するライブラリです。このライブラリには、メッシュの変更や修復を行うためのツールや、製造処理で使用する水平方向のスライスを抽出するためのツールも用意されています。
Dynamo Mesh Toolkit は、オートデスクによるメッシュ研究の一環として開発されているため、今後も拡張を続けていきます。このツールキットには、頻繁に新しいメソッドが追加される予定になっています。コメント、バグの報告、新機能の提案については、お気軽に Dynamo チームまでご連絡ください。
Dynamo で、上部メニュー バーの[パッケージ] > [Package Manager]に移動します。検索フィールドに「MeshToolkit」と入力します。スペースを入れずに 1 つの単語として入力してください。[インストール]をクリックし、確認を承諾してダウンロードを開始します。非常に簡単です。
下のリンクをクリックして、サンプル ファイルをダウンロードします。
すべてのサンプル ファイルの一覧については、付録を参照してください。
この例では、Mesh Toolkit の Intersection ノードについて説明します。メッシュを読み込み、そのメッシュを一連の入力面と交差させてスライスを作成します。レーザー カッター、ウォータージェット カッター、CNC ミルなどの製造用モデルを作成する場合は、最初にこの操作を実行することになります。
最初に、Dynamo で Mesh-Toolkit_Intersect-Mesh.dyn を開きます。
File Path ノードで、読み込むメッシュ ファイル(stanford_bunny_tri.obj)の場所を指定します。サポートされるファイル タイプは、.mix と .obj です。
Mesh.ImportFile ノードに File Path ノードを接続して、メッシュを読み込みます。
Point.ByCoordinates ノードで、点を作成します。この点が、円弧の中心になります。
Arc.ByCenterPointRadiusAngle ノードで、上記の点を中心とする円弧を作成します。この曲線を使用して、一連の面が配置されます。 設定は次のとおりです。
radius: 40, startAngle: -90, endAngle:0
円弧に沿って方向付けられた一連の平面を作成します。
Code Block ノードで、0 から 1 までの 25 個の数値を入力します。
Curve.PointAtParameter ノードの curve 入力に Arc.ByCenterPointRadiusAngle ノードの Arc 出力を接続し、param 入力に Code Block ノードの出力を接続します。これにより、曲線に沿って一連の点が抽出されます。
Curve.TangentAtParameter ノードの curve 入力に、Arc.ByCenterPointRadiusAngle ノードの Arc 出力を接続します。
Plane.ByOriginNormal ノードの origin 入力に Curve.PointAtParameter ノードの Point 出力を接続し、normal 入力に Curve.TangentAtParameter ノードの Vector 出力を接続します。これにより、各点に一連の平面が作成されます。
次に、これらの平面を使用してメッシュを交差させます。
Mesh.Intersect ノードで、読み込んだメッシュと平面を交差させ、一連のポリカーブの輪郭線を作成します。ノードを右クリックして、レーシングを最長に設定します。
PolyCurve.Curves ノードで、ポリカーブを曲線のフラグメントに分割します。
Curve.EndPoint ノードで、各曲線の終了点を抽出します。
NurbsCurve.ByPoints ノードで、点群を使用して NURBS 曲線を作成します。次に、Boolean ノードを True に設定して曲線を閉じます。
続行する前に、Mesh.ImportFile、Curve.EndPoint、Plane.ByOriginNormal および Arc.ByCenterPointRadiusAngle など、一部のノードのプレビューをオフにして、結果を見やすくします。
Surface.ByPatch ノードで、各輪郭線に対してサーフェスを作成して、メッシュの「スライス」を作成します。
2 つ目のスライスの集合を追加すると、2 種類のスライスが格子のように表示されます。
メッシュを使用すると、交差の演算がソリッドよりも高速になることがわかります。この演習で紹介したようなワークフローには、メッシュが適しています。
Dynamo のノードのライブラリには、すぐに使用できる多くの機能が保存されています。頻繁に使用するルーチンや、コミュニティと共有する特殊なグラフがある場合は、カスタム ノードとパッケージによって 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]グループに表示されるようになります。
前のセクションでは、カスタム ノードとサンプル ファイルを使用して MapToSurface パッケージを設定する方法について確認しました。では、ローカルで作成したパッケージはどのようにパブリッシュすればよいでしょうか。このケース スタディでは、ローカル フォルダ内のファイル セットを使用してパッケージをパブリッシュする方法について確認します。
パッケージは、さまざまな方法でパブリッシュできます。ここでは、パッケージをローカルにパブリッシュして作成し、オンラインでパブリッシュする方法を確認していきます。最初に、パッケージ内のすべてのファイルを格納するフォルダを作成します。
前の演習で MapToSurface パッケージをインストールした場合は、同じパッケージを使用しないようにするため、このパッケージをアンインストールしてください。
まず、[パッケージ] > [Package Manager] > [インストール済みパッケージ]タブ > [MapToSurface]の横にある縦のドット メニュー> [削除]をクリックします。
次に、Dynamo を再起動します。[パッケージを管理]ウィンドウをもう一度開いて、MapToSurface が表示されていないことを確認してください。これで、作業を開始する準備ができました。
ホスト API の依存関係がない限り、バージョン 2.17 以降で Dynamo Sandbox からカスタム ノードとパッケージをパブリッシュすることができます。旧バージョンでは、カスタム ノードとパッケージのパブリッシュは、Dynamo for Revit と Dynamo for Civil 3D でのみ有効です。
下のリンクをクリックして、サンプル ファイルをダウンロードします。
すべてのサンプルファイルの一覧については、付録を参照してください。
この演習で、パッケージを初めて送信することになります。サンプル ファイルとカスタム ノードは、すべて 1 つのフォルダ内に格納されています。このフォルダが作成されていれば、Dynamo Package Manager にパッケージをアップロードすることができます。
このフォルダには、5 つのカスタム ノード(.dyf)が格納されています。
このフォルダには、5 つのサンプル ファイル(.dyn)と、1 つの読み込み済みベクトル ファイル(.svg)も格納されています。これらのファイルは、カスタム ノードの使用方法を理解するための演習用のファイルです。
Dynamo で、[パッケージ] > [Package Manager] > [新しいパッケージをパブリッシュ] タブをクリックします。
[パッケージをパブリッシュ] タブで、ウィンドウの左側にある関連フィールドに入力します。
次に、パッケージ ファイルを追加します。[フォルダを追加(1)]を選択すると、1 つまたはすべてのフォルダにファイルを追加できます。.dyf ファイル以外のファイルを追加するには、ブラウザ ウィンドウでファイル タイプを必ず [すべてのファイル(.)] に変更してください。カスタム ノード(.dyf)やサンプル ファイル(.dyn)など、すべてのファイルが追加されていることを確認してください。パッケージをパブリッシュすると、Dynamo によってこれらのファイルが分類されます。
MapToSurface フォルダを選択すると、フォルダの内容が Package Manager に表示されます。複雑なフォルダ構造を持つ独自のパッケージをアップロードする場合に、Dynamo でフォルダ構造を変更したくない場合は、[フォルダ構造を保持]切り替えを有効にします。このオプションは上級者向けのため、パッケージが意図的に特定の方法で設定されているのでなければ、この切り替えをオフのままにして、必要に応じて Dynamo でファイルを整理できるようにしておくことをお勧めします。[次へ]をクリックして続行します。
ここでは、パブリッシュする前に Dynamo がパッケージ ファイルを整理する方法をプレビューすることができます。[完了]をクリックして続行します。
[ローカルにパブリッシュ] (1)をクリックして、パッケージをパブリッシュします。次に、[オンラインでパブリッシュ]ではなく[ローカルにパブリッシュ]をクリックします。これは、多数の複製パッケージを Package Manager にパブリッシュしないようにするためです。
パブリッシュが完了すると、DynamoPrimer グループまたは Dynamo ライブラリで目的のカスタム ノードを使用できるようになります。
次に、ルート フォルダを開き、作成したパッケージが Dynamo でどのようにフォーマットされているかを確認します。これを行うには、[インストール済みパッケージ]タブ > [MapToSurface]の横にある縦のドット メニューをクリックし、[ルート フォルダを表示]を選択します。
ルート フォルダは、パッケージのローカルの場所にあります(ここまでの手順で、パッケージはローカルにパブリッシュされています)。Dynamo は、このフォルダを参照してカスタム ノードを読み込みます。そのため、デスクトップではなく、ローカルの永続的な場所にパブリッシュする必要があります。Dynamo パッケージ フォルダの内容は次のとおりです。
bin フォルダには、C# ライブラリまたは Zero-Touch ライブラリを使用して作成された .dll ファイルが格納されます。このパッケージにはこうしたファイルがないため、このフォルダは空になっています。
dyf フォルダにはカスタム ノードが格納されます。このフォルダを開くと、このパッケージのすべてのカスタム ノード(.dyf ファイル)が表示されます。
extra フォルダには、すべての追加ファイルが格納されます。通常、これらのファイルは、Dynamo ファイル(.dyn)または必須の追加ファイル(.svg、.xls、.jpeg、.sat など)です。
pkg ファイルは、パッケージの設定を定義する基本のテキスト ファイルです。このファイルは Dynamo によって自動的に作成されますが、必要な場合は編集することができます。
注: 独自のパッケージを実際にパブリッシュしない場合は、この手順を実行しないでください。
パブリッシュの準備ができたら、[パッケージ] > [Package Manager] > [インストール済みパッケージ]ウィンドウで、パブリッシュするパッケージの右側にあるボタンを選択し、[パブリッシュ]を選択します。
既にパブリッシュされているパッケージを更新する場合、[パブリッシュ バージョン]を選択すると、パッケージのルート フォルダ内の新しいファイルに基づいて、パッケージがオンラインで更新されます。
パブリッシュしたパッケージのルート フォルダ内にあるファイルを更新した場合、[マイ パッケージ]タブで[パブリッシュ バージョン...]を選択して、新しいバージョンのパッケージをパブリッシュすることもできます。この方法により、シームレスにコンテンツを更新してコミュニティ間で共有することできます。[パブリッシュ バージョン]オプションは、ユーザがパッケージを保守している場合にのみ機能します。
Dynamo では、さまざまな方法でパッケージを作成することができます。作成したパッケージは、個人的に使用することも、Dynamo コミュニティで共有することもできます。ここで紹介するケース スタディでは、既存のパッケージの中身を確認しながら、パッケージの設定方法について説明します。このケース スタディは、前の章の演習に基づいて構成されており、UV 座標を使用して Dynamo の特定のサーフェスから別のサーフェスへジオメトリをマッピングする際に使用した一連のカスタム ノードを提供します。
ここでは、点群を特定のサーフェスから別のサーフェスに UV マッピングする演習で使用したサンプル パッケージを使用していきます。ツールの基本部分は、この手引の「」セクションで既に作成されています。ここでは、UV マッピングの概念を理解する方法と、パブリッシュ可能なライブラリ用の一連のツールを開発する方法について確認します。
このイメージは、UV 座標を使用して 1 つの点を特定のサーフェスから別のサーフェスにマッピングする場合の例を示しています。パッケージ構成はこの考え方に基づいていますが、パッケージには、より複雑なジオメトリが含まれます。
前の章では、Dynamo 内の XY 平面上に定義された複数の曲線に基づいてサーフェスをパネル化する方法について確認しました。このケース スタディでは、この考え方を広げて、より高次元のジオメトリを処理します。ここでは、この構築済みパッケージをインストールし、このパッケージがどのように開発されたかを確認していきます。次のセクションでは、このパッケージのパブリッシュ方法を確認します。
Dynamo で、[パッケージ] > [Package Manager]をクリックして、「MapToSurface」(スペースを入れない 1 つの単語)でパッケージを検索します。[インストール]をクリックしてダウンロードを開始し、パッケージをライブラリに追加します。
インストール後は、カスタム ノードを[アドオン] > [DynamoPrimer]セクションで使用できるようになります。
これでパッケージのインストールが完了しました。次に、パッケージの設定方法を確認しましょう。
ここで作成するパッケージでは、参照用として既に作成されている 5 つのカスタム ノードを使用します。ここで、各ノードの機能を確認しましょう。一部のカスタム ノードは、他のカスタム ノードを使用して作成されています。また、他のユーザが簡単に理解できるように、グラフにはレイアウトが用意されています。
上の図は、5 つのカスタム ノードによって構成される単純なパッケージを示しています。次の手順で、各カスタム ノードの設定について簡単に説明します。
これは基本的なカスタム ノードで、他のすべてのマッピング ノードのベースになるノードです。このノードは、ソース サーフェスの UV 座標の点を、ターゲット サーフェスの UV 座標にマッピングします。点は、複雑なジオメトリを構築するための最も基本的なジオメトリであるため、このロジックを使用して、2D ジオメトリだけでなく 3D ジオメトリについても、特定のサーフェスから別のサーフェスにマッピングすることができます。
このノードを使用すると、1D ジオメトリのマッピングされた点群を 2D ジオメトリに拡張するロジックを、ポリゴンによって簡単に確認することができます。図のように、PointsToSurface ノードがこのカスタム ノード内にネストされていることがわかります。この方法で各ポリゴンの点群をサーフェスにマッピングし、その点群からポリゴンを再生成することができます。適切なデータ構造(点群のリストのリスト)を維持することにより、ポリゴンを一連の点群に変更した場合でも、それらのポリゴンを個別に保持することができます。
このノードでは、PolygonsToSurface ノードと同じロジックが適用されます。ただし、ここでは、ポリゴンの点群をマッピングするのではなく、NURB 曲線の制御点をマッピングします。
OffsetPointsToSurface
このノードの構成はやや複雑ですが、その概念は単純です。PointsToSurface ノードと同じように、このノードは特定のサーフェスから別のサーフェスに点群をマッピングします。ただし、OffsetPointsToSurface ノードは、元のソース サーフェス上には存在しない点群を識別し、その点から最も近い UV パラメータまでの距離を取得して、対応する UV 座標上のターゲット サーフェスの法線にマッピングします。これは、サンプル ファイルを見るとよくわかります。
このノードは、サンプル ファイル内のソース グリッドから波形のサーフェスにマッピングするためのパラメータ制御のサーフェスを作成する単純なノードです。
サンプル ファイルは、パッケージのルート フォルダにあります。[Package Manager] > [インストール済みパッケージ]タブをクリックします。
[MapToSurface]の横にある縦のドット メニュー > [ルート フォルダを表示]をクリックします
次に「extra」フォルダにナビゲートします。このフォルダには、パッケージ内のすべてのファイル(カスタム ノードを除く)が格納されています。Dynamo パッケージ用のサンプル ファイル(存在する場合)も、このフォルダに格納されています。これ以降のスクリーンショットは、各サンプル ファイルの概念を示しています。
このサンプル ファイルでは、同様のワークフローを使用して、特定のサーフェスから別のサーフェスに円弧をマッピングする場合のセットアップ例を確認することができます。このファイルでは PolygonsToSurface ノードを使用します。
このサンプル ファイルは NurbsCrvToSurface ノードと連携するため、多少複雑な構成になっています。ターゲット サーフェスは指定した距離でオフセットされ、NURB 曲線が元のターゲット サーフェスとオフセット後のサーフェスにマッピングされます。その後、マッピングされた 2 本の曲線がロフトされて 1 つのサーフェスが作成され、そのサーフェスに厚みが加えられます。その結果として出力されるソリッドは、ターゲット サーフェスの法線を表す波形の形状になります。
このサンプル ファイルでは、ひだがついたポリサーフェスをソース サーフェスからターゲット サーフェスにマッピングする方法について確認することができます。ソース サーフェスはグリッド上に広がる長方形のサーフェスで、ターゲット サーフェスは回転体のサーフェスです。
このサンプル ファイルでは、ソース サーフェスのソース ポリサーフェスをターゲット サーフェスにマッピングする方法について確認することができます。
カスタム ノードを使用すると、さまざまなタイプの曲線をマッピングすることができます。このサンプル ファイルでは、Illustrator から書き出した SVG ファイルを参照し、読み込んだ曲線をターゲット サーフェスにマッピングすることができます。
.svg ファイルの構文を解析することにより、曲線が .xml 形式から Dynamo のポリカーブに変換されます。
読み込んだ曲線がターゲット サーフェスにマッピングされます。これにより、Illlustrator でパネルを明示的に(ポイント アンド クリック操作で)設計し、そのパネルを Dynamo で読み込んでターゲット サーフェスに適用することができます。
Dynamo では、さまざまな方法でカスタム ノードを作成することができます。この章の例では、Dynamo UI からカスタム ノードを直接作成します。C# や Zero-Touch の構文の詳細については、Dynamo Wiki のを参照してください。
Output ノードは、Input ノードと同様に、カスタム ノード上に出力ポートを作成して名前を付けます。カスタム コメントを入力ポートと出力ポートに追加して、入力タイプと出力タイプがわかるようにすることをお勧めします。詳細については、「」セクションを参照してください。
DynamoUnfold の横にあるオプション メニュー を選択します。
Dynamo パッケージの仕組みを理解する別の方法として、 の Web サイトを参照する方法もあります。ここでは、パッケージや作成者のリーダーボードに関する統計情報を確認できます。また、Dynamo Package Manager からパッケージ ファイルをダウンロードすることもできますが、Dynamo から直接ダウンロードした方が簡単です。
次の演習では、Mesh Toolkit を使用して、いくつかの基本的なメッシュ操作を説明します。この演習では、メッシュを一連の平面と交差させます。この操作でメッシュではなくソリッドを使用すると、計算量が多くなります。ソリッドとは異なり、メッシュには「解像度」の集合があります。現在の作業に応じて、この解像度を定義することができます。メッシュは、数学的にではなく位相幾何学的に定義されています。メッシュとソリッドとの関係について詳しくは、この手引の「」の章を参照してください。Mesh Toolkit の詳細な説明については、を参照してください。次の演習で、パッケージの内容を確認してみましょう。
このサンプル ファイルでは、PointsToSurface ノードを使用して長方形のグリッドに基づくサーフェスをパネル化する方法を確認することができます。同様のワークフローについては、で確認しました。
Zero-Touch Importing とは、C# ライブラリを読み込むための単純なポイント アンド クリック操作のことです。Dynamo は、.dll ファイルの public メソッドを読み取って Dynamo ノードに変換します。Zero-Touch を使用して、独自のカスタム ノードとカスタム パッケージを開発し、外部のライブラリを Dynamo 環境に読み込むことができます。
.dll ファイル
Dynamo ノード
Zero-Touch により、Dynamo 用に開発されたものではないライブラリを読み込み、一連の新しいノードを作成することができます。現在の Zero-Touch 機能は、Dynamo プロジェクトのクロスプラットフォーム志向性を体現しています。
このセクションでは、Zero-Touch を使用してサードパーティのライブラリを読み込む方法について説明します。独自の Zero-Touch ライブラリを開発する方法については、Dynamo の Wiki ページを参照してください。
Zero-touch パッケージは、ユーザが定義するカスタム ノードを補完するパッケージです。次の図は、C# ライブラリを使用するいくつかのパッケージを示しています。パッケージの詳細については、付録の「パッケージ」セクションを参照してください。
このケース スタディでは、AForge の外部 .dll ライブラリをインポートする方法について説明します。AForge は、イメージ処理機能から人工知能まで、さまざまな機能を提供する堅固なライブラリです。ここでは、AForge のイメージ クラスを使用して、いくつかのイメージ処理を行う方法について説明します。
最初に、AForge をダウンロードします。AForge のダウンロード ページで [Download Installer] を選択し、ダウンロードが完了したらインストールを実行します。
Dynamo で、新しいファイルを作成して [ファイル] > [ライブラリを読み込む...] を選択します。
次に、dll ファイルを見つけます。
ポップアップ ウィンドウで、AForge のインストール環境のリリース フォルダにナビゲートします。通常は、C:¥Program Files (x86)¥AForge.NET¥Framework¥Release などのフォルダになります。
このケース スタディでは、AForge.Imaging.dll だけを使用します。この .dll ファイルを選択して [開く] をクリックします。
Dynamo に戻ると、ノードの [AForge] グループがライブラリに新しく表示されます。これで、ビジュアル プログラミングから AForge のイメージ ライブラリにアクセスできるようになりました。
下のリンクをクリックして、サンプル ファイルをダウンロードします。
すべてのサンプル ファイルの一覧については、付録を参照してください。
ライブラリを読み込んだら、最初に簡単な演習を行います(01-EdgeDetection.dyn)。ここでは、サンプルのイメージに対して基本的なイメージ処理を実行することにより、AForge イメージのフィルタ機能について説明します。Watch Image ノードを使用して処理の実行結果を表示し、Dynamo のフィルタを適用します。Dynamo のフィルタは、Photoshop のフィルタに似ています。
イメージをインポートするには、File Path ノードをキャンバスに追加し、演習フォルダで soapbubbles.jpg を選択します(次の画面で使用されている画像の出典元: flickr)。
File Path ノードにより、ユーザが選択したイメージのパスの文字列が提供されます。次に、Dynamo で使用可能なイメージ ファイルに変換する必要があります。
File From Path を使用して、ファイル パス項目を Dynamo 環境のイメージに変換します。
File Path ノードを File.FromPath ノードに接続します。
Image.ReadFromFile ノードを使用して、file 出力をイメージに変換します。
最後に、結果を確認します。Watch Image ノードをキャンバスにドロップして Image.ReadFromFile ノードに接続します。ここでは AForge をまだ使用していませんが、イメージを Dynamo 環境に正しく読み込むことができました。
ナビゲーション メニューの AForge.Imaging.AForge.Filters の下に、さまざまな使用可能なフィルタが表示されます。ここでは、1 つのフィルタを使用し、しきい値に基づいてイメージの彩度を下げてみましょう。
3 つのスライダをキャンバスにドロップし、各スライダの範囲を 0 から 1 に変更して、ステップ値を 0.01 に変更します。
キャンバスに Grayscale.Grayscale ノードを追加します。これは、グレースケール フィルタをイメージに適用する AForge フィルタです。手順 1 の 3 つのスライダを、Grayscale.Grayscale ノードの入力(cr、cg、cb)にそれぞれ接続します。1 番目と 3 番目のスライダの値を 1 に設定し、2 番目のスライダの値を 0 に設定します。
グレースケール フィルタを適用するには、イメージに対してアクションを実行する必要があります。この場合、BaseFilter.Apply を使用します。イメージを image 入力に接続し、Grayscale.Grayscale ノードを baseFilter 入力に接続します。
Watch Image ノードに接続すると、イメージの彩度が下がります。
赤、緑、青のしきい値に基づいて、イメージの彩度を下げる方法をコントロールすることができます。これらのしきい値は、Grayscale.Grayscale ノードに対する入力によって定義されます。上図のイメージは暗くなっていますが、これは、スライダで緑のしきい値が 0 に設定されているためです。
次に、1 番目と 3 番目のスライダの値を 0 に設定し、2 番目のスライダの値を 1 に設定します。この設定により、彩度を下げたイメージが明確に表示されます。
次に、彩度を下げたイメージに対して別のフィルタを適用します。彩度が低いイメージにはいくらかのコントラストがあります。ここでは、輪郭線の検出をテストしてみましょう。
キャンバスに SobelEdgeDetector.SobelEdgeDetector ノードを追加します。
これを BaseUsingCopyPartialFilter.Apply に接続し、彩度を下げたイメージをこのノードの image 入力に接続します。
Sobel Edge Detector により、新しいイメージ内で輪郭線がハイライト表示されます。
拡大表示すると、Edge Detector により、イメージ内の泡の輪郭がピクセル単位で描画されていることがわかります。AForge ライブラリには、このような処理を行うためのツールや、Dynamo のジオメトリを作成するためのツールが用意されています。Dynamo のジオメトリを作成する方法については、次の演習で説明します。
前の演習では、基本的なイメージ処理について確認しました。この演習では、イメージを使用して Dynamo のジオメトリを操作してみましょう。簡単な操作として、AForge と Dynamo を使用してイメージの「ライブ トレース」を実行します。説明を簡単にするため、ここでは参照イメージから長方形を抽出しますが、AForge には、より複雑な操作を実行するための各種ツールが用意されています。この演習では、ダウンロードした演習ファイルの 02-RectangleCreation.dyn を使用します。
File Path ノードを使用して、演習フォルダの grid.jpg にナビゲートします。
残りの一連のノードを接続し、パラメトリック グリッドを表示します。
次の手順では、イメージ内の白い正方形を表示して、実際の Dynamo ジオメトリに変換します。AForge には、多くの便利な Computer Vision ツールが用意されていますが、ここでは、その中でも特に重要なツールを BlobCounter というライブラリに対して使用します。
BlobCounter をキャンバスに追加したら、前の演習で使用した BaseFilter.Apply ツールと同じような方法でイメージを処理する必要があります。
しかし、Process Image ノードは Dynamo ライブラリ内に直接表示されません。これは、このノード(関数)を AForge のソース コード内で表示することができないためです。この問題を解決するには、何らかの回避策が必要です。
キャンバスに Python ノードを追加し、Python ノードに次のコードを追加します。このコードによって AForge ライブラリが読み込まれ、読み込まれたイメージが処理されます。
Watch Image ノードの image 出力を Python Script ノードの入力に接続すると、Python Script ノードによって AForge.Imaging.BlobCounter の結果が取得されます。
次の手順では、AForge Imaging API を使用する場合のヒントとなる操作をいくつか紹介します。ただし、Dynamo で作業を行う場合に、すべての操作を理解する必要はありません。これらの操作を参照して、外部のライブラリを Dynamo 環境内で柔軟に使用できることを理解するのが目的です。
Python Script ノードの出力を BlobCounterBase.GetObjectRectangles に接続します。この操作により、しきい値に基づいてイメージ内のオブジェクトが読み取られ、定量化された長方形がピクセル スペースから抽出されます。
別の Python Script ノードをキャンバスに追加して GetObjectRectangles に接続し、次のコードを入力します。この操作により、Dynamo オブジェクトの整理されたリストが作成されます。
前の手順で追加した Python Script ノードの出力を置き換えます。この操作により、各長方形の X 座標、Y 座標、幅、高さを表す 4 つのリストが作成されます。
Code Block ノードを使用して、Rectangle.ByCornerPoints ノードに対応する構造にデータを編成します(次のコードを参照)。
イメージ内の白い正方形を表す長方形の配列が表示されます。この演習では、プログラミング コードを入力して、Illustrator のライブ トレースに類似する機能を作成しました。
ただし、まだクリーンアップが必要です。拡大表示すると、必要のない小さな長方形がたくさん残っていることがわかります。
次に、不要な長方形を削除するためのコードを記述します。
GetObjectRectangles ノードと別の Python ノードの間に Python ノードを挿入します。このノードのコードは次のとおりです。このコードで指定したサイズよりも小さな長方形がすべて削除されます。
不要な長方形を削除したら、それらの長方形からサーフェスを作成し、その長方形の面積に基づく距離を使用して長方形を押し出してみましょう。
both_sides 入力パラメータを false に変更すると、長方形が一方向に押し出されます。この操作により、非常に面白いテーブルが作成されます。
ここで紹介した例はどれも基本的なものばかりですが、その概念は実際のアプリケーションでも応用することができます。Computer Vision は、さまざまなプロセスで使用することができます。バーコード リーダー、パースペクティブ マッチング、プロジェクション マッピング、オーグメンテッド リアリティなどはその一例です。この演習に関する AForge の詳細なトピックについては、この記事を参照してください。
ロゴ/イメージ
名前