FamilyNameCheck.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /* ==============================================================================
  2. * 功能描述:编码检查
  3. * 创 建 者:Garrett
  4. * 创建日期:2018/10/23 15:08:55
  5. * ==============================================================================*/
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Collections.ObjectModel;
  9. using System.Linq;
  10. using Autodesk.Revit.DB;
  11. using NPOI.SS.UserModel;
  12. using SAGA.DotNetUtils.Extend;
  13. using SAGA.DotNetUtils.Others;
  14. using SAGA.RevitUtils.Extends;
  15. using SAGA.RevitUtils.MEP;
  16. namespace Saga.PlugIn.ModelCheck
  17. {
  18. /// <summary>
  19. /// UnitCheck
  20. /// </summary>
  21. [ParseIndex(Index = 4)]
  22. class FamilyNameCheck : ModeCheckBase
  23. {
  24. public FamilyNameCheck()
  25. {
  26. Name = "设备族编码检查";
  27. RSPecificationSheet.Add("参考-revit分类");
  28. }
  29. public override bool Check()
  30. {
  31. if (!RBase.IsRight)
  32. {
  33. IsRight = RBase.IsRight;
  34. return IsRight;
  35. }
  36. IsRight = FamilyNameCodeCheck();
  37. return IsRight;
  38. }
  39. /// <summary>
  40. /// 族名称编码规范检查
  41. /// </summary>
  42. /// <returns></returns>
  43. private bool FamilyNameCodeCheck()
  44. {
  45. bool unitResult = true;
  46. var ccategories = DataCheckRule.GetCodeCheckCategories();
  47. foreach (SagaSignCheckResult signResult in RBase.Results)
  48. {
  49. var document = signResult.RDocument;
  50. var categories = document.Settings.Categories;
  51. foreach (DCR_CodeCheckCategory ccategory in ccategories)
  52. {
  53. try
  54. {
  55. var category = categories.get_Item(ccategory.Name);
  56. if (category == null) continue;
  57. BuiltInCategory builtInCategory = (BuiltInCategory)category.Id.IntegerValue;
  58. var elements = document.GetElements<FamilyInstance>(builtInCategory);
  59. var groupByFamily = elements.GroupBy(t => t.GetFamilyName());
  60. foreach (IGrouping<string, FamilyInstance> grouping in groupByFamily)
  61. {
  62. var subElements = grouping.ToList();
  63. var subElement = subElements.FirstOrDefault();
  64. if (subElement is FamilyInstance fi)
  65. {
  66. var result = GetCheckResult(fi) as FamilyNameCheckResult;
  67. if (result == null) continue;
  68. result.RBase = signResult;
  69. //由于数量太多,只显示族名称
  70. Results.Add(result);
  71. }
  72. }
  73. }
  74. catch (Exception e)
  75. {
  76. Console.WriteLine(e);
  77. }
  78. }
  79. }
  80. var list = Results.ToList();
  81. list.Sort(new CommonComparer<ModeCheckResultBase>((x, y) => { return x.IsRight.CompareTo(y.IsRight); }));
  82. Results =new ObservableCollection<ModeCheckResultBase>(list);
  83. return Results.All(t => t.IsRight);
  84. }
  85. /// <summary>
  86. /// 获取检测结果
  87. /// </summary>
  88. /// <param name="fi"></param>
  89. /// <returns></returns>
  90. private ModeCheckResultBase GetCheckResult(FamilyInstance fi)
  91. {
  92. var result = new FamilyNameCheckResult();
  93. result.FamilyName = fi.GetFamilyName();
  94. if (fi.IsEquipment())
  95. {
  96. result.IsRight = true;
  97. result.Type = DCElementType.Equipment;
  98. }
  99. else if (fi.IsEquipmentPart())
  100. {
  101. result.IsRight = true;
  102. result.Type = DCElementType.EuipmentPart;
  103. }
  104. else if (fi.IsBeacon())
  105. {
  106. result.IsRight = true;
  107. result.Type = DCElementType.Beacon;
  108. }
  109. else
  110. {
  111. result.IsRight = false;
  112. result.Type = DCElementType.None;
  113. result.RMessage = "请检查族名称编码是否符合要求";
  114. }
  115. return result;
  116. }
  117. public override void Export()
  118. {
  119. try
  120. {
  121. IWorkbook book = DCRExport.GetWorkbook();
  122. //ISheet sheet = book.CreateSheet(Name);
  123. ISheet sheet = book.GetSheet(Name);
  124. #region 添加数据
  125. int index = 3;
  126. foreach (FamilyNameCheckResult result in Results)
  127. {
  128. //全部显示
  129. //if (result.IsRight) continue;
  130. index++;
  131. IRow rowN = sheet.CreateRow(index);
  132. DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error;
  133. int j = -1;
  134. rowN.AddCell(++j, result.FamilyName, style);
  135. //rowN.AddCell(++j, result.Type.GetDescription(), style);
  136. string rowN4 = result.IsRight ? "通过" : "不通过";
  137. rowN.AddCell(++j, rowN4, style);
  138. rowN.AddCell(++j, result.RMessage, style);
  139. }
  140. #endregion
  141. }
  142. catch (Exception e)
  143. {
  144. MessageShowBase.Show(e);
  145. }
  146. }
  147. }
  148. class FamilyNameCheckResult : ModeCheckResultBase
  149. {
  150. public string FamilyName { get; set; }
  151. public DCElementType Type { get; set; }
  152. }
  153. }