using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.InteropServices; // for StructLayout, DllImport using System.Windows.Forms; using System.IO; using Autodesk.Revit.DB; namespace GF.Revit.Sample { #region Enums public enum BIC_AllowsBoundParametersAsType { ///Analytical Links OST_LinksAnalytical = BuiltInCategory.OST_LinksAnalytical, ///Structural Connections OST_StructConnections = BuiltInCategory.OST_StructConnections, ///Structural Fabric Areas OST_FabricAreas = BuiltInCategory.OST_FabricAreas, ///Structural Fabric Reinforcement OST_FabricReinforcement = BuiltInCategory.OST_FabricReinforcement, ///Rebar Shape OST_RebarShape = BuiltInCategory.OST_RebarShape, ///Structural Path Reinforcement OST_PathRein = BuiltInCategory.OST_PathRein, ///Structural Area Reinforcement OST_AreaRein = BuiltInCategory.OST_AreaRein, ///Structural Rebar OST_Rebar = BuiltInCategory.OST_Rebar, ///Pipe Placeholders OST_PlaceHolderPipes = BuiltInCategory.OST_PlaceHolderPipes, ///Duct Placeholders OST_PlaceHolderDucts = BuiltInCategory.OST_PlaceHolderDucts, ///Cable Tray Runs OST_CableTrayRun = BuiltInCategory.OST_CableTrayRun, ///Conduit Runs OST_ConduitRun = BuiltInCategory.OST_ConduitRun, ///Conduits OST_Conduit = BuiltInCategory.OST_Conduit, ///Cable Trays OST_CableTray = BuiltInCategory.OST_CableTray, ///Conduit Fittings OST_ConduitFitting = BuiltInCategory.OST_ConduitFitting, ///Cable Tray Fittings OST_CableTrayFitting = BuiltInCategory.OST_CableTrayFitting, ///Duct Linings OST_DuctLinings = BuiltInCategory.OST_DuctLinings, ///Duct Insulations OST_DuctInsulations = BuiltInCategory.OST_DuctInsulations, ///Pipe Insulations OST_PipeInsulations = BuiltInCategory.OST_PipeInsulations, ///Switch System OST_SwitchSystem = BuiltInCategory.OST_SwitchSystem, ///Sprinklers OST_Sprinklers = BuiltInCategory.OST_Sprinklers, ///Lighting Devices OST_LightingDevices = BuiltInCategory.OST_LightingDevices, ///Fire Alarm Devices OST_FireAlarmDevices = BuiltInCategory.OST_FireAlarmDevices, ///Data Devices OST_DataDevices = BuiltInCategory.OST_DataDevices, ///Communication Devices OST_CommunicationDevices = BuiltInCategory.OST_CommunicationDevices, ///Security Devices OST_SecurityDevices = BuiltInCategory.OST_SecurityDevices, ///Nurse Call Devices OST_NurseCallDevices = BuiltInCategory.OST_NurseCallDevices, ///Telephone Devices OST_TelephoneDevices = BuiltInCategory.OST_TelephoneDevices, ///Pipe Accessories OST_PipeAccessory = BuiltInCategory.OST_PipeAccessory, ///Flex Pipes OST_FlexPipeCurves = BuiltInCategory.OST_FlexPipeCurves, ///Pipe Fittings OST_PipeFitting = BuiltInCategory.OST_PipeFitting, ///Pipes OST_PipeCurves = BuiltInCategory.OST_PipeCurves, ///Piping Systems OST_PipingSystem = BuiltInCategory.OST_PipingSystem, ///Wires OST_Wire = BuiltInCategory.OST_Wire, ///Flex Ducts OST_FlexDuctCurves = BuiltInCategory.OST_FlexDuctCurves, ///Duct Accessories OST_DuctAccessory = BuiltInCategory.OST_DuctAccessory, ///Duct Systems OST_DuctSystem = BuiltInCategory.OST_DuctSystem, ///Air Terminals OST_DuctTerminal = BuiltInCategory.OST_DuctTerminal, ///Duct Fittings OST_DuctFitting = BuiltInCategory.OST_DuctFitting, ///Ducts OST_DuctCurves = BuiltInCategory.OST_DuctCurves, ///Mass OST_Mass = BuiltInCategory.OST_Mass, ///Detail Items OST_DetailComponents = BuiltInCategory.OST_DetailComponents, ///Floors.Slab Edges OST_EdgeSlab = BuiltInCategory.OST_EdgeSlab, ///Roofs.Gutters OST_Gutter = BuiltInCategory.OST_Gutter, ///Roofs.Fascias OST_Fascia = BuiltInCategory.OST_Fascia, ///Planting OST_Planting = BuiltInCategory.OST_Planting, ///Structural Stiffeners OST_StructuralStiffener = BuiltInCategory.OST_StructuralStiffener, ///Specialty Equipment OST_SpecialityEquipment = BuiltInCategory.OST_SpecialityEquipment, ///Topography OST_Topography = BuiltInCategory.OST_Topography, ///Structural Trusses OST_StructuralTruss = BuiltInCategory.OST_StructuralTruss, ///Structural Columns OST_StructuralColumns = BuiltInCategory.OST_StructuralColumns, ///Structural Beam Systems OST_StructuralFramingSystem = BuiltInCategory.OST_StructuralFramingSystem, ///Structural Framing OST_StructuralFraming = BuiltInCategory.OST_StructuralFraming, ///Structural Foundations OST_StructuralFoundation = BuiltInCategory.OST_StructuralFoundation, ///Site.Property Line Segments OST_SitePropertyLineSegment = BuiltInCategory.OST_SitePropertyLineSegment, ///Site.Property Lines OST_SiteProperty = BuiltInCategory.OST_SiteProperty, ///Site.Pads OST_BuildingPad = BuiltInCategory.OST_BuildingPad, ///Site OST_Site = BuiltInCategory.OST_Site, ///Parking OST_Parking = BuiltInCategory.OST_Parking, ///Plumbing Fixtures OST_PlumbingFixtures = BuiltInCategory.OST_PlumbingFixtures, ///Mechanical Equipment OST_MechanicalEquipment = BuiltInCategory.OST_MechanicalEquipment, ///Lighting Fixtures OST_LightingFixtures = BuiltInCategory.OST_LightingFixtures, ///Furniture Systems OST_FurnitureSystems = BuiltInCategory.OST_FurnitureSystems, ///Electrical Fixtures OST_ElectricalFixtures = BuiltInCategory.OST_ElectricalFixtures, ///Electrical Equipment OST_ElectricalEquipment = BuiltInCategory.OST_ElectricalEquipment, ///Casework OST_Casework = BuiltInCategory.OST_Casework, ///Railings.Terminations OST_RailingTermination = BuiltInCategory.OST_RailingTermination, ///Railings.Supports OST_RailingSupport = BuiltInCategory.OST_RailingSupport, ///Railings.Handrails OST_RailingHandRail = BuiltInCategory.OST_RailingHandRail, ///Railings.Top Rails OST_RailingTopRail = BuiltInCategory.OST_RailingTopRail, ///Stairs.Landings OST_StairsLandings = BuiltInCategory.OST_StairsLandings, ///Stairs.Runs OST_StairsRuns = BuiltInCategory.OST_StairsRuns, ///Curtain Systems OST_CurtaSystem = BuiltInCategory.OST_CurtaSystem, ///Assemblies OST_Assemblies = BuiltInCategory.OST_Assemblies, ///Levels OST_Levels = BuiltInCategory.OST_Levels, ///Grids OST_Grids = BuiltInCategory.OST_Grids, ///Walls.Wall Sweeps OST_Cornices = BuiltInCategory.OST_Cornices, ///Ramps OST_Ramps = BuiltInCategory.OST_Ramps, ///Curtain Wall Mullions OST_CurtainWallMullions = BuiltInCategory.OST_CurtainWallMullions, ///Curtain Panels OST_CurtainWallPanels = BuiltInCategory.OST_CurtainWallPanels, ///Generic Models OST_GenericModel = BuiltInCategory.OST_GenericModel, ///Railings OST_StairsRailing = BuiltInCategory.OST_StairsRailing, ///Stairs OST_Stairs = BuiltInCategory.OST_Stairs, ///Columns OST_Columns = BuiltInCategory.OST_Columns, ///Furniture OST_Furniture = BuiltInCategory.OST_Furniture, ///Ceilings OST_Ceilings = BuiltInCategory.OST_Ceilings, ///Roofs OST_Roofs = BuiltInCategory.OST_Roofs, ///Floors OST_Floors = BuiltInCategory.OST_Floors, ///Doors OST_Doors = BuiltInCategory.OST_Doors, ///Windows OST_Windows = BuiltInCategory.OST_Windows, ///Walls OST_Walls = BuiltInCategory.OST_Walls } public enum BIC_AllowsBoundParametersAsInstance { ///Analytical Links OST_LinksAnalytical = BuiltInCategory.OST_LinksAnalytical, ///Analytical Nodes OST_AnalyticalNodes = BuiltInCategory.OST_AnalyticalNodes, ///Analytical Foundation Slabs OST_FoundationSlabAnalytical = BuiltInCategory.OST_FoundationSlabAnalytical, ///Analytical Wall Foundations OST_WallFoundationAnalytical = BuiltInCategory.OST_WallFoundationAnalytical, ///Analytical Isolated Foundations OST_IsolatedFoundationAnalytical = BuiltInCategory.OST_IsolatedFoundationAnalytical, ///Analytical Walls OST_WallAnalytical = BuiltInCategory.OST_WallAnalytical, ///Analytical Floors OST_FloorAnalytical = BuiltInCategory.OST_FloorAnalytical, ///Analytical Columns OST_ColumnAnalytical = BuiltInCategory.OST_ColumnAnalytical, ///Analytical Braces OST_BraceAnalytical = BuiltInCategory.OST_BraceAnalytical, ///Analytical Beams OST_BeamAnalytical = BuiltInCategory.OST_BeamAnalytical, ///Structural Connections OST_StructConnections = BuiltInCategory.OST_StructConnections, ///Structural Fabric Areas OST_FabricAreas = BuiltInCategory.OST_FabricAreas, ///Structural Fabric Reinforcement OST_FabricReinforcement = BuiltInCategory.OST_FabricReinforcement, ///Rebar Shape OST_RebarShape = BuiltInCategory.OST_RebarShape, ///Structural Path Reinforcement OST_PathRein = BuiltInCategory.OST_PathRein, ///Structural Area Reinforcement OST_AreaRein = BuiltInCategory.OST_AreaRein, ///Structural Rebar OST_Rebar = BuiltInCategory.OST_Rebar, ///Analytical Spaces OST_AnalyticSpaces = BuiltInCategory.OST_AnalyticSpaces, ///Pipe Placeholders OST_PlaceHolderPipes = BuiltInCategory.OST_PlaceHolderPipes, ///Duct Placeholders OST_PlaceHolderDucts = BuiltInCategory.OST_PlaceHolderDucts, ///Cable Tray Runs OST_CableTrayRun = BuiltInCategory.OST_CableTrayRun, ///Conduit Runs OST_ConduitRun = BuiltInCategory.OST_ConduitRun, ///Conduits OST_Conduit = BuiltInCategory.OST_Conduit, ///Cable Trays OST_CableTray = BuiltInCategory.OST_CableTray, ///Conduit Fittings OST_ConduitFitting = BuiltInCategory.OST_ConduitFitting, ///Cable Tray Fittings OST_CableTrayFitting = BuiltInCategory.OST_CableTrayFitting, ///Duct Linings OST_DuctLinings = BuiltInCategory.OST_DuctLinings, ///Duct Insulations OST_DuctInsulations = BuiltInCategory.OST_DuctInsulations, ///Pipe Insulations OST_PipeInsulations = BuiltInCategory.OST_PipeInsulations, ///HVAC Zones OST_HVAC_Zones = BuiltInCategory.OST_HVAC_Zones, ///Switch System OST_SwitchSystem = BuiltInCategory.OST_SwitchSystem, ///Sprinklers OST_Sprinklers = BuiltInCategory.OST_Sprinklers, ///Analytical Surfaces OST_GbXMLFaces = BuiltInCategory.OST_GbXMLFaces, ///Lighting Devices OST_LightingDevices = BuiltInCategory.OST_LightingDevices, ///Fire Alarm Devices OST_FireAlarmDevices = BuiltInCategory.OST_FireAlarmDevices, ///Data Devices OST_DataDevices = BuiltInCategory.OST_DataDevices, ///Communication Devices OST_CommunicationDevices = BuiltInCategory.OST_CommunicationDevices, ///Security Devices OST_SecurityDevices = BuiltInCategory.OST_SecurityDevices, ///Nurse Call Devices OST_NurseCallDevices = BuiltInCategory.OST_NurseCallDevices, ///Telephone Devices OST_TelephoneDevices = BuiltInCategory.OST_TelephoneDevices, ///Pipe Accessories OST_PipeAccessory = BuiltInCategory.OST_PipeAccessory, ///Flex Pipes OST_FlexPipeCurves = BuiltInCategory.OST_FlexPipeCurves, ///Pipe Fittings OST_PipeFitting = BuiltInCategory.OST_PipeFitting, ///Pipes OST_PipeCurves = BuiltInCategory.OST_PipeCurves, ///Piping Systems OST_PipingSystem = BuiltInCategory.OST_PipingSystem, ///Wires OST_Wire = BuiltInCategory.OST_Wire, ///Electrical Circuits OST_ElectricalCircuit = BuiltInCategory.OST_ElectricalCircuit, ///Flex Ducts OST_FlexDuctCurves = BuiltInCategory.OST_FlexDuctCurves, ///Duct Accessories OST_DuctAccessory = BuiltInCategory.OST_DuctAccessory, ///Duct Systems OST_DuctSystem = BuiltInCategory.OST_DuctSystem, ///Air Terminals OST_DuctTerminal = BuiltInCategory.OST_DuctTerminal, ///Duct Fittings OST_DuctFitting = BuiltInCategory.OST_DuctFitting, ///Ducts OST_DuctCurves = BuiltInCategory.OST_DuctCurves, ///Structural Internal Loads.Internal Area Loads OST_InternalAreaLoads = BuiltInCategory.OST_InternalAreaLoads, ///Structural Internal Loads.Internal Line Loads OST_InternalLineLoads = BuiltInCategory.OST_InternalLineLoads, ///Structural Internal Loads.Internal Point Loads OST_InternalPointLoads = BuiltInCategory.OST_InternalPointLoads, ///Structural Loads.Area Loads OST_AreaLoads = BuiltInCategory.OST_AreaLoads, ///Structural Loads.Line Loads OST_LineLoads = BuiltInCategory.OST_LineLoads, ///Structural Loads.Point Loads OST_PointLoads = BuiltInCategory.OST_PointLoads, ///Spaces OST_MEPSpaces = BuiltInCategory.OST_MEPSpaces, ///Mass.Mass Opening OST_MassOpening = BuiltInCategory.OST_MassOpening, ///Mass.Mass Skylight OST_MassSkylights = BuiltInCategory.OST_MassSkylights, ///Mass.Mass Glazing OST_MassWindow = BuiltInCategory.OST_MassWindow, ///Mass.Mass Roof OST_MassRoof = BuiltInCategory.OST_MassRoof, ///Mass.Mass Exterior Wall OST_MassExteriorWall = BuiltInCategory.OST_MassExteriorWall, ///Mass.Mass Interior Wall OST_MassInteriorWall = BuiltInCategory.OST_MassInteriorWall, ///Mass.Mass Zone OST_MassZone = BuiltInCategory.OST_MassZone, ///Mass.Mass Floor OST_MassFloor = BuiltInCategory.OST_MassFloor, ///Mass OST_Mass = BuiltInCategory.OST_Mass, ///Areas OST_Areas = BuiltInCategory.OST_Areas, ///Project Information OST_ProjectInformation = BuiltInCategory.OST_ProjectInformation, ///Sheets OST_Sheets = BuiltInCategory.OST_Sheets, ///Detail Items OST_DetailComponents = BuiltInCategory.OST_DetailComponents, ///Floors.Slab Edges OST_EdgeSlab = BuiltInCategory.OST_EdgeSlab, ///Roofs.Gutters OST_Gutter = BuiltInCategory.OST_Gutter, ///Roofs.Fascias OST_Fascia = BuiltInCategory.OST_Fascia, ///Planting OST_Planting = BuiltInCategory.OST_Planting, ///Structural Stiffeners OST_StructuralStiffener = BuiltInCategory.OST_StructuralStiffener, ///Specialty Equipment OST_SpecialityEquipment = BuiltInCategory.OST_SpecialityEquipment, ///Topography OST_Topography = BuiltInCategory.OST_Topography, ///Structural Trusses OST_StructuralTruss = BuiltInCategory.OST_StructuralTruss, ///Structural Columns OST_StructuralColumns = BuiltInCategory.OST_StructuralColumns, ///Structural Beam Systems OST_StructuralFramingSystem = BuiltInCategory.OST_StructuralFramingSystem, ///Structural Framing OST_StructuralFraming = BuiltInCategory.OST_StructuralFraming, ///Structural Foundations OST_StructuralFoundation = BuiltInCategory.OST_StructuralFoundation, ///Site.Property Line Segments OST_SitePropertyLineSegment = BuiltInCategory.OST_SitePropertyLineSegment, ///Site.Property Lines OST_SiteProperty = BuiltInCategory.OST_SiteProperty, ///Site.Pads OST_BuildingPad = BuiltInCategory.OST_BuildingPad, ///Site OST_Site = BuiltInCategory.OST_Site, ///Roads OST_Roads = BuiltInCategory.OST_Roads, ///Parking OST_Parking = BuiltInCategory.OST_Parking, ///Plumbing Fixtures OST_PlumbingFixtures = BuiltInCategory.OST_PlumbingFixtures, ///Mechanical Equipment OST_MechanicalEquipment = BuiltInCategory.OST_MechanicalEquipment, ///Lighting Fixtures OST_LightingFixtures = BuiltInCategory.OST_LightingFixtures, ///Furniture Systems OST_FurnitureSystems = BuiltInCategory.OST_FurnitureSystems, ///Electrical Fixtures OST_ElectricalFixtures = BuiltInCategory.OST_ElectricalFixtures, ///Electrical Equipment OST_ElectricalEquipment = BuiltInCategory.OST_ElectricalEquipment, ///Casework OST_Casework = BuiltInCategory.OST_Casework, ///Shaft Openings OST_ShaftOpening = BuiltInCategory.OST_ShaftOpening, ///Railings.Terminations OST_RailingTermination = BuiltInCategory.OST_RailingTermination, ///Railings.Supports OST_RailingSupport = BuiltInCategory.OST_RailingSupport, ///Railings.Handrails OST_RailingHandRail = BuiltInCategory.OST_RailingHandRail, ///Railings.Top Rails OST_RailingTopRail = BuiltInCategory.OST_RailingTopRail, ///Stairs.Landings OST_StairsLandings = BuiltInCategory.OST_StairsLandings, ///Stairs.Runs OST_StairsRuns = BuiltInCategory.OST_StairsRuns, ///Materials OST_Materials = BuiltInCategory.OST_Materials, ///Curtain Systems OST_CurtaSystem = BuiltInCategory.OST_CurtaSystem, ///Views OST_Views = BuiltInCategory.OST_Views, ///Parts OST_Parts = BuiltInCategory.OST_Parts, ///Assemblies OST_Assemblies = BuiltInCategory.OST_Assemblies, ///Levels OST_Levels = BuiltInCategory.OST_Levels, ///Grids OST_Grids = BuiltInCategory.OST_Grids, ///Walls.Wall Sweeps OST_Cornices = BuiltInCategory.OST_Cornices, ///Ramps OST_Ramps = BuiltInCategory.OST_Ramps, ///Curtain Wall Mullions OST_CurtainWallMullions = BuiltInCategory.OST_CurtainWallMullions, ///Curtain Panels OST_CurtainWallPanels = BuiltInCategory.OST_CurtainWallPanels, ///Rooms OST_Rooms = BuiltInCategory.OST_Rooms, ///Generic Models OST_GenericModel = BuiltInCategory.OST_GenericModel, ///Railings OST_StairsRailing = BuiltInCategory.OST_StairsRailing, ///Stairs OST_Stairs = BuiltInCategory.OST_Stairs, ///Columns OST_Columns = BuiltInCategory.OST_Columns, ///Furniture OST_Furniture = BuiltInCategory.OST_Furniture, ///Ceilings OST_Ceilings = BuiltInCategory.OST_Ceilings, ///Roofs OST_Roofs = BuiltInCategory.OST_Roofs, ///Floors OST_Floors = BuiltInCategory.OST_Floors, ///Doors OST_Doors = BuiltInCategory.OST_Doors, ///Windows OST_Windows = BuiltInCategory.OST_Windows, ///Walls OST_Walls = BuiltInCategory.OST_Walls } #endregion } // bool bKindOfBinding = false; // true = Instance, false = Type bool bStatus = true; string szBIC_Name = "OST_MechanicalEquipment" Autodesk.Revit.DB.CategorySet catSet = app.Create.NewCategorySet(); if (bKindOfBinding) { BIC_AllowsBoundParametersAsInstance BIC_ToInsert; if (Enum.TryParse(szBIC_Name, out BIC_ToInsert)) { catSet.Insert(doc.Settings.Categories.get_Item((BuiltinCategory)BIC_ToInsert)); } else { // Invalid Category bStatus = false; } else { BIC_AllowsBoundParametersAsType BIC_ToInsert; if (Enum.TryParse(szBIC_Name, out BIC_ToInsert)) { catSet.Insert(doc.Settings.Categories.get_Item((BuiltinCategory)BIC_ToInsert)); } else { // Invalid Category bStatus = false; } } if(bStatus) { Autodesk.Revit.DB.Binding binding = bKindOfBinding ? app.Create.NewTypeBinding(catSet) as Autodesk.Revit.DB.Binding : app.Create.NewInstanceBinding(catSet) as Autodesk.Revit.DB.Binding; doc.ParameterBindings.Insert(....... } else { // Notify User Invalid Category was given.... } //============================== // test for enum equlity // Without cast if (BuiltInCategory.OST_MechanicalEquipment.Equals(BIC_AllowsBoundParametersAsType.OST_MechanicalEquipment)) { szMessage = "We are Equal"; } else { // we get here szMessage = "We are not Equal"; } MessageBox.Show(szMessage); // With cast if (BuiltInCategory.OST_MechanicalEquipment.Equals((BuiltInCategory)BIC_AllowsBoundParametersAsType.OST_MechanicalEquipment)) { // we get here szMessage = "We are Equal"; } else { szMessage = "We are not Equal"; } MessageBox.Show(szMessage);