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);