using System.Transactions;
|
|
namespace Yw.Hydro
|
{
|
/// <summary>
|
/// 解析辅助类
|
/// </summary>
|
public class ParseHelper
|
{
|
/// <summary>
|
///
|
/// </summary>
|
public static Network ToNetwork(Yw.Model.HydroModelInfo model)
|
{
|
if (model == null)
|
{
|
return default;
|
}
|
var netWork = new Network();
|
|
#region 节点
|
|
//连接节点
|
if (model.Junctions != null && model.Junctions.Count > 0)
|
{
|
foreach (var junction in model.Junctions)
|
{
|
var junctionModel = new Junction();
|
junctionModel.Id = junction.Code;
|
junctionModel.Name = junction.Name;
|
junctionModel.Quality = junction.Quality;
|
junctionModel.Position = new Position2d(junction.Position2d.X, junction.Position2d.Y);
|
junctionModel.Elev = junction.Elev;
|
junctionModel.Demand = junction.Demand;
|
junctionModel.DemandPattern = junction.DemandPattern;
|
|
netWork.Junctions.Add(junctionModel);
|
}
|
}
|
|
//喷嘴
|
if (model.Nozzles != null && model.Nozzles.Count > 0)
|
{
|
foreach (var nozzle in model.Nozzles)
|
{
|
var nozzleModel = new Nozzle();
|
nozzleModel.Id = nozzle.Code;
|
nozzleModel.Name = nozzle.Name;
|
nozzleModel.Quality = nozzle.Quality;
|
nozzleModel.Position = new Position2d(nozzle.Position2d.X, nozzle.Position2d.Y);
|
nozzleModel.Elev = nozzle.Elev;
|
nozzleModel.Demand = nozzle.Demand;
|
nozzleModel.DemandPattern = nozzle.DemandPattern;
|
nozzleModel.Coefficient = nozzle.Coefficient;
|
netWork.Nozzles.Add(nozzleModel);
|
}
|
}
|
|
//消火栓
|
if (model.Hydrants != null && model.Hydrants.Count > 0)
|
{
|
foreach (var hydrant in model.Hydrants)
|
{
|
var hydrantModel = new Hydrant();
|
hydrantModel.Id = hydrant.Code;
|
hydrantModel.Name = hydrant.Name;
|
hydrantModel.Quality = hydrant.Quality;
|
hydrantModel.Position = new Position2d(hydrant.Position2d.X, hydrant.Position2d.Y);
|
hydrantModel.Elev = hydrant.Elev;
|
hydrantModel.Demand = hydrant.Demand;
|
hydrantModel.DemandPattern = hydrant.DemandPattern;
|
hydrantModel.Coefficient = hydrant.Coefficient;
|
netWork.Hydrants.Add(hydrantModel);
|
}
|
}
|
|
//弯头
|
if (model.Elbows != null && model.Elbows.Count > 0)
|
{
|
foreach (var elbow in model.Elbows)
|
{
|
var elbowModel = new Junction();
|
elbowModel.Id = elbow.Code;
|
elbowModel.Name = elbow.Name;
|
elbowModel.Quality = elbow.Quality;
|
elbowModel.Position = new Position2d(elbow.Position2d.X, elbow.Position2d.Y);
|
elbowModel.Elev = elbow.Elev;
|
elbowModel.Demand = elbow.Demand;
|
elbowModel.DemandPattern = elbow.DemandPattern;
|
netWork.Junctions.Add(elbowModel);
|
}
|
}
|
|
//三通
|
if (model.Threelinks != null && model.Threelinks.Count > 0)
|
{
|
foreach (var threelink in model.Threelinks)
|
{
|
var threelinkModel = new Junction();
|
threelinkModel.Id = threelink.Code;
|
threelinkModel.Name = threelink.Name;
|
threelinkModel.Quality = threelink.Quality;
|
threelinkModel.Position = new Position2d(threelink.Position2d.X, threelink.Position2d.Y);
|
threelinkModel.Elev = threelink.Elev;
|
threelinkModel.Demand = threelink.Demand;
|
threelinkModel.DemandPattern = threelink.DemandPattern;
|
netWork.Junctions.Add(threelinkModel);
|
}
|
}
|
|
//四通
|
if (model.Fourlinks != null && model.Fourlinks.Count > 0)
|
{
|
foreach (var fourlink in model.Fourlinks)
|
{
|
var fourlinkModel = new Junction();
|
fourlinkModel.Id = fourlink.Code;
|
fourlinkModel.Name = fourlink.Name;
|
fourlinkModel.Quality = fourlink.Quality;
|
fourlinkModel.Position = new Position2d(fourlink.Position2d.X, fourlink.Position2d.Y);
|
fourlinkModel.Elev = fourlink.Elev;
|
fourlinkModel.Demand = fourlink.Demand;
|
fourlinkModel.DemandPattern = fourlink.DemandPattern;
|
netWork.Junctions.Add(fourlinkModel);
|
}
|
}
|
|
//水表
|
if (model.Meters != null && model.Meters.Count > 0)
|
{
|
foreach (var meter in model.Meters)
|
{
|
var meterModel = new Meter();
|
meterModel.Id = meter.Code;
|
meterModel.Name = meter.Name;
|
meterModel.Quality = meter.Quality;
|
meterModel.Position = new Position2d(meter.Position2d.X, meter.Position2d.Y);
|
meterModel.Elev = meter.Elev;
|
meterModel.Demand = meter.Demand;
|
meterModel.DemandPattern = meter.DemandPattern;
|
netWork.Meters.Add(meterModel);
|
}
|
}
|
|
//流量计
|
if (model.Flowmeters != null && model.Flowmeters.Count > 0)
|
{
|
foreach (var flowmeter in model.Flowmeters)
|
{
|
var flowmeterModel = new Junction();
|
flowmeterModel.Id = flowmeter.Code;
|
flowmeterModel.Name = flowmeter.Name;
|
flowmeterModel.Quality = flowmeter.Quality;
|
flowmeterModel.Position = new Position2d(flowmeter.Position2d.X, flowmeter.Position2d.Y);
|
flowmeterModel.Elev = flowmeter.Elev;
|
flowmeterModel.Demand = flowmeter.Demand;
|
flowmeterModel.DemandPattern = flowmeter.DemandPattern;
|
netWork.Junctions.Add(flowmeterModel);
|
}
|
}
|
|
//压力表
|
if (model.Pressmeters != null && model.Pressmeters.Count > 0)
|
{
|
foreach (var pressmeter in model.Pressmeters)
|
{
|
var pressmeterModel = new Junction();
|
pressmeterModel.Id = pressmeter.Code;
|
pressmeterModel.Name = pressmeter.Name;
|
pressmeterModel.Quality = pressmeter.Quality;
|
pressmeterModel.Position = new Position2d(pressmeter.Position2d.X, pressmeter.Position2d.Y);
|
pressmeterModel.Elev = pressmeter.Elev;
|
pressmeterModel.Demand = pressmeter.Demand;
|
pressmeterModel.DemandPattern = pressmeter.DemandPattern;
|
netWork.Junctions.Add(pressmeterModel);
|
}
|
}
|
|
//闷头
|
if (model.Bluntheads != null && model.Bluntheads.Count > 0)
|
{
|
foreach (var blunthead in model.Bluntheads)
|
{
|
var bluntheadModel = new Junction();
|
bluntheadModel.Id = blunthead.Code;
|
bluntheadModel.Name = blunthead.Name;
|
bluntheadModel.Quality = blunthead.Quality;
|
bluntheadModel.Position = new Position2d(blunthead.Position2d.X, blunthead.Position2d.Y);
|
bluntheadModel.Elev = blunthead.Elev;
|
bluntheadModel.Demand = blunthead.Demand;
|
bluntheadModel.DemandPattern = blunthead.DemandPattern;
|
netWork.Junctions.Add(bluntheadModel);
|
}
|
}
|
|
//水库
|
if (model.Reservoirs != null && model.Reservoirs.Count > 0)
|
{
|
foreach (var reservoir in model.Reservoirs)
|
{
|
var reservoirModel = new Reservoir();
|
reservoirModel.Id = reservoir.Code;
|
reservoirModel.Name = reservoir.Name;
|
reservoirModel.Quality = reservoir.Quality;
|
reservoirModel.Position = new Position2d(reservoir.Position2d.X, reservoir.Position2d.Y);
|
reservoirModel.PoolElev = reservoir.PoolElev.HasValue ? reservoir.PoolElev.Value : 0;
|
reservoirModel.Head = reservoir.Head;
|
reservoirModel.HeadPattern = reservoir.HeadPattern;
|
netWork.Reservoirs.Add(reservoirModel);
|
}
|
}
|
|
//水池
|
if (model.Tanks != null && model.Tanks.Count > 0)
|
{
|
foreach (var tank in model.Tanks)
|
{
|
var tankModel = new Tank();
|
tankModel.Id = tank.Code;
|
tankModel.Name = tank.Name;
|
tankModel.Quality = tank.Quality;
|
tankModel.Position = new Position2d(tank.Position2d.X, tank.Position2d.Y);
|
tankModel.PoolElev = tank.PoolElev;
|
tankModel.InitLevel = tank.InitLevel;
|
tankModel.MaxLevel = tank.MaxLevel;
|
tankModel.MinLevel = tank.MinLevel;
|
tankModel.MinVol = tank.MinVol;
|
tankModel.VolCurve = tank.VolCurve;
|
tankModel.Diameter = tank.Diameter;
|
netWork.Tanks.Add(tankModel);
|
}
|
}
|
|
//水箱
|
if (model.Waterboxs != null && model.Waterboxs.Count > 0)
|
{
|
foreach (var waterbox in model.Waterboxs)
|
{
|
var waterboxModel = new Tank();
|
waterboxModel.Id = waterbox.Code;
|
waterboxModel.Name = waterbox.Name;
|
waterboxModel.Quality = waterbox.Quality;
|
waterboxModel.Position = new Position2d(waterbox.Position2d.X, waterbox.Position2d.Y);
|
waterboxModel.PoolElev = waterbox.PoolElev;
|
waterboxModel.InitLevel = waterbox.InitLevel;
|
waterboxModel.MaxLevel = waterbox.MaxLevel;
|
waterboxModel.MinLevel = waterbox.MinLevel;
|
waterboxModel.MinVol = waterbox.MinVol;
|
waterboxModel.VolCurve = waterbox.VolCurve;
|
waterboxModel.Diameter = waterbox.Diameter;
|
netWork.Tanks.Add(waterboxModel);
|
}
|
}
|
|
#endregion
|
|
#region 管段
|
|
var allNodes = netWork.GetAllNodes();
|
|
//管道
|
if (model.Pipes != null && model.Pipes.Count > 0)
|
{
|
foreach (var pipe in model.Pipes)
|
{
|
var pipeModel = new Pipe();
|
pipeModel.Id = pipe.Code;
|
pipeModel.Name = pipe.Name;
|
pipeModel.StartNode = allNodes.Find(x => x.Id == pipe.StartCode);
|
pipeModel.EndNode = allNodes.Find(x => x.Id == pipe.EndCode);
|
pipeModel.LinkStatus = pipe.LinkStatus;
|
pipeModel.Length = pipe.Length;
|
pipeModel.Diameter = pipe.Diameter;
|
pipeModel.Roughness = pipe.Roughness;
|
pipeModel.MinorLoss = pipe.MinorLoss;
|
netWork.Pipes.Add(pipeModel);
|
}
|
}
|
|
//过渡件
|
if (model.Translations != null && model.Translations.Count > 0)
|
{
|
foreach (var translation in model.Translations)
|
{
|
var translationModel = new Pipe();
|
translationModel.Id = translation.Code;
|
translationModel.Name = translation.Name;
|
translationModel.StartNode = allNodes.Find(x => x.Id == translation.StartCode);
|
translationModel.EndNode = allNodes.Find(x => x.Id == translation.EndCode);
|
translationModel.LinkStatus = translation.LinkStatus;
|
translationModel.Length = translation.Length;
|
translationModel.Diameter = translation.Diameter;
|
translationModel.Roughness = translation.Roughness;
|
translationModel.MinorLoss = translation.MinorLoss;
|
netWork.Pipes.Add(translationModel);
|
}
|
}
|
|
//换热器
|
if (model.Exchangers != null && model.Exchangers.Count > 0)
|
{
|
foreach (var exchanger in model.Exchangers)
|
{
|
var exchangerModel = new Pipe();
|
exchangerModel.Id = exchanger.Code;
|
exchangerModel.Name = exchanger.Name;
|
exchangerModel.StartNode = allNodes.Find(x => x.Id == exchanger.StartCode);
|
exchangerModel.EndNode = allNodes.Find(x => x.Id == exchanger.EndCode);
|
exchangerModel.LinkStatus = exchanger.LinkStatus;
|
exchangerModel.Length = exchanger.Length;
|
exchangerModel.Diameter = exchanger.Diameter;
|
exchangerModel.Roughness = exchanger.Roughness;
|
exchangerModel.MinorLoss = exchanger.MinorLoss;
|
netWork.Pipes.Add(exchangerModel);
|
}
|
}
|
|
//水泵
|
if (model.Pumps != null && model.Pumps.Count > 0)
|
{
|
foreach (var pump in model.Pumps)
|
{
|
var pumpModel = new Pump();
|
pumpModel.Id = pump.Code;
|
pumpModel.Name = pump.Name;
|
pumpModel.StartNode = allNodes.Find(x => x.Id == pump.StartCode);
|
pumpModel.EndNode = allNodes.Find(x => x.Id == pump.EndCode);
|
pumpModel.LinkStatus = pump.LinkStatus;
|
pumpModel.RatedPower = pump.RatedPower;
|
pumpModel.CurveQH = pump.CurveQH;
|
pumpModel.SpeedRatio = pump.SpeedRatio;
|
pumpModel.SpeedRatioPattern = pump.SpeedRatioPattern;
|
pumpModel.Price = pump.Price;
|
pumpModel.PricePattern = pump.PricePattern;
|
pumpModel.CurveQE = pump.CurveQE;
|
netWork.Pumps.Add(pumpModel);
|
}
|
}
|
|
//阀门
|
if (model.Valves != null && model.Valves.Count > 0)
|
{
|
foreach (var valve in model.Valves)
|
{
|
var valveModel = new Yw.EPAnet.Valve();
|
valveModel.Id = valve.Code;
|
valveModel.Name = valve.Name;
|
valveModel.StartNode = allNodes.Find(x => x.Id == valve.StartCode);
|
valveModel.EndNode = allNodes.Find(x => x.Id == valve.EndCode);
|
valveModel.LinkStatus = valve.LinkStatus;
|
valveModel.Diameter = valve.Diameter;
|
valveModel.MinorLoss = valve.MinorLoss;
|
valveModel.ValveType = valve.ValveType;
|
valveModel.ValveSetting = valve.ValveSetting;
|
|
netWork.Valves.Add(valveModel);
|
}
|
}
|
|
|
#endregion
|
|
#region 节点连接
|
|
var allLinks = netWork.GetAllLinks();
|
foreach (var node in allNodes)
|
{
|
var links = allLinks.Where(x => x.StartNode.Id == node.Id || x.EndNode.Id == node.Id).ToList();
|
node.Links = links;
|
}
|
|
#endregion
|
|
|
return netWork;
|
}
|
|
|
|
|
}
|
}
|