using PaintDotNet.Base;
using PaintDotNet.Data.Param;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace Metis.ParameterSet
{
///
/// 图像设置 - 参数
///
[XmlRoot("ROOT")]
public class GrainSizeAnalysisModel
{
///
/// 参数model
///
[XmlElement("ListParam")]
public List ListParam { get; set; }
public GrainSizeAnalysisModel cloneModel()
{
GrainSizeAnalysisModel newMod = new GrainSizeAnalysisModel();
newMod.ListParam = new List();
newMod.menuId = this.menuId;
newMod.param_key = this.param_key;
newMod.param_type = this.param_type;
newMod.param_value = this.param_value;
if (this.value != null)
newMod.value = this.value;
return newMod;
}
///
/// 找到当前menuId的参数model集合
///
///
///
public GrainSizeAnalysisModel cloneListParamModel(int menuId)
{
GrainSizeAnalysisModel newMod = new GrainSizeAnalysisModel();
newMod.ListParam = new List();
foreach (var item in this.ListParam)
if (item.menuId == menuId)
newMod.ListParam.Add(item.cloneModel());
return newMod;
}
///
/// 根据脚本参数集合初始化页面数据
///
///
///
public static GrainSizeAnalysisModel cloneListParamScript(ParamObject paramObject)
{
GrainSizeAnalysisModel newMod = new GrainSizeAnalysisModel();
newMod.ListParam = new List();
foreach (Args arg in paramObject.Lists)
{
GrainSizeAnalysisModel param = new GrainSizeAnalysisModel();
param.ListParam = new List();
param.menuId = (int)paramObject.MenuId;
param.param_key = arg.Key;
param.param_type = (int)arg.Type;
if (arg.value != null)
{
////在这里反射出对应功能的参数类
//string className = InvariantData.path_Action + ".Action" + step.menu_id;
//ParamObject param = (ParamObject)Assembly.Load(InvariantData.assembly_Data).CreateInstance(className);
if (arg.Type == Dtryt.Array)
param.param_value = ((int)arg.Value).ToString();
else if (arg.Type == Dtryt.DecimalScope)
param.param_value = string.Join(",", ((List)(arg.Value)).ToArray());
else
param.param_value = arg.Value.ToString();
if ((int)arg.Type == 7)
{//晶粒度-选择辅助线的适配
param.param_type = 10;
}
param.value = arg.value;
}
newMod.ListParam.Add(param);
}
return newMod;
}
///
/// 功能ID
///
[XmlElement("menuId")]
public int menuId { get; set; }
///
/// 参数键
///
[XmlElement("param_key")]
public string param_key { get; set; }
///
/// 参数类型的枚举值
///
[XmlElement("param_type")]
public int param_type { get; set; }
///
/// 参数值
///
[XmlElement("param_value")]
public string param_value { get; set; }
///
/// 参数格式化后的值
///
public object value;
///
/// 更新参数格式化后的值
///
public void setValue()
{
if (this.param_type == (int)Dtryt.Choise)
{
int valueC;
if (int.TryParse(this.param_value.ToString(), out valueC))
this.value = valueC;
else
this.value = 1;
}
if (this.param_type == (int)Dtryt.Interger)
{
int valueC;
if (int.TryParse(this.param_value.ToString(), out valueC))
this.value = valueC;
else
this.value = 0;
}
else if (this.param_type == (int)Dtryt.Array)
{
int valueC;
if (int.TryParse(this.param_value.ToString(), out valueC))
this.value = valueC;
else
this.value = 0;
}
else if (this.param_type == (int)Dtryt.Boolean)
{
bool valueC;
if (System.Boolean.TryParse(this.param_value.ToString(), out valueC))
this.value = valueC;
else
this.value = this.param_value.ToString().Equals("0");
}
else if (this.param_type == (int)Dtryt.DecimalScope)
{
string[] valuelst = this.param_value.Split(',');
List listV = new List();
foreach (string str in valuelst)
{
double outV;
if (double.TryParse(str, out outV))
listV.Add(outV);
else
listV.Add(0);
}
this.value = listV;
}
else if (this.param_type == (int)Dtryt.Decimal)
{//####
double valueC;
if (double.TryParse(this.param_value.ToString(), out valueC))
this.value = valueC;
else
this.value = -65536;
}
else if (this.param_type == (int)Dtryt.Color)
{
int valueC;
if (int.TryParse(this.param_value.ToString(), out valueC))
this.value = valueC;
else
this.value = -65536;
}
else if (this.param_type == (int)Dtryt.ItemString)
{
this.value = this.param_value.ToString();
}
else if (this.param_type == (int)Dtryt.Decimal)
{
int valueC;
if (int.TryParse(this.param_value.ToString(), out valueC))
this.value = valueC;
else
this.value = 2;
}
}
///
/// 返回保存的参数值-是否显示晶界,显示网格,显示截点 等
///
///
public bool GetParamValue1(string param_key, out object paramObject, int menuId)
{
bool foundItem = false;
paramObject = null;
foreach (var item in this.ListParam)
{
if (item.param_key.Equals(param_key) && item.menuId == menuId)
{
paramObject = item.value;
foundItem = true;
break;
}
}
return foundItem;
}
///
/// 保存参数的key,value和type
///
///
///
///
public void saveParamValue(string param_key, string param_value, int param_type, int menuId)
{
bool foundItem = false;
foreach (var item in this.ListParam)
{
if (item.param_key.Equals(param_key) && item.menuId == menuId)
{
item.param_value = param_value;
item.setValue();
foundItem = true;
break;
}
}
if (!foundItem)
{
GrainSizeAnalysisModel analysisItem = new GrainSizeAnalysisModel();
analysisItem.menuId = menuId;
analysisItem.param_key = param_key;
analysisItem.param_type = param_type;
analysisItem.param_value = param_value;
analysisItem.setValue();
this.ListParam.Add(analysisItem);
}
}
}
}