123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- /* ==============================================================================
- * 功能描述:saga标记检查
- * 创 建 者:Garrett
- * 创建日期:2018/10/23 9:01:13
- * ==============================================================================*/
- using System;
- using System.Linq;
- using System.Text.RegularExpressions;
- using Autodesk.Revit.DB;
- using FWindSoft.Revit;
- using NPOI.SS.UserModel;
- using SAGA.DotNetUtils.Extend;
- using SAGA.DotNetUtils.Others;
- using SAGA.RevitUtils.Extends;
- namespace Saga.PlugIn.ModelCheck
- {
- /// <summary>
- /// DocumentSagaSignCheck
- /// </summary>
- [ParseIgnore]
- public class SagaSignCheck : ModeCheckBase
- {
- /// <summary>
- /// 冗余--或者理解为楼板厚 单位mm
- /// </summary>
- private double redundant;
- public SagaSignCheck(double redundant = 500)
- {
- Name = "楼层平面图命名规范检查";
- this.redundant = redundant;
- RIsChecked = true;
- }
- #region Check
- public override bool Check()
- {
- //1,首先检查saga标记和楼层编码符合建模规范要求
- IsRight = CheckSagaSign();
- return IsRight;
- }
- /// <summary>
- /// 检查saga标记
- /// </summary>
- /// <returns></returns>
- private bool CheckSagaSign()
- {
- //获取建筑下的楼层
- var document = m_Document;
- var result = new SagaSignCheckResult() { Redundant = redundant };
- result.RDocument = document;
- Results.Add(result);
- result.RPlanName = "-";
- //判断是否存在Saga标记
- var sagaPlans = DocumentExtend.GetElements<ViewPlan>(document).Where(t => t.ViewType == ViewType.FloorPlan && t.Name.Contains("-saga"));
- do
- {
- if (!sagaPlans.Any())
- {
- result.IsRight = false;
- result.RMessage = "缺少saga标记";
- break;
- }
- else if (sagaPlans.Count() >= 2)
- {
- result.IsRight = false;
- result.RMessage = "有多个saga标记";
- break;
- }
- else
- {
- //只有一个saga标记
- var sagaPlan = sagaPlans.FirstOrDefault();
- string sagaPlanName = sagaPlan.Name;
- result.RPlanName = sagaPlanName;
- result.HBase = sagaPlan.GenLevel.Elevation;
- //打标记的楼层名称必需为指定格式;B1,B1M,F1,F1M,RFM,RF
- if (Regex.IsMatch(sagaPlanName, $"{ModelCheckConst.IsMBIView}"))
- {
- var rfLevel = document.GetLevels().FirstOrDefault(t => System.Text.RegularExpressions.Regex.IsMatch(t.Name, $"{ModelCheckConst.IsRF}"));
- if (rfLevel == null)
- {
- result.IsRight = false;
- result.RMessage = $"缺少RF标高";
- }
- else
- {
- if (rfLevel.Elevation.IsThanEq(result.HBase))
- {
- result.IsRight = true;
- }
- else
- {
- result.IsRight = false;
- result.RMessage = $"RF标高的位置不正确,请检查";
- }
- }
- }
- else
- {
- result.IsRight = false;
- result.RMessage = $"楼层 {sagaPlanName} 不符合楼层命名规范";
- }
- }
- } while (false);
-
- return Results.All(t => t.IsRight);
- }
- #endregion
- //[DataCheckProcessAspect]
- public override void Export()
- {
- try
- {
- IWorkbook book = DCRExport.GetWorkbook(true);
- //ISheet sheet = book.CreateSheet(Name);
- ISheet sheet = book.GetSheet(Name);
- #region 添加数据
- int index = 4;
- foreach (SagaSignCheckResult result in Results)
- {
- index++;
- int j = -1;
- IRow rowN = sheet.CreateRow(index);
- DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error;
-
- rowN.AddCell(++j, result.RPlanName, style);
- string rowN4 = result.IsRight ? "通过" : "不通过";
- rowN.AddCell(++j, rowN4, style);
- rowN.AddCell(++j, result.RMessage, style);
- }
- #endregion
- }
- catch (Exception e)
- {
- MessageShowBase.Show(e);
- }
- }
- }
- class SagaSignCheckResult : ModeCheckResultBase
- {
- private Document m_RDocument;
- public Document RDocument
- {
- get
- {
- return m_RDocument;
- }
- set { m_RDocument = value; }
- }
- /// <summary>
- /// 楼层平面名称
- /// </summary>
- public string RPlanName { get; set; }
- /// <summary>
- /// 当前层的标高高度,所有比较的单位都是英寸
- /// </summary>
- public double HBase { get; set; }
- #region RangePassRate
- /// <summary>
- /// 构件范围检查通过率
- /// </summary>
- public double RCPassRate { get; set; }
- public double ColumnWallPassRate { get; set; }
- public double SpacePassRate { get; set; }
- public double InstPassRate { get; set; }
- #endregion
- /// <summary>
- /// 冗余--或者理解为楼板厚(单位mm)
- /// </summary>
- public double Redundant { get; set; }
- public override void Export()
- {
- base.Export();
- }
- }
- }
|