/* ============================================================================== * 功能描述:未在空间中的设备检查 * 创 建 者:Garrett * 创建日期:2018/10/23 15:08:55 * ==============================================================================*/ using System; using System.Collections.Generic; using System.Linq; using Autodesk.Revit.DB; using Autodesk.Revit.DB.Mechanical; using NPOI.SS.UserModel; using SAGA.DotNetUtils.Others; using SAGA.RevitUtils.Extends; namespace Saga.PlugIn.ModelCheck { /// /// UnitCheck /// [ParseIndex(Index = 9)] class EquipmentInSpaceCheck : ModeCheckBase { public EquipmentInSpaceCheck() { Name = "未在空间中的设备"; } public override bool Check() { if (!RBase.IsRight) { IsRight = RBase.IsRight; return IsRight; } IsRight = GetCheckResult(); return IsRight; } private bool GetCheckResult() { bool unitResult = true; foreach (SagaSignCheckResult signResult in RBase.Results) { var document = signResult.RDocument; var elements = document.GetFamilyInstances(); var parts = elements.Where(t => t.IsEquipment()|| t.IsEquipmentPart()); var rspaces = document.GetSpaces().Where(t => t.IsSpace()).ToList(); foreach (Element fi in parts) { var result = GetCheckResult(fi,rspaces); result.RBase = signResult; Results.Add(result); } } return Results.All(t => t.IsRight); } /// /// 获取检测结果 /// /// /// private ModeCheckResultBase GetCheckResult(Element fi,List spaces) { var result = new EquipmentInSpaceCheckResult(); result.FamilyName = fi.GetFamilyName(); result.Id = fi.Id.ToString(); var space = fi.GetReferenceSpace(spaces); if (space == null) { result.IsRight = false; result.RMessage = "请检查设备是否在空间中"; } else { result.IsRight = true; result.RMessage = $"关联空间的id为{space.Id}"; } return result; } //[DataCheckProcessAspect] public override void Export() { try { IWorkbook book = DCRExport.GetWorkbook(); //ISheet sheet = book.CreateSheet(Name); ISheet sheet = book.GetSheet(Name); #region 添加数据 int index = 3; //添加 共检查XXX条数据,未通过检查的如下 提示 IRow rowTip = sheet.CreateRow(index - 1); rowTip.AddCell(0, $"总检查{Results.Count}条数据,未通过检查的如下", DataCheckNPOIStyle.Title); foreach (EquipmentInSpaceCheckResult result in Results) { SagaSignCheckResult rbase = result.RBase as SagaSignCheckResult; if (rbase == null) continue; //数量过多,只显示有问题的 if (result.IsRight) continue; index++; IRow rowN = sheet.CreateRow(index); DataCheckNPOIStyle style = result.IsRight ? DataCheckNPOIStyle.Content : DataCheckNPOIStyle.Error; int j = -1; rowN.AddCell(++j, result.FamilyName, style); rowN.AddCell(++j, result.Id, style); string rowN4 = result.IsRight ? "通过" : "不通过"; rowN.AddCell(++j, rowN4, style); rowN.AddCell(++j, result.RMessage, style); } #endregion } catch (Exception e) { MessageShowBase.Show(e); } } } class EquipmentInSpaceCheckResult : ModeCheckResultBase { public string FamilyName { get; set; } public string Id { get; set; } } }