namespace HStation.Hydro
{
///
/// 解析辅助类
///
public class ParseHelper
{
///
/// 从Revit解析
///
public static Yw.Model.HydroModelInfo FromRevit(HStation.Model.RevitModel revitModel)
{
var hydro = new Yw.Model.HydroModelInfo();
hydro.Name = revitModel.Name;
hydro.Code = null;
hydro.Scene = HStation.Revit.ConstParas.Scene;
hydro.Paras = null;
hydro.Flags = null;
hydro.TagName = null;
hydro.Description = revitModel.Description;
//水库
if (revitModel.Reservoirs != null && revitModel.Reservoirs.Count > 0)
{
hydro.Reservoirs = new List();
foreach (var revitReservoir in revitModel.Reservoirs)
{
var reservoir = new Yw.Model.HydroReservoirInfo();
reservoir.Catalog = Yw.Hydro.Catalog.Reservoir;
reservoir.Name = revitReservoir.Name;
reservoir.Code = revitReservoir.Code;
reservoir.Flags = revitReservoir.Flags;
reservoir.Description = revitReservoir.Description;
reservoir.Head = revitReservoir.Head;
reservoir.Pattern = revitReservoir.Pattern;
var center = revitReservoir.BoundingBox.GetCenter();
reservoir.Position2d = new Yw.Model.Hydro.Position2d(center.X, center.Y);
reservoir.Position3d = new Yw.Model.Hydro.Position3d(center.X, center.Y, center.Z);
reservoir.ScenePropValueList = revitReservoir.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
{
PropName = x.PropName,
PropValue = x.PropValue
}).ToList();
hydro.Reservoirs.Add(reservoir);
}
}
//水池
if (revitModel.Tanks != null && revitModel.Tanks.Count > 0)
{
hydro.Tanks = new List();
foreach (var revitTank in revitModel.Tanks)
{
var tank = new Yw.Model.HydroTankInfo();
tank.Catalog = Yw.Hydro.Catalog.Tank;
tank.Name = revitTank.Name;
tank.Code = revitTank.Code;
tank.Flags = revitTank.Flags;
tank.Description = revitTank.Description;
tank.Elev = revitTank.Elev;
tank.InitLevel = revitTank.InitLevel;
tank.MinLevel = revitTank.MinLevel;
tank.MaxLevel = revitTank.MaxLevel;
tank.Diameter = revitTank.Diameter;
tank.MinVol = revitTank.MinVol;
tank.VolCurve = revitTank.VolCurve;
var center = revitTank.BoundingBox.GetCenter();
tank.Position2d = new Yw.Model.Hydro.Position2d(center.X, center.Y);
tank.Position3d = new Yw.Model.Hydro.Position3d(center.X, center.Y, center.Z);
tank.ScenePropValueList = revitTank.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
{
PropName = x.PropName,
PropValue = x.PropValue
}).ToList();
hydro.Tanks.Add(tank);
}
}
//扩散器
if (revitModel.Emitters != null && revitModel.Emitters.Count > 0)
{
hydro.Emitters = new List();
foreach (var revitEmitter in revitModel.Emitters)
{
var emitter = new Yw.Model.HydroEmitterInfo();
emitter.Catalog = Yw.Hydro.Catalog.Emitter;
emitter.Name = revitEmitter.Name;
emitter.Code = revitEmitter.Code;
emitter.Flags = revitEmitter.Flags;
emitter.Description = revitEmitter.Description;
emitter.EmitterType = revitEmitter.EmitterType;
emitter.FlowCoefficient = revitEmitter.FlowCoefficient;
var center = revitEmitter.BoundingBox.GetCenter();
emitter.Position2d = new Yw.Model.Hydro.Position2d(center.X, center.Y);
emitter.Position3d = new Yw.Model.Hydro.Position3d(center.X, center.Y, center.Z);
emitter.ScenePropValueList = revitEmitter.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
{
PropName = x.PropName,
PropValue = x.PropValue
}).ToList();
hydro.Emitters.Add(emitter);
}
}
//节点
if (revitModel.Junctions != null && revitModel.Junctions.Count > 0)
{
hydro.Junctions = new List();
foreach (var revitJunction in revitModel.Junctions)
{
var junction = new Yw.Model.HydroJunctionInfo();
junction.Catalog = Yw.Hydro.Catalog.Junction;
junction.Name = revitJunction.Name;
junction.Code = revitJunction.Code;
junction.Flags = revitJunction.Flags;
junction.Description = revitJunction.Description;
junction.Elev = revitJunction.Elev;
junction.Demand = revitJunction.Demand;
junction.Pattern = revitJunction.Pattern;
var center = revitJunction.BoundingBox.GetCenter();
junction.Position2d = new Yw.Model.Hydro.Position2d(center.X, center.Y);
junction.Position3d = new Yw.Model.Hydro.Position3d(center.X, center.Y, center.Z);
junction.ScenePropValueList = revitJunction.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
{
PropName = x.PropName,
PropValue = x.PropValue
}).ToList();
hydro.Junctions.Add(junction);
}
}
//水泵
if (revitModel.Pumps != null && revitModel.Pumps.Count > 0)
{
hydro.Pumps = new List();
foreach (var revitPump in revitModel.Pumps)
{
var revitStartJunction = revitModel.Junctions?.Find(x => x.Code == revitPump.StartCode);
if (revitStartJunction == null)
{
}
var revitEndJunction = revitModel.Junctions?.Find(x => x.Code == revitPump.EndCode);
if (revitEndJunction == null)
{
}
var pump = new Yw.Model.HydroPumpInfo();
pump.Catalog = Yw.Hydro.Catalog.Pump;
pump.Name = revitPump.Name;
pump.Code = revitPump.Code;
pump.Flags = revitPump.Flags;
pump.Description = revitPump.Description;
pump.StartCode = revitPump.StartCode;
pump.EndCode = revitPump.EndCode;
pump.Power = revitPump.Power;
pump.Head = revitPump.Head;
pump.Speed = revitPump.Speed;
pump.Pattern = revitPump.Pattern;
pump.ScenePropValueList = revitPump.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
{
PropName = x.PropName,
PropValue = x.PropValue
}).ToList();
hydro.Pumps.Add(pump);
}
}
//阀门
if (revitModel.Valves != null && revitModel.Valves.Count > 0)
{
hydro.Valves = new List();
foreach (var revitValve in revitModel.Valves)
{
var revitStartJunction = revitModel.Junctions?.Find(x => x.Code == revitValve.StartCode);
if (revitStartJunction == null)
{
}
var revitEndJunction = revitModel.Junctions?.Find(x => x.Code == revitValve.EndCode);
if (revitEndJunction == null)
{
}
var valve = new Yw.Model.HydroValveInfo();
valve.Catalog = Yw.Hydro.Catalog.Valve;
valve.Name = revitValve.Name;
valve.Code = revitValve.Code;
valve.Flags = revitValve.Flags;
valve.Description = revitValve.Description;
valve.StartCode = revitValve.StartCode;
valve.EndCode = revitValve.EndCode;
valve.Diameter = revitValve.Diameter;
valve.MinorLoss = revitValve.MinorLoss;
valve.ValveType = revitValve.ValveType;
valve.ValveSetting = revitValve.ValveSetting;
valve.ScenePropValueList = revitValve.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
{
PropName = x.PropName,
PropValue = x.PropValue
}).ToList();
hydro.Valves.Add(valve);
}
}
//管道
if (revitModel.Pipes != null && revitModel.Pipes.Count > 0)
{
hydro.Pipes = new List();
foreach (var revitPipe in revitModel.Pipes)
{
var pipe = new Yw.Model.HydroPipeInfo();
pipe.Catalog = Yw.Hydro.Catalog.Pipe;
pipe.Name = revitPipe.Name;
pipe.Code = revitPipe.Code;
pipe.Flags = revitPipe.Flags;
pipe.Description = revitPipe.Description;
pipe.StartCode = revitPipe.StartCode;
pipe.EndCode = revitPipe.EndCode;
pipe.Diameter = revitPipe.Diameter;
pipe.Length = revitPipe.Length;
pipe.Roughness = revitPipe.Roughness;
pipe.MinorLoss = revitPipe.MinorLoss;
pipe.PipeStatus = revitPipe.PipeStatus;
pipe.ScenePropValueList = revitPipe.PropValueList?.Select(x => new Yw.Model.HydroScenePropValuePureInfo()
{
PropName = x.PropName,
PropValue = x.PropValue
}).ToList();
hydro.Pipes.Add(pipe);
}
}
//装饰件
if (revitModel.Decorators != null && revitModel.Decorators.Count > 0)
{
hydro.Decorators = new List();
foreach (var revitDecorator in revitModel.Decorators)
{
var decorator = new Yw.Model.HydroDecoratorInfo();
decorator.Name = revitDecorator.Name;
decorator.Category = revitDecorator.Category;
decorator.Decoration = revitDecorator.Decoration;
decorator.Description = revitDecorator.Description;
hydro.Decorators.Add(decorator);
}
}
return hydro;
}
}
}