/* ============================================================================== * 功能描述:编码检查 * 创 建 者:Garrett * 创建日期:2018/10/23 15:08:55 * ==============================================================================*/ using System; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Linq; using Autodesk.Revit.DB; using NPOI.SS.UserModel; using SAGA.DotNetUtils.Extend; using SAGA.DotNetUtils.Others; using SAGA.RevitUtils.Extends; using SAGA.RevitUtils.MEP; namespace Saga.PlugIn.ModelCheck { /// /// UnitCheck /// [ParseIndex(Index = 4)] class FamilyNameCheck : ModeCheckBase { public FamilyNameCheck() { Name = "设备族编码检查"; RSPecificationSheet.Add("参考-revit分类"); } public override bool Check() { if (!RBase.IsRight) { IsRight = RBase.IsRight; return IsRight; } IsRight = FamilyNameCodeCheck(); return IsRight; } /// /// 族名称编码规范检查 /// /// private bool FamilyNameCodeCheck() { bool unitResult = true; var ccategories = DataCheckRule.GetCodeCheckCategories(); foreach (SagaSignCheckResult signResult in RBase.Results) { var document = signResult.RDocument; var categories = document.Settings.Categories; foreach (DCR_CodeCheckCategory ccategory in ccategories) { try { var category = categories.get_Item(ccategory.Name); if (category == null) continue; BuiltInCategory builtInCategory = (BuiltInCategory)category.Id.IntegerValue; var elements = document.GetElements(builtInCategory); var groupByFamily = elements.GroupBy(t => t.GetFamilyName()); foreach (IGrouping grouping in groupByFamily) { var subElements = grouping.ToList(); var subElement = subElements.FirstOrDefault(); if (subElement is FamilyInstance fi) { var result = GetCheckResult(fi) as FamilyNameCheckResult; if (result == null) continue; result.RBase = signResult; //由于数量太多,只显示族名称 Results.Add(result); } } } catch (Exception e) { Console.WriteLine(e); } } } var list = Results.ToList(); list.Sort(new CommonComparer((x, y) => { return x.IsRight.CompareTo(y.IsRight); })); Results =new ObservableCollection(list); return Results.All(t => t.IsRight); } /// /// 获取检测结果 /// /// /// private ModeCheckResultBase GetCheckResult(FamilyInstance fi) { var result = new FamilyNameCheckResult(); result.FamilyName = fi.GetFamilyName(); if (fi.IsEquipment()) { result.IsRight = true; result.Type = DCElementType.Equipment; } else if (fi.IsEquipmentPart()) { result.IsRight = true; result.Type = DCElementType.EuipmentPart; } else if (fi.IsBeacon()) { result.IsRight = true; result.Type = DCElementType.Beacon; } else { result.IsRight = false; result.Type = DCElementType.None; result.RMessage = "请检查族名称编码是否符合要求"; } return result; } public override void Export() { try { IWorkbook book = DCRExport.GetWorkbook(); //ISheet sheet = book.CreateSheet(Name); ISheet sheet = book.GetSheet(Name); #region 添加数据 int index = 3; foreach (FamilyNameCheckResult result in Results) { //全部显示 //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.Type.GetDescription(), style); string rowN4 = result.IsRight ? "通过" : "不通过"; rowN.AddCell(++j, rowN4, style); rowN.AddCell(++j, result.RMessage, style); } #endregion } catch (Exception e) { MessageShowBase.Show(e); } } } class FamilyNameCheckResult : ModeCheckResultBase { public string FamilyName { get; set; } public DCElementType Type { get; set; } } }