using Hydro.Core.Model;
|
using Hydro.Revit.Model;
|
using Hydro.Revit;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using System.Windows.Forms;
|
using HStation.RevitDev.RevitDataExport.Common;
|
using static Hydro.Core.ObjectEnum;
|
using HStation.RevitDev.Model.ModelEnum;
|
using HStation.RevitDev.RevitDataExport.Entity.ElementModels;
|
using HStation.RevitDev.RevitDataExport.Entity;
|
using HStation.RevitDev.RevitDataExport.Service;
|
using HStation.RevitDev.RevitDataExport.Utility;
|
using Hydro.MapView;
|
using DevExpress.ClipboardSource.SpreadsheetML;
|
using System.Drawing;
|
|
namespace HStation.RevitDev.RevitDataExport.Common
|
{
|
public static class NetWorkHelper
|
{
|
public static CheckModel Check(RevitNetWork model)
|
{
|
var result = new CheckModel() { Result = true };
|
var nodes = new List<string>();
|
nodes.AddRange(model.Pipes.Select(c => c.Node2).ToList());
|
nodes.AddRange(model.Pipes.Select(c => c.Node1).ToList());
|
var otherIds = model.Junctions.Select(c => c.ID).ToList();
|
|
var pipes = model.Pipes.Where(c => string.IsNullOrEmpty(c.Node1) || string.IsNullOrEmpty(c.Node2));
|
if (pipes.Any())
|
{
|
result.Result = false;
|
pipes.ToList().ForEach(c =>
|
{
|
result.FailList.Add(new FailModel()
|
{
|
ID = c.ID,
|
Name = c.Name,
|
Type = FailType.缺少Node1或Node2连接属性,
|
ModelName = "管道",
|
FailReason = "缺少Node1或Node2连接属性"
|
});
|
|
});
|
}
|
|
var nozzles = model.Nozzles.Where(c => !nodes.Contains(c.ID));
|
if (nozzles.Any())
|
{
|
result.Result = false;
|
nozzles.ToList().ForEach(c =>
|
{
|
result.FailList.Add(new FailModel()
|
{
|
ID = c.ID,
|
Name = c.Name,
|
Type = FailType.喷头只能连接管道,
|
ModelName = "喷淋",
|
FailReason = "喷头只能连接管道"
|
});
|
});
|
}
|
|
var tank = model.Tanks.Any();
|
var reservos = model.Reservos.Any();
|
if (!tank)
|
{
|
result.Result = false;
|
result.FailList.Add(new FailModel()
|
{
|
ID = "0",
|
Name = "水箱",
|
ModelName = "水箱",
|
Type = FailType.缺少水箱或水池对象,
|
FailReason = "缺少水箱或水池对象"
|
});
|
}
|
|
return result;
|
|
}
|
public static RevitNetWork GetModelList(System.Windows.Forms.TabControl pageContainer)
|
{
|
var EpaModel = new RevitNetWork();
|
foreach (TabPage page in pageContainer.TabPages)
|
{
|
var pageTitle = page.Text;
|
var dgv = page.Controls[0] as DataGridView;
|
switch (pageTitle)
|
{
|
case "管道":
|
var pipes = GetPipeModel(dgv);
|
EpaModel.AddPipes(pipes);
|
break;
|
case "阀门":
|
var valves = GetValveModel(dgv);
|
EpaModel.AddValves(valves);
|
break;
|
case "喷淋":
|
var nozzle = GetNozzleModel(dgv);
|
EpaModel.AddNozzles(nozzle);
|
break;
|
case "消火栓":
|
var hydrantBoxes = GetHydrantBoxModel(dgv);
|
EpaModel.AddHydrantBoxs(hydrantBoxes);
|
break;
|
case "水泵":
|
var waterPump = GetWaterPumpModel(dgv);
|
EpaModel.AddPumps(waterPump);
|
break;
|
case "水箱":
|
var watertank = GetWaterTankModel(dgv);
|
EpaModel.AddTanks(watertank);
|
break;
|
case "弯头":
|
case "三通":
|
case "四通":
|
case "其他":
|
var other = GetOtherModel(dgv);
|
EpaModel.AddJunctions(other);
|
break;
|
}
|
|
}
|
return EpaModel;
|
}
|
|
public static MapViewNetWork GetModelList()
|
{
|
var EpaModel = new MapViewNetWork();
|
var values = Enum.GetValues(typeof(RevitType));
|
foreach (var value in values)
|
{
|
var revitType = (RevitType)value;
|
if (revitType.IsRequired())
|
{
|
var models = RevitMepElementService.GetElementModels(revitType);
|
|
switch (revitType)
|
{
|
case RevitType.RFT_Pump:
|
{
|
var subModels = ModelFactory.Convert2Sub<PumbModel2>(models);
|
foreach (var p in subModels)
|
{
|
var ds = new Dataset(p.编号 + "_Head", null, 2);
|
ds.Data = new List<PointF>()
|
{
|
new PointF(0f , 45.38f),
|
new PointF(83.33333333f ,45.25f),
|
new PointF(111.1111111f ,45.12f),
|
new PointF(138.8888889f ,44.96f),
|
new PointF(166.6666667f ,44.76f),
|
new PointF(194.4444444f ,44.52f),
|
new PointF(222.2222222f ,44.24f),
|
new PointF(250f ,43.92f),
|
new PointF(277.7777778f ,43.56f),
|
new PointF(305.5555556f ,43.17f),
|
new PointF(333.3333333f ,42.73f),
|
new PointF(361.1111111f ,42.25f),
|
new PointF(388.8888889f ,41.74f),
|
new PointF(416.6666667f ,41.18f),
|
new PointF(444.4444444f ,40.58f),
|
new PointF(472.2222222f ,39.95f),
|
new PointF(500f ,39.28f),
|
new PointF(527.7777778f ,38.56f),
|
new PointF(555.5555556f ,37.81f),
|
new PointF(583.3333333f ,37.02f),
|
new PointF(611.1111111f ,36.19f),
|
new PointF(638.8888889f ,35.32f),
|
new PointF(666.6666667f ,34.41f),
|
new PointF(694.4444444f ,33.46f),
|
new PointF(722.2222222f ,32.47f),
|
new PointF(750f ,31.44f),
|
new PointF(777.7777778f ,30.37f),
|
new PointF(805.5555556f ,29.27f),
|
};
|
EpaModel.dict_dataset.Add(p.编号 + "_Head", ds);
|
|
EpaModel.Nodes.Add(new Hydro.MapView.PumpNodeViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Node1 = p.连接构件.Contains(",") ? p.连接构件.Split(',')[0] : p.连接构件,
|
Node2 = p.连接构件.Contains(",") ? p.连接构件.Split(',')[1] : p.连接构件,
|
额定功率 = 0,
|
HeadCurve = "PumpDefault",
|
额定扬程 = 0,
|
额定流量 = 0
|
});
|
}
|
break;
|
}
|
case RevitType.RFT_Blocker:
|
{
|
var subModels = ModelFactory.Convert2Sub<BlockerModel>(models);
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.Nodes.Add(new Hydro.MapView.JunctionViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Elev = op.getCenter.z,
|
X = op.getCenter.x,
|
Y = op.getCenter.y
|
});
|
}
|
break;
|
}
|
case RevitType.RFT_Converter:
|
{
|
var subModels = ModelFactory.Convert2Sub<ConvertorModel>(models);
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.Nodes.Add(new Hydro.MapView.JunctionViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Elev = op.getCenter.z,
|
X = op.getCenter.x,
|
Y = op.getCenter.y
|
});
|
}
|
break;
|
}
|
case RevitType.RFT_Elbow:
|
{
|
var subModels = ModelFactory.Convert2Sub<ElbowModel>(models);
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.Nodes.Add(new Hydro.MapView.JunctionViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Elev = op.getCenter.z,
|
X = op.getCenter.x,
|
Y = op.getCenter.y
|
});
|
}
|
break;
|
}
|
case RevitType.RFT_FourJoint:
|
{
|
var subModels = ModelFactory.Convert2Sub<SiTongModel>(models);
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.Nodes.Add(new Hydro.MapView.JunctionViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Elev = op.getCenter.z,
|
X = op.getCenter.x,
|
Y = op.getCenter.y
|
});
|
}
|
break;
|
}
|
case RevitType.RFT_HeatExchanger:
|
{
|
var subModels = ModelFactory.Convert2Sub<HeatExchangerModel>(models);
|
break;
|
}
|
|
case RevitType.RFT_Pipe:
|
{
|
var subModels = ModelFactory.Convert2Sub<HStation.RevitDev.RevitDataExport.Entity.ElementModels.PipeModel>(models);
|
foreach (var p in subModels)
|
{
|
EpaModel.Links.Add(new Hydro.MapView.PipeViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Diameter = float.Parse(string.IsNullOrEmpty(p.直径) ? "0" : p.直径),
|
Length = float.Parse(string.IsNullOrEmpty(p.长度) ? "0" : p.长度)/1000,
|
MinorLoss = float.Parse(string.IsNullOrEmpty(p.比摩阻) ? "0" : p.比摩阻),
|
Roughness = float.Parse(string.IsNullOrEmpty(p.压力损失) ? "0" : p.压力损失),
|
Node1 = p.连接构件.Contains(",") ? p.连接构件.Split(',')[0] : p.连接构件,
|
Node2 = p.连接构件.Contains(",") ? p.连接构件.Split(',')[1] : p.连接构件,
|
});
|
}
|
break;
|
}
|
case RevitType.RFT_Shower:
|
{
|
var subModels = ModelFactory.Convert2Sub<ShowerModel>(models);
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.Nodes.Add(new Hydro.MapView.NozzleViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Elev = op.getCenter.z,
|
X = op.getCenter.x,
|
Y = op.getCenter.y,
|
FlowCoefficient = string.IsNullOrEmpty(p.K系数) ? 0 : float.Parse(p.K系数),
|
});
|
}
|
break;
|
}
|
case RevitType.RFT_ThreeJoint:
|
{
|
var subModels = ModelFactory.Convert2Sub<SanTongModel>(models);
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.Nodes.Add(new Hydro.MapView.JunctionViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Elev = op.getCenter.z,
|
X = op.getCenter.x,
|
Y = op.getCenter.y
|
});
|
}
|
break;
|
}
|
|
case RevitType.RFT_Valve:
|
{
|
var subModels = ModelFactory.Convert2Sub<HStation.RevitDev.RevitDataExport.Entity.ElementModels.ValveModel>(models);
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.Nodes.Add(new ValveNodeViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Node1 = p.连接构件.Contains(",") ? p.连接构件.Split(',')[0] : p.连接构件,
|
Node2 = p.连接构件.Contains(",") ? p.连接构件.Split(',')[1] : p.连接构件,
|
});
|
}
|
break;
|
}
|
case RevitType.RFT_WaterBox:
|
{
|
var subModels = ModelFactory.Convert2Sub<WaterBoxModel>(models);
|
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.Nodes.Add(new TankViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Elev = op.getCenter.z,
|
X = op.getCenter.x,
|
Y = op.getCenter.y,
|
InitLevel = string.IsNullOrEmpty(p.水位) ? 0 : float.Parse(p.水位),
|
MaxLevel = string.IsNullOrEmpty(p.最高水位) ? 0 : float.Parse(p.最高水位),
|
MinLevel = string.IsNullOrEmpty(p.最低水位) ? 0 : float.Parse(p.最低水位)
|
});
|
}
|
break;
|
}
|
case RevitType.RFT_WaterMeter:
|
{
|
var subModels = ModelFactory.Convert2Sub<WaterMeterModel>(models);
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.AddMeter(new MeterModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Elev = op.getCenter.z,
|
X = op.getCenter.x,
|
Y = op.getCenter.y,
|
});
|
}
|
break;
|
}
|
case RevitType.RFT_WaterPool:
|
{
|
var subModels = ModelFactory.Convert2Sub<WaterPoolModel>(models);
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.AddReservos(new ReservoisModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Elev = op.getCenter.z,
|
X = op.getCenter.x,
|
Y = op.getCenter.y,
|
});
|
}
|
break;
|
}
|
case RevitType.RFT_FireHydrant:
|
{
|
var subModels = ModelFactory.Convert2Sub<FireHydrantModel>(models);
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.Nodes.Add(new Hydro.MapView.NozzleViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Elev = op.getCenter.z,
|
X = op.getCenter.x,
|
Y = op.getCenter.y,
|
FlowCoefficient = string.IsNullOrEmpty(p.K系数) ? 0 : float.Parse(p.K系数),
|
});
|
}
|
break;
|
}
|
//case RevitType.RFT_Unknown:
|
//case RevitType.RFT_Others:
|
default:
|
{
|
var subModels = ModelFactory.Convert2Others(models);
|
foreach (var p in subModels)
|
{
|
var op = JsonHelper.ToObject<ObjectPosition>(p.包围框);
|
EpaModel.Nodes.Add(new Hydro.MapView.JunctionViewModel()
|
{
|
ID = p.编号,
|
Name = p.名称,
|
Floor = p.楼层,
|
Elev = op.getCenter.z,
|
X = op.getCenter.x,
|
Y = op.getCenter.y
|
});
|
}
|
break;
|
}
|
}
|
}
|
}
|
|
return EpaModel;
|
}
|
private static List<Hydro.Revit.Model.PipeViewModel> GetPipeModel(DataGridView dgv)
|
{
|
var pipeModels = new List<Hydro.Revit.Model.PipeViewModel>();
|
if (dgv != null)
|
{
|
for (var i = 0; i < dgv.Rows.Count; i++)
|
{
|
var baseModel = GetBaseLinkModel(dgv, i);
|
var pipeModel = new Hydro.Revit.Model.PipeViewModel();
|
foreach (var item in typeof(LinkModel).GetProperties())
|
{
|
item.SetValue(pipeModel, item.GetValue(baseModel));
|
}
|
pipeModel.Node1 = baseModel.Node1;
|
pipeModel.Node2 = baseModel.Node2;
|
for (var j = 0; j < dgv.Columns.Count; j++)
|
{
|
var col = dgv.Columns[j];
|
var cell = dgv.Rows[i].Cells[j];
|
|
switch (col.HeaderText)
|
{
|
case "系统类型":
|
pipeModel.SystemType = cell.Value.ToString(); break;
|
case "包围框":
|
pipeModel.PositionJson = cell.Value.ToString(); break;
|
case "楼层":
|
pipeModel.Floor = cell.Value.ToString(); break;
|
}
|
|
}
|
pipeModels.Add(pipeModel);
|
}
|
}
|
return pipeModels;
|
}
|
|
private static List<Hydro.Revit.Model.NozzleViewModel> GetNozzleModel(DataGridView dgv)
|
{
|
var nozzleModels = new List<Hydro.Revit.Model.NozzleViewModel>();
|
if (dgv != null)
|
{
|
for (var i = 0; i < dgv.Rows.Count; i++)
|
{
|
var baseModel = GetBaseNodeModel(dgv, i);
|
if (!baseModel.Name.Contains("喷")) { continue; }
|
var nozzleModel = new Hydro.Revit.Model.NozzleViewModel();
|
|
foreach (var item in typeof(NodeModel).GetProperties())
|
{
|
item.SetValue(nozzleModel, item.GetValue(baseModel));
|
}
|
for (var j = 0; j < dgv.Columns.Count; j++)
|
{
|
var col = dgv.Columns[j];
|
var cell = dgv.Rows[i].Cells[j];
|
switch (col.HeaderText)
|
{
|
case "系统类型":
|
nozzleModel.SystemType = cell.Value.ToString(); break;
|
case "包围框":
|
nozzleModel.PositionJson = cell.Value.ToString(); break;
|
case "K系数":
|
nozzleModel.FlowCoefficient = cell.Value == null ? 0 : float.Parse(cell.Value.ToString()); break;
|
case "连接点1":
|
nozzleModel.Node1 = cell.Value == null ? "" : cell.Value.ToString(); break;
|
case "连接点2":
|
nozzleModel.Node2 = cell.Value == null ? "" : cell.Value.ToString(); break;
|
case "楼层":
|
nozzleModel.Floor = cell.Value.ToString(); break;
|
}
|
|
}
|
nozzleModels.Add(nozzleModel);
|
}
|
}
|
return nozzleModels;
|
}
|
|
private static List<WaterPumpViewModel> GetWaterPumpModel(DataGridView dgv)
|
{
|
var waterPumps = new List<WaterPumpViewModel>();
|
if (dgv != null)
|
{
|
for (var i = 0; i < dgv.Rows.Count; i++)
|
{
|
var baseModel = GetBaseLinkModel(dgv, i);
|
var waterPumpsModel = new WaterPumpViewModel();
|
|
foreach (var item in typeof(LinkModel).GetProperties())
|
{
|
item.SetValue(waterPumpsModel, item.GetValue(baseModel));
|
}
|
for (var j = 0; j < dgv.Columns.Count; j++)
|
{
|
var col = dgv.Columns[j];
|
var cell = dgv.Rows[i].Cells[j];
|
switch (col.HeaderText)
|
{
|
case "系统类型":
|
waterPumpsModel.SystemType = cell.Value.ToString(); break;
|
case "包围框":
|
waterPumpsModel.PositionJson = cell.Value.ToString(); break;
|
case "楼层":
|
waterPumpsModel.Floor = cell.Value.ToString(); break;
|
}
|
}
|
waterPumps.Add(waterPumpsModel);
|
}
|
}
|
return waterPumps;
|
}
|
|
private static List<HydrantBoxViewModel> GetHydrantBoxModel(DataGridView dgv)
|
{
|
var hydrantBox = new List<HydrantBoxViewModel>();
|
if (dgv != null)
|
{
|
for (var i = 0; i < dgv.Rows.Count; i++)
|
{
|
var baseModel = GetBaseNodeModel(dgv, i);
|
var hydrantModel = new HydrantBoxViewModel();
|
|
foreach (var item in typeof(NodeModel).GetProperties())
|
{
|
item.SetValue(hydrantModel, item.GetValue(baseModel));
|
}
|
for (var j = 0; j < dgv.Columns.Count; j++)
|
{
|
var col = dgv.Columns[j];
|
var cell = dgv.Rows[i].Cells[j];
|
switch (col.HeaderText)
|
{
|
case "系统类型":
|
hydrantModel.SystemType = cell.Value.ToString(); break;
|
case "包围框":
|
hydrantModel.PositionJson = cell.Value.ToString(); break;
|
case "楼层":
|
hydrantModel.Floor = cell.Value.ToString(); break;
|
}
|
}
|
hydrantBox.Add(hydrantModel);
|
}
|
}
|
return hydrantBox;
|
}
|
|
private static List<WaterTankViewModel> GetWaterTankModel(DataGridView dgv)
|
{
|
var hydrantBox = new List<WaterTankViewModel>();
|
if (dgv != null)
|
{
|
for (var i = 0; i < dgv.Rows.Count; i++)
|
{
|
var baseModel = GetBaseNodeModel(dgv, i);
|
var hydrantModel = new WaterTankViewModel();
|
|
foreach (var item in typeof(NodeModel).GetProperties())
|
{
|
item.SetValue(hydrantModel, item.GetValue(baseModel));
|
}
|
for (var j = 0; j < dgv.Columns.Count; j++)
|
{
|
var col = dgv.Columns[j];
|
var cell = dgv.Rows[i].Cells[j];
|
switch (col.HeaderText)
|
{
|
case "系统类型":
|
hydrantModel.SystemType = cell.Value.ToString(); break;
|
case "包围框":
|
hydrantModel.PositionJson = cell.Value.ToString(); break;
|
case "水位":
|
hydrantModel.InitLevel = float.Parse(cell.Value.ToString());
|
break;
|
case "最低水位":
|
hydrantModel.MinLevel = float.Parse(cell.Value.ToString());
|
break;
|
case "最高水位":
|
hydrantModel.MaxLevel = float.Parse(cell.Value.ToString());
|
break;
|
case "楼层":
|
hydrantModel.Floor = cell.Value.ToString(); break;
|
}
|
}
|
hydrantModel.Elev = 0;
|
hydrantBox.Add(hydrantModel);
|
}
|
}
|
return hydrantBox;
|
}
|
|
private static List<Hydro.Revit.Model.JunctionViewModel> GetOtherModel(DataGridView dgv)
|
{
|
var otherModels = new List<Hydro.Revit.Model.JunctionViewModel>();
|
if (dgv != null)
|
{
|
for (var i = 0; i < dgv.Rows.Count; i++)
|
{
|
var baseModel = GetBaseNodeModel(dgv, i);
|
var otherModel = new Hydro.Revit.Model.JunctionViewModel();
|
|
foreach (var item in typeof(NodeModel).GetProperties())
|
{
|
item.SetValue(otherModel, item.GetValue(baseModel));
|
}
|
for (var j = 0; j < dgv.Columns.Count; j++)
|
{
|
var col = dgv.Columns[j];
|
var cell = dgv.Rows[i].Cells[j];
|
switch (col.HeaderText)
|
{
|
case "系统类型":
|
otherModel.SystemType = cell.Value.ToString(); break;
|
case "包围框":
|
otherModel.PositionJson = cell.Value.ToString(); break;
|
case "楼层":
|
otherModel.Floor = cell.Value.ToString(); break;
|
case "连接点1":
|
otherModel.Node1 = cell.Value.ToString(); break;
|
case "连接点2":
|
otherModel.Node2 = cell.Value.ToString(); break;
|
case "连接点3":
|
otherModel.Node1 += "," + cell.Value.ToString(); break;
|
case "连接点4":
|
otherModel.Node1 += "," + cell.Value.ToString(); break;
|
}
|
}
|
otherModels.Add(otherModel);
|
}
|
}
|
return otherModels;
|
}
|
|
private static List<Hydro.Revit.Model.ValveViewModel> GetValveModel(DataGridView dgv)
|
{
|
var valveModels = new List<Hydro.Revit.Model.ValveViewModel>();
|
if (dgv != null)
|
{
|
for (var i = 0; i < dgv.Rows.Count; i++)
|
{
|
var baseModel = GetBaseLinkModel(dgv, i);
|
var valveModel = new Hydro.Revit.Model.ValveViewModel();
|
|
foreach (var item in typeof(LinkModel).GetProperties())
|
{
|
item.SetValue(valveModel, item.GetValue(baseModel));
|
}
|
for (var j = 0; j < dgv.Columns.Count; j++)
|
{
|
var col = dgv.Columns[j];
|
var cell = dgv.Rows[i].Cells[j];
|
switch (col.HeaderText)
|
{
|
case "系统类型":
|
valveModel.SystemType = cell.Value.ToString(); break;
|
case "包围框":
|
valveModel.PositionJson = cell.Value.ToString(); break;
|
case "楼层":
|
valveModel.Floor = cell.Value.ToString(); break;
|
case "直径":
|
valveModel.Diameter = float.Parse(cell.Value.ToString()); break;
|
}
|
|
}
|
valveModels.Add(valveModel);
|
}
|
}
|
return valveModels;
|
}
|
|
private static NodeModel GetBaseNodeModel(DataGridView dgv, int rowIndex)
|
{
|
var baseModel = new NodeModel();
|
for (var j = 0; j < dgv.Columns.Count; j++)
|
{
|
var col = dgv.Columns[j];
|
var cell = dgv.Rows[rowIndex].Cells[j];
|
switch (col.HeaderText)
|
{
|
case "名称":
|
baseModel.Name = cell.Value.ToString(); break;
|
case "ID":
|
baseModel.ID = cell.Value.ToString(); break;
|
case "包围框":
|
var ps = cell.Value.ToString();
|
var p = JsonHelper.ToObject<PositionModel>(ps);
|
baseModel.Elev = p.getCenter.z / 1000;
|
baseModel.X = p.getCenter.x;
|
baseModel.Y = p.getCenter.y;
|
break;
|
}
|
}
|
return baseModel;
|
}
|
|
private static LinkModel GetBaseLinkModel(DataGridView dgv, int rowIndex)
|
{
|
var baseModel = new LinkModel();
|
for (var j = 0; j < dgv.Columns.Count; j++)
|
{
|
var col = dgv.Columns[j];
|
|
var cell = dgv.Rows[rowIndex].Cells[j];
|
switch (col.HeaderText)
|
{
|
case "名称":
|
baseModel.Name = cell.Value.ToString(); break;
|
case "ID":
|
baseModel.ID = cell.Value.ToString(); break;
|
}
|
if (col.HeaderText.Contains("连接点1"))
|
baseModel.Node1 = cell.Value.ToString();
|
if (col.HeaderText.Contains("连接点2"))
|
baseModel.Node2 = cell.Value.ToString();
|
if (col.HeaderText.Contains("直径"))
|
baseModel.Diameter = float.Parse(cell.Value.ToString());
|
if (col.HeaderText.Contains("长度"))
|
baseModel.Length = float.Parse(cell.Value.ToString());
|
if (col.HeaderText.Contains("比摩阻"))
|
baseModel.Roughness = float.Parse(cell.Value.ToString() == "" ? "0" : cell.Value.ToString());
|
}
|
return baseModel;
|
}
|
|
}
|
}
|