SagaSignCheck.cs 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189
  1. /* ==============================================================================
  2. * 功能描述:saga标记检查
  3. * 创 建 者:Garrett
  4. * 创建日期:2018/10/23 9:01:13
  5. * ==============================================================================*/
  6. using System;
  7. using System.Linq;
  8. using System.Text.RegularExpressions;
  9. using Autodesk.Revit.DB;
  10. using FWindSoft.Revit;
  11. using NPOI.SS.UserModel;
  12. using SAGA.DotNetUtils.Extend;
  13. using SAGA.DotNetUtils.Others;
  14. using SAGA.RevitUtils.Extends;
  15. namespace Saga.PlugIn.ModelCheck
  16. {
  17. /// <summary>
  18. /// DocumentSagaSignCheck
  19. /// </summary>
  20. [ParseIgnore]
  21. public class SagaSignCheck : ModeCheckBase
  22. {
  23. /// <summary>
  24. /// 冗余--或者理解为楼板厚 单位mm
  25. /// </summary>
  26. private double redundant;
  27. public SagaSignCheck(double redundant = 500)
  28. {
  29. Name = "楼层平面图命名规范检查";
  30. this.redundant = redundant;
  31. RIsChecked = true;
  32. }
  33. #region Check
  34. public override bool Check()
  35. {
  36. //1,首先检查saga标记和楼层编码符合建模规范要求
  37. IsRight = CheckSagaSign();
  38. return IsRight;
  39. }
  40. /// <summary>
  41. /// 检查saga标记
  42. /// </summary>
  43. /// <returns></returns>
  44. private bool CheckSagaSign()
  45. {
  46. //获取建筑下的楼层
  47. var document = m_Document;
  48. var result = new SagaSignCheckResult() { Redundant = redundant };
  49. result.RDocument = document;
  50. Results.Add(result);
  51. result.RPlanName = "-";
  52. //判断是否存在Saga标记
  53. var sagaPlans = DocumentExtend.GetElements<ViewPlan>(document).Where(t => t.ViewType == ViewType.FloorPlan && t.Name.Contains("-saga"));
  54. do
  55. {
  56. if (!sagaPlans.Any())
  57. {
  58. result.IsRight = false;
  59. result.RMessage = "缺少saga标记";
  60. break;
  61. }
  62. else if (sagaPlans.Count() >= 2)
  63. {
  64. result.IsRight = false;
  65. result.RMessage = "有多个saga标记";
  66. break;
  67. }
  68. else
  69. {
  70. //只有一个saga标记
  71. var sagaPlan = sagaPlans.FirstOrDefault();
  72. string sagaPlanName = sagaPlan.Name;
  73. result.RPlanName = sagaPlanName;
  74. result.HBase = sagaPlan.GenLevel.Elevation;
  75. //打标记的楼层名称必需为指定格式;B1,B1M,F1,F1M,RFM,RF
  76. if (Regex.IsMatch(sagaPlanName, $"{ModelCheckConst.IsMBIView}"))
  77. {
  78. var rfLevel = document.GetLevels().FirstOrDefault(t => System.Text.RegularExpressions.Regex.IsMatch(t.Name, $"{ModelCheckConst.IsRF}"));
  79. if (rfLevel == null)
  80. {
  81. result.IsRight = false;
  82. result.RMessage = $"缺少RF标高";
  83. }
  84. else
  85. {
  86. if (rfLevel.Elevation.IsThanEq(result.HBase))
  87. {
  88. result.IsRight = true;
  89. }
  90. else
  91. {
  92. result.IsRight = false;
  93. result.RMessage = $"RF标高的位置不正确,请检查";
  94. }
  95. }
  96. }
  97. else
  98. {
  99. result.IsRight = false;
  100. result.RMessage = $"楼层 {sagaPlanName} 不符合楼层命名规范";
  101. }
  102. }
  103. } while (false);
  104. return Results.All(t => t.IsRight);
  105. }
  106. #endregion
  107. //[DataCheckProcessAspect]
  108. public override void Export()
  109. {
  110. try
  111. {
  112. IWorkbook book = DCRExport.GetWorkbook(true);
  113. //ISheet sheet = book.CreateSheet(Name);
  114. ISheet sheet = book.GetSheet(Name);
  115. #region 添加数据
  116. int index = 4;
  117. foreach (SagaSignCheckResult result in Results)
  118. {
  119. index++;
  120. int j = -1;
  121. IRow rowN = sheet.CreateRow(index);
  122. DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error;
  123. rowN.AddCell(++j, result.RPlanName, style);
  124. string rowN4 = result.IsRight ? "通过" : "不通过";
  125. rowN.AddCell(++j, rowN4, style);
  126. rowN.AddCell(++j, result.RMessage, style);
  127. }
  128. #endregion
  129. }
  130. catch (Exception e)
  131. {
  132. MessageShowBase.Show(e);
  133. }
  134. }
  135. }
  136. class SagaSignCheckResult : ModeCheckResultBase
  137. {
  138. private Document m_RDocument;
  139. public Document RDocument
  140. {
  141. get
  142. {
  143. return m_RDocument;
  144. }
  145. set { m_RDocument = value; }
  146. }
  147. /// <summary>
  148. /// 楼层平面名称
  149. /// </summary>
  150. public string RPlanName { get; set; }
  151. /// <summary>
  152. /// 当前层的标高高度,所有比较的单位都是英寸
  153. /// </summary>
  154. public double HBase { get; set; }
  155. #region RangePassRate
  156. /// <summary>
  157. /// 构件范围检查通过率
  158. /// </summary>
  159. public double RCPassRate { get; set; }
  160. public double ColumnWallPassRate { get; set; }
  161. public double SpacePassRate { get; set; }
  162. public double InstPassRate { get; set; }
  163. #endregion
  164. /// <summary>
  165. /// 冗余--或者理解为楼板厚(单位mm)
  166. /// </summary>
  167. public double Redundant { get; set; }
  168. public override void Export()
  169. {
  170. base.Export();
  171. }
  172. }
  173. }