Visual Studio Modeling and Visualization SDK (VMSDK) には、モデリング ツールを定義できるいくつかのレベルが用意されています。
DSL 定義図を使用して、ドメイン固有言語 (DSL) を定義します。 図形式表記、読み取り可能な XML フォーム、およびコードやその他の成果物を生成するために必要な基本的なツールを使用して、DSL をすばやく作成できます。 詳細については、「 Domain-Specific 言語を定義する方法」を参照してください。
DSL 定義のより高度な機能を使用して、DSL を微調整します。 たとえば、ユーザーが要素を作成するときに、追加のリンクを表示できます。 これらの手法は、主に DSL 定義で実現され、一部には数行のプログラム コードが必要です。
プログラム コードを使用してモデリング ツールを拡張します。 VMSDK は、DSL 定義から生成されたコードと拡張機能を簡単に統合できるように特別に設計されています。 詳細については、「 Domain-Specific 言語をカスタマイズするコードの記述」を参照してください。
注
DSL 定義ファイルを更新したら、ソリューションをリビルドする前に、ソリューション エクスプローラーのツール バーにある [すべてのテンプレートの変換] を必ずクリックしてください。
記事リファレンス
| この効果を実現するには | このトピックを参照してください |
|---|---|
| ユーザーが図形の色とスタイルのプロパティを設定できるようにします。 | 図形またはコネクタ クラスを右クリックし、[ 公開済みの追加] をポイントして、項目をクリックします。 |
| モデル要素のさまざまなクラスは図に似ていますが、初期の高さと幅、色、ヒントなどのプロパティを共有します。 | 図形またはコネクタ クラス間の継承を使用します。 派生図形と派生ドメイン クラス間のマッピングは、親のマッピングの詳細を継承します。 または、異なるドメイン クラスを同じ図形クラスにマップします。 |
| モデル要素のクラスは、さまざまな図形コンテキストによって表示されます。 | 複数の図形クラスを同じドメイン クラスにマップします。 ソリューションをビルドするときは、エラー レポートに従い、要求されたコードを指定して、使用する図形を決定します。 |
| 図形の色またはフォントなどの他の機能は、現在の状態を示します。 | 「 モデルを反映するように図形とコネクタを更新する」を参照してください。 公開されているプロパティを更新するルールを作成します。 「 ルールによってモデル内に変更が反映される」を参照してください。 または、OnAssociatedPropertyChanged() を使用して、リンク矢印やフォントなどの公開されていない機能を更新します。 |
| 図形のアイコンが状態を示すように変わります。 | DSL の [詳細] ウィンドウでデコレーター マッピングの可視性を設定します。 同じ位置に複数のイメージ デコレーターを配置します。 「 モデルを反映するように図形とコネクタを更新する」を参照してください。 または、 ImageField.GetDisplayImage()をオーバーライドします。
ImageFieldの例を参照してください。 |
| 任意の図形に背景イメージを設定する | 固定された ImageField を追加するには、InitializeInstanceResources() をオーバーライドします。 |
| 図形を任意の深さに入れ子にする | 再帰埋め込みツリーを設定します。 図形を含める BoundsRules を定義します。 |
| 要素の境界上の固定ポイントにコネクタを接続します。 | 図の小さなポートで表される埋め込みターミナル要素を定義します。 BoundsRules を使用して、ポートを所定の位置に固定します。 視覚化とモデリング SDK の回路図のサンプルを参照してください。 |
| テキスト フィールドには、他の値から派生した値が表示されます。 | テキスト デコレーターを Calculated または Custom Storage ドメイン プロパティにマップします。 詳細については、「 計算およびカスタム ストレージのプロパティ」を参照してください。 |
| モデル要素間、または図形間で変更を反映する | 「Domain-Specific 言語での検証」を参照してください。 |
| ストアの外部にある他の Visual Studio 拡張機能などのリソースに変更を反映します。 | 「イベント ハンドラーによるモデルの外部への変更の反映」を参照してください。 |
| [プロパティ] ウィンドウには、関連する要素のプロパティが表示されます。 | プロパティ転送を設定します。 「プロパティ ウィンドウのカスタマイズ」を参照してください。 |
| プロパティ カテゴリ | プロパティ ウィンドウは、カテゴリと呼ばれるセクションに分かれています。 ドメインのプロパティの カテゴリ を設定します。 同じカテゴリ名のプロパティは、同じセクションに表示されます。 リレーションシップ ロールの カテゴリ を設定することもできます。 |
| ドメイン プロパティへのユーザー アクセスを制御する | 実行時にドメイン プロパティが [プロパティ] ウィンドウに表示されないようにするには、Is Browsable を false に設定します。 引き続きテキスト デコレーターにマップできます。 UI を読み取り専用 にすると、ユーザーはドメイン プロパティを変更できなくなります。 ドメイン プロパティへのプログラム アクセスは影響を受けません。 |
| DSL のモデル エクスプローラーで、ノードの名前、アイコン、可視性を変更します。 | モデル エクスプローラーのカスタマイズを参照してください。 |
| コピー、切り取り、貼り付けを有効にする | DSL エクスプローラーでエディター ノードの[コピー 貼り付けを有効にする] プロパティを設定します。 |
| 要素がコピーされるたびに、参照リンクとそのターゲットをコピーします。 たとえば、アイテムに添付されたコメントをコピーします。 | ソース ロールの [コピーの伝達 ] プロパティを設定します (DSL 定義図のドメイン リレーションシップの一方の側にある行で表されます)。 より複雑な効果を実現するために ProcessOnCopy をオーバーライドするコードを記述します。 コピー動作のカスタマイズを参照してください。 |
| 要素が削除されたとき、関連する要素を削除、親要素を再設定、またはリンクを再設定します。 | リレーションシップ ロールの [ 削除の反映 ] 値を設定します。 より複雑な効果を得る場合は、DomainModel.csで定義されているShouldVisitRelationship クラスのShouldVisitRolePlayerメソッドとMyDslDeleteClosure メソッドをオーバーライドします。 |
| コピーとドラッグ ドロップで図形のレイアウトと外観を維持します。 | コピーした ElementGroupPrototypeに図形とコネクタを追加します。 オーバーライドするのに最も簡便な方法は、 ElementOperations.CreateElementGroupPrototype()コピー動作のカスタマイズを参照してください。 |
| 現在のカーソル位置など、選択した場所に図形を貼り付けます。 |
ClipboardCommandSet.ProcessOnCopy()をオーバーライドして場所固有のバージョンでElementOperations.Merge().を使用します。コピー動作のカスタマイズを参照してください。 |
| 貼り付け時に追加のリンクを作成する | ClipboardCommandSet.ProcessOnPasteCommand() をオーバーライドする |
| この図、その他の DSL、および Windows 要素からのドラッグ アンド ドロップを有効にする | ドラッグ アンド ドロップ ハンドラーを追加する方法を参照してください |
| 図形またはツールを、親図形にドラッグする場合と同様に、子図形であるポートなどにドラッグできるようにします。 | ドロップされたオブジェクトを親に転送するために、ターゲット オブジェクト クラスに対して要素マージ ディレクティブを定義します。 「要素の作成と移動のカスタマイズ」を参照してください。 |
| 図形またはツールを図形にドラッグし、追加のリンクまたはオブジェクトを作成できるようにします。 たとえば、リンク先のアイテムにコメントをドロップできるようにする場合です。 | ターゲット ドメイン クラスで要素マージ ディレクティブを定義し、生成するリンクを定義します。 複雑な場合は、カスタム コードを追加できます。 「要素の作成と移動のカスタマイズ」を参照してください。 |
| 1 つのツールで要素のグループを作成します。 たとえば、固定のポート セットを持つコンポーネントなどです。 | ToolboxHelper.csでツールボックスの初期化メソッドをオーバーライドします。 要素とそのリレーションシップ リンクを含む要素グループ プロトタイプ (EGP) を作成します。 「 ツールとツールボックスのカスタマイズ」を参照してください。 EGP にプリンシパル図形とポート図形を含めるか、EGP のインスタンス化時にポート図形を配置する BoundsRules を定義します。 |
| 1 つの接続ツールを使用して、複数の種類のリレーションシップをインスタンス化します。 | ツールによって呼び出される接続ビルダーにリンク接続ディレクティブ (LCD) を追加します。 LCD は、2 つの要素の型からリレーションシップの種類を決定します。 これを要素の状態に依存させるために、カスタム コードを追加できます。 「 ツールとツールボックスのカスタマイズ」を参照してください。 |
| 固定ツール - ユーザーは任意のツールをダブルクリックして、多数の図形またはコネクタを連続して作成できます。 | DSL エクスプローラーで、 Editor ノードを選択します。 [プロパティ] ウィンドウで、[ 固定ツールボックス項目を使用] を設定します。 |
| メニュー コマンドを定義する | 「方法: 標準メニュー コマンドを変更する」を参照してください |
| 検証規則を使用してモデルを制約する | 「Domain-Specific 言語での検証」を参照してください |
| DSL からコード、構成ファイル、またはドキュメントを生成します。 | Domain-Specific 言語からのコードの生成 |
| モデルをファイルに保存する方法をカスタマイズします。 | ファイル ストレージと XML シリアル化のカスタマイズを参照してください |
| モデルをデータベースまたはその他のメディアに保存します。 |
YourLanguageDocData をオーバーライドする ファイル ストレージと XML シリアル化のカスタマイズを参照してください |
| 複数の DSL を統合して、1 つのアプリケーションの一部として機能するようにします。 | Visual Studio Modelbus を使用したモデルの統合に関するページを参照してください。 |
| DSL をサード パーティによって拡張することを許可し、拡張機能を制御します。 |
MEF を使用して DSL を拡張する DSL ライブラリを使用した DSL 間のクラスの共有 Read-Only セグメントを作成するためのロック ポリシーの定義 |
関連コンテンツ
- Domain-Specific 言語を定義する方法
- Domain-Specific 言語をカスタマイズするコードの記述
- Modeling SDK for Visual Studio - Domain-Specific Languages
注
テキスト テンプレート変換コンポーネントは、Visual Studio 拡張機能開発ワークロードの一部として自動的にインストールされます。 SDK、ライブラリ、フレームワーク カテゴリの下にある Visual Studio インストーラーの [個々のコンポーネント] タブからインストールすることもできます。 [個々のコンポーネント] タブから Modeling SDK コンポーネントをインストールします。