Revit API 开发周边:得到 Element 的所有子类

前言

Revit API 到底有多少个类是派生自 Element 呢?
API 暴露的 Element 子类型有 359 个。

方案

写一个 IExternalCommand,运行插件时,把类型为 Element 所在的 Assembly,实际上就是 RevitAPI.dll。把它里面所有的类型都找出来,然后每个 type 都去看看是否是直接或者间接继承自 Element。如果是,就记录下来。

namespace RevitAddinTemp
{
    [Autodesk.Revit.Attributes.Transaction(Autodesk.Revit.Attributes.TransactionMode.Manual)]
    public class GetSubClassesCommand : IExternalCommand
    {
        public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements)
        {
            List<Type> allElementTypes = new List<Type>();

            var typeForElement = typeof(Element);
            var types = typeForElement.Assembly.GetTypes();

            // 得到所有继承自 Element 的类型
            foreach (var type in types)
            {
                var baseType = type.BaseType;  //获取基类
                while (baseType != null)  //获取所有基类
                {
                    if (baseType.Name == typeForElement.Name)
                    {
                        allElementTypes.Add(type);
                        break;
                    }
                    else
                    {
                        baseType = baseType.BaseType;
                    }
                }
            }

            // 把继承链中的非终端节点找出来
            List<Type> baseTypes = new List<Type>();
            foreach (Type eType in allElementTypes)
            {
                if(!baseTypes.Contains(eType.BaseType))
                baseTypes.Add(eType.BaseType);
            }

            // 所有的终端节点,就是没有其它类继承这些类型
            List<Type> leafTypes = allElementTypes.Except(baseTypes).ToList();

            string reusltStr = "Total Elements: " + allElementTypes.Count +
                               "\nMiddle Elements: " + baseTypes.Count +
                               "\n";

            foreach(Type eType in baseTypes)
            {
                reusltStr += eType.FullName + "\n";
            }

            reusltStr += "\nLeaf Elements: " + leafTypes.Count + "\n";

            foreach (Type eType in leafTypes)
            {
                reusltStr += eType.FullName + "\n";
            }

            return Result.Succeeded;
        }
    }
}

结果

总数 359 个类型继承自 Element,都在 Autodesk.Revit.DB 这个命名空间下:
359 = 51 + 309 ? 结果有点诡异!
代码里有个bug,统计非终端节点的时候,把 Autodesk.Revit.DB.Element 加进来了,去掉这个就是正确的。

Total Elements: 359
Middle Elements: 51
Autodesk.Revit.DB.Element
Autodesk.Revit.DB.ElementType
Autodesk.Revit.DB.CombinableElement
Autodesk.Revit.DB.GenericForm
Autodesk.Revit.DB.Instance
Autodesk.Revit.DB.SpatialElement
Autodesk.Revit.DB.CurveElement
Autodesk.Revit.DB.LineAndTextAttrSymbol
Autodesk.Revit.DB.TextElementType
Autodesk.Revit.DB.TextElement
Autodesk.Revit.DB.InsertableObject
Autodesk.Revit.DB.FamilySymbol
Autodesk.Revit.DB.View
Autodesk.Revit.DB.DatumPlane
Autodesk.Revit.DB.Analysis.HVACLoadType
Autodesk.Revit.DB.HostObjAttributes
Autodesk.Revit.DB.HostedSweepType
Autodesk.Revit.DB.DimensionType
Autodesk.Revit.DB.FamilyInstance
Autodesk.Revit.DB.Structure.LoadBase
Autodesk.Revit.DB.SpatialElementTag
Autodesk.Revit.DB.HostObject
Autodesk.Revit.DB.CurtainSystemBase
Autodesk.Revit.DB.DetailCurve
Autodesk.Revit.DB.MEPSystem
Autodesk.Revit.DB.RoofBase
Autodesk.Revit.DB.HostedSweep
Autodesk.Revit.DB.MEPCurveType
Autodesk.Revit.DB.CeilingAndFloor
Autodesk.Revit.DB.Structure.LoadTypeBase
Autodesk.Revit.DB.ModelCurve
Autodesk.Revit.DB.MEPCurve
Autodesk.Revit.DB.Dimension
Autodesk.Revit.DB.SketchBase
Autodesk.Revit.DB.BaseArray
Autodesk.Revit.DB.Structure.AnalyticalModel
Autodesk.Revit.DB.Structure.AnalyticalModelStick
Autodesk.Revit.DB.KeyBasedTreeEntryTable
Autodesk.Revit.DB.TableView
Autodesk.Revit.DB.Electrical.CableTrayConduitBase
Autodesk.Revit.DB.Electrical.CableTrayConduitRunBase
Autodesk.Revit.DB.ViewDrafting
Autodesk.Revit.DB.IndependentTag
Autodesk.Revit.DB.MEPSystemType
Autodesk.Revit.DB.ParameterElement
Autodesk.Revit.DB.FilterElement
Autodesk.Revit.DB.Segment
Autodesk.Revit.DB.InsulationLiningBase
Autodesk.Revit.DB.SpatialElementCalculationLocation
Autodesk.Revit.DB.Architecture.ContinuousRail
Autodesk.Revit.DB.Architecture.ContinuousRailType

Leaf Elements: 309
Autodesk.Revit.DB.Control
Autodesk.Revit.DB.Family
Autodesk.Revit.DB.Sweep
Autodesk.Revit.DB.RevitLinkInstance
Autodesk.Revit.DB.AreaVolumeSettings
Autodesk.Revit.DB.Architecture.Room
Autodesk.Revit.DB.ReferencePoint
Autodesk.Revit.DB.CurveByPoints
Autodesk.Revit.DB.SketchPlane
Autodesk.Revit.DB.GraphicsStyle
Autodesk.Revit.DB.Material
Autodesk.Revit.DB.TextNoteType
Autodesk.Revit.DB.TextNote
Autodesk.Revit.DB.Architecture.RoomTagType
Autodesk.Revit.DB.Structure.BoundaryConditions
Autodesk.Revit.DB.Area
Autodesk.Revit.DB.BasePoint
Autodesk.Revit.DB.View3D
Autodesk.Revit.DB.PropertyLine
Autodesk.Revit.DB.Blend
Autodesk.Revit.DB.SweptBlend
Autodesk.Revit.DB.GeomCombination
Autodesk.Revit.DB.SymbolicCurve
Autodesk.Revit.DB.AreaScheme
Autodesk.Revit.DB.ViewPlan
Autodesk.Revit.DB.PrintSetting
Autodesk.Revit.DB.LevelType
Autodesk.Revit.DB.Level
Autodesk.Revit.DB.Phase
Autodesk.Revit.DB.Analysis.HVACLoadSpaceType
Autodesk.Revit.DB.Analysis.HVACLoadBuildingType
Autodesk.Revit.DB.Mechanical.Space
Autodesk.Revit.DB.AnnotationSymbolType
Autodesk.Revit.DB.BeamSystemType
Autodesk.Revit.DB.Structure.RebarCoverType
Autodesk.Revit.DB.CurtainSystemType
Autodesk.Revit.DB.Structure.RebarHookType
Autodesk.Revit.DB.Architecture.FasciaType
Autodesk.Revit.DB.FloorType
Autodesk.Revit.DB.GridType
Autodesk.Revit.DB.Architecture.GutterType
Autodesk.Revit.DB.MullionType
Autodesk.Revit.DB.PanelType
Autodesk.Revit.DB.Structure.Rebar
Autodesk.Revit.DB.Structure.RebarBarType
Autodesk.Revit.DB.RoofType
Autodesk.Revit.DB.SlabEdgeType
Autodesk.Revit.DB.Mechanical.SpaceTagType
Autodesk.Revit.DB.SpotDimensionType
Autodesk.Revit.DB.Structure.TrussType
Autodesk.Revit.DB.ViewSheetSet
Autodesk.Revit.DB.WallType
Autodesk.Revit.DB.WallFoundationType
Autodesk.Revit.DB.AnnotationSymbol
Autodesk.Revit.DB.Structure.AreaLoad
Autodesk.Revit.DB.Structure.AreaReinforcement
Autodesk.Revit.DB.AreaTag
Autodesk.Revit.DB.CurtainSystem
Autodesk.Revit.DB.ViewSheet
Autodesk.Revit.DB.ViewSection
Autodesk.Revit.DB.DetailArc
Autodesk.Revit.DB.DetailEllipse
Autodesk.Revit.DB.DetailLine
Autodesk.Revit.DB.DetailNurbSpline
Autodesk.Revit.DB.Electrical.ElectricalSystem
Autodesk.Revit.DB.Group
Autodesk.Revit.DB.GroupType
Autodesk.Revit.DB.ExtrusionRoof
Autodesk.Revit.DB.Architecture.Fascia
Autodesk.Revit.DB.Mechanical.FlexDuctType
Autodesk.Revit.DB.Plumbing.FlexPipeType
Autodesk.Revit.DB.Floor
Autodesk.Revit.DB.FootPrintRoof
Autodesk.Revit.DB.Form
Autodesk.Revit.DB.Grid
Autodesk.Revit.DB.Architecture.Gutter
Autodesk.Revit.DB.BeamSystem
Autodesk.Revit.DB.Structure.LineLoad
Autodesk.Revit.DB.Structure.LoadCombination
Autodesk.Revit.DB.Structure.LoadCase
Autodesk.Revit.DB.Structure.LoadUsage
Autodesk.Revit.DB.Structure.LoadNature
Autodesk.Revit.DB.Structure.PointLoadType
Autodesk.Revit.DB.Structure.AreaLoadType
Autodesk.Revit.DB.Structure.LineLoadType
Autodesk.Revit.DB.ModelArc
Autodesk.Revit.DB.ModelEllipse
Autodesk.Revit.DB.ModelHermiteSpline
Autodesk.Revit.DB.ModelLine
Autodesk.Revit.DB.ModelNurbSpline
Autodesk.Revit.DB.Opening
Autodesk.Revit.DB.Structure.PathReinforcement
Autodesk.Revit.DB.Structure.PointLoad
Autodesk.Revit.DB.Mechanical.Duct
Autodesk.Revit.DB.Mechanical.DuctType
Autodesk.Revit.DB.Mechanical.FlexDuct
Autodesk.Revit.DB.Plumbing.FlexPipe
Autodesk.Revit.DB.Mechanical.MechanicalSystem
Autodesk.Revit.DB.Plumbing.Pipe
Autodesk.Revit.DB.Plumbing.PipeType
Autodesk.Revit.DB.Plumbing.PipingSystem
Autodesk.Revit.DB.Electrical.Wire
Autodesk.Revit.DB.Structure.RebarShape
Autodesk.Revit.DB.ReferencePlane
Autodesk.Revit.DB.Architecture.RoomTag
Autodesk.Revit.DB.Architecture.TopographySurface
Autodesk.Revit.DB.SlabEdge
Autodesk.Revit.DB.Mechanical.SpaceTag
Autodesk.Revit.DB.SpotDimension
Autodesk.Revit.DB.Structure.Truss
Autodesk.Revit.DB.Wall
Autodesk.Revit.DB.WallFoundation
Autodesk.Revit.DB.Electrical.InsulationType
Autodesk.Revit.DB.Electrical.TemperatureRatingType
Autodesk.Revit.DB.Electrical.WireMaterialType
Autodesk.Revit.DB.Electrical.WireType
Autodesk.Revit.DB.Mechanical.Zone
Autodesk.Revit.DB.ProjectInfo
Autodesk.Revit.DB.ProjectLocation
Autodesk.Revit.DB.Mechanical.DuctSizeSettings
Autodesk.Revit.DB.Extrusion
Autodesk.Revit.DB.ModelText
Autodesk.Revit.DB.ModelTextType
Autodesk.Revit.DB.Revolution
Autodesk.Revit.DB.TilePattern
Autodesk.Revit.DB.DividedSurface
Autodesk.Revit.DB.Viewport
Autodesk.Revit.DB.Electrical.ElectricalSetting
Autodesk.Revit.DB.FillPatternElement
Autodesk.Revit.DB.LinePatternElement
Autodesk.Revit.DB.Structure.AreaReinforcementCurve
Autodesk.Revit.DB.AreaTagType
Autodesk.Revit.DB.AssemblyInstance
Autodesk.Revit.DB.Sketch
Autodesk.Revit.DB.CurtainGridLine
Autodesk.Revit.DB.Mullion
Autodesk.Revit.DB.Panel
Autodesk.Revit.DB.DesignOption
Autodesk.Revit.DB.Path3d
Autodesk.Revit.DB.ImageType
Autodesk.Revit.DB.ImportInstance
Autodesk.Revit.DB.LinearArray
Autodesk.Revit.DB.RadialArray
Autodesk.Revit.DB.SunAndShadowSettings
Autodesk.Revit.DB.SiteLocation
Autodesk.Revit.DB.ConnectorElement
Autodesk.Revit.DB.Electrical.VoltageType
Autodesk.Revit.DB.Electrical.DistributionSysType
Autodesk.Revit.DB.Mechanical.MEPBuildingConstruction
Autodesk.Revit.DB.Analysis.AnalysisDisplayLegend
Autodesk.Revit.DB.Analysis.AnalysisDisplayStyle
Autodesk.Revit.DB.Structure.AnalyticalLink
Autodesk.Revit.DB.Structure.AnalyticalLinkType
Autodesk.Revit.DB.Structure.AnalyticalModelColumn
Autodesk.Revit.DB.Structure.AnalyticalModelSurface
Autodesk.Revit.DB.AngularDimension
Autodesk.Revit.DB.AppearanceAssetElement
Autodesk.Revit.DB.Structure.AreaReinforcementType
Autodesk.Revit.DB.AssemblyCodeTable
Autodesk.Revit.DB.AssemblyType
Autodesk.Revit.DB.ViewSchedule
Autodesk.Revit.DB.ViewNavigationToolSettings
Autodesk.Revit.DB.BrowserOrganization
Autodesk.Revit.DB.Architecture.BuildingPad
Autodesk.Revit.DB.BuildingPadType
Autodesk.Revit.DB.Electrical.CableTray
Autodesk.Revit.DB.Electrical.CableTrayRun
Autodesk.Revit.DB.Electrical.CableTraySettings
Autodesk.Revit.DB.Electrical.CableTraySizes
Autodesk.Revit.DB.Electrical.CableTrayType
Autodesk.Revit.DB.Ceiling
Autodesk.Revit.DB.CeilingType
Autodesk.Revit.DB.ComponentRepeater
Autodesk.Revit.DB.ComponentRepeaterSlot
Autodesk.Revit.DB.Analysis.ConceptualConstructionType
Autodesk.Revit.DB.Analysis.ConceptualSurfaceType
Autodesk.Revit.DB.Electrical.Conduit
Autodesk.Revit.DB.Electrical.ConduitRun
Autodesk.Revit.DB.Electrical.ConduitSettings
Autodesk.Revit.DB.Electrical.ConduitSizeSettings
Autodesk.Revit.DB.Electrical.ConduitType
Autodesk.Revit.DB.ImageView
Autodesk.Revit.DB.Analysis.ViewSystemsAnalysisReport
Autodesk.Revit.DB.ViewFamilyType
Autodesk.Revit.DB.Part
Autodesk.Revit.DB.PartMaker
Autodesk.Revit.DB.ExtensibleStorage.DataStorage
Autodesk.Revit.DB.DefaultDivideSettings
Autodesk.Revit.DB.DirectShape
Autodesk.Revit.DB.DirectShapeType
Autodesk.Revit.DB.DisplacementElement
Autodesk.Revit.DB.DisplacementPath
Autodesk.Revit.DB.DividedPath
Autodesk.Revit.DB.Electrical.ElectricalDemandFactorDefinition
Autodesk.Revit.DB.Electrical.ElectricalLoadClassification
Autodesk.Revit.DB.Structure.EndTreatmentType
Autodesk.Revit.DB.Analysis.EnergyAnalysisDetailModel
Autodesk.Revit.DB.Analysis.EnergyAnalysisOpening
Autodesk.Revit.DB.Analysis.EnergyAnalysisSpace
Autodesk.Revit.DB.Analysis.EnergyAnalysisSurface
Autodesk.Revit.DB.Analysis.EnergyDataSettings
Autodesk.Revit.DB.ExportDGNSettings
Autodesk.Revit.DB.ExportDWGSettings
Autodesk.Revit.DB.Structure.FabricArea
Autodesk.Revit.DB.Structure.FabricAreaType
Autodesk.Revit.DB.Structure.FabricReinSpanSymbol
Autodesk.Revit.DB.Structure.FabricSheetType
Autodesk.Revit.DB.Structure.FabricSheet
Autodesk.Revit.DB.Structure.FabricWireType
Autodesk.Revit.DB.FabricationConfiguration
Autodesk.Revit.DB.FabricationPart
Autodesk.Revit.DB.FabricationPartType
Autodesk.Revit.DB.FaceSplitter
Autodesk.Revit.DB.FaceWall
Autodesk.Revit.DB.FilledRegion
Autodesk.Revit.DB.FilledRegionType
Autodesk.Revit.DB.FreeFormElement
Autodesk.Revit.DB.Analysis.GenericZone
Autodesk.Revit.DB.MultiSegmentGrid
Autodesk.Revit.DB.Structure.Hub
Autodesk.Revit.DB.Plumbing.PipingSystemType
Autodesk.Revit.DB.RevitLinkType
Autodesk.Revit.DB.ImageInstance
Autodesk.Revit.DB.StartingViewSettings
Autodesk.Revit.DB.ElevationMarker
Autodesk.Revit.DB.KeynoteTable
Autodesk.Revit.DB.MEPAnalyticalConnection
Autodesk.Revit.DB.MEPAnalyticalConnectionType
Autodesk.Revit.DB.Mechanical.MEPAnalyticalSystem
Autodesk.Revit.DB.Analysis.MassEnergyAnalyticalModel
Autodesk.Revit.DB.Analysis.MassSurfaceData
Autodesk.Revit.DB.Analysis.MassLevelData
Autodesk.Revit.DB.Analysis.MassZone
Autodesk.Revit.DB.CADLinkType
Autodesk.Revit.DB.Mechanical.MechanicalEquipmentSet
Autodesk.Revit.DB.Mechanical.MechanicalEquipmentSetType
Autodesk.Revit.DB.MultiReferenceAnnotation
Autodesk.Revit.DB.MultiReferenceAnnotationType
Autodesk.Revit.DB.NestedFamilyTypeReference
Autodesk.Revit.DB.NumberingSchema
Autodesk.Revit.DB.Electrical.PanelScheduleSheetInstance
Autodesk.Revit.DB.Electrical.PanelScheduleView
Autodesk.Revit.DB.Electrical.PanelScheduleTemplate
Autodesk.Revit.DB.GlobalParameter
Autodesk.Revit.DB.ParameterFilterElement
Autodesk.Revit.DB.Analysis.PathOfTravel
Autodesk.Revit.DB.Structure.PathReinSpanSymbol
Autodesk.Revit.DB.Structure.PathReinforcementType
Autodesk.Revit.DB.PhaseFilter
Autodesk.Revit.DB.Plumbing.PipeSegment
Autodesk.Revit.DB.PointCloudInstance
Autodesk.Revit.DB.PointCloudType
Autodesk.Revit.DB.Revision
Autodesk.Revit.DB.PropertySetElement
Autodesk.Revit.DB.Mechanical.DuctInsulation
Autodesk.Revit.DB.Mechanical.DuctInsulationType
Autodesk.Revit.DB.Mechanical.DuctLining
Autodesk.Revit.DB.Mechanical.DuctLiningType
Autodesk.Revit.DB.Mechanical.DuctSettings
Autodesk.Revit.DB.Plumbing.FluidType
Autodesk.Revit.DB.Mechanical.MechanicalSystemType
Autodesk.Revit.DB.Plumbing.PipeInsulation
Autodesk.Revit.DB.Plumbing.PipeInsulationType
Autodesk.Revit.DB.Plumbing.PipeScheduleType
Autodesk.Revit.DB.Plumbing.PipeSettings
Autodesk.Revit.DB.Structure.RebarContainer
Autodesk.Revit.DB.Structure.RebarContainerType
Autodesk.Revit.DB.Structure.RebarCoupler
Autodesk.Revit.DB.Structure.RebarInSystem
Autodesk.Revit.DB.Structure.RebarSystemSpanSymbol
Autodesk.Revit.DB.Structure.ReinforcementSettings
Autodesk.Revit.DB.RevisionCloud
Autodesk.Revit.DB.RevisionSettings
Autodesk.Revit.DB.SpatialElementCalculationPoint
Autodesk.Revit.DB.SpatialElementFromToCalculationPoints
Autodesk.Revit.DB.Analysis.RouteAnalysisSettings
Autodesk.Revit.DB.Architecture.CutMarkType
Autodesk.Revit.DB.Architecture.HandRail
Autodesk.Revit.DB.Architecture.HandRailType
Autodesk.Revit.DB.Architecture.MultistoryStairs
Autodesk.Revit.DB.Architecture.Stairs
Autodesk.Revit.DB.NumberSystem
Autodesk.Revit.DB.Architecture.StairsLanding
Autodesk.Revit.DB.Architecture.StairsLandingType
Autodesk.Revit.DB.Architecture.StairsPath
Autodesk.Revit.DB.Architecture.StairsPathType
Autodesk.Revit.DB.Architecture.StairsRun
Autodesk.Revit.DB.Architecture.StairsRunType
Autodesk.Revit.DB.Architecture.StairsType
Autodesk.Revit.DB.Architecture.TopRail
Autodesk.Revit.DB.Architecture.TopRailType
Autodesk.Revit.DB.ScheduleSheetInstance
Autodesk.Revit.DB.SelectionFilterElement
Autodesk.Revit.DB.SharedParameterElement
Autodesk.Revit.DB.Analysis.SpatialFieldManager
Autodesk.Revit.DB.Architecture.Railing
Autodesk.Revit.DB.Architecture.RailingType
Autodesk.Revit.DB.Structure.StructuralConnectionApprovalType
Autodesk.Revit.DB.Structure.StructuralConnectionHandler
Autodesk.Revit.DB.Structure.StructuralConnectionHandlerType
Autodesk.Revit.DB.Structure.StructuralConnectionSettings
Autodesk.Revit.DB.Structure.StructuralConnectionType
Autodesk.Revit.DB.Structure.StructuralSettings
Autodesk.Revit.DB.Architecture.TopographyLink
Autodesk.Revit.DB.Architecture.TopographyLinkType
Autodesk.Revit.DB.WallSweep
Autodesk.Revit.DB.WorksetDefaultVisibilitySettings
Autodesk.Revit.DB.WorksharingDisplaySettings
Autodesk.Revit.DB.Mechanical.ZoneEquipment
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客BIM工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值