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;
|
|
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;
|
}
|
|
private static List<PipeViewModel> GetPipeModel(DataGridView dgv)
|
{
|
var pipeModels = new List<PipeViewModel>();
|
if (dgv != null)
|
{
|
for (var i = 0; i < dgv.Rows.Count; i++)
|
{
|
var baseModel = GetBaseLinkModel(dgv, i);
|
var pipeModel = new 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<NozzleViewModel> GetNozzleModel(DataGridView dgv)
|
{
|
var nozzleModels = new List<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 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<JunctionViewModel> GetOtherModel(DataGridView dgv)
|
{
|
var otherModels = new List<JunctionViewModel>();
|
if (dgv != null)
|
{
|
for (var i = 0; i < dgv.Rows.Count; i++)
|
{
|
var baseModel = GetBaseNodeModel(dgv, i);
|
var otherModel = new 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<ValveViewModel> GetValveModel(DataGridView dgv)
|
{
|
var valveModels = new List<ValveViewModel>();
|
if (dgv != null)
|
{
|
for (var i = 0; i < dgv.Rows.Count; i++)
|
{
|
var baseModel = GetBaseLinkModel(dgv, i);
|
var valveModel = new 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;
|
}
|
|
}
|
}
|