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

モデルにプロダクト適用条件を設定する

IModelオブジェクトのSetProductApplyConditionメソッドでプロダクト適用条件式を設定します。プロダクト適用条件式内において、このモデルに未割り当てのフィーチャ名が指定されている場合は、 自動的にフィーチャが割り当てられます。また、条件式でこのモデルに割り当て済みのフィーチャ名が使用されなかった場合は、自動的にフィーチャとの割り当てが解除されます。条件式に空の文字列を指定した場合は、すべてのフィーチャ割り当てが解除されます。

プロダクト適用条件式は、"フィーチャ名変数"を真偽値型変数として扱う論理式です。コンフィグレーションにおいて、フィーチャが選択状態にある場合、該当の"フィーチャ名変数"を真として評価します。"フィーチャ名変数"は、"["および"]"でフィーチャ名、またはフィーチャユニーク名を囲む書式により記述します。また、プロダクト適用条件式では、次の論理演算子、および計算順序を指定する"(",")"を使用できます。

論理式:

  • AND : 論理積
  • OR : 論理和
  • NOT : 否定

例: 次のプロダクト適用条件式は、コンフィグレーションにおいて、フィーチャ名が"追従走行"、または”前方カメラ”が選択されている場合に真として評価される条件式です。

[追従走行] OR [前方カメラ] 

次のプロダクト適用条件式は、コンフィグレーションにおいて、フィーチャ名が"定速走行"が選択されておらず、かつ”ミリ波レーダー”が選択されている場合に真として評価される条件式です。

NOT [定速走行] AND [ミリ波レーダー]
public void SetProductApplyCondition(ICommandContext c, ICommandParams p)
{
IModel model = c.App.Workspace.CurrentModel;

// モデルに条件式を設定します
model.SetProductApplyCondition("[追従走行] OR [前方カメラ]");
}

次は最初に選択されたモデルのプロダクト適用条件式をその他の選択されたモデルにコピーする例です。

public void CopyProductApplyCondition(ICommandContext c, ICommandParams p)
{
IModelCollection selectedModels = c.App.Window.EditorPage.CurrentEditorView?.SelectedModels;
if ((selectedModels == null) || (selectedModels.Count < 1)) {
c.App.Window.UI.ShowMessageBox("モデルエディタでモデルを選択してから実行してください。");
return;
}

IModel firstModel = selectedModels.First();
var condition = firstModel.GetProductApplyCondition();

foreach (IModel model in selectedModels)
{
if (model.Id != firstModel.Id)
{
model.SetProductApplyCondition(condition);
}

c.App.Output.WriteLine("sample", $"選択されているモデル: {model.Name}");
c.App.Output.WriteLine("sample", $" プロダクト適用条件式: {model.GetProductApplyCondition()}");
}
}