namespace HStation.Hydro
|
{
|
/// <summary>
|
/// 解析辅助类
|
/// </summary>
|
public class ParseHelper
|
{
|
/// <summary>
|
/// 从Revit解析
|
/// </summary>
|
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<Yw.Model.HydroReservoirInfo>();
|
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<Yw.Model.HydroTankInfo>();
|
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<Yw.Model.HydroEmitterInfo>();
|
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<Yw.Model.HydroJunctionInfo>();
|
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.Pipes != null && revitModel.Pipes.Count > 0)
|
{
|
hydro.Pipes = new List<Yw.Model.HydroPipeInfo>();
|
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.Pumps != null && revitModel.Pumps.Count > 0)
|
{
|
hydro.Pumps = new List<Yw.Model.HydroPumpInfo>();
|
foreach (var revitPump in revitModel.Pumps)
|
{
|
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<Yw.Model.HydroValveInfo>();
|
foreach (var revitValve in revitModel.Valves)
|
{
|
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.Decorators != null && revitModel.Decorators.Count > 0)
|
{
|
hydro.Decorators = new List<Yw.Model.HydroDecoratorInfo>();
|
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;
|
}
|
}
|
}
|