/*------------------------------------------------------------------------- * 功能描述:ElementWrapperFactory * 作者:xulisong * 创建时间: 2019/6/24 8:44:46 * 版本号:v1.0 * -------------------------------------------------------------------------*/ using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; using Autodesk.Revit.DB; using RevitExport; using RevitExport.Export; using RevitToJBim.Extension; using RevitToJBim.MBI; using SAGA.RevitUtils.Extends; using SAGA.RevitUtils.MEP; namespace RevitToJBim.Common { /// /// 解析对象创建工厂 /// public class ElementWrapperFactory { /// /// 根据element创建带分类对象的解析信息。便于快速过滤. /// 注:生成wrapper时,为了保证统一性,最好统一调用该方法 /// /// /// public static ElementWrapper CreateWrapper(Element element) { if (element is FamilyInstance fi) { return CreateWrapper(fi); } return new ElementWrapper(element); } /// /// 创建FamilyInstance的wrapper /// /// /// public static ElementWrapper CreateWrapper(FamilyInstance familyInstance) { var useFamilyType = FamilyType.Undefine; var category = familyInstance.Category; if (category != null) { var enumValue = (BuiltInCategory)category.Id.IntegerValue; #region category转换 switch (enumValue) { case BuiltInCategory.OST_Doors: { useFamilyType = FamilyType.Door; break; } case BuiltInCategory.OST_Windows: { useFamilyType = FamilyType.Window; break; } case BuiltInCategory.OST_Columns: case BuiltInCategory.OST_StructuralColumns: { useFamilyType = FamilyType.Column; break; } } #endregion } if (useFamilyType == FamilyType.Undefine) { //判断部件和设备 var familyName = familyInstance.GetFamilyName(); if (Regex.IsMatch(familyName, MBIRegexPattern.IsEquip)|| Regex.IsMatch(familyName, MBIRegexPattern.IsEquipPart)) useFamilyType = FamilyType.Facility; else if (Regex.IsMatch(familyName, MBIRegexPattern.IsBeacon)) { useFamilyType = FamilyType.Beacon; } } if (useFamilyType == FamilyType.Undefine) { var connectors = familyInstance.GetAllConnectors(); if (connectors.Any(c => c.Domain == Domain.DomainHvac || c.Domain == Domain.DomainPiping)) { useFamilyType = FamilyType.JoinObject; } } if (useFamilyType == FamilyType.Undefine) { useFamilyType = FamilyType.Other; } ElementWrapper wrapper = new ElementWrapper(familyInstance); wrapper.Category = CategoryGenerator.BuildingCategory(useFamilyType); return wrapper; } } }