lixiaojun
2024-11-28 9886c494da5adcc9a670e2b7ff2c657a98f27b96
导入优化
已删除10个文件
已修改12个文件
1065 ■■■■ 文件已修改
WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/06-analy/XhsProjectSimualtionAnalySingleResultViewModel.cs 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/06-analy/XhsProjectSimulationAnalySinglePumpViewModel.cs 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/00-core/XhsProjectSimulationBulksetCtrl.Designer.cs 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/00-core/XhsProjectSimulationBulksetCtrl.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/00-core/XhsProjectSimulationBulksetCtrl.resx 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/01-waterbox/XhsProjectSimulationWaterboxBulksetViewModel.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/02-pump/XhsProjectSimulationPumpBulkSetCtrl.Designer.cs 44 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/02-pump/XhsProjectSimulationPumpBulkSetCtrl.cs 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/02-pump/XhsProjectSimulationPumpBulkSetCtrl.resx 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/02-pump/XhsProjectSimulationPumpBulkSetViewModel.cs 121 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs 60 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs 115 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.resx 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.Designer.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.resx 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/14-matching/00-core/HydroMatchingHelper.cs 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.Designer.cs 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.cs 100 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/HStation.WinFrmUI.Xhs.Core/02-project/01-import/00-core/ImportXhsProjectHelper.cs
@@ -251,6 +251,17 @@
            {
                feedBackMsg?.Invoke("产品匹配失败!!!", Color.Red);
            }
            feedBackMsg?.Invoke("正在进行管网修复...", Color.Black);
            if (hydroInfo.Repair(out msg))
            {
                feedBackMsg?.Invoke(msg, Color.Green);
            }
            else
            {
                feedBackMsg?.Invoke(msg, Color.Red);
            }
            feedBackMsg?.Invoke("正在保存水力结构信息...", Color.Black);
            var hydroId = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.Save(hydroInfo);
            if (hydroId < 1)
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/06-analy/XhsProjectSimualtionAnalySingleResultViewModel.cs
ÎļþÒÑɾ³ý
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/06-analy/XhsProjectSimulationAnalySinglePumpViewModel.cs
ÎļþÒÑɾ³ý
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/00-core/XhsProjectSimulationBulksetCtrl.Designer.cs
ÎļþÒÑɾ³ý
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/00-core/XhsProjectSimulationBulksetCtrl.cs
ÎļþÒÑɾ³ý
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/00-core/XhsProjectSimulationBulksetCtrl.resx
ÎļþÒÑɾ³ý
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/01-waterbox/XhsProjectSimulationWaterboxBulksetViewModel.cs
ÎļþÒÑɾ³ý
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/02-pump/XhsProjectSimulationPumpBulkSetCtrl.Designer.cs
ÎļþÒÑɾ³ý
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/02-pump/XhsProjectSimulationPumpBulkSetCtrl.cs
ÎļþÒÑɾ³ý
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/02-pump/XhsProjectSimulationPumpBulkSetCtrl.resx
ÎļþÒÑɾ³ý
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/07-bulkset/02-pump/XhsProjectSimulationPumpBulkSetViewModel.cs
ÎļþÒÑɾ³ý
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.Designer.cs
@@ -40,8 +40,6 @@
            barBtnExportInp = new DevExpress.XtraBars.BarButtonItem();
            barBtnSave = new DevExpress.XtraBars.BarButtonItem();
            barBtnVisualList = new DevExpress.XtraBars.BarButtonItem();
            barBtnMatchingList = new DevExpress.XtraBars.BarButtonItem();
            barBtnUnMatchingList = new DevExpress.XtraBars.BarButtonItem();
            barBtnSetList = new DevExpress.XtraBars.BarButtonItem();
            barBtnSetPumpList = new DevExpress.XtraBars.BarButtonItem();
            barBtnSetValveList = new DevExpress.XtraBars.BarButtonItem();
@@ -52,7 +50,7 @@
            barBtnSetTranslationList = new DevExpress.XtraBars.BarButtonItem();
            barBtnSetExchangerList = new DevExpress.XtraBars.BarButtonItem();
            barBtnSetJunctionList = new DevExpress.XtraBars.BarButtonItem();
            barBtnWorkingParallel = new DevExpress.XtraBars.BarButtonItem();
            barBtnPumpAnaly = new DevExpress.XtraBars.BarButtonItem();
            barBtnSearch = new DevExpress.XtraBars.BarButtonItem();
            barBtnSetGradingList = new DevExpress.XtraBars.BarButtonItem();
            barBtnApplyGradingList = new DevExpress.XtraBars.BarButtonItem();
@@ -86,7 +84,6 @@
            barCkDecorator = new DevExpress.XtraBars.BarCheckItem();
            barBtnAddWorking = new DevExpress.XtraBars.BarButtonItem();
            ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
            pageGroupMatching = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
            pageGroupModel = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
            ribbonPageGroup6 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
            ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
@@ -122,7 +119,7 @@
            // 
            ribbonControl1.ExpandCollapseItem.Id = 0;
            ribbonControl1.ItemPanelStyle = DevExpress.XtraBars.Ribbon.RibbonItemPanelStyle.Classic;
            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnCheck, barBtnCalcu, barBtnExportInp, barBtnSave, barBtnVisualList, barBtnMatchingList, barBtnUnMatchingList, barBtnSetList, barBtnSetPumpList, barBtnSetValveList, barBtnSetPipeList, barBtnSetElbowsList, barBtnSetThreelinkList, barBtnSetFourlinkList, barBtnSetTranslationList, barBtnSetExchangerList, barBtnSetJunctionList, barBtnWorkingParallel, barBtnSearch, barBtnSetGradingList, barBtnApplyGradingList, barBtnRefresh, barBtnSetMark, barBtnSetReservoirList, barBtnSetTankList, barBtnSetWaterboxList, barBtnSetBluntheadList, barBtnSetNozzleList, barBtnSetHydrantList, barBtnSetMeterList, barBtnSetCompressorList, barBtnSetFlowmeterList, barBtnSetPressmeterList, barBtnSetMonitor, barBtnSetMonitorValue, barCkMonitor, barCkMark, barCkFlowEffect, barCkGrading, barCkCalcu, barBtnWorkingLossCurve, barBtnWorkingLossStatistics, barBtnWorkingPower, barBtnWorkingAnaly, barBtnPumpParallel, barBtnRepair, barBtnWorkingEvaluation, barBtnSetVisualVisible, barCkDecorator, barBtnAddWorking });
            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnCheck, barBtnCalcu, barBtnExportInp, barBtnSave, barBtnVisualList, barBtnSetList, barBtnSetPumpList, barBtnSetValveList, barBtnSetPipeList, barBtnSetElbowsList, barBtnSetThreelinkList, barBtnSetFourlinkList, barBtnSetTranslationList, barBtnSetExchangerList, barBtnSetJunctionList, barBtnPumpAnaly, barBtnSearch, barBtnSetGradingList, barBtnApplyGradingList, barBtnRefresh, barBtnSetMark, barBtnSetReservoirList, barBtnSetTankList, barBtnSetWaterboxList, barBtnSetBluntheadList, barBtnSetNozzleList, barBtnSetHydrantList, barBtnSetMeterList, barBtnSetCompressorList, barBtnSetFlowmeterList, barBtnSetPressmeterList, barBtnSetMonitor, barBtnSetMonitorValue, barCkMonitor, barCkMark, barCkFlowEffect, barCkGrading, barCkCalcu, barBtnWorkingLossCurve, barBtnWorkingLossStatistics, barBtnWorkingPower, barBtnWorkingAnaly, barBtnPumpParallel, barBtnRepair, barBtnWorkingEvaluation, barBtnSetVisualVisible, barCkDecorator, barBtnAddWorking });
            ribbonControl1.Location = new Point(0, 0);
            ribbonControl1.MaxItemId = 81;
            ribbonControl1.Name = "ribbonControl1";
@@ -178,24 +175,6 @@
            barBtnVisualList.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnVisualList.ImageOptions.SvgImage");
            barBtnVisualList.Name = "barBtnVisualList";
            barBtnVisualList.ItemClick += barBtnVisualList_ItemClick;
            //
            // barBtnMatchingList
            //
            barBtnMatchingList.Caption = "自动匹配";
            barBtnMatchingList.Id = 10;
            barBtnMatchingList.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnMatchingList.ImageOptions.SvgImage");
            barBtnMatchingList.Name = "barBtnMatchingList";
            barBtnMatchingList.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
            barBtnMatchingList.ItemClick += barBtnMatchingList_ItemClick;
            //
            // barBtnUnMatchingList
            //
            barBtnUnMatchingList.Caption = "未匹配列表";
            barBtnUnMatchingList.Id = 19;
            barBtnUnMatchingList.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnUnMatchingList.ImageOptions.SvgImage");
            barBtnUnMatchingList.Name = "barBtnUnMatchingList";
            barBtnUnMatchingList.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
            barBtnUnMatchingList.ItemClick += barBtnUnMatchingList_ItemClick;
            // 
            // barBtnSetList
            // 
@@ -269,14 +248,15 @@
            barBtnSetJunctionList.Id = 30;
            barBtnSetJunctionList.Name = "barBtnSetJunctionList";
            // 
            // barBtnWorkingParallel
            // barBtnPumpAnaly
            // 
            barBtnWorkingParallel.Caption = "并联分析";
            barBtnWorkingParallel.Id = 31;
            barBtnWorkingParallel.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnWorkingParallel.ImageOptions.SvgImage");
            barBtnWorkingParallel.Name = "barBtnWorkingParallel";
            barBtnWorkingParallel.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
            barBtnWorkingParallel.ItemClick += barBtnAnaly_ItemClick;
            barBtnPumpAnaly.Caption = "水泵分析";
            barBtnPumpAnaly.Id = 31;
            barBtnPumpAnaly.ImageOptions.Image = Xhs.Core.Properties.Resources.pump_run_32;
            barBtnPumpAnaly.ImageOptions.LargeImage = Xhs.Core.Properties.Resources.pump_run_32;
            barBtnPumpAnaly.Name = "barBtnPumpAnaly";
            barBtnPumpAnaly.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
            barBtnPumpAnaly.ItemClick += barBtnAnaly_ItemClick;
            // 
            // barBtnSearch
            // 
@@ -318,7 +298,6 @@
            barBtnSetMark.Id = 40;
            barBtnSetMark.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnSetMark.ImageOptions.SvgImage");
            barBtnSetMark.Name = "barBtnSetMark";
            barBtnSetMark.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
            barBtnSetMark.ItemClick += barBtnSetMark_ItemClick;
            // 
            // barBtnSetReservoirList
@@ -396,7 +375,6 @@
            barBtnSetMonitor.Id = 56;
            barBtnSetMonitor.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnSetMonitor.ImageOptions.SvgImage");
            barBtnSetMonitor.Name = "barBtnSetMonitor";
            barBtnSetMonitor.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
            barBtnSetMonitor.ItemClick += barBtnSetMonitor_ItemClick;
            // 
            // barBtnSetMonitorValue
@@ -461,7 +439,7 @@
            // 
            barBtnWorkingLossStatistics.Caption = "损失统计";
            barBtnWorkingLossStatistics.Id = 70;
            barBtnWorkingLossStatistics.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnWorkingLossScale.ImageOptions.SvgImage");
            barBtnWorkingLossStatistics.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnWorkingLossStatistics.ImageOptions.SvgImage");
            barBtnWorkingLossStatistics.Name = "barBtnWorkingLossStatistics";
            barBtnWorkingLossStatistics.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
            barBtnWorkingLossStatistics.ItemClick += barBtnWorkingLossStatistics_ItemClick;
@@ -544,16 +522,9 @@
            // 
            // ribbonPage1
            // 
            ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { pageGroupMatching, pageGroupModel, ribbonPageGroup6, ribbonPageGroup1, ribbonPageGroup7, ribbonPageGroup5, ribbonPageGroup2, ribbonPageGroup9, ribbonPageGroup3 });
            ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { pageGroupModel, ribbonPageGroup6, ribbonPageGroup1, ribbonPageGroup7, ribbonPageGroup5, ribbonPageGroup2, ribbonPageGroup9, ribbonPageGroup3 });
            ribbonPage1.Name = "ribbonPage1";
            ribbonPage1.Text = "ribbonPage1";
            //
            // pageGroupMatching
            //
            pageGroupMatching.ItemLinks.Add(barBtnMatchingList);
            pageGroupMatching.ItemLinks.Add(barBtnUnMatchingList);
            pageGroupMatching.Name = "pageGroupMatching";
            pageGroupMatching.Text = "匹配";
            // 
            // pageGroupModel
            // 
@@ -609,7 +580,7 @@
            // ribbonPageGroup9
            // 
            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingEvaluation);
            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingParallel);
            ribbonPageGroup9.ItemLinks.Add(barBtnPumpAnaly);
            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingPower);
            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingLossCurve);
            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingLossStatistics);
@@ -770,14 +741,12 @@
        private DevExpress.XtraBars.BarButtonItem barBtnCheck;
        private DevExpress.XtraBars.BarButtonItem barBtnCalcu;
        private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage1;
        private DevExpress.XtraBars.Ribbon.RibbonPageGroup pageGroupMatching;
        private DevExpress.XtraBars.BarButtonItem barBtnExportInp;
        private DevExpress.XtraBars.BarButtonItem barBtnSave;
        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup2;
        private DevExpress.XtraBars.BarButtonItem barBtnVisualList;
        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup4;
        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup3;
        private DevExpress.XtraBars.BarButtonItem barBtnMatchingList;
        private DevExpress.XtraBars.Navigation.TabPane tabPane1;
        private DevExpress.XtraBars.Navigation.TabNavigationPage tabPageBimface;
        private DevExpress.XtraBars.Navigation.TabNavigationPage tabPageQ3d;
@@ -796,7 +765,7 @@
        private DevExpress.XtraBars.BarButtonItem barBtnSetTranslationList;
        private DevExpress.XtraBars.BarButtonItem barBtnSetExchangerList;
        private DevExpress.XtraBars.BarButtonItem barBtnSetJunctionList;
        private DevExpress.XtraBars.BarButtonItem barBtnWorkingParallel;
        private DevExpress.XtraBars.BarButtonItem barBtnPumpAnaly;
        private DevExpress.XtraBars.BarButtonItem barBtnSearch;
        private DevExpress.XtraBars.Ribbon.RibbonPageGroup pageGroupModel;
        private DevExpress.XtraBars.Docking.DockPanel docPnlBottom;
@@ -816,7 +785,6 @@
        private DevExpress.XtraBars.BarButtonItem barBtnSetCompressorList;
        private DevExpress.XtraBars.BarButtonItem barBtnSetFlowmeterList;
        private DevExpress.XtraBars.BarButtonItem barBtnSetPressmeterList;
        public DevExpress.XtraBars.BarButtonItem barBtnUnMatchingList;
        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup6;
        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup7;
        private DevExpress.XtraBars.BarButtonItem barBtnSetMonitor;
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -583,121 +583,6 @@
        #endregion
        #region è‡ªåŠ¨åŒ¹é…
        //获取匹配列表控件
        private XhsProjectSimulationMatchingListCtrl GetMatchingListCtrl()
        {
            if (_matchingListCtrl == null)
            {
                _matchingListCtrl = new XhsProjectSimulationMatchingListCtrl();
                _matchingListCtrl.Dock = DockStyle.Fill;
                _matchingListCtrl.HydroClickEvent += async (code) =>
                {
                    if (_hydroInfo == null)
                    {
                        return;
                    }
                    var allParterList = _hydroInfo.GetAllVisuals();
                    _visual = allParterList?.Find(x => x.Code == code);
                    var elementIds = new List<string>();
                    if (_visual != null)
                    {
                        elementIds.Add(_visual.Code);
                    }
                    await _bimfaceCtrl?.ZoomAndSelectComponents(elementIds);
                    //ShowSelectedProperty();
                };
                _matchingListCtrl.ApplyMatchingEvent += (output) =>
                {
                    if (_hydroInfo == null)
                    {
                        return false;
                    }
                    return AssetsMatchingParasHelper.Apply(_hydroInfo, output);
                };
            }
            return _matchingListCtrl;
        }
        //匹配列表控件
        private XhsProjectSimulationMatchingListCtrl _matchingListCtrl = null;
        //自动匹配
        private void barBtnMatchingList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (_hydroInfo == null)
            {
                return;
            }
            this.controlContainerBottom.Controls.Clear();
            var matchingListCtrl = GetMatchingListCtrl();
            var input = AssetsMatchingParasHelper.Create(_hydroInfo, null);
            matchingListCtrl.SetBindingData(input);
            this.controlContainerBottom.Controls.Add(matchingListCtrl);
            this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible;
            this.docPnlBottom.Text = "匹配列表";
            this.docPnlBottom.Height = 350;
        }
        #endregion
        #region æœªåŒ¹åˆ—表
        //获取未匹配列表控件
        private XhsProjectSimulationUnMatchingListCtrl GetUnMatchingListCtrl()
        {
            if (_unMatchingListCtrl == null)
            {
                _unMatchingListCtrl = new XhsProjectSimulationUnMatchingListCtrl();
                _unMatchingListCtrl.Dock = DockStyle.Fill;
                _unMatchingListCtrl.HydroClickEvent += async (parter) =>//行点击
                {
                    if (parter == null)
                    {
                        return;
                    }
                    if (_hydroInfo == null)
                    {
                        return;
                    }
                    var allParterList = _hydroInfo.GetAllVisuals();
                    _visual = allParterList?.Find(x => x.Code == parter.Code);
                    var elementIds = new List<string>() { parter.Code };
                    await _bimfaceCtrl?.ZoomAndSelectComponents(elementIds);
                    //ShowSelectedProperty();
                };
                _unMatchingListCtrl.ViewModelEvent += async (parters) =>//查看模型
                {
                    var codes = parters?.Select(x => x.Code).Distinct().ToList();
                    await _bimfaceCtrl?.ZoomAndSelectComponents(codes);
                    _visual = null;
                    //ShowSelectedProperty();
                };
            }
            return _unMatchingListCtrl;
        }
        private XhsProjectSimulationUnMatchingListCtrl _unMatchingListCtrl = null;//未匹配列表
        //未匹配列表
        private void barBtnUnMatchingList_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            if (_hydroInfo == null)
            {
                return;
            }
            this.controlContainerBottom.Controls.Clear();
            var unMatchingListCtrl = GetUnMatchingListCtrl();
            unMatchingListCtrl.SetBindingData(_hydroInfo);
            this.controlContainerBottom.Controls.Add(unMatchingListCtrl);
            this.docPnlBottom.Visibility = DevExpress.XtraBars.Docking.DockVisibility.Visible;
            this.docPnlBottom.Text = "未匹配列表";
            this.docPnlBottom.Height = 350;
        }
        #endregion
        #region ä¸€é”®æ˜¾éš
        //设置装饰件可见性
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.resx
@@ -249,51 +249,6 @@
        MjJ6IiBjbGFzcz0iQmx1ZSIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
</value>
  </data>
  <data name="barBtnMatchingList.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAG0DAAAC77u/
        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
        Y2U9InByZXNlcnZlIiBpZD0iTWF0aF9feDI2X19UcmlnIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6
        bmV3IDAgMCAzMiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkuR3JlZW57ZmlsbDojMDM5
        QzIzO30KPC9zdHlsZT4NCiAgPHBhdGggZD0iTTE3LjgsMTZoLTcuNWMwLjEtMSwwLjUtMS45LDEtMi42
        QzEyLDEyLjQsMTIuOSwxMiwxNCwxMmMxLjIsMCwyLjIsMC40LDIuOCwxLjNDMTcuMywxNCwxNy43LDE0
        LjksMTcuOCwxNnogICBNMTQsMjJjMS4yLDAsMi4xLTAuNCwyLjgtMS4zYzAuNS0wLjcsMC45LTEuNiwx
        LTIuN2gtNy41YzAuMSwxLjEsMC40LDEuOSwxLDIuN0MxMS45LDIxLjYsMTIuOCwyMiwxNCwyMnogTTQs
        NWMwLDAuNiwwLjQsMSwxLDFoMjEgIHYyM2MwLDAuNi0wLjQsMS0xLDFIM2MtMC42LDAtMS0wLjQtMS0x
        VjVjMC0xLjcsMS4zLTMsMy0zaDIwYzAuNiwwLDEsMC40LDEsMXYxSDVDNC40LDQsNCw0LjQsNCw1eiBN
        OCwxNy4yYzAsMiwwLjUsMy43LDEuNiw0LjkgIGMxLjEsMS4zLDIuNSwxLjksNC4zLDEuOWMxLjgsMCwz
        LjMtMC42LDQuNC0xLjljMS4xLTEuMywxLjYtMywxLjYtNS4yYzAtMi0wLjUtMy43LTEuNi00LjljLTEu
        MS0xLjMtMi41LTEuOS00LjItMS45ICBjLTEuOSwwLTMuNCwwLjYtNC41LDEuOUM4LjYsMTMuMiw4LDE1
        LDgsMTcuMnoiIGNsYXNzPSJHcmVlbiIgLz4NCjwvc3ZnPgs=
</value>
  </data>
  <data name="barBtnUnMatchingList.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKQDAAAC77u/
        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
        Y2U9InByZXNlcnZlIiBpZD0iVW5ncm91cCIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5S
        ZWR7ZmlsbDojRDExQzFDO30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLnN0MHtvcGFjaXR5OjAuNzU7
        fQo8L3N0eWxlPg0KICA8ZyBjbGFzcz0ic3QwIj4NCiAgICA8cGF0aCBkPSJNMTQsNEg4djJINlYyaDhW
        NHogTTgsMjZ2LTJINnYydjJoMmg2di0ySDh6IiBjbGFzcz0iQmxhY2siIC8+DQogIDwvZz4NCiAgPHBh
        dGggZD0iTTE2LDJ2OHYydjZ2MnY4aDE2di04di0ydi02di0yVjJIMTZ6IE0zMCwyNkgxOHYtNmgxMlYy
        NnogTTMwLDE4SDE4di02aDEyVjE4eiBNMTgsMTBWNGgxMnY2SDE4eiIgY2xhc3M9IkJsYWNrIiAvPg0K
        ICA8cGF0aCBkPSJNMjgsOGgtOFY2aDhWOHogTTI4LDE0aC04djJoOFYxNHogTTI4LDIyaC04djJoOFYy
        MnoiIGNsYXNzPSJCbHVlIiAvPg0KICA8cGF0aCBkPSJNNyw4Yy0zLjksMC03LDMuMS03LDdjMCwzLjks
        My4xLDcsNyw3czctMy4xLDctN0MxNCwxMS4xLDEwLjksOCw3LDh6IE03LDEwYzEsMCwyLDAuMywyLjgs
        MC44bC02LjksNi45ICBDMi4zLDE3LDIsMTYsMiwxNUMyLDEyLjIsNC4yLDEwLDcsMTB6IE03LDIwYy0x
        LDAtMi0wLjMtMi44LTAuOGw2LjktNi45QzExLjcsMTMsMTIsMTQsMTIsMTVDMTIsMTcuOCw5LjgsMjAs
        NywyMHoiIGNsYXNzPSJSZWQiIC8+DQo8L3N2Zz4L
</value>
  </data>
  <data name="barBtnSetList.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
@@ -319,25 +274,6 @@
        LjMsMS44LTAuNiwyLjUtMWwyLjUsMS44bDEuOS0xLjlMMjQsMTcuNCAgIGMwLjQtMC43LDAuOC0xLjYs
        MS4xLTIuNUwyOCwxNC40eiBNMTcsMTZjLTEuNywwLTMtMS4zLTMtM3MxLjMtMywzLTNzMywxLjMsMywz
        UzE4LjcsMTYsMTcsMTZ6IiBjbGFzcz0iQmx1ZSIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
</value>
  </data>
  <data name="barBtnWorkingParallel.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAMYCAAAC77u/
        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
        Y2U9InByZXNlcnZlIiBpZD0iQ3JlYXRlX0Z1bGxfU3RhY2tlZF9MaW5lX0NoYXJ0X05vX01hcmtlcnMi
        IHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyIj4NCiAgPHN0eWxlIHR5cGU9InRl
        eHQvY3NzIj4KCS5CbHVle2ZpbGw6IzExNzdENzt9CgkuWWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuUmVk
        e2ZpbGw6I0QxMUMxQzt9Cjwvc3R5bGU+DQogIDxyZWN0IHg9IjIiIHk9IjQiIHdpZHRoPSIyNiIgaGVp
        Z2h0PSIyIiBjbGFzcz0iUmVkIiAvPg0KICA8cG9seWdvbiBwb2ludHM9IjEuNywxMy45IDEuNywxMy45
        IDIuMywxMiAxNCwxNS45IDI3LjcsMTIgMjguMywxMy45IDE0LDE4IDEuNywxMy45ICIgY2xhc3M9Illl
        bGxvdyIgLz4NCiAgPHBhdGggZD0iTTIuNCwyOS45TDIuNCwyOS45TDIuNCwyOS45TDIuNCwyOS45TDIu
        NCwyOS45eiBNMS42LDI4LjFMMTMuOSwyMmwxNC40LDQuMUwyNy43LDI4bC0xMy42LTMuOUwyLjQsMjku
        OSAgTDEuNiwyOC4xTDEuNiwyOC4xeiIgY2xhc3M9IkJsdWUiIC8+DQo8L3N2Zz4L
</value>
  </data>
  <data name="barBtnSearch.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
@@ -525,7 +461,7 @@
        IGNsYXNzPSJCbHVlIiAvPg0KICA8L2c+DQo8L3N2Zz4L
</value>
  </data>
  <data name="barBtnWorkingLossScale.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
  <data name="barBtnWorkingLossStatistics.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.Designer.cs
@@ -207,7 +207,7 @@
            // 
            barBtnWorkingLossStatistics.Caption = "损失比例";
            barBtnWorkingLossStatistics.Id = 70;
            barBtnWorkingLossStatistics.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnWorkingLossScale.ImageOptions.SvgImage");
            barBtnWorkingLossStatistics.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnWorkingLossStatistics.ImageOptions.SvgImage");
            barBtnWorkingLossStatistics.Name = "barBtnWorkingLossStatistics";
            barBtnWorkingLossStatistics.RibbonStyle = DevExpress.XtraBars.Ribbon.RibbonItemStyles.SmallWithText;
            barBtnWorkingLossStatistics.ItemClick += barBtnWorkingLossStatistics_ItemClick;
@@ -297,8 +297,8 @@
            // 
            // ribbonPageGroup9
            // 
            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingParallel);
            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingEvaluation);
            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingParallel);
            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingPower);
            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingLossCurve);
            ribbonPageGroup9.ItemLinks.Add(barBtnWorkingLossStatistics);
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.resx
@@ -273,7 +273,7 @@
        IGNsYXNzPSJCbHVlIiAvPg0KICA8L2c+DQo8L3N2Zz4L
</value>
  </data>
  <data name="barBtnWorkingLossScale.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
  <data name="barBtnWorkingLossStatistics.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
@@ -120,9 +120,6 @@
  </ItemGroup>
  <ItemGroup>
    <Folder Include="03-simulation\06-simulation\07-bulkset\05-nozzle\" />
    <Folder Include="03-simulation\06-simulation\07-bulkset\03-valve\" />
    <Folder Include="03-simulation\06-simulation\07-bulkset\04-pipe\" />
    <Folder Include="map\gaode\css\" />
  </ItemGroup>
WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user
@@ -205,12 +205,6 @@
    <Compile Update="03-simulation\06-simulation\04-unmatching\06-fourlink\XhsProjectSimulationFourlinkUnMatchingListCtrl.cs">
      <SubType>UserControl</SubType>
    </Compile>
    <Compile Update="03-simulation\06-simulation\07-bulkset\00-core\XhsProjectSimulationBulksetCtrl.cs">
      <SubType>UserControl</SubType>
    </Compile>
    <Compile Update="03-simulation\06-simulation\07-bulkset\02-pump\XhsProjectSimulationPumpBulkSetCtrl.cs">
      <SubType>UserControl</SubType>
    </Compile>
    <Compile Update="03-simulation\06-simulation\XhsProjectSimulationCorePage.cs">
      <SubType>UserControl</SubType>
    </Compile>
WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/05-extensions/HydroModelInfoExtensions.cs
@@ -211,6 +211,63 @@
            return hydroCalcuResult;
        }
        /// <summary>
        /// ä¿®å¤
        /// </summary>
        public static bool Repair(this Yw.Model.HydroModelInfo hydroInfo, out string msg)
        {
            msg = string.Empty;
            if (hydroInfo == null)
            {
                return false;
            }
            var checkResult = hydroInfo.Check();
            if (!checkResult.Succeed)
            {
                msg = "检查失败导致无法进行试算,停止管网修复!";
                return false;
            }
            var calcuResult = hydroInfo.Calcu(Yw.EPAnet.CalcuMode.Simple);
            if (!calcuResult.Succeed)
            {
                msg = "试算失败,停止管网修复!";
                return false;
            }
            var allLinkList = hydroInfo.GetAllLinks();
            if (allLinkList != null && allLinkList.Count < 1)
            {
                msg = "模型中未包含管段信息,停止管网修复!";
                return false;
            }
            int count = 0;
            foreach (var link in allLinkList)
            {
                var calcuLink = calcuResult.LinkList?.Find(x => x.Code == link.Code);
                if (calcuLink == null)
                {
                    continue;
                }
                if (!calcuLink.CalcuFlow.HasValue)
                {
                    continue;
                }
                if (calcuLink.CalcuFlow.Value < 0)
                {
                    var tempCode = link.StartCode;
                    link.StartCode = link.EndCode;
                    link.EndCode = tempCode;
                    count++;
                }
            }
            msg = $"修复完成,共修复管段({count})个!";
            return true;
        }
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/14-matching/00-core/HydroMatchingHelper.cs
@@ -13,142 +13,126 @@
        /// <summary>
        /// åˆ›å»ºè‡ªåŠ¨åŒ¹é…ViewModel
        /// </summary>
        public static HydroMatchingViewModel Create(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuVisualResultList = null)
        public static HydroMatchingViewModel Create(Yw.Model.HydroModelInfo hydroInfo, List<HydroCalcuVisualResult> allCalcuResultVisualList = null)
        {
            #region åˆå§‹åŒ–å­—å…¸
            Dictionary<string, HydroCalcuVisualResult> dict = null;
            if (allCalcuVisualResultList != null && allCalcuVisualResultList.Count > 0)
            if (hydroInfo == null)
            {
                dict = new Dictionary<string, HydroCalcuVisualResult>();
                allCalcuVisualResultList.ForEach(x => dict.Add(x.Code, x));
            }
            #endregion
            #region èŽ·å–è®¡ç®—ç»“æžœæ–¹æ³•
            HydroCalcuVisualResult getCalcuVisualResult(string code)
            {
                if (dict == null)
                {
                    return default;
                }
                if (dict.ContainsKey(code))
                {
                    return dict[code];
                }
                return default;
            }
            var allCalcuResultVisualDict = allCalcuResultVisualList?.ToDictionary(x => x.Code);
            return Create(hydroInfo, allCalcuResultVisualDict);
        }
            #endregion
        /// <summary>
        /// åˆ›å»º
        /// </summary>
        public static HydroMatchingViewModel Create(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict = null)
        {
            if (hydroInfo == null)
            {
                return default;
            }
            var vm = new HydroMatchingViewModel();
            #region æ°´æ± 
            var tanks = hydroInfo.GetAllTanks();
            vm.Tanks = tanks?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuNodeResult)).ToList();
            vm.Tanks = tanks?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuNodeResult)).ToList();
            #endregion
            #region é—·å¤´
            vm.Bluntheads = hydroInfo.Bluntheads?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuNodeResult)).ToList();
            vm.Bluntheads = hydroInfo.Bluntheads?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuNodeResult)).ToList();
            #endregion
            #region å¼¯å¤´
            vm.Elbows = hydroInfo.Elbows?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuNodeResult)).ToList();
            vm.Elbows = hydroInfo.Elbows?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuNodeResult)).ToList();
            #endregion
            #region ä¸‰é€š
            vm.Threelinks = hydroInfo.Threelinks?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuNodeResult)).ToList();
            vm.Threelinks = hydroInfo.Threelinks?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuNodeResult)).ToList();
            #endregion
            #region å››é€š
            vm.Fourlinks = hydroInfo.Fourlinks?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuNodeResult)).ToList();
            vm.Fourlinks = hydroInfo.Fourlinks?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuNodeResult)).ToList();
            #endregion
            #region å–·å˜´
            vm.Nozzles = hydroInfo.Nozzles?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuNodeResult)).ToList();
            vm.Nozzles = hydroInfo.Nozzles?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuNodeResult)).ToList();
            #endregion
            #region æ¶ˆç«æ “
            vm.Hydrants = hydroInfo.Hydrants?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuNodeResult)).ToList();
            vm.Hydrants = hydroInfo.Hydrants?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuNodeResult)).ToList();
            #endregion
            #region æ°´è¡¨
            vm.Meters = hydroInfo.Meters?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuNodeResult)).ToList();
            vm.Meters = hydroInfo.Meters?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuNodeResult)).ToList();
            #endregion
            #region æµé‡è®¡
            vm.Flowmeters = hydroInfo.Flowmeters?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuFlowmeterResult)).ToList();
            vm.Flowmeters = hydroInfo.Flowmeters?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuFlowmeterResult)).ToList();
            #endregion
            #region åŽ‹åŠ›è¡¨
            vm.Pressmeters = hydroInfo.Pressmeters?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuPressmeterResult)).ToList();
            vm.Pressmeters = hydroInfo.Pressmeters?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuPressmeterResult)).ToList();
            #endregion
            #region ç®¡é“
            vm.Pipes = hydroInfo.Pipes?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuLinkResult)).ToList();
            vm.Pipes = hydroInfo.Pipes?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuLinkResult)).ToList();
            #endregion
            #region è¿‡æ¸¡ä»¶
            vm.Translations = hydroInfo.Translations?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuLinkResult)).ToList();
            vm.Translations = hydroInfo.Translations?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuLinkResult)).ToList();
            #endregion
            #region æ°´æ³µ
            vm.Pumps = hydroInfo.Pumps?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuPumpResult)).ToList();
            vm.Pumps = hydroInfo.Pumps?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuPumpResult)).ToList();
            #endregion
            #region é˜€é—¨
            vm.Valves = hydroInfo.Valves?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuLinkResult)).ToList();
            vm.Valves = hydroInfo.Valves?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuLinkResult)).ToList();
            #endregion
            #region æ¢çƒ­å™¨
            vm.Exchangers = hydroInfo.Exchangers?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuLinkResult)).ToList();
            vm.Exchangers = hydroInfo.Exchangers?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuLinkResult)).ToList();
            #endregion
            #region åŽ‹ç¼©æœº
            vm.Compressors = hydroInfo.Compressors?.Select(x => Create(x, hydroInfo, getCalcuVisualResult(x.Code) as HydroCalcuLinkResult)).ToList();
            vm.Compressors = hydroInfo.Compressors?.Select(x => Create(x, hydroInfo, allCalcuResultVisualDict?.GetValue(x.Code) as HydroCalcuLinkResult)).ToList();
            #endregion
            return vm;
        }
        public static HydroMatchingViewModel Create(List<HydroVisualViewModel> allVisualList)
        {
            return default;
        }
        #region æ°´æ± 
WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.Designer.cs
@@ -68,11 +68,13 @@
            xyDiagram1.AxisX.VisibleInPanesSerializable = "-1";
            xyDiagram1.AxisX.WholeRange.EndSideMargin = 0D;
            xyDiagram1.AxisX.WholeRange.StartSideMargin = 0D;
            xyDiagram1.AxisY.Color = Color.FromArgb(255, 192, 0);
            xyDiagram1.AxisY.GridLines.Visible = false;
            xyDiagram1.AxisY.MinorCount = 1;
            xyDiagram1.AxisY.Tickmarks.MinorVisible = false;
            xyDiagram1.AxisY.VisibleInPanesSerializable = "-1";
            secondaryAxisy1.AxisID = 0;
            secondaryAxisy1.Color = Color.FromArgb(79, 129, 189);
            secondaryAxisy1.MinorCount = 1;
            secondaryAxisy1.Name = "Secondary AxisY 1";
            secondaryAxisy1.Tickmarks.MinorVisible = false;
WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.cs
@@ -47,38 +47,69 @@
            }
            var diagram = this.chartControl1.Diagram as XYDiagram;
            #region Xè½´
            var allDistances = allNodeLossList.Select(x => x.Distance).Distinct().ToList();
            var distanceMax = allDistances.Max();
            diagram.AxisX.Tickmarks.MinorVisible = false;
            diagram.AxisX.WholeRange.SideMarginsValue = 0;
            if (distanceMax <= 10)
            {
                var maxValue = Math.Ceiling(distanceMax);
                diagram.AxisX.WholeRange.MinValue = 0;
                diagram.AxisX.WholeRange.MaxValue = 10;
                diagram.AxisX.WholeRange.MaxValue = maxValue;
                diagram.AxisX.NumericScaleOptions.GridSpacing = 1;
            }
            else if (distanceMax <= 50)
            {
                var maxValue = Math.Ceiling(distanceMax / 10);
                diagram.AxisX.WholeRange.MinValue = 0;
                diagram.AxisX.WholeRange.MaxValue = maxValue * 10;
                diagram.AxisX.NumericScaleOptions.GridSpacing = 5;
            }
            else if (distanceMax <= 100)
            {
                var maxValue = Math.Ceiling(distanceMax / 10);
                diagram.AxisX.WholeRange.MinValue = 0;
                diagram.AxisX.WholeRange.MaxValue = 100;
                diagram.AxisX.WholeRange.MaxValue = maxValue * 10;
                diagram.AxisX.NumericScaleOptions.GridSpacing = 10;
            }
            else if (distanceMax <= 1000)
            else if (distanceMax <= 500)
            {
                var maxValue = Math.Ceiling(distanceMax / 100);
                diagram.AxisX.WholeRange.MinValue = 0;
                diagram.AxisX.WholeRange.MaxValue = 1000;
                diagram.AxisX.WholeRange.MaxValue = maxValue * 100;
                diagram.AxisX.NumericScaleOptions.GridSpacing = 50;
            }
            else if (distanceMax <= 3000)
            {
                var maxValue = Math.Ceiling(distanceMax / 100);
                diagram.AxisX.WholeRange.MinValue = 0;
                diagram.AxisX.WholeRange.MaxValue = maxValue * 100;
                diagram.AxisX.NumericScaleOptions.GridSpacing = 100;
            }
            else if (distanceMax <= 5000)
            {
                var maxValue = Math.Ceiling(distanceMax / 1000);
                diagram.AxisX.WholeRange.MinValue = 0;
                diagram.AxisX.WholeRange.MaxValue = maxValue * 1000;
                diagram.AxisX.NumericScaleOptions.GridSpacing = 200;
            }
            else if (distanceMax <= 10000)
            {
                var maxValue = Math.Ceiling(distanceMax / 1000);
                diagram.AxisX.WholeRange.MinValue = 0;
                diagram.AxisX.WholeRange.MaxValue = 10000;
                diagram.AxisX.WholeRange.MaxValue = maxValue * 1000;
                diagram.AxisX.NumericScaleOptions.GridSpacing = 1000;
            }
            else
            {
            }
            #endregion
            #region æ€»æ°´å¤´yè½´
            var allHeads = allNodeLossList.Select(x => Math.Max(x.StartHead, x.EndHead)).ToList();
            var headMax = allHeads.Max();
@@ -91,61 +122,76 @@
                diagram.AxisY.NumericScaleOptions.GridSpacing = 1;
                diagram.AxisY.VisualRange.SetMinMaxValues(0, 10);
            }
            else if (distanceMax <= 100)
            else if (headMax <= 100)
            {
                var maxValue = Math.Ceiling(headMax / 10);
                diagram.AxisY.WholeRange.MinValue = 0;
                diagram.AxisY.WholeRange.MaxValue = 100;
                diagram.AxisY.NumericScaleOptions.GridSpacing = 10;
                diagram.AxisY.VisualRange.SetMinMaxValues(0, 100);
                diagram.AxisY.WholeRange.MaxValue = maxValue * 10;
                diagram.AxisY.NumericScaleOptions.GridSpacing = 5;
                diagram.AxisY.VisualRange.SetMinMaxValues(0, maxValue * 10);
            }
            else if (distanceMax <= 1000)
            else if (headMax <= 3000)
            {
                var maxValue = Math.Ceiling(headMax / 100);
                diagram.AxisY.WholeRange.MinValue = 0;
                diagram.AxisY.WholeRange.MaxValue = 1000;
                diagram.AxisY.WholeRange.MaxValue = maxValue * 100;
                diagram.AxisY.NumericScaleOptions.GridSpacing = 50;
                diagram.AxisY.VisualRange.SetMinMaxValues(0, maxValue * 100);
            }
            else if (headMax <= 6000)
            {
                var maxValue = Math.Ceiling(headMax / 1000);
                diagram.AxisY.WholeRange.MinValue = 0;
                diagram.AxisY.WholeRange.MaxValue = maxValue * 1000;
                diagram.AxisY.NumericScaleOptions.GridSpacing = 100;
                diagram.AxisY.VisualRange.SetMinMaxValues(0, 1000);
            }
            else if (distanceMax <= 10000)
            {
                diagram.AxisY.WholeRange.MinValue = 0;
                diagram.AxisY.WholeRange.MaxValue = 10000;
                diagram.AxisY.NumericScaleOptions.GridSpacing = 1000;
                diagram.AxisY.VisualRange.SetMinMaxValues(0, 10000);
                diagram.AxisY.VisualRange.SetMinMaxValues(0, maxValue * 1000);
            }
            else
            {
            }
            #endregion
            #region æ ‡é«˜yè½´
            var allElevs = allNodeLossList.Select(x => x.Elev).ToList();
            var elevMax = allElevs.Max();
            diagram.SecondaryAxesY[0].Tickmarks.MinorVisible = false;
            diagram.SecondaryAxesY[0].WholeRange.SideMarginsValue = 0;
            if (elevMax <= 30)
            if (elevMax <= 10)
            {
                diagram.SecondaryAxesY[0].WholeRange.MinValue = 0;
                diagram.SecondaryAxesY[0].WholeRange.MaxValue = 100;
                diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 10;
                diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 100);
                diagram.SecondaryAxesY[0].WholeRange.MaxValue = 50;
                diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 5;
                diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 50);
            }
            else if (distanceMax <= 300)
            else if (elevMax <= 100)
            {
                diagram.SecondaryAxesY[0].WholeRange.MinValue = 0;
                diagram.SecondaryAxesY[0].WholeRange.MaxValue = 1000;
                diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 100;
                diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 50;
                diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 1000);
            }
            else if (distanceMax <= 3000)
            else if (distanceMax <= 500)
            {
                diagram.SecondaryAxesY[0].WholeRange.MinValue = 0;
                diagram.SecondaryAxesY[0].WholeRange.MaxValue = 5000;
                diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 100;
                diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 5000);
            }
            else if (distanceMax <= 1000)
            {
                diagram.SecondaryAxesY[0].WholeRange.MinValue = 0;
                diagram.SecondaryAxesY[0].WholeRange.MaxValue = 10000;
                diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 1000;
                diagram.SecondaryAxesY[0].NumericScaleOptions.GridSpacing = 500;
                diagram.SecondaryAxesY[0].VisualRange.SetMinMaxValues(0, 10000);
            }
            else
            {
            }
            #endregion
        }