Skip to content

Instantly share code, notes, and snippets.

@cdiggins
Created March 21, 2025 17:47
Show Gist options
  • Save cdiggins/40a6e3706d22948512cb6aadf060985d to your computer and use it in GitHub Desktop.
Save cdiggins/40a6e3706d22948512cb6aadf060985d to your computer and use it in GitHub Desktop.
Revit and BIM Object Model for Relational Databases
// This is a documented and lightly modified version of the Object Schema for VIM Files:
// https://github.com/vimaec/vim-format/blob/develop/docs/object-model-schema.json
{
// The "Area" table holds data about Revit area elements, including whether the area is gross interior,
// its perimeter, and references to its corresponding AreaScheme and Element. Use this table to track and
// calculate different kinds of areas within the model.
"Area": [
"boolean:IsGrossInterior",
"double:Perimeter",
"double:Value",
"index:AreaScheme:AreaScheme",
"index:Element:Element",
"string:Number"
],
// The "AreaScheme" table contains information about area schemes in Revit, including whether the scheme
// is a Gross Building Area. Use this to classify or group different areas in the model.
"AreaScheme": [
"boolean:IsGrossBuildingArea",
"index:Element:Element"
],
// The "AssemblyInstance" table represents assembly instances in Revit, capturing their 3D
// position and references to elements. Use this to manage custom assemblies or grouped elements.
"AssemblyInstance": [
"float:Position.X",
"float:Position.Y",
"float:Position.Z",
"index:Element:Element",
"string:AssemblyTypeName"
],
// The "Asset" table stores references to external assets, such as texture files, renderings, or other resources
// used in the Revit model. Use this to keep track of linked files or additional data needed for rendering.
"Asset": [
"string:BufferName"
],
// The "AssetInView" table links an Asset to a specific View, indicating that the asset is relevant or visible
// in that view. Use this to determine asset usage in different parts of the model.
"AssetInView": [
"index:Asset:Asset",
"index:View:View"
],
// The "AssetInViewSheet" table links an Asset to a specific ViewSheet, indicating that the asset is
// relevant or visible in that sheet. Use this to manage resources displayed on sheets.
"AssetInViewSheet": [
"index:Asset:Asset",
"index:ViewSheet:ViewSheet"
],
// The "BasePoint" table stores information about base points (e.g., the survey point) in Revit,
// including position and references to the element. Use this to track coordinate origins.
"BasePoint": [
"boolean:IsSurveyPoint",
"double:Position.X",
"double:Position.Y",
"double:Position.Z",
"double:SharedPosition.X",
"double:SharedPosition.Y",
"double:SharedPosition.Z",
"index:Element:Element"
],
// The "BimDocument" table holds high-level properties for Revit documents, including location, author,
// version, and references to parent documents or active views. Use this to manage multiple Revit files
// or linked documents.
"BimDocument": [
"boolean:IsDetached",
"boolean:IsLinked",
"boolean:IsMetric",
"boolean:IsWorkshared",
"double:Elevation",
"double:Latitude",
"double:Longitude",
"double:TimeZone",
"index:BimDocument:Parent",
"index:Element:Element",
"index:Family:OwnerFamily",
"index:View:ActiveView",
"int:NumSaves",
"string:Address",
"string:Author",
"string:BuildingName",
"string:ClientName",
"string:Guid",
"string:IssueDate",
"string:Name",
"string:Number",
"string:OrganizationDescription",
"string:OrganizationName",
"string:PathName",
"string:PlaceName",
"string:Product",
"string:ProjectLocation",
"string:Status",
"string:Title",
"string:User",
"string:Version",
"string:WeatherStationName"
],
// The "Building" table captures basic building-level properties like address, elevation,
// and references to the Site and Element. Use this to manage high-level building attributes.
"Building": [
"double:Elevation",
"double:TerrainElevation",
"index:Element:Element",
"index:Site:Site",
"string:Address"
],
// The "Camera" table holds camera-related data like distance, offsets, and perspective settings.
// Use this to adjust or analyze camera views in 3D.
"Camera": [
"double:FarDistance",
"double:HorizontalExtent",
"double:NearDistance",
"double:RightOffset",
"double:TargetDistance",
"double:UpOffset",
"double:VerticalExtent",
"int:Id",
"int:IsPerspective"
],
// The "Category" table represents Revit categories, including references to parent categories and
// materials, along with visual properties like line color. Use this to understand the classification of elements.
"Category": [
"double:LineColor.X",
"double:LineColor.Y",
"double:LineColor.Z",
"index:Category:Parent",
"index:Material:Material",
"long:Id",
"string:BuiltInCategory",
"string:CategoryType",
"string:Name"
],
// The "CompoundStructure" table stores data about layered building elements, such as walls or floors,
// and references to their structural layers. Use this to analyze how these elements are built up.
"CompoundStructure": [
"double:Width",
"index:CompoundStructureLayer:StructuralLayer"
],
// The "CompoundStructureLayer" table holds the specific layers in a compound structure, including material
// references, width, and order index. Use this to manage multi-layered elements.
"CompoundStructureLayer": [
"double:Width",
"index:CompoundStructure:CompoundStructure",
"index:Material:Material",
"int:OrderIndex",
"string:MaterialFunctionAssignment"
],
// The "DesignOption" table tracks Revit design options, including whether the option is primary.
// Use this to handle multiple design alternatives in a single project.
"DesignOption": [
"boolean:IsPrimary",
"index:Element:Element"
],
// The "DisplayUnit" table describes how units are displayed, including label, spec, and unit type.
// Use this to convert or format parameter values appropriately.
"DisplayUnit": [
"string:Label",
"string:Spec",
"string:Type"
],
// The "DisplayUnitInBimDocument" table associates specific display units with a particular BimDocument.
// Use this to manage unit settings for each document.
"DisplayUnitInBimDocument": [
"index:BimDocument:BimDocument",
"index:DisplayUnit:DisplayUnit"
],
// The "Element" table holds fundamental information about Revit elements, including location, category,
// phases, and identifiers. Use this as a central reference for model elements.
"Element": [
"boolean:IsPinned",
"float:Location.X",
"float:Location.Y",
"float:Location.Z",
"index:AssemblyInstance:AssemblyInstance",
"index:BimDocument:BimDocument",
"index:Category:Category",
"index:DesignOption:DesignOption",
"index:Group:Group",
"index:Level:Level",
"index:Phase:PhaseCreated",
"index:Phase:PhaseDemolished",
"index:Room:Room",
"index:View:OwnerView",
"index:Workset:Workset",
"long:Id",
"string:FamilyName",
"string:Name",
"string:Type",
"string:UniqueId"
],
// The "ElementInSystem" table associates an Element with a System, optionally storing role
// information. Use this to track HVAC, electrical, or piping system memberships.
"ElementInSystem": [
"index:Element:Element",
"index:System:System",
"int:Roles"
],
// The "ElementInView" table links an Element to a specific View. Use this to manage element visibility
// or location data in different views.
"ElementInView": [
"index:Element:Element",
"index:View:View"
],
// The "ElementInWarning" table associates Elements with Warnings generated by Revit, useful for
// diagnosing model issues. Use this to track and resolve model errors or warnings.
"ElementInWarning": [
"index:Element:Element",
"index:Warning:Warning"
],
// The "Family" table represents Revit families, including category references and system family flags.
// Use this to manage reusable building components.
"Family": [
"boolean:IsInPlace",
"boolean:IsSystemFamily",
"index:Category:FamilyCategory",
"index:Element:Element",
"string:StructuralMaterialType",
"string:StructuralSectionShape"
],
// The "FamilyInstance" table stores placed instances of a Family, including orientation and flipping
// states. Use this to track where and how families are used in the model.
"FamilyInstance": [
"boolean:FacingFlipped",
"boolean:HandFlipped",
"boolean:HasModifiedGeometry",
"boolean:Mirrored",
"float:BasisX.X",
"float:BasisX.Y",
"float:BasisX.Z",
"float:BasisY.X",
"float:BasisY.Y",
"float:BasisY.Z",
"float:BasisZ.X",
"float:BasisZ.Y",
"float:BasisZ.Z",
"float:FacingOrientation.X",
"float:FacingOrientation.Y",
"float:FacingOrientation.Z",
"float:HandOrientation.X",
"float:HandOrientation.Y",
"float:HandOrientation.Z",
"float:Scale",
"float:Translation.X",
"float:Translation.Y",
"float:Translation.Z",
"index:Element:Element",
"index:Element:Host",
"index:Element:SuperComponent",
"index:FamilyType:FamilyType",
"index:Room:FromRoom",
"index:Room:ToRoom"
],
// The "FamilyType" table describes a particular type within a Family, including references to a
// compound structure if applicable. Use this to manage variation in Revit families.
"FamilyType": [
"boolean:IsSystemFamilyType",
"index:CompoundStructure:CompoundStructure",
"index:Element:Element",
"index:Family:Family"
],
// The "Geometry" table stores geometric details like bounding box extents, face counts, and
// vertex counts for elements. Use this to perform geometric analysis.
"Geometry": [
"float:Box.Max.X",
"float:Box.Max.Y",
"float:Box.Max.Z",
"float:Box.Min.X",
"float:Box.Min.Y",
"float:Box.Min.Z",
"int:FaceCount",
"int:VertexCount"
],
// The "Grid" table holds grid lines in Revit, including curve data (start/end points) and their
// extents. Use this to manage layout or reference grids in the model.
"Grid": [
"boolean:IsCurved",
"double:EndPoint.X",
"double:EndPoint.Y",
"double:EndPoint.Z",
"double:Extents.Max.X",
"double:Extents.Max.Y",
"double:Extents.Max.Z",
"double:Extents.Min.X",
"double:Extents.Min.Y",
"double:Extents.Min.Z",
"double:StartPoint.X",
"double:StartPoint.Y",
"double:StartPoint.Z",
"index:Element:Element",
"index:FamilyType:FamilyType"
],
// The "Group" table represents Revit groups, capturing their position and group type. Use
// this to handle groups of elements as a single unit.
"Group": [
"float:Position.X",
"float:Position.Y",
"float:Position.Z",
"index:Element:Element",
"string:GroupType"
],
// The "Level" table stores Revit levels, including their elevation, reference to the building,
// and associated element. Use this to define story or floor references in the model.
"Level": [
"double:Elevation",
"index:Building:Building",
"index:Element:Element",
"index:FamilyType:FamilyType"
],
// The "LevelInView" table associates a Level with a View, storing bounding extents. Use this to manage
// how levels appear in different views.
"LevelInView": [
"double:Extents.Max.X",
"double:Extents.Max.Y",
"double:Extents.Max.Z",
"double:Extents.Min.X",
"double:Extents.Min.Y",
"double:Extents.Min.Z",
"index:Level:Level",
"index:View:View"
],
// The "Material" table represents Revit materials, capturing properties like color, glossiness,
// transparency, and associated texture files. Use this to manage the look and feel of building components.
"Material": [
"double:Color.X",
"double:Color.Y",
"double:Color.Z",
"double:ColorUvOffset.X",
"double:ColorUvOffset.Y",
"double:ColorUvScaling.X",
"double:ColorUvScaling.Y",
"double:Glossiness",
"double:NormalAmount",
"double:NormalUvOffset.X",
"double:NormalUvOffset.Y",
"double:NormalUvScaling.X",
"double:NormalUvScaling.Y",
"double:Smoothness",
"double:Transparency",
"index:Asset:ColorTextureFile",
"index:Asset:NormalTextureFile",
"index:Element:Element",
"string:MaterialCategory",
"string:Name"
],
// The "MaterialInElement" table associates Materials with Elements, indicating whether the
// material is painted, and providing area/volume data. Use this to calculate material quantities.
"MaterialInElement": [
"boolean:IsPaint",
"double:Area",
"double:Volume",
"index:Element:Element",
"index:Material:Material"
],
// The "Node" table is used to map elements to nodes in the geometric scene graph stored in a VIM file
"Node": [
"index:Element:Element"
],
// The "Parameter" table associates specific parameters with an Element, storing the parameter value as a string.
// Use this to retrieve or update element metadata.
"Parameter": [
"index:Element:Element",
"index:ParameterDescriptor:ParameterDescriptor",
"string:Value"
],
// The "ParameterDescriptor" table describes each parameter’s characteristics, such as name, type, whether it’s
// an instance parameter, or if it’s read-only. Use this to interpret parameter data in the model.
"ParameterDescriptor": [
"boolean:IsInstance",
"boolean:IsReadOnly",
"boolean:IsShared",
"index:DisplayUnit:DisplayUnit",
"int:Flags",
"int:StorageType",
"string:Group",
"string:Guid",
"string:Name",
"string:ParameterType"
],
// The "Phase" table stores the phases of a project, each referencing the associated element. Use this to
// differentiate project stages like Existing, Demolition, or New Construction.
"Phase": [
"index:Element:Element"
],
// The "PhaseFilter" table describes how different element states (existing, demolished, new, temporary)
// are displayed in a given phase. Use this for controlling visibility of elements across phases.
"PhaseFilter": [
"index:Element:Element",
"int:Demolished",
"int:Existing",
"int:New",
"int:Temporary"
],
// The "PhaseOrderInBimDocument" table captures the order of phases for a particular BimDocument. Use
// this to manage the chronological sequence of project phases.
"PhaseOrderInBimDocument": [
"index:BimDocument:BimDocument",
"index:Phase:Phase",
"int:OrderIndex"
],
// The "Room" table represents rooms in Revit, storing their dimensions (area, volume, perimeter)
// and referencing associated elements. Use this for spatial analysis and room data schedules.
"Room": [
"double:Area",
"double:BaseOffset",
"double:LimitOffset",
"double:Perimeter",
"double:UnboundedHeight",
"double:Volume",
"index:Element:Element",
"index:Level:UpperLimit",
"string:Number"
],
// The "Schedule" table represents a schedule in Revit, referencing its element. Use this to manage
// tabular views or data extractions from the model.
"Schedule": [
"index:Element:Element"
],
// The "ScheduleCell" table represents individual cells in a schedule, identified by row index and
// referencing a ScheduleColumn. Use this to store or query cell-level data within schedules.
"ScheduleCell": [
"index:ScheduleColumn:ScheduleColumn",
"int:RowIndex",
"string:Value"
],
// The "ScheduleColumn" table represents a column in a schedule, referencing the schedule itself.
// Use this to define or query the structure of schedule columns.
"ScheduleColumn": [
"index:Schedule:Schedule",
"int:ColumnIndex",
"string:Name"
],
// The "Shape" table represents a generic shape (e.g., a piece of geometry) and references the
// underlying element. Use this for geometric data that may not fit standard Revit elements.
"Shape": [
"index:Element:Element"
],
// The "ShapeCollection" table represents a collection of shapes (geometry groups), referencing its
// associated element. Use this to manage grouped geometry objects.
"ShapeCollection": [
"index:Element:Element"
],
// The "ShapeInShapeCollection" table associates a Shape with a ShapeCollection. Use this to group
// shapes together or manage composite geometry.
"ShapeInShapeCollection": [
"index:Shape:Shape",
"index:ShapeCollection:ShapeCollection"
],
// The "ShapeInView" table associates a Shape with a View, indicating which shapes are visible or
// relevant in that view. Use this to manage geometry display.
"ShapeInView": [
"index:Shape:Shape",
"index:View:View"
],
// The "Site" table stores site information (elevation, latitude, longitude, etc.) and references
// the associated Element. Use this for project location or surveying data.
"Site": [
"double:Elevation",
"double:Latitude",
"double:Longitude",
"index:Element:Element",
"string:Address",
"string:Number"
],
// The "System" table represents MEP or other system types in Revit, referencing its element
// and family type. Use this to track mechanical, electrical, or plumbing systems.
"System": [
"index:Element:Element",
"index:FamilyType:FamilyType",
"int:SystemType"
],
// The "View" table stores properties for a Revit view, including camera data, view direction,
// and scale. Use this to manage how the model is displayed or printed.
"View": [
"double:Origin.X",
"double:Origin.Y",
"double:Origin.Z",
"double:Outline.Max.X",
"double:Outline.Max.Y",
"double:Outline.Min.X",
"double:Outline.Min.Y",
"double:Right.X",
"double:Right.Y",
"double:Right.Z",
"double:Scale",
"double:Up.X",
"double:Up.Y",
"double:Up.Z",
"double:ViewDirection.X",
"double:ViewDirection.Y",
"double:ViewDirection.Z",
"double:ViewPosition.X",
"double:ViewPosition.Y",
"double:ViewPosition.Z",
"index:Camera:Camera",
"index:Element:Element",
"index:FamilyType:FamilyType",
"int:DetailLevel",
"string:Title",
"string:ViewType"
],
// The "ViewInViewSheet" table links a View to a ViewSheet, tracking how views are placed
// on sheets. Use this for sheet layouts and printing logic.
"ViewInViewSheet": [
"index:View:View",
"index:ViewSheet:ViewSheet"
],
// The "ViewInViewSheetSet" table associates a View with a ViewSheetSet, which can be useful for
// grouping or printing multiple sheets.
"ViewInViewSheetSet": [
"index:View:View",
"index:ViewSheetSet:ViewSheetSet"
],
// The "ViewSheet" table represents a Revit view sheet, referencing the element and its family type.
// Use this to manage sheet properties like size and title block.
"ViewSheet": [
"index:Element:Element",
"index:FamilyType:FamilyType"
],
// The "ViewSheetInViewSheetSet" table associates a ViewSheet with a ViewSheetSet, supporting sheet
// organization or batch printing workflows.
"ViewSheetInViewSheetSet": [
"index:ViewSheet:ViewSheet",
"index:ViewSheetSet:ViewSheetSet"
],
// The "ViewSheetSet" table represents a set of Revit sheets, referencing the associated element.
// Use this to organize sheets for printing or review.
"ViewSheetSet": [
"index:Element:Element"
],
// The "Warning" table stores information on Revit warnings, including description, severity, and
// references back to a BimDocument. Use this to track issues that need resolution in the model.
"Warning": [
"index:BimDocument:BimDocument",
"string:Description",
"string:Guid",
"string:Severity"
],
// The "Workset" table represents a Revit workset, capturing whether it is open or editable, and
// who owns it. Use this to manage multi-user access and element ownership in workshared models.
"Workset": [
"boolean:IsEditable",
"boolean:IsOpen",
"index:BimDocument:BimDocument",
"int:Id",
"string:Kind",
"string:Name",
"string:Owner",
"string:UniqueId"
]
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment