zhangyuekai
2024-07-01 0e3464b6adf776686e66bb3189441ab1a65a088e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
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 false;
                    }
                }
                return true;
            }
            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);
    }
}