using Yw.Model;
|
using Yw.WinFrmUI.Bimface;
|
|
namespace HStation.WinFrmUI
|
{
|
/// <summary>
|
/// 水流动画辅助类
|
/// </summary>
|
public class SimulationFlowEffectHelper
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public SimulationFlowEffectHelper(SimulationVisualListHelper visualListHelper, ISimulationFlowEffectView view)
|
{
|
_visualListHelper = visualListHelper;
|
_views = new List<ISimulationFlowEffectView>() { view };
|
}
|
|
private SimulationVisualListHelper _visualListHelper = null;//可见列表辅助类
|
private List<ISimulationFlowEffectView> _views = null;//视图列表
|
private HydroCalcuResult _calcuResult = null;//计算结果
|
|
/// <summary>
|
/// 可见性
|
/// </summary>
|
public bool Visible
|
{
|
get { return _visible; }
|
set { _visible = value; }
|
}
|
private bool _visible = false;
|
|
/// <summary>
|
/// 项列表
|
/// </summary>
|
public List<LogicFlowEffect> Items
|
{
|
get { return _items; }
|
private set { _items = value; }
|
}
|
private List<LogicFlowEffect> _items = null;
|
|
/// <summary>
|
/// 初始化数据
|
/// </summary>
|
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<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
|
{
|
var item = CreateItem(visual, allCalcuResultVisualDict);
|
if (item != null)
|
{
|
if (this.Items == null)
|
{
|
this.Items = new List<LogicFlowEffect>();
|
}
|
this.Items.Add(item);
|
}
|
}
|
|
//创建项
|
private LogicFlowEffect CreateItem(HydroVisualInfo visual, Dictionary<string, HydroCalcuVisualResult> 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;
|
}
|
|
/// <summary>
|
/// 设置
|
/// </summary>
|
public void Set()
|
{
|
if (this.Visible)
|
{
|
_views?.ForEach(async x => await x.LoadFlowEffect(this.Items));
|
}
|
else
|
{
|
_views?.ForEach(async x => await x.UnloadFlowEffect());
|
}
|
}
|
|
/// <summary>
|
/// 设置
|
/// </summary>
|
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));
|
}
|
}
|
|
}
|
|
|
|
|
}
|
}
|