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; } } }