Created
March 21, 2025 17:47
-
-
Save cdiggins/40a6e3706d22948512cb6aadf060985d to your computer and use it in GitHub Desktop.
Revit and BIM Object Model for Relational Databases
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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