前のセクションでは、カスタム ノードとサンプル ファイルを使用して 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 には豊富な機能が用意されており、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 パッケージの仕組みを理解する別の方法として、Dynamo Package Manager の Web サイトを参照する方法もあります。ここでは、パッケージや作成者のリーダーボードに関する統計情報を確認できます。また、Dynamo Package Manager からパッケージ ファイルをダウンロードすることもできますが、Dynamo から直接ダウンロードした方が簡単です。
パッケージ ファイルの保存場所を確認する場合は、一番上のナビゲーションで[Dynamo] > [基本設定] > [パッケージ設定] > [ノードとパッケージ ファイルの場所]をクリックします。ここから現在のルート フォルダを見つけることができます。
既定では、パッケージは C:/Users/[ユーザ名]/AppData/Roaming/Dynamo/[Dynamo バージョン] というフォルダ パスにインストールされます。
Dynamo コミュニティは、常に成長と進化を続けています。Dynamo Package Manager を定期的に確認して、便利な新機能を発見してください。これ以降のセクションでは、エンドユーザの視点から見た独自の Dynamo パッケージの作成など、パッケージについてより詳しく確認していきます。
Dynamo Mesh Toolkit は、外部ファイル形式からメッシュを読み込む機能、Dynamo のジオメトリ オブジェクトからメッシュを作成する機能、頂点とインデックスからメッシュを手動で作成する機能を提供するライブラリです。このライブラリには、メッシュの変更や修復を行うためのツールや、製造処理で使用する水平方向のスライスを抽出するためのツールも用意されています。
Dynamo Mesh Toolkit は、オートデスクによるメッシュ研究の一環として開発されているため、今後も拡張を続けていきます。このツールキットには、頻繁に新しいメソッドが追加される予定になっています。コメント、バグの報告、新機能の提案については、お気軽に Dynamo チームまでご連絡ください。
次の演習では、Mesh Toolkit を使用して、いくつかの基本的なメッシュ操作を説明します。この演習では、メッシュを一連の平面と交差させます。この操作でメッシュではなくソリッドを使用すると、計算量が多くなります。ソリッドとは異なり、メッシュには「解像度」の集合があります。現在の作業に応じて、この解像度を定義することができます。メッシュは、数学的にではなく位相幾何学的に定義されています。メッシュとソリッドとの関係について詳しくは、この手引の「計算設計用のジオメトリ」の章を参照してください。Mesh Toolkit の詳細な説明については、Dynamo Wiki ページを参照してください。次の演習で、パッケージの内容を確認してみましょう。
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 コミュニティで共有することもできます。ここで紹介するケース スタディでは、既存のパッケージの中身を確認しながら、パッケージの設定方法について説明します。このケース スタディは、前の章の演習に基づいて構成されており、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 パッケージ用のサンプル ファイル(存在する場合)も、このフォルダに格納されています。これ以降のスクリーンショットは、各サンプル ファイルの概念を示しています。
このサンプル ファイルでは、PointsToSurface ノードを使用して長方形のグリッドに基づくサーフェスをパネル化する方法を確認することができます。同様のワークフローについては、前の章で確認しました。
このサンプル ファイルでは、同様のワークフローを使用して、特定のサーフェスから別のサーフェスに円弧をマッピングする場合のセットアップ例を確認することができます。このファイルでは PolygonsToSurface ノードを使用します。
このサンプル ファイルは NurbsCrvToSurface ノードと連携するため、多少複雑な構成になっています。ターゲット サーフェスは指定した距離でオフセットされ、NURB 曲線が元のターゲット サーフェスとオフセット後のサーフェスにマッピングされます。その後、マッピングされた 2 本の曲線がロフトされて 1 つのサーフェスが作成され、そのサーフェスに厚みが加えられます。その結果として出力されるソリッドは、ターゲット サーフェスの法線を表す波形の形状になります。
このサンプル ファイルでは、ひだがついたポリサーフェスをソース サーフェスからターゲット サーフェスにマッピングする方法について確認することができます。ソース サーフェスはグリッド上に広がる長方形のサーフェスで、ターゲット サーフェスは回転体のサーフェスです。
このサンプル ファイルでは、ソース サーフェスのソース ポリサーフェスをターゲット サーフェスにマッピングする方法について確認することができます。
カスタム ノードを使用すると、さまざまなタイプの曲線をマッピングすることができます。このサンプル ファイルでは、Illustrator から書き出した SVG ファイルを参照し、読み込んだ曲線をターゲット サーフェスにマッピングすることができます。
.svg ファイルの構文を解析することにより、曲線が .xml 形式から Dynamo のポリカーブに変換されます。
読み込んだ曲線がターゲット サーフェスにマッピングされます。これにより、Illlustrator でパネルを明示的に(ポイント アンド クリック操作で)設計し、そのパネルを Dynamo で読み込んでターゲット サーフェスに適用することができます。
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 の詳細なトピックについては、この記事を参照してください。
DynamoUnfold の横にあるオプション メニュー を選択します。
ロゴ/イメージ
名前