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); } } } }