FloorCheckItem.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. /*-------------------------------------------------------------------------
  2. * 功能描述:FloorCheckItem
  3. * 作者:xulisong
  4. * 创建时间: 2019/2/28 11:53:22
  5. * 版本号:v1.0
  6. * -------------------------------------------------------------------------*/
  7. using System;
  8. using System.Collections.Generic;
  9. using System.Linq;
  10. using Autodesk.Revit.DB;
  11. using SAGA.DotNetUtils.Extend;
  12. using SAGA.DotNetUtils.Utilities;
  13. using SAGA.RevitUtils.Extends;
  14. using SAGA.RevitUtils.MEP;
  15. namespace SAGA.GplotRelationComputerManage.SystemChecks
  16. {
  17. /// <summary>
  18. /// 每层检测结果
  19. /// </summary>
  20. public class FloorCheckItem
  21. {
  22. #region 构造函数
  23. /// <summary>
  24. /// 初始化解析类
  25. /// </summary>
  26. /// <param name="doc"></param>
  27. public FloorCheckItem(Document doc)
  28. {
  29. Document = doc;
  30. }
  31. #endregion
  32. #region 属性相关
  33. /// <summary>
  34. /// 关联模型信息
  35. /// </summary>
  36. public Document Document { get; private set; }
  37. /// <summary>
  38. /// 使用关联标高
  39. /// </summary>
  40. public Level UseLevel { get; private set; }
  41. #endregion
  42. #region 解析方法
  43. public void Parse(GplotSystemCheckContext context)
  44. {
  45. var doc = Document;
  46. var relations = context.Relations;
  47. foreach (var relation in relations)
  48. {
  49. var shell = context.RelationShells.GetItem(relation);
  50. ParseSystem(context, shell, shell.IsPipeSystem() ? Domain.DomainPiping : Domain.DomainHvac);
  51. }
  52. }
  53. private void ParseSystem(GplotSystemCheckContext context, RelationTypeShell shell, Domain domain)
  54. {
  55. SystemCheckReportItem reportItem = new SystemCheckReportItem();
  56. reportItem.FloorId = Document.PathName.GetFileName();
  57. reportItem.GplotType = shell.RelationItem.Type;
  58. reportItem.BuildingTime = TimeUtil.ToDbString(DateTime.Now);
  59. #region 测试
  60. //reportItem.FloorId = Document.PathName.GetFileName();
  61. //reportItem.GplotType = shell.RelationItem.Type;
  62. //reportItem.BuildingTime = DateTime.Now.ToString("yyyyMMddHHmmss");
  63. //for (int i = 0; i < 30; i++)
  64. //{
  65. // SystemCheckResultItem item = new SystemCheckResultItem();
  66. // item.BimId = i.ToString();
  67. // item.SystemName = "循环供水";
  68. // item.FlowDirection = "位置";
  69. // item.IsCorrected = false;
  70. // item.IsMisinformation = false;
  71. // item.ErrorCode = "00" + (i % 3 + 1);//ErrorCodeUtil.GetErrorDescription("00" + (i % 3 + 1));
  72. // reportItem.ResultItems.Add(item);
  73. //}
  74. #endregion
  75. var elements = Document.FilterElements<MEPCurve>().Where(p => shell.IsMatchSystem(p.GetSystemTypeName())).ToList();
  76. foreach (var element in elements)
  77. {
  78. SystemCheckResultItem item = new SystemCheckResultItem();
  79. item.BimId = element.Id.ToString();
  80. item.SystemName = element.GetSystemTypeName();
  81. item.FlowDirection = "未知";
  82. item.IsCorrected = false;
  83. item.IsMisinformation = false;
  84. var connectors = element.GetConnectors(domain);
  85. if (SystemCalcUtil.IsStart(element))
  86. {
  87. //标记立管,所有连接点都未记录则删除
  88. //if (!connectors.Any(c => c.IsConnected))
  89. //{
  90. // item.ErrorCode = "001";
  91. // reportItem.ResultItems.Add(item);
  92. //}
  93. continue;
  94. }
  95. if (connectors.Any(c => !c.IsConnected))
  96. {
  97. item.ErrorCode = "001";
  98. reportItem.ResultItems.Add(item);
  99. continue;
  100. }
  101. var endElements = element.GetFirstElements(null,e=>e is MEPCurve|| MBIInfoUtil.IsEquipment(e));
  102. List<MEPCurve> curves = endElements.OfType<MEPCurve>().ToList();
  103. foreach (var mepCurve in curves)
  104. {
  105. if (item.SystemName != mepCurve.GetSystemTypeName())
  106. {
  107. item.ErrorCode = "002";
  108. reportItem.ResultItems.Add(item);
  109. break;
  110. }
  111. }
  112. }
  113. context.ReportItems.Add(reportItem);
  114. }
  115. #endregion
  116. }
  117. }