/* ============================================================================== * 功能描述: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 { /// /// DocumentSagaSignCheck /// [ParseIgnore] public class SagaSignCheck : ModeCheckBase { /// /// 冗余--或者理解为楼板厚 单位mm /// 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; } /// /// 检查saga标记 /// /// 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(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; } } /// /// 楼层平面名称 /// public string RPlanName { get; set; } /// /// 当前层的标高高度,所有比较的单位都是英寸 /// public double HBase { get; set; } #region RangePassRate /// /// 构件范围检查通过率 /// public double RCPassRate { get; set; } public double ColumnWallPassRate { get; set; } public double SpacePassRate { get; set; } public double InstPassRate { get; set; } #endregion /// /// 冗余--或者理解为楼板厚(单位mm) /// public double Redundant { get; set; } public override void Export() { base.Export(); } } }