拡張機能
拡張機能は、Dynamo エコシステムの強力な開発ツールです。開発者は、Dynamo の相互作用とロジックに基づいてカスタム機能を実行することができます。拡張機能は、2 つの主なカテゴリ、拡張機能とビュー拡張機能に分けることができます。名前が示すように、ビューの拡張機能フレームワークでは、カスタム メニュー項目を登録することで Dynamo UI を拡張することができます。通常の拡張機能は、UI を除いてビュー拡張機能と非常によく似た動作をします。たとえば、特定の情報を Dynamo コンソールに記録する拡張機能を作成することができます。このシナリオの場合、カスタム UI は必要ないため、通常の拡張機能を使用して実現することができます。
拡張機能のケース スタディ
DynamoSamples GitHub リポジトリの SampleViewExtension のサンプルに従って、グラフ内のアクティブなノードをリアルタイムで表示する、簡易なモードレス ウィンドウを作成するために必要な手順を説明します。ビュー拡張機能には、ウィンドウの UI を作成し、ビュー モデルに値をバインドする必要があります。
GitHub リポジトリの SampleViewExtension のサンプルに従って開発された、ビュー拡張機能ウィンドウ。
サンプルを最初から作成しますが、DynamoSamples リポジトリをダウンロードしてビルドすることで、参照として使用することもできます。
DynamoSamples リポジトリの場所: https://github.com/DynamoDS/DynamoSamples
この手順では、
DynamoSamples/src/
にある SampleViewExtension という名前のプロジェクトを具体的に参照します。
ビュー拡張機能を実装するには
ビュー拡張機能には、次の 3 つの主要な部分があります。
IViewExtension
を実装する、クラスとビュー モデルを作成するクラスを含むアセンブリ実行時に、このアセンブリを検索する場所と拡張子のタイプを Dynamo に通知する
.xml
ファイルグラフィックス表示にデータをバインドして、ウィンドウの外観を決定する
.xaml
ファイル
1.プロジェクトの構造を作成する
まず、新規の Class Library
プロジェクトを SampleViewExtension
という名前で作成します。
File > New > Project
を選択して新しいプロジェクトを作成します。
Class Library
を選択します。プロジェクトに
SampleViewExtension
という名前を付けます。
Ok
を選択します。
このプロジェクトでは、2 つのクラスが必要です。1 つのクラスが IViewExtension
を実装し、別のクラスは NotificationObject.
IViewExtension
を実装して、拡張機能がどのように配置、ロード、参照、および破棄するか、すべての情報を含めます。NotificationObject
は、Dynamo と IDisposable
での変更に関する通知を提供します。変更が発生すると、それに応じてカウントが更新されます。
SampleViewExtension.cs
というクラス ファイルはIViewExtension
を実装します。
SampleWindowViewMode.cs
というクラス ファイルはNotificationObject
を実装します。
IViewExtension
を使用するには WpfUILibrary NuGet パッケージが必要です。このパッケージをインストールすると、Core、Services、および ZeroTouchLibrary パッケージが自動的にインストールされます。
WpfUILibrary を選択します。
Install
を選択して、従属パッケージをすべてインストールします。
2.IViewExtension クラスを実装する
IViewExtension
クラスから、Dynamo の起動時、拡張機能のロード時、 Dynamo のシャットダウン時に何が起きるかを決定します。SampleViewExtension.cs
クラス ファイルに、次のコードを追加します。
SampleViewExtension
クラスは、ウィンドウを開くクリック可能なメニュー項目を作成し、ビュー モデルとウィンドウに接続します。
public class SampleViewExtension : IViewExtension
SampleViewExtension
はIViewExtension
インタフェースから継承され、メニュー項目の作成に必要なものがすべて提供されます。sampleMenuItem = new MenuItem { Header = "Show View Extension Sample Window" };
は MenuItem を作成し、View
メニューに追加します。
メニュー項目
sampleMenuItem.Click += (sender, args)
は、メニュー項目をクリックしたときに、新しいウィンドウを開くイベントが発生します。MainGrid = { DataContext = viewModel }
は、これから作成する.xaml
ファイル内のMain Grid
を参照して、ウィンドウ内のメイン グリッドのためのデータ コンテキストを設定します。Owner = p.DynamoWindow
は、ポップアウト ウィンドウの所有者を Dynamo に設定します。つまり、新しいウィンドウは Dynamo に依存しているため、Dynamo の最小化、最大化、復元などの操作を行うと、新しいウィンドウでも同じ動作が実行されます。window.Show();
は、追加のウィンドウ プロパティが設定されたウィンドウを表示します。
3.ビュー モデルを実装する
ウィンドウの基本パラメータをいくつか設定することができました。次に、さまざまな Dynamo 関連のイベントに応答するためのロジックを追加し、これらのイベントに基づいて UI を更新するように指示します。次のコードを、SampleWindowViewModel.cs
クラス ファイルにコピーします。
このビュー モデル クラスの実装は、CurrentWorkspaceModel
を確認し、ワークスペースにノードが追加または削除されたときにイベントを発生させます。これにより、データが変更され、更新が必要であることを UI またはバインド要素に通知するプロパティの変更が発生します。ActiveNodeTypes
ゲッターを呼び出すことで、内部で追加のヘルパー関数 getNodeTypes()
が呼び出されます。この関数は、キャンバス上のすべてのアクティブなノードを反復処理し、これらのノードの名前を含む文字列を生成します。次にこの文字列を、ポップアウト ウィンドウに表示される .xaml ファイル内のバインドに返します。
拡張機能のコア ロジックを定義したため、ウィンドウの外観の詳細を .xaml
ファイルで指定できるようになりました。単に必要なのは、TextBlock
Text
にバインドされている ActiveNodeTypes
プロパティを介して文字列を表示する、簡易なウィンドウです。
プロジェクトを右クリックして次を選択します:
Add > New Item...
ウィンドウを作成するために変更するユーザ コントロール テンプレートを選択します。
新しいファイル名を
SampleWindow.xaml
にします。
Add
を選択します。
ウィンドウの .xaml
コードでは、テキスト ブロックに SelectedNodesText
をバインドする必要があります。SampleWindow.xaml
に、次のコードを追加します。
Text="{Binding ActiveNodeTypes}"
は、SampleWindowViewModel.cs
内のプロパティ値ActiveNodeTypes
に対して、ウィンドウのTextBlock
Text
値をバインドします。
ここで、.xaml C# バッキング ファイル SampleWindow.xaml.cs
のサンプル ウィンドウを初期化します。SampleWindow.xaml
に、次のコードを追加します。
ビュー拡張機能は、構築して Dynamo に追加する準備が整いました。Dynamo には、xml
ファイルが必要です。出力を .dll
拡張子として登録するためのファイルです。
プロジェクトを右クリックして次を選択します:
Add > New Item...
XML ファイルを選択します。
ファイル名を
SampleViewExtension_ViewExtensionDefinition.xml
にします。
Add
を選択します。
ファイル名は、Dynamo 標準に従って拡張アセンブリを参照します。
"extensionName"_ViewExtensionDefinition.xml
xml
ファイルに次のコードを追加して、Dynamo に拡張アセンブリの検索場所を指示します。
この例では、アセンブリを既定の Visual Studio プロジェクト フォルダに作成しました。
<AssemblyPath>...</AssemblyPath>
ターゲットをアセンブリの場所に置き換えます。
最後の手順では、SampleViewExtension_ViewExtensionDefinition.xml
ファイルを Dynamo の Core インストール フォルダ C:\Program Files\Dynamo\Dynamo Core\1.3\viewExtensions
にある Dynamo のビュー拡張機能フォルダにコピーします。extensions
と viewExtensions
には別々のフォルダが存在することに注意が必要です。xml
ファイルを誤ったフォルダに配置すると、実行時に正しくロードされない可能性があります。
Dynamo のビュー拡張機能フォルダにコピーされた
.xml
ファイル
ここではビュー拡張機能の基本的な概要について紹介しました。より高度なケース スタディについては、GitHub のオープン ソース プロジェクトである DynaShape パッケージを参照してください。このパッケージでは、Dynamo モデル ビューでライブ編集を可能にするビュー拡張機能を使用しています。
DynaShape のパッケージ インストーラは、Dynamo フォーラムからダウンロードできます: https://forum.dynamobim.com/t/dynashape-published/11666
ソース コードは、GitHub からクローンで作成することができます: https://github.com/LongNguyenP/DynaShape
Last updated