public CurveConfigViewModel Init(CurveConfig model) { this.model = model; UpdateCurve(); Temps = new BindableCollection <FanControllerTempViewModel>(model.Temps.Select(t => new FanControllerTempViewModel(t, model))); UpdatePickableTemps(); return(this); }
public void ToYaml(MaterialAnim materialAnim, FMAA.AnimationType animType) { MaterialAnimConfigs = new List <MatAnimConfig>(); Name = materialAnim.Name; Path = materialAnim.Path; FrameCount = materialAnim.FrameCount; Loop = materialAnim.Loop; foreach (var mat in materialAnim.MaterialAnimDataList) { MatAnimConfig matConfig = new MatAnimConfig(); matConfig.Name = mat.Name; MaterialAnimConfigs.Add(matConfig); foreach (var paramInfo in mat.ParamAnimInfos) { ParamInfo paramCfg = new ParamInfo(); paramCfg.Name = paramInfo.Name; paramCfg.IsConstant = paramInfo.ConstantCount != 0; matConfig.ParamInfos.Add(paramCfg); if (paramInfo.ConstantCount != 0) { paramCfg.Constants = new List <ConstantConfig>(); for (int i = 0; i < paramInfo.ConstantCount; i++) { AnimConstant constant = mat.Constants[paramInfo.BeginConstant + i]; ConstantConfig ConstantValue = new ConstantConfig(); ConstantValue.Offset = ConvertParamOffset(constant.AnimDataOffset, animType); ConstantValue.Value = constant.Value; paramCfg.Constants.Add(ConstantValue); } } if (paramInfo.BeginCurve != ushort.MaxValue) { paramCfg.CurveData = new List <CurveConfig>(); for (int i = 0; i < paramInfo.IntCurveCount + paramInfo.FloatCurveCount; i++) { var curve = mat.Curves[(int)paramInfo.BeginCurve + i]; var CurveCfg = new CurveConfig(); CurveCfg.Offset = ConvertParamOffset(curve.AnimDataOffset, animType); if (curve.Scale == 0) { curve.Scale = 1; } for (int f = 0; f < curve.Frames.Length; f++) { int frame = (int)curve.Frames[f]; float Value = curve.Offset + curve.Keys[f, 0] * curve.Scale; CurveCfg.KeyFrames.Add(frame, Value); } paramCfg.CurveData.Add(CurveCfg); } } } foreach (var patternInfo in mat.TexturePatternAnimInfos) { PatternInfo infoCfg = new PatternInfo(); infoCfg.Name = patternInfo.Name; infoCfg.IsConstant = patternInfo.BeginConstant != ushort.MaxValue; matConfig.TexturePatternInfos.Add(infoCfg); if (infoCfg.IsConstant) { infoCfg.ConstantValue = new ConstantTPConfig(); int Index = (int)mat.Constants[(int)patternInfo.BeginConstant].Value; infoCfg.ConstantValue.Texture = materialAnim.TextureNames[Index]; } if (patternInfo.CurveIndex != ushort.MaxValue) { var curve = mat.Curves[(int)patternInfo.CurveIndex]; infoCfg.CurveData = new CurveTPConfig(); if (curve.Scale == 0) { curve.Scale = 1; } for (int f = 0; f < curve.Frames.Length; f++) { int frame = (int)curve.Frames[f]; int Value = (int)curve.Offset + (int)curve.Keys[f, 0] * (int)curve.Scale; infoCfg.CurveData.KeyFrames.Add(frame, materialAnim.TextureNames[Value]); } } } } }
public FanControllerTempViewModel(FanControllerTemp model, CurveConfig config) { this.model = model; this.config = config; Name = model.Temp.Name; }
//开始计算 private void bt_calcu_Click(object sender, EventArgs e) { //提取数据 double x = 0; double y = 0; double output = 0;; try { if (this.tb_input1.Enabled) { x = double.Parse(this.tb_input1.Text); } if (this.tb_input2.Enabled) { y = double.Parse(this.tb_input2.Text); } output = double.Parse(this.tb_output.Text); } catch (Exception ex) { MessageBox.Show("输入有误请检查!"); return; } //注明计算模块名 this.lb_modulename.Text = "当前计算组件:" + this.modulename; //注明找到的曲线的有效时间 Curve1D curve1d; Curve2D curve2d; if (!this.tb_input2.Enabled) { //this.tb_input2.Enabled=false,说明是一维期望曲线 curve1d = CurveConfig.GetOPXCurve(this.SelectCurveIndex, this.startDatetime); this.lb_vailddate.Text = "选定曲线有效时间:" + curve1d.validDate.ToString(); } else { //this.tb_input2.Enabled=true,说明是二维期望曲线 curve2d = CurveConfig.GetOPXCurve2D(this.SelectCurveIndex, this.startDatetime); this.lb_vailddate.Text = "选定曲线有效时间:" + curve2d.validDate.ToString(); } //准备参数 string calcupara = "S;" + this.SelectCurveIndex.ToString() + ";" + this.SelectCurveIndex.ToString(); //计算 //1、准备数据 List <PValue>[] inputs; if (this.tb_input2.Enabled) { inputs = new List <PValue> [3]; inputs[0] = new List <PValue>(); inputs[0].Add(new PValue(output, this.startDatetime, this.startDatetime.AddMinutes(1), 0)); inputs[0].Add(new PValue(output, this.startDatetime.AddMinutes(1), this.startDatetime.AddMinutes(1), 0)); inputs[1] = new List <PValue>(); inputs[1].Add(new PValue(x, this.startDatetime, this.startDatetime.AddMinutes(1), 0)); inputs[1].Add(new PValue(x, this.startDatetime.AddMinutes(1), this.startDatetime.AddMinutes(1), 0)); inputs[2] = new List <PValue>(); inputs[2].Add(new PValue(y, this.startDatetime, this.startDatetime.AddMinutes(1), 0)); inputs[2].Add(new PValue(y, this.startDatetime.AddMinutes(1), this.startDatetime.AddMinutes(1), 0)); } else { inputs = new List <PValue> [3]; inputs[0] = new List <PValue>(); inputs[0].Add(new PValue(output, this.startDatetime, this.startDatetime.AddMinutes(1), 0)); inputs[0].Add(new PValue(output, this.startDatetime.AddMinutes(1), this.startDatetime.AddMinutes(1), 0)); inputs[1] = new List <PValue>(); inputs[1].Add(new PValue(x, this.startDatetime, this.startDatetime.AddMinutes(1), 0)); inputs[1].Add(new PValue(x, this.startDatetime.AddMinutes(1), this.startDatetime.AddMinutes(1), 0)); inputs = inputs.Take(2).ToArray(); } //2、计算 var swTimer = Stopwatch.StartNew(); //开始计算计时 //2.1 计算:获取计算对象(反射法) Assembly assembly = Assembly.LoadFrom(APPConfig.DLLNAME_CALCUMODULE); //获得PSLCalcu.exe Type calcuclass = assembly.GetType(APPConfig.NAMESPACE_CALCUMODULE + "." + this.modulename); //获得当前计算指定的算法类.注意,这里必须是“命名空间.类名” PropertyInfo inputData = calcuclass.GetProperty("inputData"); //获得算法类的静态参数inputData PropertyInfo calcuInfo = calcuclass.GetProperty("calcuInfo"); //获得算法类的静态参数calcuInfo MethodInfo Calcu = calcuclass.GetMethod("Calcu", new Type[] { }); //获得算法类的Calcu()方法。注意,Calcu方法有重载,这里需要指明获得哪个具体对象,否则会报错 PropertyInfo ErrorFlag = calcuclass.GetProperty("errorFlag"); //获得算法类的静态参数ErrorFlag,bool类型 PropertyInfo ErrorInfo = calcuclass.GetProperty("errorInfo"); //2.3 计算:主算法 //1、这里需要判断Calcu是否为空,如果为空,要写log inputData.SetValue(null, inputs); //将输入数据给入算法 System.UInt32[] tagids = new System.UInt32[] { (System.UInt32)(APPConfig.rdbtable_constmaxnumber + 1), (System.UInt32)(APPConfig.rdbtable_constmaxnumber + 2) }; string tagnames = ""; bool[] tagflags = new bool[inputs.Length]; for (int i = 0; i < tagflags.Length; i++) { tagflags[i] = true; } calcuInfo.SetValue(null, new CalcuInfo(tagnames, tagids, tagflags, this.modulename, calcupara, this.startDatetime, this.startDatetime.AddMinutes(1), 0, 100)); //将当前计算信息给入算法 Results Results = (Results)Calcu.Invoke(null, null); string realSpan = swTimer.Elapsed.ToString(); //计算计时结束 if (Results.warningFlag) { MessageBox.Show("计算警告:" + Results.warningInfo); return; } if (Results.errorFlag) { MessageBox.Show("计算错误:" + Results.errorInfo); return; } //展示计算结果 this.tb_sp.Text = Results.results[0][0].Value.ToString(); this.tb_spstatus.Text = Results.results[0][0].Status.ToString(); this.tb_error.Text = Results.results[1][0].Value.ToString(); this.tb_errorstatus.Text = Results.results[1][0].Status.ToString(); this.tb_score.Text = Results.results[3][0].Value.ToString(); this.tb_scorestatus.Text = Results.results[3][0].Status.ToString(); }