メインコンテンツまでスキップ

モデルファイルの情報を取得する

指定モデルが所属しているモデルファイル(またはプロジェクトファイル)については IModelオブジェクトのModelUnitプロパティ(IModelUnit型)で取得できます。IModelUnitのプロパティを用いることで、モデルファイルの情報にアクセスできます。

モデルのファイルパス

public void GetModelFilePath(ICommandContext c, ICommandParams p)
{
var model = c.App.Workspace.CurrentModel;

// モデルファイルパスを取得します
var modelFilePath = model.ModelUnit?.UnitPath ?? "";

//...
}

モデルのファイルが読み取り専用かを調べる

public void CheckModelFileIsReadOnly(ICommandContext c, ICommandParams p)
{
var model = c.App.Workspace.CurrentModel;

// 読み取り専用かを判定します
var isModelFileReadOnly = model.ModelUnit?.IsReadonly ?? false;

//...
}

拡張メソッドの例

次のように拡張メソッドを用意しておくと便利です。

public static class IModelExtension
{
/// <summary>
/// モデルファイルのパスを取得します。
/// </summary>
/// <param name="self">対象モデル。</param>
/// <returns>モデルユニットと関連付けられていればそのユニットパス、それ以外は空文字列です。</returns>
public static string GetModelUnitPath(this IModel self) => self.ModelUnit?.UnitPath ?? "";

/// <summary>
/// このモデルが保存されているモデルファイルが読み取り専用かを判定します。
/// </summary>
/// <param name="self">対象モデル。</param>
/// <returns>モデルファイルが読み取り専用の場合はtrue、それ以外はfalseです。</returns>
public static bool IsReadonly(this IModel self) => self.ModelUnit?.IsReadonly ?? false;
}

次のように利用できます。

public void CheckModelFileIsReadOnly(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;

if ( model.IsReadonly() )
{
//...
}
}