lixiaojun
2024-08-14 90c6ddbdb982278a19753dd12cc25ac8c7776eab
增加q3d展示
已修改5个文件
已添加7个文件
930 ■■■■■ 文件已修改
WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/HydroQ3dTransferHelper.cs 375 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/02-model/HydroModelMgrPage.Designer.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/02-model/HydroModelMgrPage.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/02-model/HydroModelMgrPage.resx 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/00-core/HydroParterListDlg.Designer.cs 60 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/00-core/HydroParterListDlg.cs 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/00-core/HydroParterListDlg.resx 120 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-q3d/HydroQ3dViewPage.Designer.cs 63 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-q3d/HydroQ3dViewPage.cs 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-q3d/HydroQ3dViewPage.resx 145 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
WinFrmUI/Yw.WinFrmUI.Hydro.Core/00-core/HydroQ3dTransferHelper.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,375 @@
using Yw.WinFrmUI.Q3d;
namespace Yw.WinFrmUI
{
    /// <summary>
    /// Q3d转换辅助类
    /// </summary>
    public static class HydroQ3dTransferHelper
    {
        /// <summary>
        ///
        /// </summary>
        public static NetworkViewModel ToNetworkViewModel(this Yw.Model.HydroModelInfo rhs)
        {
            if (rhs == null)
            {
                return default;
            }
            var vm = new NetworkViewModel();
            if (rhs.Junctions != null && rhs.Junctions.Count > 0)
            {
                foreach (var junction in rhs.Junctions)
                {
                    var junctionViewModel = new JunctionViewModel();
                    junctionViewModel.ID = junction.Code;
                    junctionViewModel.Name = junction.Name;
                    junctionViewModel.Position3D = new PointF3D((float)junction.Position3d.X, (float)junction.Position3d.Y, (float)junction.Position3d.Z);
                    vm.Nodes.Add(junctionViewModel);
                }
            }
            if (rhs.Nozzles != null && rhs.Nozzles.Count > 0)
            {
                foreach (var nozzle in rhs.Nozzles)
                {
                    var nozzleViewModel = new NozzleViewModel();
                    nozzleViewModel.ID = nozzle.Code;
                    nozzleViewModel.Name = nozzle.Name;
                    nozzleViewModel.Position3D = new PointF3D((float)nozzle.Position3d.X, (float)nozzle.Position3d.Y, (float)nozzle.Position3d.Z);
                    vm.Nodes.Add(nozzleViewModel);
                }
            }
            if (rhs.Hydrants != null && rhs.Hydrants.Count > 0)
            {
                foreach (var hydrant in rhs.Hydrants)
                {
                    var hydrantViewModel = new JunctionViewModel();
                    hydrantViewModel.ID = hydrant.Code;
                    hydrantViewModel.Name = hydrant.Name;
                    hydrantViewModel.Position3D = new PointF3D((float)hydrant.Position3d.X, (float)hydrant.Position3d.Y, (float)hydrant.Position3d.Z);
                    vm.Nodes.Add(hydrantViewModel);
                }
            }
            if (rhs.Elbows != null && rhs.Elbows.Count > 0)
            {
                foreach (var elbow in rhs.Elbows)
                {
                    var elbowViewModel = new JunctionViewModel();
                    elbowViewModel.ID = elbow.Code;
                    elbowViewModel.Name = elbow.Name;
                    elbowViewModel.Position3D = new PointF3D((float)elbow.Position3d.X, (float)elbow.Position3d.Y, (float)elbow.Position3d.Z);
                    vm.Nodes.Add(elbowViewModel);
                }
            }
            if (rhs.Threelinks != null && rhs.Threelinks.Count > 0)
            {
                foreach (var threelink in rhs.Threelinks)
                {
                    var threelinkViewModel = new JunctionViewModel();
                    threelinkViewModel.ID = threelink.Code;
                    threelinkViewModel.Name = threelink.Name;
                    threelinkViewModel.Position3D = new PointF3D((float)threelink.Position3d.X, (float)threelink.Position3d.Y, (float)threelink.Position3d.Z);
                    vm.Nodes.Add(threelinkViewModel);
                }
            }
            if (rhs.Fourlinks != null && rhs.Fourlinks.Count > 0)
            {
                foreach (var fourlink in rhs.Fourlinks)
                {
                    var fourlinkViewModel = new JunctionViewModel();
                    fourlinkViewModel.ID = fourlink.Code;
                    fourlinkViewModel.Name = fourlink.Name;
                    fourlinkViewModel.Position3D = new PointF3D((float)fourlink.Position3d.X, (float)fourlink.Position3d.Y, (float)fourlink.Position3d.Z);
                    vm.Nodes.Add(fourlinkViewModel);
                }
            }
            if (rhs.Meters != null && rhs.Meters.Count > 0)
            {
                foreach (var meter in rhs.Meters)
                {
                    var meterViewModel = new MeterViewModel();
                    meterViewModel.ID = meter.Code;
                    meterViewModel.Name = meter.Name;
                    meterViewModel.Position3D = new PointF3D((float)meter.Position3d.X, (float)meter.Position3d.Y, (float)meter.Position3d.Z);
                    vm.Nodes.Add(meterViewModel);
                }
            }
            if (rhs.Flowmeters != null && rhs.Flowmeters.Count > 0)
            {
                foreach (var flowmeter in rhs.Flowmeters)
                {
                    var flowmeterViewModel = new JunctionViewModel();
                    flowmeterViewModel.ID = flowmeter.Code;
                    flowmeterViewModel.Name = flowmeter.Name;
                    flowmeterViewModel.Position3D = new PointF3D((float)flowmeter.Position3d.X, (float)flowmeter.Position3d.Y, (float)flowmeter.Position3d.Z);
                    vm.Nodes.Add(flowmeterViewModel);
                }
            }
            if (rhs.Pressmeters != null && rhs.Pressmeters.Count > 0)
            {
                foreach (var pressmeter in rhs.Pressmeters)
                {
                    var pressmeterViewModel = new JunctionViewModel();
                    pressmeterViewModel.ID = pressmeter.Code;
                    pressmeterViewModel.Name = pressmeter.Name;
                    pressmeterViewModel.Position3D = new PointF3D((float)pressmeter.Position3d.X, (float)pressmeter.Position3d.Y, (float)pressmeter.Position3d.Z);
                    vm.Nodes.Add(pressmeterViewModel);
                }
            }
            if (rhs.Bluntheads != null && rhs.Bluntheads.Count > 0)
            {
                foreach (var blunthead in rhs.Bluntheads)
                {
                    var bluntheadViewModel = new JunctionViewModel();
                    bluntheadViewModel.ID = blunthead.Code;
                    bluntheadViewModel.Name = blunthead.Name;
                    bluntheadViewModel.Position3D = new PointF3D((float)blunthead.Position3d.X, (float)blunthead.Position3d.Y, (float)blunthead.Position3d.Z);
                    vm.Nodes.Add(bluntheadViewModel);
                }
            }
            if (rhs.Reservoirs != null && rhs.Reservoirs.Count > 0)
            {
                foreach (var reservoir in rhs.Reservoirs)
                {
                    var reservoirViewModel = new ReservoirViewModel();
                    reservoirViewModel.ID = reservoir.Code;
                    reservoirViewModel.Name = reservoir.Name;
                    reservoirViewModel.Position3D = new PointF3D((float)reservoir.Position3d.X, (float)reservoir.Position3d.Y, (float)reservoir.Position3d.Z);
                    vm.Nodes.Add(reservoirViewModel);
                }
            }
            if (rhs.Tanks != null && rhs.Tanks.Count > 0)
            {
                foreach (var tank in rhs.Tanks)
                {
                    var tankViewModel = new TankViewModel();
                    tankViewModel.ID = tank.Code;
                    tankViewModel.Name = tank.Name;
                    tankViewModel.Position3D = new PointF3D((float)tank.Position3d.X, (float)tank.Position3d.Y, (float)tank.Position3d.Z);
                    vm.Nodes.Add(tankViewModel);
                }
            }
            if (rhs.Waterboxs != null && rhs.Waterboxs.Count > 0)
            {
                foreach (var waterbox in rhs.Waterboxs)
                {
                    var waterboxViewModel = new TankViewModel();
                    waterboxViewModel.ID = waterbox.Code;
                    waterboxViewModel.Name = waterbox.Name;
                    waterboxViewModel.Position3D = new PointF3D((float)waterbox.Position3d.X, (float)waterbox.Position3d.Y, (float)waterbox.Position3d.Z);
                    vm.Nodes.Add(waterboxViewModel);
                }
            }
            if (rhs.Pipes != null && rhs.Pipes.Count > 0)
            {
                foreach (var pipe in rhs.Pipes)
                {
                    var pipeViewModel = new PipeViewModel();
                    pipeViewModel.ID = pipe.Code;
                    pipeViewModel.Name = pipe.Name;
                    pipeViewModel.StartNode = vm.Nodes.Find(x => x.ID == pipe.StartCode);
                    pipeViewModel.EndNode = vm.Nodes.Find(x => x.ID == pipe.EndCode);
                    vm.Links.Add(pipeViewModel);
                }
            }
            if (rhs.Translations != null && rhs.Translations.Count > 0)
            {
                foreach (var translation in rhs.Translations)
                {
                    var translationViewModel = new PipeViewModel();
                    translationViewModel.ID = translation.Code;
                    translationViewModel.Name = translation.Name;
                    translationViewModel.StartNode = vm.Nodes.Find(x => x.ID == translation.StartCode);
                    translationViewModel.EndNode = vm.Nodes.Find(x => x.ID == translation.EndCode);
                    vm.Links.Add(translationViewModel);
                }
            }
            if (rhs.Exchangers != null && rhs.Exchangers.Count > 0)
            {
                foreach (var exchanger in rhs.Exchangers)
                {
                    var exchangerViewModel = new PipeViewModel();
                    exchangerViewModel.ID = exchanger.Code;
                    exchangerViewModel.Name = exchanger.Name;
                    exchangerViewModel.StartNode = vm.Nodes.Find(x => x.ID == exchanger.StartCode);
                    exchangerViewModel.EndNode = vm.Nodes.Find(x => x.ID == exchanger.EndCode);
                    vm.Links.Add(exchangerViewModel);
                }
            }
            if (rhs.Pumps != null && rhs.Pumps.Count > 0)
            {
                foreach (var pump in rhs.Pumps)
                {
                    var pumpViewModel = new PumpViewModel();
                    pumpViewModel.ID = pump.Code;
                    pumpViewModel.Name = pump.Name;
                    pumpViewModel.StartNode = vm.Nodes.Find(x => x.ID == pump.StartCode);
                    pumpViewModel.EndNode = vm.Nodes.Find(x => x.ID == pump.EndCode);
                    vm.Links.Add(pumpViewModel);
                }
            }
            if (rhs.Valves != null && rhs.Valves.Count > 0)
            {
                foreach (var valve in rhs.Valves)
                {
                    var valveViewModel = new ValveViewModel();
                    valveViewModel.ID = valve.Code;
                    valveViewModel.Name = valve.Name;
                    valveViewModel.StartNode = vm.Nodes.Find(x => x.ID == valve.StartCode);
                    valveViewModel.EndNode = vm.Nodes.Find(x => x.ID == valve.EndCode);
                    vm.Links.Add(valveViewModel);
                }
            }
            return vm;
        }
        /// <summary>
        /// è½¬æ¢
        /// </summary>
        /// <param name="info">模型信息</param>
        /// <returns></returns>
        public static object Transfer(Yw.Model.HydroModelInfo info)
        {
            if (info == null)
            {
                return default;
            }
            //var netWork = new HyView.MapViewNetWork();
            //netWork.Nodes = new HyView.NodeViewModelList();
            //netWork.Links = new HyView.LinkViewModelList();
            //连接节点
            if (info.Junctions != null && info.Junctions.Count > 0)
            {
                foreach (var junction in info.Junctions)
                {
                    //var junctionModel = new HyView.JunctionViewModel();
                    //junctionModel.ID = junction.Code;
                    //junctionModel.Name = junction.Name;
                    //junctionModel.X = (float)junction.Position3d.X;
                    //junctionModel.Y = (float)junction.Position3d.Y;
                    ////junctionModel.Z = (float)junction.Position3d.Z;
                    //junctionModel.Position3D = new HyView.PointF3D((float)junction.Position3d.X, (float)junction.Position3d.Y, (float)junction.Position3d.Z);
                    //junctionModel.Elev = (float)junction.Elev;
                    //junctionModel.Demand = junction.Demand.HasValue ? (float)junction.Demand.Value : 0;
                    //junctionModel.PatternID = junction.DemandPattern;
                    ////junctionModel.Status = StatusType.DEFAULT;
                    //netWork.Nodes.Add(junctionModel);
                    //netWork.Nodes.Add(junctionModel);
                }
            }
            //水库
            if (info.Reservoirs != null && info.Reservoirs.Count > 0)
            {
                foreach (var reservoir in info.Reservoirs)
                {
                    //var reservoirModel = new HyView.ReservoirViewModel();
                    //reservoirModel.ID = reservoir.Code;
                    //reservoirModel.Name = reservoir.Name;
                    //reservoirModel.X = (float)reservoir.Position3d.X;
                    //reservoirModel.Y = (float)reservoir.Position3d.Y;
                    ////reservoirModel.Z = (float)reservoir.Position3d.Z;
                    //reservoirModel.Demand = 0;
                    //reservoirModel.Head = (float)reservoir.Head;
                    //reservoirModel.PatternID = reservoir.HeadPattern;
                    //reservoirModel.Position3D = new HyView.PointF3D((float)reservoir.Position3d.X, (float)reservoir.Position3d.Y, (float)reservoir.Position3d.Z);
                    //netWork.Nodes.Add(reservoirModel);
                }
            }
            //æ°´æ± 
            if (info.Tanks != null && info.Tanks.Count > 0)
            {
                foreach (var tank in info.Tanks)
                {
                    //var tankModel = new HyView.TankViewModel();
                    //tankModel.ID = tank.Code;
                    //tankModel.Name = tank.Name;
                    //tankModel.X = (float)tank.Position3d.X;
                    //tankModel.Y = (float)tank.Position3d.Y;
                    ////tankModel.Z = (float)tank.Position3d.Z;
                    //tankModel.Demand = 0;
                    //tankModel.Diameter = (float)tank.Diameter;
                    //tankModel.Elev = (float)tank.PoolElev;
                    //tankModel.InitLevel = (float)tank.InitLevel;
                    //tankModel.MinLevel = (float)tank.MinLevel;
                    //tankModel.MaxLevel = (float)tank.MaxLevel;
                    //tankModel.MinVol = (float)tank.MinVol;
                    //tankModel.VolCurve = tank.VolCurve;
                    //tankModel.Position3D = new HyView.PointF3D((float)tank.Position3d.X, (float)tank.Position3d.Y, (float)tank.Position3d.Z);
                    //netWork.Nodes.Add(tankModel);
                }
            }
            //管道
            if (info.Pipes != null && info.Pipes.Count > 0)
            {
                foreach (var pipe in info.Pipes)
                {
                    //var pipeModel = new HyView.PipeViewModel();
                    //pipeModel.ID = pipe.Code;
                    //pipeModel.Name = pipe.Name;
                    //// pipeModel.Status = StatusType.OPEN;
                    //pipeModel.StartNode = netWork.Nodes.Find(x => x.ID == pipe.StartCode);
                    //pipeModel.EndNode = netWork.Nodes.Find(x => x.ID == pipe.EndCode);
                    //pipeModel.Diameter = (float)pipe.Diameter;
                    //pipeModel.Length = (float)pipe.Length;
                    //pipeModel.Roughness = (float)pipe.Roughness;
                    //pipeModel.MinorLoss = (float)pipe.MinorLoss;
                    //netWork.Links.Add(pipeModel);
                }
            }
            //æ°´æ³µ
            if (info.Pumps != null && info.Pumps.Count > 0)
            {
                foreach (var pump in info.Pumps)
                {
                    //var pumpModel = new HyView.PumpViewModel();
                    //pumpModel.ID = pump.Code;
                    //pumpModel.Name = pump.Name;
                    ////pumpModel.Status = StatusType.OPEN;
                    //pumpModel.StartNode = netWork.Nodes.Find(x => x.ID == pump.StartCode);
                    //pumpModel.EndNode = netWork.Nodes.Find(x => x.ID == pump.EndCode);
                    //pumpModel.HeadCurve = pump.CurveQH;
                    //netWork.Links.Add(pumpModel);
                }
            }
            //阀门
            if (info.Valves != null && info.Valves.Count > 0)
            {
                foreach (var valve in info.Valves)
                {
                    //var valveModel = new HyView.ValveViewModel();
                    //valveModel.ID = valve.Code;
                    //valveModel.Name = valve.Name;
                    ////valveModel.Status = StatusType.OPEN;
                    //valveModel.StartNode = netWork.Nodes.Find(x => x.ID == valve.StartCode);
                    //valveModel.EndNode = netWork.Nodes.Find(x => x.ID == valve.EndCode);
                    //valveModel.Diameter = (float)valve.Diameter;
                    //valveModel.Type = valve.ValveType;
                    //valveModel.Setting = valve.ValveSetting;
                    //netWork.Links.Add(valveModel);
                }
            }
            return default;
        }
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/02-model/HydroModelMgrPage.Designer.cs
@@ -46,6 +46,7 @@
            barBtnViewModel = new DevExpress.XtraBars.BarButtonItem();
            barBtnCalcuModel = new DevExpress.XtraBars.BarButtonItem();
            barBtnValidModel = new DevExpress.XtraBars.BarButtonItem();
            barBtnExportInp = new DevExpress.XtraBars.BarButtonItem();
            ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
            ribPageGrpBaseMgr = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
            ribbonPageGroup2 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
@@ -63,7 +64,7 @@
            colDescription = new DevExpress.XtraGrid.Columns.GridColumn();
            colDetail = new DevExpress.XtraGrid.Columns.GridColumn();
            repositoryItemButtonEdit1 = new DevExpress.XtraEditors.Repository.RepositoryItemButtonEdit();
            barBtnExportInp = new DevExpress.XtraBars.BarButtonItem();
            barBtnParter = new DevExpress.XtraBars.BarButtonItem();
            ((ISupportInitialize)ribbonControl1).BeginInit();
            ((ISupportInitialize)svgImage32).BeginInit();
            ((ISupportInitialize)panelControl1).BeginInit();
@@ -78,9 +79,9 @@
            // 
            ribbonControl1.ExpandCollapseItem.Id = 0;
            ribbonControl1.ItemPanelStyle = DevExpress.XtraBars.Ribbon.RibbonItemPanelStyle.Classic;
            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnDelete, barBtnDetail, barBtnEdit, barBtnAdd, barBtnUp, barBtnDown, barBtnRefresh, barBtnViewModel, barBtnCalcuModel, barBtnValidModel, barBtnExportInp });
            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, barBtnDelete, barBtnDetail, barBtnEdit, barBtnAdd, barBtnUp, barBtnDown, barBtnRefresh, barBtnViewModel, barBtnCalcuModel, barBtnValidModel, barBtnExportInp, barBtnParter });
            ribbonControl1.Location = new Point(1, 1);
            ribbonControl1.MaxItemId = 21;
            ribbonControl1.MaxItemId = 22;
            ribbonControl1.Name = "ribbonControl1";
            ribbonControl1.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPage1 });
            ribbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.False;
@@ -168,6 +169,14 @@
            barBtnValidModel.Name = "barBtnValidModel";
            barBtnValidModel.ItemClick += barBtnValidModel_ItemClick;
            // 
            // barBtnExportInp
            //
            barBtnExportInp.Caption = "导出INP";
            barBtnExportInp.Id = 20;
            barBtnExportInp.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnExportInp.ImageOptions.SvgImage");
            barBtnExportInp.Name = "barBtnExportInp";
            barBtnExportInp.ItemClick += barBtnExportInp_ItemClick;
            //
            // ribbonPage1
            // 
            ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { ribPageGrpBaseMgr, ribbonPageGroup2, ribbonPageGroup1 });
@@ -189,6 +198,7 @@
            ribbonPageGroup2.ItemLinks.Add(barBtnCalcuModel);
            ribbonPageGroup2.ItemLinks.Add(barBtnValidModel);
            ribbonPageGroup2.ItemLinks.Add(barBtnExportInp);
            ribbonPageGroup2.ItemLinks.Add(barBtnParter);
            ribbonPageGroup2.Name = "ribbonPageGroup2";
            ribbonPageGroup2.Text = "水力";
            // 
@@ -304,13 +314,13 @@
            repositoryItemButtonEdit1.Name = "repositoryItemButtonEdit1";
            repositoryItemButtonEdit1.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.HideTextEditor;
            // 
            // barBtnExportInp
            // barBtnParter
            // 
            barBtnExportInp.Caption = "导出INP";
            barBtnExportInp.Id = 20;
            barBtnExportInp.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnExportInp.ImageOptions.SvgImage");
            barBtnExportInp.Name = "barBtnExportInp";
            barBtnExportInp.ItemClick += barBtnExportInp_ItemClick;
            barBtnParter.Caption = "组件";
            barBtnParter.Id = 21;
            barBtnParter.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnParter.ImageOptions.SvgImage");
            barBtnParter.Name = "barBtnParter";
            barBtnParter.ItemClick += barBtnParter_ItemClick;
            // 
            // HydroModelMgrPage
            // 
@@ -365,5 +375,6 @@
        protected DevExpress.XtraBars.BarButtonItem barBtnCalcuModel;
        protected DevExpress.XtraBars.BarButtonItem barBtnValidModel;
        private DevExpress.XtraBars.BarButtonItem barBtnExportInp;
        private DevExpress.XtraBars.BarButtonItem barBtnParter;
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/02-model/HydroModelMgrPage.cs
@@ -3,6 +3,7 @@
using DevExpress.XtraEditors;
using Yw.EPAnet;
using Yw.EPAnet.Calcu;
using Yw.WinFrmUI.Page;
namespace Yw.WinFrmUI
{
@@ -83,9 +84,22 @@
        /// <summary>
        /// æŸ¥çœ‹æ¨¡åž‹
        /// </summary>
        protected virtual void ViewModel(Yw.Dto.HydroModelDto dto)
        protected virtual async void ViewModel(Yw.Dto.HydroModelDto dto)
        {
            var info = await new Yw.BLL.HydroModelInfo().GetByID(dto.ID);
            var guid = new PageGuid()
            {
                Modular = "Hydro",
                MoudingType = eMoudingType.Tab,
                Function = "HydroQ3d",
                TagName = info.ID.ToString()
            };
            if (!IsExistPage(guid, true))
            {
                var page = new HydroQ3dViewPage();
                page.SetBindingData(info);
                CreatePage(page, guid);
            }
        }
        /// <summary>
@@ -214,6 +228,20 @@
            XtraMessageBox.Show(result);
        }
        //组件
        private async void barBtnParter_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
            var vm = GetCurrentViewModel();
            if (vm == null)
            {
                return;
            }
            var info = await new Yw.BLL.HydroModelInfo().GetByID(vm.ID);
            var dlg = new HydroParterListDlg();
            dlg.SetBindingData(info);
            dlg.Show();
        }
        //上移
        private void barBtnUp_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
        {
@@ -238,5 +266,6 @@
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/02-model/HydroModelMgrPage.resx
@@ -343,6 +343,27 @@
        IDwvZz4NCjwvc3ZnPgs=
</value>
  </data>
  <data name="barBtnParter.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAACUDAAAC77u/
        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
        LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5HcmVlbntmaWxsOiMwMzlD
        MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
        Y2l0eTowLjc1O30KPC9zdHlsZT4NCiAgPGcgaWQ9Ik1lbnUiPg0KICAgIDxwYXRoIGQ9Ik0yLDEwVjNj
        MC0wLjUsMC41LTEsMS0xaDI2YzAuNSwwLDEsMC41LDEsMXY3SDJ6IE05LDEyYy0xLjcsMC0zLDEuMy0z
        LDNzMS4zLDMsMywzczMtMS4zLDMtM1MxMC43LDEyLDksMTJ6ICAgIE05LDIwYy0xLjcsMC0zLDEuMy0z
        LDNzMS4zLDMsMywzczMtMS4zLDMtM1MxMC43LDIwLDksMjB6IiBjbGFzcz0iQmx1ZSIgLz4NCiAgICA8
        cGF0aCBkPSJNMzAsMTB2MTljMCwwLjUtMC41LDEtMSwxSDNjLTAuNSwwLTEtMC41LTEtMVYxMGgydjE4
        aDI0VjEwSDMweiBNMjQsMTRIMTR2MmgxMFYxNHogTTI0LDIySDE0djJoMTBWMjJ6IiBjbGFzcz0iQmxh
        Y2siIC8+DQogIDwvZz4NCjwvc3ZnPgs=
</value>
  </data>
  <metadata name="svgImage32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
    <value>311, 17</value>
  </metadata>
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/00-core/HydroParterListDlg.Designer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,60 @@
namespace Yw.WinFrmUI
{
    partial class HydroParterListDlg
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Windows Form Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            hydroParterListCtrl1 = new HydroParterListCtrl();
            SuspendLayout();
            //
            // hydroParterListCtrl1
            //
            hydroParterListCtrl1.Dock = DockStyle.Fill;
            hydroParterListCtrl1.HidePageWhenListIsNull = true;
            hydroParterListCtrl1.Location = new Point(0, 0);
            hydroParterListCtrl1.Name = "hydroParterListCtrl1";
            hydroParterListCtrl1.Size = new Size(1040, 592);
            hydroParterListCtrl1.TabIndex = 0;
            //
            // HydroParterListDlg
            //
            AutoScaleDimensions = new SizeF(7F, 14F);
            AutoScaleMode = AutoScaleMode.Font;
            ClientSize = new Size(1040, 592);
            Controls.Add(hydroParterListCtrl1);
            Name = "HydroParterListDlg";
            StartPosition = FormStartPosition.CenterParent;
            Text = "水力组件";
            TopMost = true;
            ResumeLayout(false);
        }
        #endregion
        private HydroParterListCtrl hydroParterListCtrl1;
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/00-core/HydroParterListDlg.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,29 @@
namespace Yw.WinFrmUI
{
    public partial class HydroParterListDlg : DevExpress.XtraEditors.XtraForm
    {
        public HydroParterListDlg()
        {
            InitializeComponent();
            this.hydroParterListCtrl1.HydroClickEvent += HydroParterListCtrl1_HydroClickEvent;
        }
        private void HydroParterListCtrl1_HydroClickEvent(Model.HydroParterInfo obj)
        {
            this.HydroClickEvent?.Invoke(obj);
        }
        /// <summary>
        /// æ°´åŠ›ç‚¹å‡»äº‹ä»¶
        /// </summary>
        public event Action<Yw.Model.HydroParterInfo> HydroClickEvent;
        /// <summary>
        /// ç»‘定数据
        /// </summary>
        public void SetBindingData(Yw.Model.HydroModelInfo rhs)
        {
            this.hydroParterListCtrl1.SetBindingData(rhs);
        }
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-parter/00-core/HydroParterListDlg.resx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
</root>
WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-q3d/HydroQ3dViewPage.Designer.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,63 @@
namespace Yw.WinFrmUI
{
    partial class HydroQ3dViewPage
    {
        /// <summary>
        /// Required designer variable.
        /// </summary>
        private System.ComponentModel.IContainer components = null;
        /// <summary>
        /// Clean up any resources being used.
        /// </summary>
        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }
        #region Component Designer generated code
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent()
        {
            ComponentResourceManager resources = new ComponentResourceManager(typeof(HydroQ3dViewPage));
            drawer1 = new Q3d.Drawer();
            SuspendLayout();
            //
            // drawer1
            //
            drawer1.BackColor = Color.Transparent;
            drawer1.Dock = DockStyle.Fill;
            drawer1.IsEditMode = true;
            drawer1.Location = new Point(0, 0);
            drawer1.MapCenter = (PointF)resources.GetObject("drawer1.MapCenter");
            drawer1.mapOption = (Q3d.MapDimensions)resources.GetObject("drawer1.mapOption");
            drawer1.Name = "drawer1";
            drawer1.Size = new Size(224, 174);
            drawer1.TabIndex = 0;
            drawer1.zoom = 1F;
            //
            // HydroQ3dViewPage
            //
            Appearance.BackColor = SystemColors.Control;
            Appearance.Options.UseBackColor = true;
            AutoScaleDimensions = new SizeF(7F, 14F);
            AutoScaleMode = AutoScaleMode.Font;
            Controls.Add(drawer1);
            Name = "HydroQ3dViewPage";
            ResumeLayout(false);
        }
        #endregion
        private Q3d.Drawer drawer1;
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-q3d/HydroQ3dViewPage.cs
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,47 @@
using DevExpress.XtraEditors;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace Yw.WinFrmUI
{
    public partial class HydroQ3dViewPage : Yw.WinFrmUI.DocumentPage
    {
        public HydroQ3dViewPage()
        {
            InitializeComponent();
            this.PageTitle.Caption = "水力模型";
        }
        /// <summary>
        /// ç»‘定数据
        /// </summary>
        /// <param name="hydroModelId">水力模型id</param>
        public async void SetBindingData(Yw.Model.HydroModelInfo rhs)
        {
            this.PageTitle.Caption = $"{rhs.Name}\r\n水力模型";
            var netWork = HydroQ3dTransferHelper.ToNetworkViewModel(rhs);
            this.drawer1.SetData(netWork);
            //var temp = new Template();
            //temp.network = netWork;
            //mapViewer1.SetData(temp);
        }
        /// <summary>
        /// åˆå§‹åŒ–数据源
        /// </summary>
        public override void InitialDataSource()
        {
            base.InitialDataSource();
        }
    }
}
WinFrmUI/Yw.WinFrmUI.Hydro.Core/05-q3d/HydroQ3dViewPage.resx
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,145 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
  <!--
    Microsoft ResX Schema
    Version 2.0
    The primary goals of this format is to allow a simple XML format
    that is mostly human readable. The generation and parsing of the
    various data types are done through the TypeConverter classes
    associated with the data types.
    Example:
    ... ado.net/XML headers & schema ...
    <resheader name="resmimetype">text/microsoft-resx</resheader>
    <resheader name="version">2.0</resheader>
    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
        <value>[base64 mime encoded serialized .NET Framework object]</value>
    </data>
    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
        <comment>This is a comment</comment>
    </data>
    There are any number of "resheader" rows that contain simple
    name/value pairs.
    Each data row contains a name, and value. The row also contains a
    type or mimetype. Type corresponds to a .NET class that support
    text/value conversion through the TypeConverter architecture.
    Classes that don't support this are serialized and stored with the
    mimetype set.
    The mimetype is used for serialized objects, and tells the
    ResXResourceReader how to depersist the object. This is currently not
    extensible. For a given mimetype the value must be set accordingly:
    Note - application/x-microsoft.net.object.binary.base64 is the format
    that the ResXResourceWriter will generate, however the reader can
    read any of the formats listed below.
    mimetype: application/x-microsoft.net.object.binary.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.soap.base64
    value   : The object must be serialized with
            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
            : and then encoded with base64 encoding.
    mimetype: application/x-microsoft.net.object.bytearray.base64
    value   : The object must be serialized into a byte array
            : using a System.ComponentModel.TypeConverter
            : and then encoded with base64 encoding.
    -->
  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
    <xsd:element name="root" msdata:IsDataSet="true">
      <xsd:complexType>
        <xsd:choice maxOccurs="unbounded">
          <xsd:element name="metadata">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" />
              </xsd:sequence>
              <xsd:attribute name="name" use="required" type="xsd:string" />
              <xsd:attribute name="type" type="xsd:string" />
              <xsd:attribute name="mimetype" type="xsd:string" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="assembly">
            <xsd:complexType>
              <xsd:attribute name="alias" type="xsd:string" />
              <xsd:attribute name="name" type="xsd:string" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="data">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
              <xsd:attribute ref="xml:space" />
            </xsd:complexType>
          </xsd:element>
          <xsd:element name="resheader">
            <xsd:complexType>
              <xsd:sequence>
                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
              </xsd:sequence>
              <xsd:attribute name="name" type="xsd:string" use="required" />
            </xsd:complexType>
          </xsd:element>
        </xsd:choice>
      </xsd:complexType>
    </xsd:element>
  </xsd:schema>
  <resheader name="resmimetype">
    <value>text/microsoft-resx</value>
  </resheader>
  <resheader name="version">
    <value>2.0</value>
  </resheader>
  <resheader name="reader">
    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <resheader name="writer">
    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
  </resheader>
  <data name="drawer1.MapCenter" mimetype="application/x-microsoft.net.object.binary.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAFFTeXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0
        dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAABVTeXN0ZW0uRHJh
        d2luZy5Qb2ludEYCAAAAAXgBeQAACwsCAAAAAAAAAAAAAAAL
</value>
  </data>
  <data name="drawer1.mapOption" mimetype="application/x-microsoft.net.object.binary.base64">
    <value>
        AAEAAAD/////AQAAAAAAAAAMAgAAAEBZdy5XaW5Gcm1VSS5IeWRyby5RM2QuQ29yZSwgQ3VsdHVyZT1u
        ZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1udWxsDAMAAABRU3lzdGVtLkRyYXdpbmcsIFZlcnNpb249NC4w
        LjAuMCwgQ3VsdHVyZT1uZXV0cmFsLCBQdWJsaWNLZXlUb2tlbj1iMDNmNWY3ZjExZDUwYTNhBQEAAAAd
        WXcuV2luRnJtVUkuUTNkLk1hcERpbWVuc2lvbnMNAAAAFzxDZW50ZXI+a19fQmFja2luZ0ZpZWxkFTx6
        b29tPmtfX0JhY2tpbmdGaWVsZBk8cm90YXRpb24+a19fQmFja2luZ0ZpZWxkCl9yb3RhdGlvbkYaPFNo
        b3dGbG9vcj5rX19CYWNraW5nRmllbGQaPGlzU2hvd1BpYz5rX19CYWNraW5nRmllbGQVaXNBdXRvQmFj
        a2dyb3VuZEltYWdlHjxpc1Nob3dVbmZhdm9yPmtfX0JhY2tpbmdGaWVsZBs8TG9jazJEVmlldz5rX19C
        YWNraW5nRmllbGQbPGlzRWRpdE1vZGU+a19fQmFja2luZ0ZpZWxkGDxJc09ydGhvPmtfX0JhY2tpbmdG
        aWVsZBs8Q29sb3VyTm9kZT5rX19CYWNraW5nRmllbGQbPENvbG91ckxpbms+a19fQmFja2luZ0ZpZWxk
        BAAAAAAAAAAAAAAEBBVTeXN0ZW0uRHJhd2luZy5Qb2ludEYDAAAACwYGCAEBAQEBARpZdy5XaW5Gcm1V
        SS5RM2QuQ29sb3VyVHlwZQIAAAAaWXcuV2luRnJtVUkuUTNkLkNvbG91clR5cGUCAAAAAgAAAAX8////
        FVN5c3RlbS5EcmF3aW5nLlBvaW50RgIAAAABeAF5AAALCwMAAAAAAAAAAAAAAAAAgD8AAAAAAAAAAAAA
        AAAAAAAAAAAAgAEAAQABAQX7////Gll3LldpbkZybVVJLlEzZC5Db2xvdXJUeXBlAQAAAAd2YWx1ZV9f
        AAgCAAAAAAAAAAH6////+////wAAAAAL
</value>
  </data>
</root>
WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
@@ -8,6 +8,7 @@
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
    <PackageReference Include="Yw.BLL.Basic.Core" Version="3.2.5" />
    <PackageReference Include="Yw.BLL.Hydro.Core" Version="3.1.6" />
  </ItemGroup>
@@ -15,6 +16,7 @@
  <ItemGroup>
    <ProjectReference Include="..\..\Hydro\Yw.Hydro.Core\Yw.Hydro.Core.csproj" />
    <ProjectReference Include="..\Yw.WinFrmUI.Core\Yw.WinFrmUI.Core.csproj" />
    <ProjectReference Include="..\Yw.WinFrmUI.Hydro.Q3d.Core\Yw.WinFrmUI.Hydro.Q3d.Core.csproj" />
  </ItemGroup>
  <ItemGroup>
WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
@@ -7,11 +7,17 @@
    <Compile Update="04-parter\00-core\HydroParterListCtrl.cs">
      <SubType>UserControl</SubType>
    </Compile>
    <Compile Update="04-parter\00-core\HydroParterListDlg.cs">
      <SubType>Form</SubType>
    </Compile>
    <Compile Update="04-parter\01-junction\HydroJunctionListCtrl.cs">
      <SubType>UserControl</SubType>
    </Compile>
    <Compile Update="04-parter\02-nozzle\HydroNozzleListCtrl.cs">
      <SubType>UserControl</SubType>
    </Compile>
    <Compile Update="05-q3d\HydroQ3dViewPage.cs">
      <SubType>UserControl</SubType>
    </Compile>
  </ItemGroup>
</Project>