using Yw.Model; using Yw.WinFrmUI.Bimface; namespace HStation.WinFrmUI { /// /// 水流动画辅助类 /// public class SimulationFlowEffectHelper { /// /// /// public SimulationFlowEffectHelper(SimulationVisualListHelper visualListHelper, ISimulationFlowEffectView view) { _visualListHelper = visualListHelper; _views = new List() { view }; } private SimulationVisualListHelper _visualListHelper = null;//可见列表辅助类 private List _views = null;//视图列表 private HydroCalcuResult _calcuResult = null;//计算结果 /// /// 可见性 /// public bool Visible { get { return _visible; } set { _visible = value; } } private bool _visible = false; /// /// 项列表 /// public List Items { get { return _items; } private set { _items = value; } } private List _items = null; /// /// 初始化数据 /// public void InitialData(HydroCalcuResult calcuResult) { _calcuResult = calcuResult; var allCalcuResultVisualDict = calcuResult?.GetVisualDict(); _visualListHelper.HydroInfo.Pipes?.ForEach(x => InitialItem(x, allCalcuResultVisualDict)); } //初始化项 private void InitialItem(HydroVisualInfo visual, Dictionary allCalcuResultVisualDict) { var item = CreateItem(visual, allCalcuResultVisualDict); if (item != null) { if (this.Items == null) { this.Items = new List(); } this.Items.Add(item); } } //创建项 private LogicFlowEffect CreateItem(HydroVisualInfo visual, Dictionary allCalcuResultVisualDict = null) { if (visual == null) { return default; } LogicFlowEffect item = null; switch (visual.Catalog) { case Yw.Hydro.ParterCatalog.Pipe: { var pipe = visual as HydroPipeInfo; item = new LogicFlowEffect(); item.Id = pipe.Code; item.Rotation = 90; item.SpeedX = 0.1; //if (pipe.FlowDirectionX == Yw.Hydro.FlowDirection.None) //{ // item.SpeedX = 0; //} //else if (pipe.FlowDirectionX == Yw.Hydro.FlowDirection.Positive) //{ // item.SpeedX = 0.1; //} //else //{ // item.SpeedX = -0.1; //} //if (pipe.FlowDirectionY == Yw.Hydro.FlowDirection.None) //{ // item.SpeedY = 0; //} //else if (pipe.FlowDirectionY == Yw.Hydro.FlowDirection.Positive) //{ // item.SpeedY = 0.1; //} //else //{ // item.SpeedY = -0.1; //} var calcuLinkResult = allCalcuResultVisualDict?.GetValue(pipe.Code) as HydroCalcuLinkResult; if (calcuLinkResult != null) { if (calcuLinkResult.CalcuVelocity < 0) { item.SpeedX = -item.SpeedX; } } } break; default: break; } return item; } /// /// 设置 /// public void Set() { if (this.Visible) { _views?.ForEach(async x => await x.LoadFlowEffect(this.Items)); } else { _views?.ForEach(async x => await x.UnloadFlowEffect()); } } /// /// 设置 /// public void Set(HydroVisualInfo visual) { if (visual == null) { return; } var oldItem = this.Items?.Find(x => x.Id == visual.Code); if (oldItem != null) { if (this.Items != null) { this.Items.Remove(oldItem); } this.Items?.Remove(oldItem); } var allCalcuResultVisualDict = _calcuResult?.GetVisualDict(); var newItem = CreateItem(visual, allCalcuResultVisualDict); if (newItem != null) { if (this.Items != null) { this.Items.Add(newItem); } } if (this.Visible) { if (newItem != null) { _views?.ForEach(async x => await x.UpdateFlowEffect(newItem)); } } } } }