/* ============================================================================== * 功能描述:saga标记检查 * 创 建 者:Garrett * 创建日期:2018/10/23 9:01:13 * ==============================================================================*/ using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using Autodesk.Revit.DB; using Microsoft.Win32; using NPOI.SS.UserModel; using NPOI.SS.Util; using NPOI.XSSF.UserModel; using SAGA.DotNetUtils.Extend; using SAGA.DotNetUtils.Others; using SAGA.MBI.Common; using SAGA.MBI.DataArrange; using SAGA.MBI.Model; using SAGA.MBI.Tools; using SAGA.MBI.ToolsData.CheckBase; using SAGA.RevitUtils.Extends; namespace SAGA.MBI.ToolsData.ModeCheck { /// /// DocumentSagaSignCheck /// public class SagaSignCheck : ModeCheckBase { /// /// 冗余--或者理解为楼板厚 单位mm /// private double redundant; public SagaSignCheck(double redundant = 500) { Name = "楼层平面图命名规范检查"; this.redundant = redundant; RIsReadOnly = true; RIsChecked = true; } #region Check [DataCheckProcessAspect] public override bool Check() { //1,首先检查saga标记和楼层编码符合建模规范要求 IsRight = CheckSagaSign(); return IsRight; } /// /// 检查saga标记 /// /// private bool CheckSagaSign() { bool allRight = true; //获取建筑下的楼层 var floors = DalProjectTree.GetSelectedFloors(); int i = 0; foreach (MFloor mFloor in floors) { //if (++i > 1) break; var result = new SagaSignCheckResult() { Redundant = redundant }; Results.Add(result); result.RFloorName = mFloor.ToString(); result.RFileName = mFloor.RevitName + ".rvt"; result.RPath = mFloor.FullPath; result.RPlanName = "-"; //判断是否缺少模型文件 if (mFloor.IsMissFile) { result.IsRight = false; allRight = result.IsRight; result.RMessage = "缺少模型文件"; continue; } //判断是否存在Saga标记 var document = result.RDocument; var sagaPlans = document.GetElements().Where(t => t.ViewType == ViewType.FloorPlan && t.Name.Contains("-saga")); if (!sagaPlans.Any()) { result.IsRight = false; allRight = result.IsRight; result.RMessage = "缺少saga标记"; continue; } else if (sagaPlans.Count() >= 2) { result.IsRight = false; allRight = result.IsRight; result.RMessage = "有多个saga标记"; continue; } 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, @"([BF][1-9]\d*M?|RFM?)-saga")) { result.RSequence = mFloor.Sequence; var rfLevel = document.GetLevels().FirstOrDefault(t => Regex.IsMatch(t.Name, @"RF(-saga)?")); 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; allRight = result.IsRight; result.RMessage = $"楼层 {sagaPlanName} 不符合楼层命名规范"; } } } return allRight; } #endregion public override void Correct() { throw new NotImplementedException(); } //[DataCheckProcessAspect] public override void Export() { // Check(); try { IWorkbook book = DCRExport.GetWorkbook(true); //ISheet sheet = book.CreateSheet(Name); ISheet sheet = book.GetSheet(Name); #region 添加数据 int index = 4; //IRow row4 = sheet.CreateRow(index); //row4.HeightInPoints = 15; //row4.AddCell(0, "楼层本地名称", DataCheckNPOIStyle.Title); //row4.AddCell(1, "文件名", DataCheckNPOIStyle.Title); //row4.AddCell(2, "文件地址", DataCheckNPOIStyle.Title); //row4.AddCell(3, "楼层平面视图名称", DataCheckNPOIStyle.Title); //row4.AddCell(4, "通过", DataCheckNPOIStyle.Title); //row4.AddCell(5, "备注(失败原因)", DataCheckNPOIStyle.Title); foreach (SagaSignCheckResult result in Results) { index++; IRow rowN = sheet.CreateRow(index); DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error; rowN.AddCell(0, result.RFloorName, style); rowN.AddCell(1, result.RFileName, style); rowN.AddCell(2, result.RPath, style); rowN.AddCell(3, result.RPlanName, style); string rowN4 = result.IsRight ? "通过" : "不通过"; rowN.AddCell(4, rowN4, style); rowN.AddCell(5, result.RMessage, style); } #endregion } catch (Exception e) { MessageShowBase.Show(e); } } /// /// 关闭所有窗体 /// public void CloseDoc() { DocumentQueue.CloseAll(); } } }