qin
2024-08-27 8d6cdf37178ba699f04d61dbaee89f81ff83c488
HStation.RevitDev/RevitDataExport/Parser/BaseParser.cs
@@ -1,58 +1,74 @@
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<BuiltInCategory> FilterCategories { get; }
        public abstract List<string> 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<Tuple<string, string>> CommonPropertyParse(Element elem)
        {
            var result = new List<Tuple<string, string>>
            {
                new Tuple<string, string>("名称", ParameterOperator.GetElementName(elem)),
                new Tuple<string, string>("ID", elem.Id.IntegerValue.ToString()),
                new Tuple<string, string>("系统类型", ParameterOperator.GetElementPipingSystemType(elem)?.Name),
                new Tuple<string, string>("包围框", BoundingBoxHelper.BoundingBoxSerialize(elem.get_BoundingBox(null))),
                new Tuple<string, string>("楼层",elem.GetParameterByProName("参照标高")==null?elem.GetParameterByProName("标高").AsValueString(): elem.GetParameterByProName("参照标高").AsValueString())
            };
            return result;
        }
        public abstract List<Tuple<string, string>> PropertyParse(Element elem);
    }
}
using Autodesk.Revit.DB;
using Autodesk.Revit.UI;
using Glodon.Revit.Utility;
using HStation.RevitDev.RevitDataExport.Entity;
using HStation.RevitDev.RevitDataExport.Utility;
using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
namespace HStation.RevitDev.RevitDataExport.Parser
{
    public abstract class BaseParser
    {
        public abstract string GetParserName();
        public abstract List<BuiltInCategory> FilterCategories { get; }
        public abstract List<string> 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<Tuple<string, string>> CommonPropertyParse(Element elem)
        {
            var result = new List<Tuple<string, string>>
            {
                new Tuple<string, string>("名称", ParameterOperator.GetElementName(elem)),
                new Tuple<string, string>("ID", elem.Id.IntegerValue.ToString()),
                new Tuple<string, string>("系统类型", ParameterOperator.GetElementPipingSystemType(elem)?.Name),
                new Tuple<string, string>("包围框", BoundingBoxHelper.BoundingBoxSerialize(elem.get_BoundingBox(null))),
                new Tuple<string, string>("楼层",elem.GetParameterByProName("参照标高")==null?elem.GetParameterByProName("标高").AsValueString(): elem.GetParameterByProName("参照标高").AsValueString())
            };
            return result;
        }
        public abstract List<Tuple<string, string>> PropertyParse(Element elem);
        public abstract ElementModel Parse(Element elem);
        public ElementModel BaseParse(Element elem)
        {
            var elemName = ParameterOperator.GetElementName(elem);
            var elemId = elem.Id.IntegerValue.ToString();
            var sysName = ParameterOperator.GetElementPipingSystemType(elem)?.Name;
            var box = BoundingBoxHelper.BoundingBoxSerialize(elem.get_BoundingBox(null));
            var refLevel = elem.GetParameterByProName(new List<string> { "参照标高", "标高" })?.AsValueString();
            return new ElementModel
            {
                名称 = elemName,
                编号 = elemId,
                包围框 = box,
                系统类型 = sysName,
                楼层 = refLevel,
                连接构件 = ElementExtense2.GetLinkedElementIds(elemId)
            };
        }
    }
}