public CurveConfigViewModel Init(CurveConfig model)
        {
            this.model = model;

            UpdateCurve();
            Temps = new BindableCollection <FanControllerTempViewModel>(model.Temps.Select(t => new FanControllerTempViewModel(t, model)));

            UpdatePickableTemps();
            return(this);
        }
Exemplo n.º 2
0
            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]);
                            }
                        }
                    }
                }
            }
Exemplo n.º 3
0
 public FanControllerTempViewModel(FanControllerTemp model, CurveConfig config)
 {
     this.model  = model;
     this.config = config;
     Name        = model.Temp.Name;
 }
Exemplo n.º 4
0
        //开始计算
        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();
        }