duheng
2025-03-20 1ec65a7b983a7d519c3602d20a855ac1bac1825e
WinFrmUI/PBS.WinFrmUI.Hydro/template/BuildModel.cs
@@ -8,8 +8,7 @@
using System.Text;
namespace PBS.WinFrmUI.Hydro
{
{
    public enum 二供分区Type
    {
        加压供水,
@@ -400,14 +399,10 @@
                p.Datasets[pair.Key].range_Y = Range.Union(rangeDefault, pair.Value.range_Y);
            }
            p.CurveFit();
            return p;
            //factory.Pumps.Add(p);
            //_EditFlag = true;
            //DisplayFactoryListInTreeView(factoryList);
            return p;
        }
        [Browsable(false)]
        //[Editor(typeof(TemplatePropertyEditor), typeof(UITypeEditor))]
        [Browsable(false)]
        public string templateID
        {
            get
@@ -424,226 +419,18 @@
        public Template template { get; private set; } = null;
        [Browsable(false)]
        public BuildDataset 流量压降曲线
        {
            get
            {
                if (!Datasets.ContainsKey("流量压降曲线")) Datasets.Add("流量压降曲线", new BuildDataset("流量压降曲线"));
                return Datasets["流量压降曲线"];
            }
        }
        [Browsable(false)]
        public BuildDataset 流量压降平均
        {
            get
            {
                if (!Datasets.ContainsKey("流量压降平均")) Datasets.Add("流量压降平均", new BuildDataset("流量压降平均"));
                return Datasets["流量压降平均"];
            }
        }
        [Browsable(false)]
        public BuildDataset 流量压降上限
        {
            get
            {
                if (!Datasets.ContainsKey("流量压降上限")) Datasets.Add("流量压降上限", new BuildDataset("流量压降上限"));
                return Datasets["流量压降上限"];
            }
        }
        [Browsable(false)]
        public BuildDataset 流量压降下限
        {
            get
            {
                if (!Datasets.ContainsKey("流量压降下限")) Datasets.Add("流量压降下限", new BuildDataset("流量压降下限"));
                return Datasets["流量压降下限"];
            }
        }
        [Browsable(false)]
        public BuildDataset 用水趋势曲线
        {
            get
            {
                if (!Datasets.ContainsKey("用水趋势曲线")) Datasets.Add("用水趋势曲线", new BuildDataset("用水趋势曲线"));
                return Datasets["用水趋势曲线"];
            }
        }
        [Browsable(false)]
        public BuildDataset 用水趋势下限
        {
            get
            {
                if (!Datasets.ContainsKey("用水趋势下限")) Datasets.Add("用水趋势下限", new BuildDataset("用水趋势下限"));
                return Datasets["用水趋势下限"];
            }
        }
        [Browsable(false)]
        public BuildDataset 用水趋势上限
        {
            get
            {
                if (!Datasets.ContainsKey("用水趋势上限")) Datasets.Add("用水趋势上限", new BuildDataset("用水趋势上限"));
                return Datasets["用水趋势上限"];
            }
        }
        public DataTable UDList { get; set; }
        public List<string> UDNames { get; set; }
        public List<double> UDPatterns { get; set; }
        public void CurveFit(bool is拟合 = true)
        {
            foreach (var data in Datasets)
            {
                //data.Value.Data.Sort((a, b) => a.X > b.X ? 1 : (a.X == b.X ? 0 : -1));
            {
                if (data.Value.HasData) data.Value.CurveFit();
            }
            //string basetype = "流量压降曲线";
            //string type = "";
            //if (Datasets[basetype].HasData)
            //{
            //    var range = Datasets[basetype].range_X;
            //    double step = range.Len / 20;
            //    double i0 = 0;
            //    List<PointF> list1 = new List<PointF>();
            //    List<PointF> list2 = new List<PointF>();
            //    List<PointF> list3 = new List<PointF>();
            //    for (double i = range.Min; i < range.Max; i+=step)
            //    {
            //        var valueDatas = Datasets[basetype].Data.FindAll(m => i0 <= m.X && m.X < i).Select(m=>(double)m.Y). ToList();
            //        if (valueDatas.Count < 3) continue;
            //        Math_Expect math_Expect = new Math_Expect(valueDatas);
            //        var y0= math_Expect.Average();
            //        var x = (i0 + i) / 2;
            //        var doubles = math_Expect.GetPercent(0.95);//math_Expect.GetExpect(0.05);
            //        var y1 = doubles[0];
            //        var y2 = doubles[1];
            //        list1.Add(new PointF((float)x, (float)y0));
            //        list2.Add(new PointF((float)x, (float)y1));
            //        list3.Add(new PointF((float)x, (float)y2));
            //        //Datasets[Global_model.list[1]].FittedCurve.Add(new PointF((float)x, (float)y1));
            //        //Datasets[Global_model.list[2]].FittedCurve.Add(new PointF((float)x, (float)y2));
            //        //Datasets[Global_model.list[0]].IsFitted = true;
            //        //Datasets[Global_model.list[1]].IsFitted = true;
            //        //Datasets[Global_model.list[2]].IsFitted = true;
            //        //Datasets[Global_model.list[1]].IsFitted = true;
            //        //Datasets[Global_model.list[2]].IsFitted = true;
            //        i0 = i;
            //    }
            //    if (!is拟合)
            //    {
            //        流量压降平均.FittedCurve = list1;
            //        流量压降平均.IsFitted = true;
            //        Datasets[Global_model.list[1]].FittedCurve = list2;
            //        Datasets[Global_model.list[1]].IsFitted = true;
            //        Datasets[Global_model.list[2]].FittedCurve = list3;
            //        Datasets[Global_model.list[2]].IsFitted = true;
            //    }
            //    else
            //    {
            //        var rangeX = Datasets[Global_model.list[0]].range_X;
            //        流量压降平均.Data = list1;
            //        流量压降平均.CurveFit(rangeX);
            //        Datasets[Global_model.list[1]].Data = list2;
            //        Datasets[Global_model.list[1]].CurveFit(rangeX);
            //        Datasets[Global_model.list[2]].Data = list3;
            //        Datasets[Global_model.list[2]].CurveFit(rangeX);
            //    }
            //}
            //type = "流量压降下限";
            //var type1 = "流量压降上限";
            //if (Datasets[type].IsFitted)
            //{
            //    List<PointF> points = new List<PointF>();
            //    List<PointF> points1 = new List<PointF>();
            //    foreach (var yc in Datasets[basetype].Data)
            //    {
            //        float x= yc.X;
            //        float y_扬程 = yc.Y;
            //        float y_效率= (float)Datasets[type].Evaluate(x);
            //        points.Add(new PointF(x, y_效率));
            //        points1.Add(new PointF(x,x* y_扬程 / y_效率 /3.6f ));
            //    }
            //    Datasets[type].Data = points;
            //    Datasets[type1].Data = points1;
            //    Datasets[type1].CurveFit();
            //}
            //type = "流量压降上限";
            //if (Datasets[type].IsFitted)
            //{
            //    List<PointF> points = new List<PointF>();
            //    foreach (var x in Datasets[basetype].Data.Select(p => p.X))
            //    {
            //        points.Add(new PointF(x, (float)Datasets[type].Evaluate(x)));
            //    }
            //    Datasets[type].Data = points;
            //}
        }
        public void ShowInGrid(DataGridView dataGridView)
        {
            //dataGridView.Rows.Clear();
            DataTable dt = new DataTable();
            dt.Columns.Add("流量");
            dt.Columns.Add("压降");
            dt.Columns.Add("上限");
            dt.Columns.Add("下限");
            for (int i = 0; i < 流量压降曲线.Data.Count; i++)
            {
                PointF p = 流量压降曲线.Data[i];
                double y1 = 0, y2 = 0;
                //if (流量压降上限.IsFitted) y1 = 流量压降上限.Data[i].Y;
                //if (流量压降下限.IsFitted) y2 = 流量压降下限.Data[i].Y;
                dt.Rows.Add(Math.Round(p.X, 1), Math.Round(p.Y, 2), Math.Round(y1, 2), Math.Round(y2, 2));
                //dataGridView.Rows.Add(Math.Round(p.X,1), Math.Round(p.Y,2), Math.Round(y1,2), Math.Round(y2, 2));
            }
            dataGridView.DataSource = null;
            dataGridView.DataSource = dt;
            dataGridView.Refresh();
        }
        }
    }
    public class Munity : Build