using HStation.Model;
|
|
namespace HStation.Hydro
|
{
|
/// <summary>
|
/// 解析辅助类
|
/// </summary>
|
public class ParseHelper
|
{
|
/// <summary>
|
/// 从Revit解析
|
/// </summary>
|
public static Yw.Model.HydroModelInfo FromRevit(HStation.Model.RevitModel revitModel, out string msg)
|
{
|
msg = string.Empty;
|
|
#region Revit组件整合
|
|
var allRevitParterList = new List<HStation.Model.RevitParter>();
|
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<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.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<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.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<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.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<Yw.Model.HydroPumpInfo>();
|
// 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<Yw.Model.HydroValveInfo>();
|
// 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<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.Key,
|
// PropValue = x.Value?.ToString()
|
// }).ToList();
|
// hydro.Pipes.Add(pipe);
|
// }
|
//}
|
|
////装饰件
|
//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;
|
}
|
}
|
}
|