zhangyuekai
2024-08-17 2ea53b9fbd3fc318f1c02c1888c22aec5abab8ef
HStation.RevitDev/RevitDataExport/Utility/RevitTypeExtense.cs
@@ -1,6 +1,10 @@
using HStation.RevitDev.Model.AttributeClass;
using HStation.RevitDev.Model.ModelEnum;
using HStation.RevitDev.RevitDataExport.Common;
using HStation.RevitDev.RevitDataExport.Entity;
using HStation.RevitDev.RevitDataExport.Parser;
using System;
using System.Reflection;
namespace HStation.RevitDev.RevitDataExport.Utility
{
@@ -31,5 +35,43 @@
            return false;
        }
        public static Type GetElementModelType(this RevitType revitType)
        {
            var exportTypes = Assembly.GetExecutingAssembly().GetExportedTypes();
            foreach (var type in exportTypes)
            {
                if (!type.IsSubclassOf(typeof(ModelBase))) { continue; }
                var attr = type.GetCustomAttribute<RevitTypeAttribute>();
                if (attr == null) { continue; }
                var rvtType = attr.m_revitType;
                if (rvtType == revitType)
                {
                    return type;
                }
            }
            return null;
        }
        public static BaseParser CreateModelParser(this RevitType revitType)
        {
            var types = Assembly.GetExecutingAssembly().GetTypes();
            foreach (var type in types)
            {
                if (!type.IsSubclassOf(typeof(BaseParser))) { continue; }
                var attr = type.GetCustomAttribute<RevitTypeAttribute>();
                if (attr == null) { continue; }
                if (attr.m_revitType != revitType) { continue; }
                BaseParser parser = Activator.CreateInstance(type) as BaseParser;
                if (parser == null) { continue; }
                return parser;
            }
            return null;
        }
    }
}