Revit categories and classification systems

Standards for classifying building elements have been around for some times, but building information modeling gives us new perspectives for using them.

There is a handful of these classifications currently in use. The Construction Specifications Institute produce the MasterFormat and UniFormat, used in United States and Canada. The Construction Project Information Committee in the United Kingdom provides Uniclass and Uniclass 2. And the “Catalogue des articles normalisés” was used in Switzerland even before computers were able to manage it.

Revit provides two built-in type parameters to manage such classification systems, the Assembly Code and the Assembly Description. These parameters allow us to link any Revit type to an existing classification system.


This classification system can be loaded in Revit through the Assembly Code interface.



Autodesk provides us with the Uniformat classification, through the UniformatClassifications.txt. This tab-separated values text file define the classification structure with four columns:

Classification Code - Description - Rank - Revit category Id
  • The Classification Code is the number associated with each item in a given classification. It is linked to the Assembly Code in Revit.
  • The Description is the text associated with each item of the classification. Once we add an Assembly Code to a Revit type, this description appears in the Assembly Desciption.
  • The Rank define the hierarchy of the item in the classification. This allows Revit to display any linked classification in a tree view.
  • Finally, the Revit category Id allows us to create a first mapping between classification items and Revit categories. This allow us to filter by Revit category while assigning Assembly Code.

To create such a mapping, we need the list of Revit categories. To extract this, I run a small routine to write every built-in Revit category to a .csv file. Along the way, I find some interesting properties of these categories. For example, the IsCuttable property list cuttable categories, something I was talking about in a previous post.

But most important here is an exhaustive list of all Revit categories, along with their Id, a prerequisite to create relations between Revit categories and classifications items.

These relations allows us to filter by category while assigning Assembly Codes.

You can find here the .csv file with all Revit categories, along with the code used to create it.

public void Categories()
	Document doc = this.ActiveUIDocument.Document;
	Categories categories = doc.Settings.Categories;
	List<string> categoriesList = new List<string>();
	foreach( Category c in categories )
		//Retrive sub categories
		foreach (Category subc in c.SubCategories) {
	string path = @"C:\categories.csv";

Level Of Development

One of my current project made me think of talking about the so-called LOD of a building model.

The LOD (Level Of Development or Level Of Detail) was first described on the Model Progression Specification (MPS) development by Vico Software in 2004. This document aimed to create a framework in order to define standards for any building model delivery. It answers, for each phase of a project, the following questions :

How accurately the model should be detailed ?
Who is responsible for modeling a particular element ?
What information should be integrated in the model ?

In 2008, the American Institute of Architect  after further developments on this project, released their official version, the E-202 “Building Information Modeling Protocol Exhibit”.

This paper divided the Levels Of Development in five categories, each one describing the elements expected in the model, the corresponding state of development of the project and the possibilities for producing construction documents and building analysis. They are defined as follows:

LOD 100: Conceptual design
The model represent the general massing of the building, with area, volume, orientation and so on.
This model can be used for solar and early energy analysis.

LOD 200: Design development
All systems are modeled with their general size, location, orientation and approximate quantities.
It can be used for general performance analysis and early calculations.

LOD 300: General construction documents
In this model, elements are accurately integrated, with their actual size and location. It is suitable for producing general assembly and construction drawings.
This model allow precise analysis and simulations on every element and system. It can also be used for coordination and clash detection.

LOD 400: Fabrication information
Every element is modeled for fabrication purpose.
The model is suitable for shop drawings
It can be used for direct production and construction scheduling.

LOD 500: As-Built model
The BIM equivalent of As-Built drawings. In these models, elements are represented with all technical information needed for maintenance and procurement.

These descriptions are indicative, and do not prevent the BIM Manager from describing model deliverables more exhaustively. They are more like guidelines for creating an accurate BIM Implementation Plan, with precise indication for each actor about his responsibilities in the development of the model. To do so, these guidelines come with a Model Element Table like this one :


This table defines the required level of detail for each element of a building model at each phase/LOD of the project.

I am unsure whether or not this “Building Information Modeling Protocol Exhibit” can be used as it for any project, especially in France, where construction practices may differ from what the AIA first defined. However, it is a great tool for creating an accurate BIM Implementation Plan. It describes well the expected state of the model for each phase and may come in handy when working with companies which have not yet integrated all requirements of a BIM workflow.