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