プロジェクトからモデルを取得する
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);
}
