SagaSignCheck.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196
  1. /* ==============================================================================
  2. * 功能描述:saga标记检查
  3. * 创 建 者:Garrett
  4. * 创建日期:2018/10/23 9:01:13
  5. * ==============================================================================*/
  6. using System;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Text.RegularExpressions;
  12. using System.Threading.Tasks;
  13. using Autodesk.Revit.DB;
  14. using Microsoft.Win32;
  15. using NPOI.SS.UserModel;
  16. using NPOI.SS.Util;
  17. using NPOI.XSSF.UserModel;
  18. using SAGA.DotNetUtils.Extend;
  19. using SAGA.DotNetUtils.Others;
  20. using SAGA.MBI.Common;
  21. using SAGA.MBI.DataArrange;
  22. using SAGA.MBI.Model;
  23. using SAGA.MBI.Tools;
  24. using SAGA.MBI.ToolsData.CheckBase;
  25. using SAGA.RevitUtils.Extends;
  26. namespace SAGA.MBI.ToolsData.ModeCheck
  27. {
  28. /// <summary>
  29. /// DocumentSagaSignCheck
  30. /// </summary>
  31. public class SagaSignCheck : ModeCheckBase
  32. {
  33. /// <summary>
  34. /// 冗余--或者理解为楼板厚 单位mm
  35. /// </summary>
  36. private double redundant;
  37. public SagaSignCheck(double redundant = 500)
  38. {
  39. Name = "楼层平面图命名规范检查";
  40. this.redundant = redundant;
  41. RIsReadOnly = true;
  42. RIsChecked = true;
  43. }
  44. #region Check
  45. [DataCheckProcessAspect]
  46. public override bool Check()
  47. {
  48. //1,首先检查saga标记和楼层编码符合建模规范要求
  49. IsRight = CheckSagaSign();
  50. return IsRight;
  51. }
  52. /// <summary>
  53. /// 检查saga标记
  54. /// </summary>
  55. /// <returns></returns>
  56. private bool CheckSagaSign()
  57. {
  58. bool allRight = true;
  59. //获取建筑下的楼层
  60. var floors = DalProjectTree.GetSelectedFloors();
  61. int i = 0;
  62. foreach (MFloor mFloor in floors)
  63. {
  64. //if (++i > 1) break;
  65. var result = new SagaSignCheckResult() { Redundant = redundant };
  66. Results.Add(result);
  67. result.RFloorName = mFloor.ToString();
  68. result.RFileName = mFloor.RevitName + ".rvt";
  69. result.RPath = mFloor.FullPath;
  70. result.RPlanName = "-";
  71. //判断是否缺少模型文件
  72. if (mFloor.IsMissFile)
  73. {
  74. result.IsRight = false;
  75. allRight = result.IsRight;
  76. result.RMessage = "缺少模型文件";
  77. continue;
  78. }
  79. //判断是否存在Saga标记
  80. var document = result.RDocument;
  81. var sagaPlans = document.GetElements<ViewPlan>().Where(t => t.ViewType == ViewType.FloorPlan && t.Name.Contains("-saga"));
  82. if (!sagaPlans.Any())
  83. {
  84. result.IsRight = false;
  85. allRight = result.IsRight;
  86. result.RMessage = "缺少saga标记";
  87. continue;
  88. }
  89. else if (sagaPlans.Count() >= 2)
  90. {
  91. result.IsRight = false;
  92. allRight = result.IsRight;
  93. result.RMessage = "有多个saga标记";
  94. continue;
  95. }
  96. else
  97. {
  98. //只有一个saga标记
  99. var sagaPlan = sagaPlans.FirstOrDefault();
  100. string sagaPlanName = sagaPlan.Name;
  101. result.RPlanName = sagaPlanName;
  102. result.HBase = sagaPlan.GenLevel.Elevation;
  103. //打标记的楼层名称必需为指定格式;B1,B1M,F1,F1M,RFM,RF
  104. if (Regex.IsMatch(sagaPlanName, @"([BF][1-9]\d*M?|RFM?)-saga"))
  105. {
  106. result.RSequence = mFloor.Sequence;
  107. var rfLevel = document.GetLevels().FirstOrDefault(t => Regex.IsMatch(t.Name, @"RF(-saga)?"));
  108. if (rfLevel == null)
  109. {
  110. result.IsRight = false;
  111. result.RMessage = $"缺少RF标高";
  112. }
  113. else
  114. {
  115. if (rfLevel.Elevation.IsThanEq(result.HBase))
  116. {
  117. result.IsRight = true;
  118. }
  119. else
  120. {
  121. result.IsRight = false;
  122. result.RMessage = $"RF标高的位置不正确,请检查";
  123. }
  124. }
  125. }
  126. else
  127. {
  128. result.IsRight = false;
  129. allRight = result.IsRight;
  130. result.RMessage = $"楼层 {sagaPlanName} 不符合楼层命名规范";
  131. }
  132. }
  133. }
  134. return Results.All(t => t.IsRight);
  135. }
  136. #endregion
  137. public override void Correct()
  138. {
  139. throw new NotImplementedException();
  140. }
  141. //[DataCheckProcessAspect]
  142. public override void Export()
  143. {
  144. // Check();
  145. try
  146. {
  147. IWorkbook book = DCRExport.GetWorkbook(true);
  148. //ISheet sheet = book.CreateSheet(Name);
  149. ISheet sheet = book.GetSheet(Name);
  150. #region 添加数据
  151. int index = 4;
  152. //IRow row4 = sheet.CreateRow(index);
  153. //row4.HeightInPoints = 15;
  154. //row4.AddCell(0, "楼层本地名称", DataCheckNPOIStyle.Title);
  155. //row4.AddCell(1, "文件名", DataCheckNPOIStyle.Title);
  156. //row4.AddCell(2, "文件地址", DataCheckNPOIStyle.Title);
  157. //row4.AddCell(3, "楼层平面视图名称", DataCheckNPOIStyle.Title);
  158. //row4.AddCell(4, "通过", DataCheckNPOIStyle.Title);
  159. //row4.AddCell(5, "备注(失败原因)", DataCheckNPOIStyle.Title);
  160. foreach (SagaSignCheckResult result in Results)
  161. {
  162. index++;
  163. IRow rowN = sheet.CreateRow(index);
  164. DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error;
  165. rowN.AddCell(0, result.RFloorName, style);
  166. rowN.AddCell(1, result.RFileName, style);
  167. rowN.AddCell(2, result.RPath, style);
  168. rowN.AddCell(3, result.RPlanName, style);
  169. string rowN4 = result.IsRight ? "通过" : "不通过";
  170. rowN.AddCell(4, rowN4, style);
  171. rowN.AddCell(5, result.RMessage, style);
  172. }
  173. #endregion
  174. }
  175. catch (Exception e)
  176. {
  177. MessageShowBase.Show(e);
  178. }
  179. }
  180. }
  181. }