using Autodesk.Revit.DB; using Autodesk.Revit.DB.Plumbing; using Glodon.Revit.Utility; using HStation.RevitDev.RevitDataExport.Common; using HStation.RevitDev.RevitDataExport.Service; using HStation.RevitDev.RevitDataExport.Utility; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Text.RegularExpressions; using System.Threading.Tasks; namespace HStation.RevitDev.RevitDataExport.Parser { public abstract class BaseParser { public abstract string GetParserName(); public abstract List FilterCategories { get; } public abstract List FilterRegexes { get; } public bool IsPass(Element elem) { if (FilterCategories.Contains((BuiltInCategory)(elem.Category.Id.IntegerValue))) { var elemName = ParameterOperator.GetParameterValueAsValueString(elem, "族与类型", BuiltInParameter.ELEM_FAMILY_AND_TYPE_PARAM); foreach (var pattern in FilterRegexes) { if (Regex.IsMatch(elemName, pattern)) { return true; } } return false; } return false; } public List> CommonPropertyParse(Element elem) { var result = new List> { new Tuple("名称", ParameterOperator.GetElementName(elem)), new Tuple("ID", elem.Id.IntegerValue.ToString()), new Tuple("系统类型", ParameterOperator.GetElementPipingSystemType(elem)?.Name), new Tuple("包围框", BoundingBoxHelper.BoundingBoxSerialize(elem.get_BoundingBox(null))), new Tuple("楼层",elem.GetParameterByProName("参照标高")==null?elem.GetParameterByProName("标高").AsValueString(): elem.GetParameterByProName("参照标高").AsValueString()) }; return result; } public abstract List> PropertyParse(Element elem); } }