using HStation.Model;
namespace HStation.Hydro
{
///
/// 解析辅助类
///
public class ParseHelper
{
///
/// 从Revit解析
///
public static Yw.Model.HydroModelInfo FromRevit(HStation.Model.RevitModel revitModel, out string msg)
{
msg = string.Empty;
#region Revit组件整合
var allRevitParterList = new List();
if (revitModel.Reservoirs != null)
{
allRevitParterList.AddRange(revitModel.Reservoirs);
}
if (revitModel.Tanks != null)
{
allRevitParterList.AddRange(revitModel.Tanks);
}
if (revitModel.Junctions != null)
{
allRevitParterList.AddRange(revitModel.Junctions);
}
if (revitModel.Pipes != null)
{
allRevitParterList.AddRange(revitModel.Pipes);
}
if (revitModel.Valves != null)
{
allRevitParterList.AddRange(revitModel.Valves);
}
if (revitModel.Pumps != null)
{
allRevitParterList.AddRange(revitModel.Pumps);
}
#endregion
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.Center;
// 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.Key,
// PropValue = x.Value?.ToString()
// }).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.PoolElev;
// 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.Center;
// 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.Key,
// PropValue = x.Value?.ToString()
// }).ToList();
// hydro.Tanks.Add(tank);
// }
//}
////节点
//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.Center;
// 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.Key,
// PropValue = x.Value?.ToString()
// }).ToList();
// hydro.Junctions.Add(junction);
// }
//}
////水泵
//if (revitModel.Pumps != null && revitModel.Pumps.Count > 0)
//{
// hydro.Pumps = new List();
// foreach (var revitPump in revitModel.Pumps)
// {
// var revitStartParter = allRevitParterList.Find(x => x.Code == revitPump.StartCode);
// if (revitStartParter == null)
// {
// msg = $"Pump:{revitPump.Code},StartCode:{revitPump.StartCode} Error";
// return default;
// }
// if (revitStartParter is RevitReservoir)
// {
// msg = $"Pump:{revitPump.Code},StartCode:{revitPump.StartCode} Error,Canot Reservoir";
// return default;
// }
// if (revitStartParter is RevitTank)
// {
// msg = $"Pump:{revitPump.Code},StartCode:{revitPump.StartCode} Error,Canot Tank";
// return default;
// }
// if (revitStartParter is not RevitJunction)
// {
// var revitStartJunction = new RevitJunction();
// revitStartJunction.Id = RevitHelper.CreateUniqueCode(Yw.Hydro.Catalog.Junction, allRevitParterList);
// revitStartJunction.Name = revitStartJunction.Id;
// revitStartJunction.Code = revitStartJunction.Id;
// revitStartJunction.Elev = revitPump.Elev;
// }
// var revitEndJunction = revitModel.Junctions?.Find(x => x.Code == revitPump.EndCode);
// if (revitEndJunction == null)
// {
// msg = $"Pump:{revitPump.Code},EndCode:{revitPump.EndCode} Error";
// return default;
// }
// 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.Key,
// PropValue = x.Value?.ToString()
// }).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.Key,
// PropValue = x.Value?.ToString()
// }).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.Key,
// PropValue = x.Value?.ToString()
// }).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;
}
}
}