using Hydro.Core.Model;
using HyCore = Hydro.Core;
namespace Yw.Hydro
{
///
/// 解析辅助类
///
public class ParseHelper
{
///
///
///
public static NetWork ToNetWork(Yw.Model.HydroModelInfo model)
{
if (model == null)
{
return default;
}
var netWork = new NetWork();
//连接节点
if (model.Junctions != null && model.Junctions.Count > 0)
{
foreach (var junction in model.Junctions)
{
var junctionModel = new JunctionModel();
junctionModel.ID = junction.Code;
junctionModel.Name = junction.Name;
junctionModel.Elev = (float)junction.Elev;
junctionModel.Demand = junction.Demand.HasValue ? (float)junction.Demand.Value : 0;
junctionModel.PatternID = junction.DemandPattern;
junctionModel.X = (float)junction.Position2d.X;
junctionModel.Y = (float)junction.Position2d.Y;
netWork.Nodes.Add(junctionModel);
}
}
//水库
if (model.Reservoirs != null && model.Reservoirs.Count > 0)
{
foreach (var reservoir in model.Reservoirs)
{
var reservoirModel = new ReservoisModel();
reservoirModel.ID = reservoir.Code;
reservoirModel.Name = reservoir.Name;
reservoirModel.Head = (float)reservoir.Head;
reservoirModel.PatternID = reservoir.HeadPattern;
reservoirModel.X = (float)reservoir.Position2d.X;
reservoirModel.Y = (float)reservoir.Position2d.Y;
netWork.Nodes.Add(reservoirModel);
}
}
//水池
if (model.Tanks != null && model.Tanks.Count > 0)
{
foreach (var tank in model.Tanks)
{
var tankModel = new TankModel();
tankModel.ID = tank.Code;
tankModel.Name = tank.Name;
tankModel.Elev = (float)tank.PoolElev;
tankModel.InitLevel = (float)tank.InitLevel;
tankModel.MaxLevel = (float)tank.MaxLevel;
tankModel.MinLevel = (float)tank.MinLevel;
tankModel.MinVol = (float)tank.MinVol;
tankModel.VolCurve = tank.VolCurve;
tankModel.Diameter = (float)tank.Diameter;
tankModel.X = (float)tank.Position2d.X;
tankModel.Y = (float)tank.Position2d.Y;
netWork.Nodes.Add(tankModel);
}
}
//管道
if (model.Pipes != null && model.Pipes.Count > 0)
{
foreach (var pipe in model.Pipes)
{
var pipeModel = new PipeModel();
pipeModel.ID = pipe.Code;
pipeModel.Name = pipe.Name;
pipeModel.Node1 = pipe.StartCode;
pipeModel.Node2 = pipe.EndCode;
pipeModel.Length = (float)pipe.Length;
pipeModel.Diameter = (float)pipe.Diameter;
pipeModel.Roughness = (float)pipe.Roughness;
pipeModel.MinorLoss = (float)pipe.MinorLoss;
netWork.Links.Add(pipeModel);
}
}
//水泵
if (model.Pumps != null && model.Pumps.Count > 0)
{
foreach (var pump in model.Pumps)
{
var pumpModel = new PumpModel();
pumpModel.ID = pump.Code;
pumpModel.Name = pump.Name;
pumpModel.Node1 = pump.StartCode;
pumpModel.Node2 = pump.EndCode;
pumpModel.RatedPower = pump.RatedPower;
pumpModel.FlowCurveID = pump.CurveQH;
pumpModel.Status = HyCore.ObjectEnum.StatusType.OPEN;
netWork.Links.Add(pumpModel);
}
}
return netWork;
}
}
}