namespace HStation.Service
{
///
/// Revit Json辅助类
///
public class RevitJsonHelper
{
///
/// 从json字符串中解析
///
public static HStation.Model.RevitModel FromJsonString
(
string revitJsonString,
string revitOthersJsonString,
out string msg
)
{
msg = string.Empty;
if (string.IsNullOrEmpty(revitJsonString))
{
msg = "Revit json 字符串为空";
return default;
}
try
{
var model = new Model.RevitModel();
//解析结构json
var jarray = JArray.Parse(revitJsonString);
for (int i = 0; i < jarray.Count; i++)
{
var jobject = JObject.Parse(jarray[i].ToString());
var catalog = jobject[RevitJsonProp.Catalog].ToString();
switch (catalog)
{
case RevitJsonCatalog.Reservoir:
{
var reservoir = ParseReservoir(jobject);
if (reservoir != null)
{
model.Reservoirs.Add(reservoir);
}
}
break;
case RevitJsonCatalog.Tank:
{
var tank = ParseTank(jobject);
if (tank != null)
{
model.Tanks.Add(tank);
}
}
break;
case RevitJsonCatalog.Waterbox:
{
var waterbox = ParseWaterbox(jobject);
if (waterbox != null)
{
model.Waterboxs.Add(waterbox);
}
}
break;
case RevitJsonCatalog.Junction:
{
var junction = ParseJunction(jobject);
if (junction != null)
{
model.Junctions.Add(junction);
}
}
break;
case RevitJsonCatalog.Blunthead:
{
var blunthead = ParseBlunthead(jobject);
if (blunthead != null)
{
model.Bluntheads.Add(blunthead);
}
}
break;
case RevitJsonCatalog.Elbow:
{
var elbow = ParseElbow(jobject);
if (elbow != null)
{
model.Elbows.Add(elbow);
}
}
break;
case RevitJsonCatalog.Threelink:
{
var threelink = ParseThreelink(jobject);
if (threelink != null)
{
model.Threelinks.Add(threelink);
}
}
break;
case RevitJsonCatalog.Fourlink:
{
var fourlink = ParseFourlink(jobject);
if (fourlink != null)
{
model.Fourlinks.Add(fourlink);
}
}
break;
case RevitJsonCatalog.Meter:
{
var meter = ParseMeter(jobject);
if (meter != null)
{
model.Meters.Add(meter);
}
}
break;
case RevitJsonCatalog.Flowmeter:
{
var flowmeter = ParseFlowmeter(jobject);
if (flowmeter != null)
{
model.Flowmeters.Add(flowmeter);
}
}
break;
case RevitJsonCatalog.Pressmeter:
{
var pressmeter = ParsePressmeter(jobject);
if (pressmeter != null)
{
model.Pressmeters.Add(pressmeter);
}
}
break;
case RevitJsonCatalog.Nozzle:
{
var nozzle = ParseNozzle(jobject);
if (nozzle != null)
{
model.Nozzles.Add(nozzle);
}
}
break;
case RevitJsonCatalog.Hydrant:
{
var hydrant = ParseHydrant(jobject);
if (hydrant != null)
{
model.Hydrants.Add(hydrant);
}
}
break;
case RevitJsonCatalog.Pipe:
{
var pipe = ParsePipe(jobject);
if (pipe != null)
{
model.Pipes.Add(pipe);
}
}
break;
case RevitJsonCatalog.Translation:
{
var translation = ParseTranslation(jobject);
if (translation != null)
{
model.Translations.Add(translation);
}
}
break;
case RevitJsonCatalog.Exchanger:
{
var exchanger = ParseExchanger(jobject);
if (exchanger != null)
{
model.Exchangers.Add(exchanger);
}
}
break;
case RevitJsonCatalog.Pump:
{
var pump = ParsePump(jobject);
if (pump != null)
{
model.Pumps.Add(pump);
}
}
break;
case RevitJsonCatalog.Valve:
{
var valve = ParseValve(jobject);
if (valve != null)
{
model.Valves.Add(valve);
}
}
break;
case RevitJsonCatalog.Other:
{
var decorator = ParseDecorator(jobject);
if (decorator != null)
{
model.Decorators.Add(decorator);
}
}
break;
default: break;
}
}
//解析其他json
var jothersArray = JArray.Parse(revitOthersJsonString);
if (jothersArray != null && jothersArray.Count > 0)
{
var allParterList = model.GetAllParters();
for (int i = 0; i < jothersArray.Count; i++)
{
var jobject = jothersArray[i];
var id = jobject[RevitOthersJsonProp.Id]?.ToString();
if (string.IsNullOrEmpty(id))
{
continue;
}
if (allParterList.Exists(x => x.Id == id))
{
continue;
}
if (model.Decorators.Exists(x => x.Id == id))
{
continue;
}
var decorator = new Model.RevitDecorator();
decorator.Id = id;
decorator.Code = id;
decorator.Name = jobject[RevitOthersJsonProp.Name]?.ToString();
decorator.Category = jobject[RevitOthersJsonProp.CategoryName]?.ToString();
decorator.Decoration = jobject[RevitOthersJsonProp.CategoryID]?.ToString();
model.Decorators.Add(decorator);
}
}
return model;
}
catch (Exception ex)
{
msg = ex.Message;
return default;
}
}
///
/// 从json文件中解析
///
public static Model.RevitModel FromJsonFile(string revitJsonFile, string revitOthersJsonFile, out string msg)
{
if (!File.Exists(revitJsonFile))
{
msg = "Json 文件不存在";
return default;
}
var revitJson = File.ReadAllText(revitJsonFile);
var revitOthersJson = string.Empty;
if (File.Exists(revitOthersJsonFile))
{
revitOthersJson = File.ReadAllText(revitOthersJsonFile);
}
var revitModel = FromJsonString(revitJson, revitOthersJson, out msg);
if (revitModel == null)
{
return default;
}
revitModel.Name = Path.GetFileNameWithoutExtension(revitJsonFile);
revitModel.Description = $"解析【{Path.GetFileName(revitJsonFile)}】文件";
return revitModel;
}
//解析连接节点
private static HStation.Model.RevitJunction ParseJunction(JToken jobject)
{
if (jobject == null)
{
return default;
}
//基础信息
var junction = new Model.RevitJunction();
junction.Id = jobject[RevitJsonProp.Id].ToString();
junction.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(junction.Code))
{
junction.Code = junction.Id;
}
junction.Name = jobject[RevitJsonProp.Name].ToString();
junction.ModelType = jobject[RevitJsonProp.ModelType].ToString();
junction.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
junction.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
junction.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
junction.Position = junction.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
junction.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.Elev].MatchNumeric(out double elev))
{
junction.Elev = elev / 1000f;
}
if (junction.Elev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
junction.Elev = elevOfElevation / 1000f;
}
}
}
if (junction.Elev <= 0)
{
//通过z轴自动计算
junction.Elev = junction.Position.Z;
}
//需水量
if (jobject[RevitJsonProp.Demand].MatchNumeric(out double demand))
{
junction.Demand = demand;
}
//需水模式
junction.DemandPattern = jobject[RevitJsonProp.DemandPattern].ToString();
return junction;
}
//解析喷头
private static HStation.Model.RevitNozzle ParseNozzle(JToken jobject)
{
if (jobject == null)
{
return default;
}
//基本信息
var nozzle = new Model.RevitNozzle();
nozzle.Id = jobject[RevitJsonProp.Id].ToString();
nozzle.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(nozzle.Code))
{
nozzle.Code = nozzle.Id;
}
nozzle.Name = jobject[RevitJsonProp.Name].ToString();
nozzle.ModelType = jobject[RevitJsonProp.ModelType].ToString();
nozzle.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
nozzle.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
nozzle.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
nozzle.Position = nozzle.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
nozzle.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.Elev].MatchNumeric(out double elev))
{
nozzle.Elev = elev / 1000f;
}
if (nozzle.Elev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
nozzle.Elev = elevOfElevation / 1000f;
}
}
}
if (nozzle.Elev <= 0)
{
//通过z轴自动计算
nozzle.Elev = nozzle.Position.Z;
}
//需水量
if (jobject[RevitJsonProp.Demand].MatchNumeric(out double demand))
{
nozzle.Demand = demand;
}
//需水模式
nozzle.DemandPattern = jobject[RevitJsonProp.DemandPattern].ToString();
//喷射系数
if (jobject[RevitJsonProp.CoefficientP].MatchNumeric(out double coeffient))
{
nozzle.Coefficient = coeffient;
}
return nozzle;
}
//解析消火栓
private static HStation.Model.RevitHydrant ParseHydrant(JToken jobject)
{
if (jobject == null)
{
return default;
}
//基本信息
var hydrant = new Model.RevitHydrant();
hydrant.Id = jobject[RevitJsonProp.Id].ToString();
hydrant.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(hydrant.Code))
{
hydrant.Code = hydrant.Id;
}
hydrant.Name = jobject[RevitJsonProp.Name].ToString();
hydrant.ModelType = jobject[RevitJsonProp.ModelType].ToString();
hydrant.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
hydrant.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
hydrant.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
hydrant.Position = hydrant.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
hydrant.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.Elev].MatchNumeric(out double elev))
{
hydrant.Elev = elev / 1000f;
}
if (hydrant.Elev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
hydrant.Elev = elevOfElevation / 1000f;
}
}
}
if (hydrant.Elev <= 0)
{
//通过z轴自动计算
hydrant.Elev = hydrant.Position.Z;
}
//需水量
if (jobject[RevitJsonProp.Demand].MatchNumeric(out double demand))
{
hydrant.Demand = demand;
}
//需水模式
hydrant.DemandPattern = jobject[RevitJsonProp.DemandPattern].ToString();
//流量系数
if (jobject[RevitJsonProp.CoefficientF].MatchNumeric(out double coeffient))
{
hydrant.Coefficient = coeffient;
}
return hydrant;
}
//解析弯头
private static HStation.Model.RevitElbow ParseElbow(JToken jobject)
{
if (jobject == null)
{
return default;
}
//基本信息
var elbow = new Model.RevitElbow();
elbow.Id = jobject[RevitJsonProp.Id].ToString();
elbow.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(elbow.Code))
{
elbow.Code = elbow.Id;
}
elbow.Name = jobject[RevitJsonProp.Name].ToString();
elbow.ModelType = jobject[RevitJsonProp.ModelType].ToString();
elbow.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
elbow.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
elbow.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
elbow.Position = elbow.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
elbow.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.Elev].MatchNumeric(out double elev))
{
elbow.Elev = elev / 1000f;
}
if (elbow.Elev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
elbow.Elev = elevOfElevation / 1000f;
}
}
}
if (elbow.Elev <= 0)
{
//通过z轴自动计算
elbow.Elev = elbow.Position.Z;
}
//需水量
if (jobject[RevitJsonProp.Demand].MatchNumeric(out double demand))
{
elbow.Demand = demand;
}
//需水模式
elbow.DemandPattern = jobject[RevitJsonProp.DemandPattern].ToString();
return elbow;
}
//解析三通
private static HStation.Model.RevitThreelink ParseThreelink(JToken jobject)
{
if (jobject == null)
{
return default;
}
//基本信息
var threelink = new Model.RevitThreelink();
threelink.Id = jobject[RevitJsonProp.Id].ToString();
threelink.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(threelink.Code))
{
threelink.Code = threelink.Id;
}
threelink.Name = jobject[RevitJsonProp.Name].ToString();
threelink.ModelType = jobject[RevitJsonProp.ModelType].ToString();
threelink.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
threelink.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
threelink.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
threelink.Position = threelink.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
threelink.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.Elev].MatchNumeric(out double elev))
{
threelink.Elev = elev / 1000f;
}
if (threelink.Elev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
threelink.Elev = elevOfElevation / 1000f;
}
}
}
if (threelink.Elev <= 0)
{
//通过z轴自动计算
threelink.Elev = threelink.Position.Z;
}
//需水量
if (jobject[RevitJsonProp.Demand].MatchNumeric(out double demand))
{
threelink.Demand = demand;
}
//需水模式
threelink.DemandPattern = jobject[RevitJsonProp.DemandPattern].ToString();
return threelink;
}
//解析四通
private static HStation.Model.RevitFourlink ParseFourlink(JToken jobject)
{
if (jobject == null)
{
return default;
}
//基本信息
var fourlink = new Model.RevitFourlink();
fourlink.Id = jobject[RevitJsonProp.Id].ToString();
fourlink.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(fourlink.Code))
{
fourlink.Code = fourlink.Id;
}
fourlink.Name = jobject[RevitJsonProp.Name].ToString();
fourlink.ModelType = jobject[RevitJsonProp.ModelType].ToString();
fourlink.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
fourlink.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
fourlink.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
fourlink.Position = fourlink.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
fourlink.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.Elev].MatchNumeric(out double elev))
{
fourlink.Elev = elev / 1000f;
}
if (fourlink.Elev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
fourlink.Elev = elevOfElevation / 1000f;
}
}
}
if (fourlink.Elev <= 0)
{
//通过z轴自动计算
fourlink.Elev = fourlink.Position.Z;
}
//需水量
if (jobject[RevitJsonProp.Demand].MatchNumeric(out double demand))
{
fourlink.Demand = demand;
}
//需水模式
fourlink.DemandPattern = jobject[RevitJsonProp.DemandPattern].ToString();
return fourlink;
}
//解析闷头
private static HStation.Model.RevitBlunthead ParseBlunthead(JToken jobject)
{
if (jobject == null)
{
return default;
}
//基本信息
var blunthead = new Model.RevitBlunthead();
blunthead.Id = jobject[RevitJsonProp.Id].ToString();
blunthead.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(blunthead.Code))
{
blunthead.Code = blunthead.Id;
}
blunthead.Name = jobject[RevitJsonProp.Name].ToString();
blunthead.ModelType = jobject[RevitJsonProp.ModelType].ToString();
blunthead.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
blunthead.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
blunthead.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
blunthead.Position = blunthead.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
blunthead.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.Elev].MatchNumeric(out double elev))
{
blunthead.Elev = elev / 1000f;
}
if (blunthead.Elev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
blunthead.Elev = elevOfElevation / 1000f;
}
}
}
if (blunthead.Elev <= 0)
{
//通过z轴自动计算
blunthead.Elev = blunthead.Position.Z;
}
//需水量
if (jobject[RevitJsonProp.Demand].MatchNumeric(out double demand))
{
blunthead.Demand = demand;
}
//需水模式
blunthead.DemandPattern = jobject[RevitJsonProp.DemandPattern].ToString();
return blunthead;
}
//解析水表
private static HStation.Model.RevitMeter ParseMeter(JToken jobject)
{
if (jobject == null)
{
return default;
}
//基本信息
var meter = new Model.RevitMeter();
meter.Id = jobject[RevitJsonProp.Id].ToString();
meter.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(meter.Code))
{
meter.Code = meter.Id;
}
meter.Name = jobject[RevitJsonProp.Name].ToString();
meter.ModelType = jobject[RevitJsonProp.ModelType].ToString();
meter.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
meter.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
meter.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
meter.Position = meter.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
meter.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.Elev].MatchNumeric(out double elev))
{
meter.Elev = elev / 1000f;
}
if (meter.Elev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
meter.Elev = elevOfElevation / 1000f;
}
}
}
if (meter.Elev <= 0)
{
//通过z轴自动计算
meter.Elev = meter.Position.Z;
}
//需水量
if (jobject[RevitJsonProp.Demand].MatchNumeric(out double demand))
{
meter.Demand = demand;
}
//需水模式
meter.DemandPattern = jobject[RevitJsonProp.DemandPattern].ToString();
return meter;
}
//解析流量计
private static HStation.Model.RevitFlowmeter ParseFlowmeter(JToken jobject)
{
if (jobject == null)
{
return default;
}
//基本信息
var flowmeter = new Model.RevitFlowmeter();
flowmeter.Id = jobject[RevitJsonProp.Id].ToString();
flowmeter.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(flowmeter.Code))
{
flowmeter.Code = flowmeter.Id;
}
flowmeter.Name = jobject[RevitJsonProp.Name].ToString();
flowmeter.ModelType = jobject[RevitJsonProp.ModelType].ToString();
flowmeter.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
flowmeter.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
flowmeter.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
flowmeter.Position = flowmeter.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
flowmeter.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.Elev].MatchNumeric(out double elev))
{
flowmeter.Elev = elev / 1000f;
}
if (flowmeter.Elev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
flowmeter.Elev = elevOfElevation / 1000f;
}
}
}
if (flowmeter.Elev <= 0)
{
//通过z轴自动计算
flowmeter.Elev = flowmeter.Position.Z;
}
//需水量
if (jobject[RevitJsonProp.Demand].MatchNumeric(out double demand))
{
flowmeter.Demand = demand;
}
//需水模式
flowmeter.DemandPattern = jobject[RevitJsonProp.DemandPattern].ToString();
return flowmeter;
}
//解析压力表
private static HStation.Model.RevitPressmeter ParsePressmeter(JToken jobject)
{
if (jobject == null)
{
return default;
}
//基本信息
var pressmeter = new Model.RevitPressmeter();
pressmeter.Id = jobject[RevitJsonProp.Id].ToString();
pressmeter.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(pressmeter.Code))
{
pressmeter.Code = pressmeter.Id;
}
pressmeter.Name = jobject[RevitJsonProp.Name].ToString();
pressmeter.ModelType = jobject[RevitJsonProp.ModelType].ToString();
pressmeter.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
pressmeter.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
pressmeter.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
pressmeter.Position = pressmeter.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
pressmeter.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.Elev].MatchNumeric(out double elev))
{
pressmeter.Elev = elev / 1000f;
}
if (pressmeter.Elev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
pressmeter.Elev = elevOfElevation / 1000f;
}
}
}
if (pressmeter.Elev <= 0)
{
//通过z轴自动计算
pressmeter.Elev = pressmeter.Position.Z;
}
//需水量
if (jobject[RevitJsonProp.Demand].MatchNumeric(out double demand))
{
pressmeter.Demand = demand;
}
//需水模式
pressmeter.DemandPattern = jobject[RevitJsonProp.DemandPattern].ToString();
return pressmeter;
}
//解析水库
private static HStation.Model.RevitReservoir ParseReservoir(JToken jobject)
{
if (jobject == null)
{
return default;
}
var reservoir = new Model.RevitReservoir();
reservoir.Id = jobject[RevitJsonProp.Id].ToString();
reservoir.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(reservoir.Code))
{
reservoir.Code = reservoir.Id;
}
reservoir.Name = jobject[RevitJsonProp.Name].ToString();
reservoir.ModelType = jobject[RevitJsonProp.ModelType].ToString();
reservoir.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
reservoir.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
reservoir.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
reservoir.Position = reservoir.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
reservoir.Quality = quality;
}
//池底标高
if (jobject[RevitJsonProp.PoolElev].MatchNumeric(out double poolElev))
{
reservoir.PoolElev = poolElev;
}
//总水头
if (jobject[RevitJsonProp.Head].MatchNumeric(out double head))
{
reservoir.Head = head;
}
//水头模式
reservoir.HeadPattern = jobject[RevitJsonProp.HeadPattern].ToString();
return reservoir;
}
//解析水池
private static HStation.Model.RevitTank ParseTank(JToken jobject)
{
if (jobject == null)
{
return default;
}
var tank = new Model.RevitTank();
tank.Id = jobject[RevitJsonProp.Id].ToString();
tank.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(tank.Code))
{
tank.Code = tank.Id;
}
tank.Name = jobject[RevitJsonProp.Name].ToString();
tank.ModelType = jobject[RevitJsonProp.ModelType].ToString();
tank.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
tank.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
tank.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
tank.Position = tank.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
tank.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.PoolElev].MatchNumeric(out double elev))
{
tank.PoolElev = elev / 1000f;
}
if (tank.PoolElev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
tank.PoolElev = elevOfElevation / 1000f;
}
}
}
if (tank.PoolElev <= 0)
{
//通过z轴自动计算
tank.PoolElev = tank.Position.Z;
}
//初始水位
if (jobject[RevitJsonProp.InitLevel].MatchNumeric(out double initLevel))
{
tank.InitLevel = initLevel;
}
//最低水位
if (jobject[RevitJsonProp.MinLevel].MatchNumeric(out double minLevel))
{
tank.MinLevel = minLevel;
}
//最高水位
if (jobject[RevitJsonProp.MaxLevel].MatchNumeric(out double maxLevel))
{
tank.MaxLevel = maxLevel;
}
//直径
if (jobject[RevitJsonProp.Diameter].MatchNumeric(out double diameter))
{
tank.Diameter = diameter;
}
//最小容积
if (jobject[RevitJsonProp.MinVol].MatchNumeric(out double minVol))
{
tank.MinVol = minVol;
}
//容积曲线
tank.VolCurve = jobject[RevitJsonProp.VolCurve].ToString();
if (!string.IsNullOrEmpty(tank.VolCurve))
{
tank.VolCurve = string.Empty;
}
return tank;
}
//解析水箱
private static HStation.Model.RevitWaterbox ParseWaterbox(JToken jobject)
{
if (jobject == null)
{
return default;
}
var waterbox = new Model.RevitWaterbox();
waterbox.Id = jobject[RevitJsonProp.Id].ToString();
waterbox.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(waterbox.Code))
{
waterbox.Code = waterbox.Id;
}
waterbox.Name = jobject[RevitJsonProp.Name].ToString();
waterbox.ModelType = jobject[RevitJsonProp.ModelType].ToString();
waterbox.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
waterbox.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
waterbox.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
waterbox.Position = waterbox.ConnectList.GetCenterPosition();
//初始水质
if (jobject[RevitJsonProp.Quality].MatchNumeric(out double quality))
{
waterbox.Quality = quality;
}
//标高信息
if (jobject[RevitJsonProp.PoolElev].MatchNumeric(out double elev))
{
waterbox.PoolElev = elev / 1000f;
}
if (waterbox.PoolElev <= 0)
{
//标高中的高程
var jobjectElevOfElevation = jobject[RevitJsonProp.ElevOfElevation];
if (jobjectElevOfElevation != null)
{
if (jobjectElevOfElevation.MatchNumeric(out double elevOfElevation))
{
waterbox.PoolElev = elevOfElevation / 1000f;
}
}
}
if (waterbox.PoolElev <= 0)
{
//通过z轴自动计算
waterbox.PoolElev = waterbox.Position.Z;
}
//初始水位
if (jobject[RevitJsonProp.InitLevel].MatchNumeric(out double initLevel))
{
waterbox.InitLevel = initLevel;
}
//最低水位
if (jobject[RevitJsonProp.MinLevel].MatchNumeric(out double minLevel))
{
waterbox.MinLevel = minLevel;
}
//最高水位
if (jobject[RevitJsonProp.MaxLevel].MatchNumeric(out double maxLevel))
{
waterbox.MaxLevel = maxLevel;
}
//直径
if (jobject[RevitJsonProp.Diameter].MatchNumeric(out double diameter))
{
waterbox.Diameter = diameter;
}
//最小容积
if (jobject[RevitJsonProp.MinVol].MatchNumeric(out double minVol))
{
waterbox.MinVol = minVol;
}
//容积曲线
waterbox.VolCurve = jobject[RevitJsonProp.VolCurve].ToString();
if (!string.IsNullOrEmpty(waterbox.VolCurve))
{
waterbox.VolCurve = string.Empty;
}
return waterbox;
}
//解析管道
private static HStation.Model.RevitPipe ParsePipe(JToken jobject)
{
if (jobject == null)
{
return default;
}
var pipe = new Model.RevitPipe();
pipe.Id = jobject[RevitJsonProp.Id].ToString();
pipe.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(pipe.Code))
{
pipe.Code = pipe.Id;
}
pipe.Name = jobject[RevitJsonProp.Name].ToString();
pipe.ModelType = jobject[RevitJsonProp.ModelType].ToString();
pipe.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
pipe.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
pipe.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
var startConnect = pipe.ConnectList.GetStartConnect();
var endConnect = pipe.ConnectList.GetEndConnect();
pipe.StartCode = startConnect.Id;
pipe.EndCode = endConnect.Id;
pipe.StartPosition = startConnect.Position;
pipe.EndPosition = endConnect.Position;
pipe.LinkStatus = jobject[RevitJsonProp.LinkStatusPipe].ToString();
if (string.IsNullOrEmpty(pipe.LinkStatus))
{
pipe.LinkStatus = PipeStatus.Open;
}
if (jobject[RevitJsonProp.StartElev].MatchNumeric(out double startElev))
{
pipe.StartElev = startElev;
}
if (pipe.StartElev <= 0)
{
pipe.StartElev = pipe.StartPosition.Z;
}
if (jobject[RevitJsonProp.EndElev].MatchNumeric(out double endElev))
{
pipe.EndElev = endElev;
}
if (pipe.EndElev <= 0)
{
pipe.EndElev = pipe.EndPosition.Z;
}
if (jobject[RevitJsonProp.StartQuality].MatchNumeric(out double startQuality))
{
pipe.StartQuality = startQuality;
}
if (jobject[RevitJsonProp.EndQuality].MatchNumeric(out double endQuality))
{
pipe.EndQuality = endQuality;
}
#region 长度
if (jobject[RevitJsonProp.Length].MatchNumeric(out double length))
{
pipe.Length = length / 1000f;
}
if (pipe.Length <= 0)
{
pipe.Length = pipe.StartPosition.Distance(pipe.EndPosition) / 1000f;
}
#endregion
#region 材质
var jobjectMaterial = jobject[RevitJsonProp.Material];
if (jobjectMaterial != null)
{
pipe.Material = jobjectMaterial[RevitJsonProp.Name]?.ToString();
}
#endregion
#region 直径
if (jobject[RevitJsonProp.Diameter].MatchNumeric(out double diameter))
{
pipe.Diameter = diameter;
}
if (pipe.Diameter < 1)
{
if (jobject[RevitJsonProp.InternalDiameter].MatchNumeric(out double internalDiameter))
{
pipe.Diameter = internalDiameter;
}
}
#endregion
if (jobject[RevitJsonProp.MinorLoss].MatchNumeric(out double minorLoss))
{
pipe.MinorLoss = minorLoss;
}
if (jobject[RevitJsonProp.Roughness].MatchNumeric(out double roughness))
{
pipe.Roughness = roughness;
}
if (pipe.Diameter < 0.1)
{
pipe.Diameter = 500;
}
if (pipe.Roughness < 0.1)
{
pipe.Roughness = 110;
}
return pipe;
}
//解析过渡件
private static HStation.Model.RevitTranslation ParseTranslation(JToken jobject)
{
if (jobject == null)
{
return default;
}
var translation = new Model.RevitTranslation();
translation.Id = jobject[RevitJsonProp.Id].ToString();
translation.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(translation.Code))
{
translation.Code = translation.Id;
}
translation.Name = jobject[RevitJsonProp.Name].ToString();
translation.ModelType = jobject[RevitJsonProp.ModelType].ToString();
translation.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
translation.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
translation.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
var startConnect = translation.ConnectList.GetStartConnect();
var endConnect = translation.ConnectList.GetEndConnect();
translation.StartCode = startConnect.Id;
translation.EndCode = endConnect.Id;
translation.StartPosition = startConnect.Position;
translation.EndPosition = endConnect.Position;
translation.LinkStatus = jobject[RevitJsonProp.LinkStatusPipe].ToString();
if (string.IsNullOrEmpty(translation.LinkStatus))
{
translation.LinkStatus = PipeStatus.Open;
}
if (jobject[RevitJsonProp.StartElev].MatchNumeric(out double startElev))
{
translation.StartElev = startElev;
}
if (translation.StartElev <= 0)
{
translation.StartElev = translation.StartPosition.Z;
}
if (jobject[RevitJsonProp.EndElev].MatchNumeric(out double endElev))
{
translation.EndElev = endElev;
}
if (translation.EndElev <= 0)
{
translation.EndElev = translation.EndPosition.Z;
}
if (jobject[RevitJsonProp.StartQuality].MatchNumeric(out double startQuality))
{
translation.StartQuality = startQuality;
}
if (jobject[RevitJsonProp.EndQuality].MatchNumeric(out double endQuality))
{
translation.EndQuality = endQuality;
}
#region 长度
if (jobject[RevitJsonProp.Length].MatchNumeric(out double length))
{
translation.Length = length / 1000f;
}
if (translation.Length <= 0)
{
translation.Length = translation.StartPosition.Distance(translation.EndPosition) / 1000f;
}
#endregion
#region 直径
if (jobject[RevitJsonProp.Diameter].MatchNumeric(out double diameter))
{
translation.Diameter = diameter;
}
if (translation.Diameter <= 0)
{
var jobjectInternalDiameter = jobject[RevitJsonProp.InternalDiameter];
if (jobjectInternalDiameter != null)
{
if (jobjectInternalDiameter.MatchNumeric(out double internalDiameter))
{
translation.Diameter = internalDiameter;
}
}
}
if (translation.Diameter <= 0)
{
var jobjectNominalDiameter = jobject[RevitJsonProp.NominalDiameter];
if (jobjectNominalDiameter != null)
{
if (jobjectNominalDiameter.MatchNumeric(out double nominalDiameter))
{
translation.Diameter = nominalDiameter;
}
}
}
if (translation.Diameter <= 0)
{
translation.Diameter = 150;
}
#endregion
if (jobject[RevitJsonProp.MinorLoss].MatchNumeric(out double minorLoss))
{
translation.MinorLoss = minorLoss;
}
if (jobject[RevitJsonProp.Roughness].MatchNumeric(out double roughness))
{
translation.Roughness = roughness;
}
if (translation.Roughness < 0.1)
{
translation.Roughness = 110;
}
return translation;
}
//解析换热器
private static HStation.Model.RevitExchanger ParseExchanger(JToken jobject)
{
if (jobject == null)
{
return default;
}
var exchanger = new Model.RevitExchanger();
exchanger.Id = jobject[RevitJsonProp.Id].ToString();
exchanger.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(exchanger.Code))
{
exchanger.Code = exchanger.Id;
}
exchanger.Name = jobject[RevitJsonProp.Name].ToString();
exchanger.ModelType = jobject[RevitJsonProp.ModelType].ToString();
exchanger.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
exchanger.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
exchanger.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
var startConnect = exchanger.ConnectList.GetStartConnect();
var endConnect = exchanger.ConnectList.GetEndConnect();
exchanger.StartCode = startConnect.Id;
exchanger.EndCode = endConnect.Id;
exchanger.StartPosition = startConnect.Position;
exchanger.EndPosition = endConnect.Position;
exchanger.LinkStatus = jobject[RevitJsonProp.LinkStatusPipe].ToString();
if (string.IsNullOrEmpty(exchanger.LinkStatus))
{
exchanger.LinkStatus = PipeStatus.Open;
}
if (jobject[RevitJsonProp.StartElev].MatchNumeric(out double startElev))
{
exchanger.StartElev = startElev;
}
if (exchanger.StartElev <= 0)
{
exchanger.StartElev = exchanger.StartPosition.Z;
}
if (jobject[RevitJsonProp.EndElev].MatchNumeric(out double endElev))
{
exchanger.EndElev = endElev;
}
if (exchanger.EndElev <= 0)
{
exchanger.EndElev = exchanger.EndPosition.Z;
}
if (jobject[RevitJsonProp.StartQuality].MatchNumeric(out double startQuality))
{
exchanger.StartQuality = startQuality;
}
if (jobject[RevitJsonProp.EndQuality].MatchNumeric(out double endQuality))
{
exchanger.EndQuality = endQuality;
}
if (jobject[RevitJsonProp.Length].MatchNumeric(out double length))
{
exchanger.Length = length / 1000f;
}
if (exchanger.Length <= 0)
{
exchanger.Length = exchanger.StartPosition.Distance(exchanger.EndPosition) / 1000f;
}
if (jobject[RevitJsonProp.Diameter].MatchNumeric(out double diameter))
{
exchanger.Diameter = diameter;
}
if (exchanger.Diameter < 1)
{
if (jobject[RevitJsonProp.InternalDiameter].MatchNumeric(out double internalDiameter))
{
exchanger.Diameter = internalDiameter;
}
}
if (jobject[RevitJsonProp.Roughness].MatchNumeric(out double roughness))
{
exchanger.Roughness = roughness;
}
if (exchanger.Roughness < 0.1)
{
exchanger.Roughness = 110;
}
if (jobject[RevitJsonProp.MinorLoss].MatchNumeric(out double minorLoss))
{
exchanger.MinorLoss = minorLoss;
}
if (exchanger.Diameter <= 0)
{
exchanger.Diameter = 150;
}
return exchanger;
}
//解析水泵
private static HStation.Model.RevitPump ParsePump(JToken jobject)
{
if (jobject == null)
{
return default;
}
var pump = new Model.RevitPump();
pump.Id = jobject[RevitJsonProp.Id].ToString();
pump.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(pump.Code))
{
pump.Code = pump.Id;
}
pump.Name = jobject[RevitJsonProp.Name].ToString();
pump.ModelType = jobject[RevitJsonProp.ModelType].ToString();
pump.Flags = Yw.Untity.FlagsHelper.ToList(jobject[RevitJsonProp.Flags].ToString());
pump.Description = jobject[RevitJsonProp.Description].ToString();
var connectList = JsonHelper.Json2Object>(jobject[RevitJsonProp.Connects].ToString());
pump.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
var startConnect = pump.ConnectList.GetStartConnect();
var endConnect = pump.ConnectList.GetEndConnect();
pump.StartCode = startConnect.Id;
pump.EndCode = endConnect.Id;
pump.StartPosition = startConnect.Position;
pump.EndPosition = endConnect.Position;
pump.LinkStatus = jobject[RevitJsonProp.LinkStatusPump].ToString();
if (string.IsNullOrEmpty(pump.LinkStatus))
{
pump.LinkStatus = PumpStatus.Open;
}
if (jobject[RevitJsonProp.StartElev].MatchNumeric(out double startElev))
{
pump.StartElev = startElev;
}
if (pump.StartElev <= 0)
{
pump.StartElev = pump.StartPosition.Z;
}
if (jobject[RevitJsonProp.EndElev].MatchNumeric(out double endElev))
{
pump.EndElev = endElev;
}
if (pump.EndElev <= 0)
{
pump.EndElev = pump.EndPosition.Z;
}
if (jobject[RevitJsonProp.StartQuality].MatchNumeric(out double startQuality))
{
pump.StartQuality = startQuality;
}
if (jobject[RevitJsonProp.EndQuality].MatchNumeric(out double endQuality))
{
pump.EndQuality = endQuality;
}
if (jobject[RevitJsonProp.RatedPower].MatchNumeric(out double ratedPower))
{
pump.RatedPower = ratedPower;
}
pump.CurveQH = jobject[RevitJsonProp.CurveQH].ToString();
pump.CurveQH = "PumpDefault";
if (jobject[RevitJsonProp.SpeedRatio].MatchNumeric(out double speedRatio))
{
pump.SpeedRatio = speedRatio;
}
pump.SpeedRatioPattern = jobject[RevitJsonProp.SpeedRatioPattern].ToString();
if (!string.IsNullOrEmpty(pump.SpeedRatioPattern))
{
pump.SpeedRatioPattern = string.Empty;
}
if (jobject[RevitJsonProp.Price].MatchNumeric(out double price))
{
pump.Price = price;
}
pump.PricePattern = jobject[RevitJsonProp.PricePattern].ToString();
if (!string.IsNullOrEmpty(pump.PricePattern))
{
pump.PricePattern = string.Empty;
}
pump.CurveQE = jobject[RevitJsonProp.CurveQE].ToString();
if (!string.IsNullOrEmpty(pump.CurveQE))
{
pump.CurveQE = string.Empty;
}
return pump;
}
//解析阀门
private static HStation.Model.RevitValve ParseValve(JToken jobject)
{
if (jobject == null)
{
return default;
}
var valve = new Model.RevitValve();
#region Id
if (jobject.ParseString(RevitJsonProp.Id, out string id))
{
valve.Id = id;
}
else
{
valve.AppendPropStatus(nameof(valve.Id), ePropStatus.Error, "缺少构件编码");
}
#endregion
#region Code
if (jobject.ParseString(RevitJsonProp.Code, out string code))
{
valve.Code = code;
}
else
{
valve.AppendPropStatus(nameof(valve.Code), ePropStatus.Error, "缺少编码");
}
if (string.IsNullOrEmpty(valve.Code))
{
valve.Code = valve.Id;
}
#endregion
#region Name
if (jobject.ParseString(RevitJsonProp.Name, out string name))
{
valve.Name = name;
}
else
{
valve.AppendPropStatus(nameof(valve.Name), ePropStatus.Error, "缺少名称");
}
#endregion
#region ModelType
if (jobject.ParseString(RevitJsonProp.ModelType, out string modelType))
{
valve.ModelType = modelType;
}
else
{
valve.AppendPropStatus(nameof(valve.ModelType), ePropStatus.Error, "缺少型号信息");
}
#endregion
#region Flags
if (jobject.ParseString(RevitJsonProp.Flags, out string flags))
{
valve.Flags = Yw.Untity.FlagsHelper.ToList(flags);
}
else
{
valve.AppendPropStatus(nameof(valve.Flags), ePropStatus.Error, "缺少标签");
}
#endregion
#region Description
if (jobject.ParseString(RevitJsonProp.Description, out string description))
{
valve.Description = description;
}
else
{
valve.AppendPropStatus(nameof(valve.Description), ePropStatus.Error, "缺少说明信息");
}
#endregion
#region ConnectList
if (jobject.ParseString(RevitJsonProp.Connects, out string connectString))
{
var connectList = JsonHelper.Json2Object>(connectString);
valve.ConnectList = connectList?.Select(x => new Model.RevitConnect()
{
Id = x.ConnectId,
Direction = x.Dirction,
Position = new Model.RevitPosition()
{
X = x.Point.X / 1000f,
Y = x.Point.Y / 1000f,
Z = x.Point.Z / 1000f
}
}).ToList();
}
else
{
valve.AppendPropStatus(nameof(valve.ConnectList), ePropStatus.Error, "缺少连接列表");
}
#endregion
#region LinkStatus
if (jobject.ParseString(RevitJsonProp.LinkStatusValve, out string linkStatus))
{
if (string.IsNullOrEmpty(linkStatus))
{
valve.LinkStatus = ValveStatus.Open;
valve.AppendPropStatus(nameof(valve.LinkStatus), ePropStatus.Lack, "未配置阀门状态");
}
else
{
valve.LinkStatus = linkStatus;
if (linkStatus != ValveStatus.None && linkStatus != ValveStatus.Closed && linkStatus != ValveStatus.Open)
{
valve.AppendPropStatus(nameof(valve.LinkStatus), ePropStatus.Error, $"阀门状态配置错误:{linkStatus}");
}
}
}
else
{
valve.AppendPropStatus(nameof(valve.LinkStatus), ePropStatus.Error, "缺少阀门状态");
}
#endregion
var startConnect = valve.ConnectList.GetStartConnect();
var endConnect = valve.ConnectList.GetEndConnect();
valve.StartCode = startConnect.Id;
valve.EndCode = endConnect.Id;
valve.StartPosition = startConnect.Position;
valve.EndPosition = endConnect.Position;
if (string.IsNullOrEmpty(valve.LinkStatus))
{
valve.LinkStatus = ValveStatus.Open;
}
if (jobject[RevitJsonProp.StartElev].MatchNumeric(out double startElev))
{
valve.StartElev = startElev;
}
if (valve.StartElev <= 0)
{
valve.StartElev = valve.StartPosition.Z;
}
if (jobject[RevitJsonProp.EndElev].MatchNumeric(out double endElev))
{
valve.EndElev = endElev;
}
if (valve.EndElev <= 0)
{
valve.EndElev = valve.EndPosition.Z;
}
if (jobject[RevitJsonProp.StartQuality].MatchNumeric(out double startQuality))
{
valve.StartQuality = startQuality;
}
if (jobject[RevitJsonProp.EndQuality].MatchNumeric(out double endQuality))
{
valve.EndQuality = endQuality;
}
if (jobject[RevitJsonProp.MinorLoss].MatchNumeric(out double minorLoss))
{
valve.MinorLoss = minorLoss;
}
#region 直径
if (jobject[RevitJsonProp.Diameter].MatchNumeric(out double diameter))
{
valve.Diameter = diameter;
}
if (valve.Diameter <= 0)
{
var jobjectNominalDiameter = jobject[RevitJsonProp.NominalDiameter];
if (jobjectNominalDiameter != null)
{
if (jobjectNominalDiameter.MatchNumeric(out double nominalDiameter))
{
valve.Diameter = nominalDiameter;
}
}
}
#endregion
valve.ValveType = jobject[RevitJsonProp.ValveType].ToString();
if (string.IsNullOrEmpty(valve.ValveType))
{
valve.ValveType = Valve.GPV;
}
valve.ValveSetting = jobject[RevitJsonProp.ValveSetting].ToString();
if (string.IsNullOrEmpty(valve.ValveSetting))
{
valve.ValveSetting = "GPVDefault";
}
return valve;
}
//解析装饰件
private static HStation.Model.RevitDecorator ParseDecorator(JToken jobject)
{
if (jobject == null)
{
return default;
}
var decorator = new Model.RevitDecorator();
decorator.Id = jobject[RevitJsonProp.Id].ToString();
decorator.Code = jobject[RevitJsonProp.Code].ToString();
if (string.IsNullOrEmpty(decorator.Code))
{
decorator.Code = decorator.Id;
}
decorator.Name = string.Empty;
decorator.Category = jobject[RevitJsonProp.ClanAndType][RevitJsonProp.ClanName].ToString();
decorator.Decoration = string.Empty;
return decorator;
}
}
}