プロジェクトからモデルを取得する
IProject
オブジェクトのメソッドを用いることで、プロジェクト内のモデルを様々な方法で取得できます。
プロジェクト直下のモデルを取得する
プロジェクトの直下のモデルを取得する場合は、IProject
オブジェクトに対してGetRootChildren
メソッドを呼び出します。以下のサンプルでは、モデルナビゲータに表示されるプロジェクト直下のモデルをすべて取得することができます。
public void GetRootModels(ICommandContext c, ICommandParams p)
{
IProject project = c.App.Workspace.CurrentProject;
// 設計モデルルート (モデルナビゲータのルートモデル) を取得します
IModel designModel = project.DesignModel;
// プロジェクト直下のモデルを取得します
IModelCollection rootModels = project.GetRootChildren();
//...
}
INFO
IModel
オブジェクトのIsDesignModel
メソッドを用いれば、モデルが設計モデルルート (モデルナビゲータのルートモデル) かどうか判定できます。
補足
- 設計モデルルート (モデルナビゲータのルートモデル) は下画像の矩形で囲まれた要素を指します。
- プロジェクト直下にモデルを作成したい場合、こちらを参照してください。
プロジェクトのすべてのモデルを取得する
プロジェクトのすべてのモデルを取得する場合はIProject
オブジェクトに対してGetAllChildren
メソッドを呼び出します。
public void GetAllChildren(ICommandContext c, ICommandParams p)
{
// プロジェクトのすべての子孫要素を取得します
IModelCollection children = c.App.Workspace.CurrentProject.GetAllChildren();
//...
}
モデルのパスから取得する
エディタで表示しているようなモデルのパスをもとにモデルを取得します。指定したモデル階層パスのモデルが存在しない場合は null を返し ます。なお、一致するモデル階層パスが複数ある場合、一番最初に見つかったモデルを返します。
public void GetModelByPath(ICommandContext c, ICommandParams p)
{
IProject project = c.App.Workspace.CurrentProject;
// パスからモデルを取得します
// モデルはプロジェクトのルートからのスラッシュ区切りの文字列となります
IModel model = project.GetModelByPath("path1/path2");
if ( model == null) {
c.App.Output.WriteLine("sample", "error: モデルがありませんでした。");
return;
}
c.App.Output.WriteLine("sample", model.Name);
}
モデルのIdからモデルを取得する
プロジェクト内のすべてのモデルからIdを用いて取得できます。
public void GetModelById(ICommandContext c, ICommandParams p)
{
IProject project = c.App.Workspace.CurrentProject;
// 対象のモデルのId
string modelId = "f514fa53-3720-4f93-9aa9-6cd38d850aa3";
// モデルを取得します
IModel model = project.GetModelById(modelId);
//...
}
関連の場合はIProject
オブジェクトのGetRelationshipById
メソッドを用います。
public void GetRelationshipById(ICommandContext c, ICommandParams p)
{
// 対象のモデルのId
string relId = "f514fa53-3720-4f93-9aa9-6cd38d850aa3";
// モデルを取得します
IRelationship relation = c.App.Workspace.CurrentProject.GetRelationshipById(relId);
}