using Yw.Model; namespace HStation.WinFrmUI { /// /// 项目模拟属性控件 /// public partial class SimulationPropertyCtrl : DevExpress.XtraEditors.XtraUserControl { public SimulationPropertyCtrl() { InitializeComponent(); this.hydroVisualPropertyCtrl1.MatchingDbEvent += HydroVisualPropertyCtrl1_MatchingDbEvent; this.hydroVisualPropertyCtrl1.SetCurveEvent += HydroVisualPropertyCtrl1_SetCurveEvent; this.hydroVisualPropertyCtrl1.HydroViewEvent += HydroVisualPropertyCtrl1_HydroViewEvent; this.hydroVisualPropertyCtrl1.BlinkLinkNodeEvent += HydroVisualPropertyCtrl1_BlinkLinkNodeEvent; this.hydroVisualPropertyCtrl1.PropertyValueChangedEvent += HydroVisualPropertyCtrl1_PropertyValueChangedEvent; this.hydroVisualPropertyCtrl1.MarkPropertyValueChangedEvent += HydroVisualPropertyCtrl1_MarkPropertyValueChangedEvent; this.hydroVisualPropertyCtrl1.GradingPropertyValueChangedEvent += HydroPVisualPropertyCtrl1_GradingPropertyValueChangedEvent; this.hydroVisualPropertyCtrl1.FlowDirectionPropertyValueChangedEvent+=HydroVisualPropertyCtrl1_FlowDirectionPropertyValueChangedEvent; } #region 事件集合 /// /// 构件查看事件 /// public event Action HydroViewEvent; /// /// 强调连接组件事件 /// 第一个参数为组件 /// 第二个参数为连接节点Code /// public event Action BlinkLinkNodeEvent; /// /// 属性值改变事件 /// public event Action PropertyValueChangedEvent; /// /// 标注属性值改变事件 /// public event Action MarkPropertyValueChangedEvent; /// /// 分级属性值改变事件 /// public event Action GradingPropertyValueChangedEvent; /// /// 流向属性值改变事件 /// public event Action FlowDirectionPropertyValueChangedEvent; private HydroChangeHelper _changeHelper = null;//改变辅助类 private HydroPropStatusHelper _propStatusHelper = null;//属性状态辅助类 #endregion /// /// 初始化数据 /// public void InitialData ( HydroChangeHelper changeHelper, HydroPropStatusHelper propStatusHelper ) { _changeHelper = changeHelper; _propStatusHelper = propStatusHelper; this.hydroVisualPropertyCtrl1.InitialData(changeHelper, propStatusHelper); } #region 属性赋值 /// /// 允许编辑 /// public bool AllowEdit { get { return this.hydroVisualPropertyCtrl1.AllowEdit; } set { this.hydroVisualPropertyCtrl1.AllowEdit = value; } } /// /// 选择对象 /// public HydroVisualViewModel SelectedObject { get { return this.hydroVisualPropertyCtrl1.SelectedObject; } set { this.hydroVisualPropertyCtrl1.SelectedObject = value; } } /// /// 计算结果 /// public Func CalcuResult { get; set; } #endregion #region 属性更新 /// /// 重新载入数据 /// public void UpdateData() { this.hydroVisualPropertyCtrl1?.UpdateData(); } /// /// 更新行,样式不变 /// public void UpdateRows() { this.hydroVisualPropertyCtrl1?.UpdateRows(); } /// /// 更新属性 /// public void UpdateProperty() { var vm = this.hydroVisualPropertyCtrl1.SelectedObject; if (vm == null) { return; } vm.UpdateProperty(); this.hydroVisualPropertyCtrl1.UpdateRows(); } #endregion #region 事件实现 //匹配Db private void HydroVisualPropertyCtrl1_MatchingDbEvent(HydroVisualViewModel vm) { if (vm == null) { return; } switch (vm.Vmo.Catalog) { case Yw.Hydro.ParterCatalog.Tank: { var tankViewModel = vm as HydroTankViewModel; var input = HydroMatchingHelper.Create(tankViewModel); var dlg = new AssetsTankSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(tankViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Waterbox: { var tankViewModel = vm as HydroTankViewModel; var input = HydroMatchingHelper.Create(tankViewModel); var dlg = new AssetsTankSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(tankViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Blunthead: { var bluntheadViewModel = vm as HydroBluntheadViewModel; var input = HydroMatchingHelper.Create(bluntheadViewModel); var dlg = new AssetsBluntheadSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(bluntheadViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Elbow: { var elbowViewModel = vm as HydroElbowViewModel; var input = HydroMatchingHelper.Create(elbowViewModel); var dlg = new AssetsElbowSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(elbowViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Threelink: { var threelinkViewModel = vm as HydroThreelinkViewModel; var input = HydroMatchingHelper.Create(threelinkViewModel); var dlg = new AssetsThreelinkSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(threelinkViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Fourlink: { var fourlinkViewModel = vm as HydroFourlinkViewModel; var input = HydroMatchingHelper.Create(fourlinkViewModel); var dlg = new AssetsFourlinkSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(fourlinkViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Meter: { var meterViewModel = vm as HydroMeterViewModel; var input = HydroMatchingHelper.Create(meterViewModel); var dlg = new AssetsMeterSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(meterViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Flowmeter: { var flowmeterViewModel = vm as HydroFlowmeterViewModel; var input = HydroMatchingHelper.Create(flowmeterViewModel); var dlg = new AssetsFlowmeterSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(flowmeterViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Pressmeter: { var pressmeterViewModel = vm as HydroPressmeterViewModel; var input = HydroMatchingHelper.Create(pressmeterViewModel); var dlg = new AssetsPressmeterSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(pressmeterViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Nozzle: { var nozzleViewModel = vm as HydroNozzleViewModel; var input = HydroMatchingHelper.Create(nozzleViewModel); var dlg = new AssetsSprinklerSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(nozzleViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Hydrant: { var hydrantViewModel = vm as HydroHydrantViewModel; var input = HydroMatchingHelper.Create(hydrantViewModel); var dlg = new AssetsHydrantSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(hydrantViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Cooling: { var coolingViewModel = vm as HydroCoolingViewModel; var input = HydroMatchingHelper.Create(coolingViewModel); var dlg = new AssetsCoolingSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(coolingViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Pipe: { var pipeViewModel = vm as HydroPipeViewModel; var input = HydroMatchingHelper.Create(pipeViewModel); var dlg = new AssetsPipeSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(pipeViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Pump: { var pumpViewModel = vm as HydroPumpViewModel; var input = HydroMatchingHelper.Create(pumpViewModel.Vmo, pumpViewModel.HydroInfo); var dlg = new SimulationPumpSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(pumpViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Valve: { var valveViewModel = vm as HydroValveViewModel; var input = HydroMatchingHelper.Create(valveViewModel); var dlg = new AssetsValveSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(valveViewModel, output, _changeHelper, _propStatusHelper); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Exchanger: { var exchangerViewModel = vm as HydroExchangerViewModel; var input = HydroMatchingHelper.Create(exchangerViewModel); var dlg = new AssetsExchangerSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(exchangerViewModel, output); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; case Yw.Hydro.ParterCatalog.Compressor: { var compressorViewModel = vm as HydroCompressorViewModel; var input = HydroMatchingHelper.Create(compressorViewModel); var dlg = new AssetsCompressorSingleMatchingDlg(); dlg.ReloadDataEvent += (output) => { HydroMatchingHelper.Apply(compressorViewModel, output); this.hydroVisualPropertyCtrl1.UpdateRows(); this.PropertyValueChangedEvent?.Invoke(vm.Vmo); this.MarkPropertyValueChangedEvent?.Invoke(vm.Vmo); this.GradingPropertyValueChangedEvent?.Invoke(vm.Vmo); }; dlg.SetBindingData(input); dlg.ShowDialog(); } break; default: break; } } //设置曲线 private void HydroVisualPropertyCtrl1_SetCurveEvent(HydroVisualViewModel vm, string curve, string curveType) { if (vm == null) { return; } switch (curve) { case HydroCurve.Tank: { var tankViewModel = vm as HydroTankViewModel; var curveInfo = tankViewModel.HydroInfo.Curves?.Find(x => x.Code == tankViewModel.VolCurve); if (curveInfo != null) { if (long.TryParse(curveInfo.DbId, out long longDbId)) { var dlg = new AssetsTankCurveVOLViewDlg(); dlg.SetBindingData(longDbId); dlg.ShowDialog(); } } } break; case HydroCurve.Pump: { var pumpViewModel = vm as HydroPumpViewModel; var dlg = new SimulationSinglePumpFeatDlg(); dlg.SaveEvent += (working) => { pumpViewModel.Vmo.LinkStatus = working.LinkStatus; pumpViewModel.Vmo.SpeedRatio = working.CurrentHz / pumpViewModel.Vmo.RatedHz; pumpViewModel.UpdateProperty(); this.hydroVisualPropertyCtrl1.UpdateRows(); }; dlg.SetBindingData(pumpViewModel, this.CalcuResult?.Invoke(), _changeHelper, _propStatusHelper); dlg.ShowDialog(); } break; case HydroCurve.Valve: { var valveViewModel = vm as HydroValveViewModel; var curveInfo = valveViewModel.HydroInfo.Curves?.Find(x => x.Code == valveViewModel.CurveOL); if (curveInfo != null) { if (long.TryParse(curveInfo.DbId, out long longDbId)) { var dlg = new AssetsValveCurveViewDlg(); dlg.SetBindingData(longDbId); dlg.ShowDialog(); } } } break; case HydroCurve.Exchanger: { var exchangerViewModel = vm as HydroExchangerViewModel; var curveInfo = exchangerViewModel.HydroInfo.Curves?.Find(x => x.Code == exchangerViewModel.CurveQL); if (curveInfo != null) { if (long.TryParse(curveInfo.DbId, out long longDbId)) { var dlg = new AssetsExchangerCurveQLViewDlg(); dlg.SetBindingData(longDbId); dlg.ShowDialog(); } } } break; case HydroCurve.Compressor: { var compressorViewModel = vm as HydroCompressorViewModel; var curveInfo = compressorViewModel.HydroInfo.Curves?.Find(x => x.Code == compressorViewModel.CurveQL); if (curveInfo != null) { if (long.TryParse(curveInfo.DbId, out long longDbId)) { var dlg = new AssetsCompressorCurveQLViewDlg(); dlg.SetBindingData(longDbId); dlg.ShowDialog(); } } } break; default: break; } } #endregion #region 事件穿透 //构件查看事件 private void HydroVisualPropertyCtrl1_HydroViewEvent(HydroVisualViewModel vm) { this.HydroViewEvent?.Invoke(vm?.Vmo); } //强调连接节点 private void HydroVisualPropertyCtrl1_BlinkLinkNodeEvent(HydroLinkViewModel vm, string linkNodeCode) { if (vm == null) { return; } if (string.IsNullOrEmpty(linkNodeCode)) { return; } this.BlinkLinkNodeEvent?.Invoke(vm?.Vmo, linkNodeCode); } //属性发生改变 private void HydroVisualPropertyCtrl1_PropertyValueChangedEvent(HydroVisualViewModel vm) { this.PropertyValueChangedEvent?.Invoke(vm?.Vmo); } //标注属性发生改变 private void HydroVisualPropertyCtrl1_MarkPropertyValueChangedEvent(HydroVisualViewModel vm) { this.MarkPropertyValueChangedEvent?.Invoke(vm?.Vmo); } //分级属性发生改变 private void HydroPVisualPropertyCtrl1_GradingPropertyValueChangedEvent(HydroVisualViewModel vm) { this.GradingPropertyValueChangedEvent?.Invoke(vm?.Vmo); } //流向属性发生改变 private void HydroVisualPropertyCtrl1_FlowDirectionPropertyValueChangedEvent(HydroVisualViewModel obj) { this.FlowDirectionPropertyValueChangedEvent?.Invoke(obj?.Vmo); } #endregion } }