|
@@ -75,7 +75,7 @@ namespace SAGA.GplotRelationComputerManage
|
|
|
/*
|
|
|
* 暂时认定,一个立管之关联一个系统
|
|
|
*/
|
|
|
- var verticalPipes = doc.GetElements<Pipe>().Where(p => SystemCalcUtil.IsStart(p) && p.IsVerticalPipe());
|
|
|
+ var verticalPipes = doc.GetElements<MEPCurve>().Where(p => SystemCalcUtil.IsStart(p) && p.IsVerticalPipe());
|
|
|
foreach (var verticalPipe in verticalPipes)
|
|
|
{
|
|
|
ElementTreeNode node = new ElementTreeNode();
|
|
@@ -153,6 +153,8 @@ namespace SAGA.GplotRelationComputerManage
|
|
|
/// <param name="context"></param>
|
|
|
public void Parse(SystemComputerContext context)
|
|
|
{
|
|
|
+ if (UseLevel == null)
|
|
|
+ return;
|
|
|
var doc = Document;
|
|
|
var relations = context.Relations;
|
|
|
foreach (var relation in relations)
|
|
@@ -172,6 +174,7 @@ namespace SAGA.GplotRelationComputerManage
|
|
|
#region 水系统解析
|
|
|
public void ParsePipe(SystemComputerContext context,RelationTypeShell relationSetting)
|
|
|
{
|
|
|
+ Domain useDomain = Domain.DomainPiping;
|
|
|
List<FloorDrawRecord> drawRecords = new List<FloorDrawRecord>();
|
|
|
List<FloorRelationRecord> relationRecords = new List<FloorRelationRecord>();
|
|
|
#region 计算拓扑树形结构
|
|
@@ -182,19 +185,27 @@ namespace SAGA.GplotRelationComputerManage
|
|
|
*/
|
|
|
var startNodes = GetStartNodes();
|
|
|
List<int> useIds = new List<int>();
|
|
|
+ List<MEPCurve> verticalMepCurves = new List<MEPCurve>();
|
|
|
for (int i = 0; i < startNodes.Count; i++)
|
|
|
{
|
|
|
var startNode = startNodes[i];
|
|
|
- if (!relationSetting.IsMatchSystem(startNode.Flag))
|
|
|
- {
|
|
|
+ var useRelation = relationSetting.GetFirstMatchSystem(startNode.Flag);
|
|
|
+ if (useRelation == null)
|
|
|
continue;
|
|
|
- }
|
|
|
+
|
|
|
if (useIds.Any(id => id == startNode.Instance.Current.Id.IntegerValue))
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
- var tempIds=SystemParseManager.BuildSystemNode(startNode.Instance, Domain.DomainPiping,
|
|
|
- (m => !relationSetting.IsMatchSystem(m.GetSystemTypeName())));
|
|
|
+
|
|
|
+ if (startNode.Instance.Current is MEPCurve mepCurve)
|
|
|
+ {
|
|
|
+ verticalMepCurves.Add(mepCurve);
|
|
|
+ }
|
|
|
+ var tempIds=SystemParseManager.BuildSystemNode(startNode.Instance, useDomain,
|
|
|
+ (m => !startNode.Flag.Equals(m.GetSystemTypeName())));
|
|
|
+ startNode.Instance.PipeSystemTypeName = startNode.Flag;
|
|
|
+ BuildElementNodeData(context, startNode.Instance);
|
|
|
useIds.AddRange(tempIds);
|
|
|
startNode.Handled = true;
|
|
|
|
|
@@ -202,9 +213,10 @@ namespace SAGA.GplotRelationComputerManage
|
|
|
#region 整理原始数据
|
|
|
//判断是否有设备节点,不进行数据处理
|
|
|
var useNode = startNode.Instance;
|
|
|
- var firstEquipment = useNode.FirstOrDefault(t => MBIInfoUtil.IsEquipment(t.Current));
|
|
|
+ //var firstEquipment = useNode.FirstOrDefault(t => MBIInfoUtil.IsEquipment(t.Current));
|
|
|
//要不要以这个为判定条件,图形可以画出,关系肯定是没有的
|
|
|
- if (firstEquipment != null)
|
|
|
+ //if (firstEquipment != null)
|
|
|
+ if (useNode.Nodes.Any())
|
|
|
{
|
|
|
//存在设备则保存信息
|
|
|
var drawRecord = BuildFloorDrawRecord(relationSetting, useNode);
|
|
@@ -222,35 +234,54 @@ namespace SAGA.GplotRelationComputerManage
|
|
|
relationSetting.RelationItem.Objects.SelectMany(o => GetEquipments(o.Type)).ToList();
|
|
|
for (int i = 0; i < singleInstances.Count; i++)
|
|
|
{
|
|
|
- var useInstance = singleInstances[i];
|
|
|
+ var useInstance = singleInstances[i];
|
|
|
if (useIds.Any(id => id == useInstance.Id.IntegerValue))
|
|
|
{
|
|
|
continue;
|
|
|
}
|
|
|
- var startNode = new ElementTreeNode() {Current = useInstance};
|
|
|
- var tempIds = SystemParseManager.BuildSystemNode(startNode, Domain.DomainPiping,
|
|
|
- (m => !relationSetting.IsMatchSystem(m.GetSystemTypeName())));
|
|
|
- useIds.AddRange(tempIds);
|
|
|
- #region 生成绘图,计算数据
|
|
|
- //解析数据,找管道定系统,管道找不到,系统名为"关联类型-未知"
|
|
|
- var firstMepCurve = startNode.FirstOrDefault(t => t.Current is MEPCurve);
|
|
|
- if (firstMepCurve == null)
|
|
|
- continue;
|
|
|
- var useSystemName = (firstMepCurve.Current as MEPCurve)?.GetSystemTypeName() ?? GetUnknownSystemName(relationSetting);
|
|
|
- //存在设备则保存信息
|
|
|
- var drawRecord = BuildFloorDrawRecord(relationSetting, startNode);
|
|
|
- drawRecord.SystemName = useSystemName;
|
|
|
- drawRecords.Add(drawRecord);
|
|
|
+ var connectors = useInstance.GetAllConnectors();
|
|
|
+ foreach (var connector in connectors)
|
|
|
+ {
|
|
|
+ if (connector.Domain != useDomain)
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ var startNode = SystemParseManager.CreateTreeNode(useInstance, connector, e => e is MEPCurve);
|
|
|
+ var useMepCurve = startNode.GetLeaves().FirstOrDefault()?.Current as MEPCurve;
|
|
|
+ if (useMepCurve == null)
|
|
|
+ continue;
|
|
|
+ var systemTypeName = useMepCurve.GetSystemTypeName();
|
|
|
+ if (!relationSetting.IsMatchSystem(systemTypeName))
|
|
|
+ {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ //var startNode = new ElementTreeNode() { Current = useInstance };
|
|
|
+ var tempIds = SystemParseManager.BuildSystemNode(startNode, useDomain,
|
|
|
+ (m => !systemTypeName.Equals(m.GetSystemTypeName())));
|
|
|
+ startNode.PipeSystemTypeName = systemTypeName;
|
|
|
+ BuildElementNodeData(context, startNode);
|
|
|
+ useIds.AddRange(tempIds);
|
|
|
+ #region 生成绘图,计算数据
|
|
|
+ //解析数据,找管道定系统,管道找不到,系统名为"关联类型-未知"
|
|
|
+ var drawRecord = BuildFloorDrawRecord(relationSetting, startNode);
|
|
|
+ drawRecord.SystemName = systemTypeName;
|
|
|
+ drawRecords.Add(drawRecord);
|
|
|
+
|
|
|
+ var relationRecord = BuildFloorRelationRecord(relationSetting, startNode);
|
|
|
+ relationRecords.Add(relationRecord);
|
|
|
+ #endregion
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
|
|
|
- var relationRecord = BuildFloorRelationRecord(relationSetting, startNode);
|
|
|
- relationRecords.Add(relationRecord);
|
|
|
- #endregion
|
|
|
|
|
|
}
|
|
|
#endregion
|
|
|
-
|
|
|
- context.DrawRecords.AddRange(drawRecords);
|
|
|
- context.RelationRecords.AddRange(relationRecords);
|
|
|
+ //增加立管数据
|
|
|
+ ComputerVerticalPipes(UseLevel, verticalMepCurves, context);
|
|
|
+ context.FloorDrawRecords.AddRange(drawRecords);
|
|
|
+ context.FloorRelationRecords.AddRange(relationRecords);
|
|
|
}
|
|
|
#endregion
|
|
|
|
|
@@ -265,13 +296,13 @@ namespace SAGA.GplotRelationComputerManage
|
|
|
* 1、解析立管需要考虑,竖直风管,水管,空间的情况;
|
|
|
*2、将各层数据汇总,才能统一计算立管的相关关系数据
|
|
|
*/
|
|
|
- private void ComputerVerticalPipes(Level refLevel, List<Pipe> pipes, SystemComputerContext context)
|
|
|
+ private void ComputerVerticalPipes(Level refLevel, List<MEPCurve> mepCurves, SystemComputerContext context)
|
|
|
{
|
|
|
var result = new List<VerticalPipe>();
|
|
|
var spaces = Document.GetElements<SpatialElement>(BuiltInCategory.OST_MEPSpaces).OfType<Space>();
|
|
|
var level = refLevel;
|
|
|
var currentLevelName = MBIInfoUtil.GetFloorNameByLevel(level.Name);
|
|
|
- foreach (var pipe in pipes)
|
|
|
+ foreach (var pipe in mepCurves)
|
|
|
{
|
|
|
if (pipe == null)
|
|
|
continue;
|
|
@@ -324,9 +355,71 @@ namespace SAGA.GplotRelationComputerManage
|
|
|
var floorRelation = new FloorRelationRecord();
|
|
|
floorRelation.SetFloorLevel(UseLevel);
|
|
|
floorRelation.RelationType = relationShell.RelationItem.Type;
|
|
|
- floorRelation.EquipmentItems = SystemParseManager.CreateRelation(node)??new List<EquipmentNode>();
|
|
|
+ floorRelation.RelationItems = SystemParseManager.CreateRelation(node)??new List<BinaryRelationItem>();
|
|
|
return floorRelation;
|
|
|
}
|
|
|
#endregion
|
|
|
+
|
|
|
+ #region 初始化名称,分类
|
|
|
+ /// <summary>
|
|
|
+ /// 初始化节点扩展数据
|
|
|
+ /// </summary>
|
|
|
+ /// <param name="context"></param>
|
|
|
+ /// <param name="node"></param>
|
|
|
+ private void BuildElementNodeData(SystemComputerContext context, ElementTreeNode node)
|
|
|
+ {
|
|
|
+ Queue<ElementTreeNode> nodeQueue = new Queue<ElementTreeNode>();
|
|
|
+ nodeQueue.Enqueue(node);
|
|
|
+ while (nodeQueue.Any())
|
|
|
+ {
|
|
|
+ #region 控制验证
|
|
|
+ var currentNode = nodeQueue.Dequeue();
|
|
|
+ if (currentNode == null)
|
|
|
+ continue;
|
|
|
+ var element = currentNode.Current;
|
|
|
+ if (element == null)
|
|
|
+ continue;
|
|
|
+ #endregion
|
|
|
+ if (element is FamilyInstance fiEq)
|
|
|
+ {
|
|
|
+ #region 判断是否是设备
|
|
|
+ if (MBIInfoUtil.IsEquipment(fiEq))
|
|
|
+ {
|
|
|
+ var equipItem = context.EquipmentItems.GetItem(fiEq.GetBimId());
|
|
|
+ NodeExtendData data = new NodeExtendData();
|
|
|
+ if (equipItem != null)
|
|
|
+ {
|
|
|
+ data.Name = equipItem.GetDisplay();
|
|
|
+ data.Category = equipItem.Category;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ data.Name = fiEq.GetFamily()?.Name;
|
|
|
+ }
|
|
|
+ data.SystemType = node.PipeSystemTypeName;
|
|
|
+ currentNode.Tag = data;
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
+ }
|
|
|
+ else if (element is Space revitSpace)
|
|
|
+ {
|
|
|
+ var space = context.Rooms.GetItem(element.GetBimId());
|
|
|
+ NodeExtendData data = new NodeExtendData();
|
|
|
+ if (space != null)
|
|
|
+ {
|
|
|
+ data.Name = space.GetDisplay();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ data.Name = revitSpace.Name;
|
|
|
+ }
|
|
|
+ data.SystemType = node.PipeSystemTypeName;
|
|
|
+ currentNode.Tag = data;
|
|
|
+ }
|
|
|
+ currentNode.Nodes.ForEach(e => nodeQueue.Enqueue(e));
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+ #endregion
|
|
|
}
|
|
|
}
|