The Speckle Revit Connector currently supports Autodesk Revit 2019, 2020 and 2021.
Check out our dedicated tutorial on how to get started with Revit (opens new window)!
# Getting Started
To install the Revit Connector and add your Speckle account, proceed by following the instructions in Speckle Manager.
Once installed, you can find the Revit connector in the ribbon menu under the Add-Ins tab like so:
# User Interface
This connector uses our shared Desktop UI. Read up on general guidelines for usage in the Desktop UI section.
# Selection Filters
To help you select which elements will be to sent to Speckle, we've built various filters into our Revit connector. Once a filter is set, just click Send and all objects passing the filter will be sent to your Stream.
Please Note: Elements are sent regardless of whether they are visible or if they were created after setting up the filter.
# Category Filter
The category filter lets you select one or more of the currently-supported Revit categories.
# View Filter
The view filter works similarly to the category one, and lets you include all elements visible in one or more views.
# Project Info Filter
The project info filter lets you add non physical elements, such as levels, views, element types (their properties, not geometry) and project information.
# Parameter Filter
The parameter filter will filter all model elements that satisfy the logical conditions defined by you. For example, in the image below, Speckle will send all elements whose
Base Offset value is greater then 2000mm.
The list of available parameters comes from the current elements in the model. If the model is empty, no parameters will be available.
# Receive Modes
When receiving from a Stream that has been received before, you might want to update, create or ignore elements that were already created before. This is when the Receive Mode setting comes in! This is how it works:
- update: updates elements if they already exist and creates missing ones (current behavior in Revit)
- create: always creates new elements even if pre-existing (current behavior in Rhino)
- ignore: skips elements if they already exist
- update only: only updates existing elements (coming soon)
# Linked Models
The Revit connector supports Linked Models, here's how it works.
# Sending Linked Models
First enable support for linked models when sending from the Send tab > click on Advanced Settings > Send Linked Models. Then use the selection filters as you would normally would and any relevant item from the linked models will be sent as well. For instance: Everything will send all the models, Category filters will work in conjunction with any linked model elements and Selection too.
# Receiving Linked Models
First enable support for linked models when receiving from the Receive tab > click on Advanced Settings > Receive Linked Models. On receiving we do not attempt to modify in any way linked model files, but when the Receive Linked Models setting is turned on the linked model elements will be received in the current document as any other element.
# Current Limitations
Additional transformations applied to Linked Models after they have been imported are not taken into account. Please always ensure your Revit Models are aligned without the need for any additional transformations when working with Speckle.
# Supported Elements
# Family Editor
The Revit connector also works in the Family Editor, refer to the list below for supported element types.
# Updating Elements
The connector takes care of updating received elements automatically where possible (instead of deleting and re-creating them). This is preferred, as dimensions, ElementIds and other annotations are preserved.
Elements are updated under these two circumstances:
- If the element was created in another project/software and had been received previously: for example, BuiltElements that were created in Rhino or Grasshopper
- If the element was created in the same project you're working on: for example, if you send some walls to Speckle, edit them, and receive them again from the same stream
Here are some technical details if you're curious about what's happening behind the scenes:
- BuiltElements have a property called
applicationId, this is different from the
id/hashproperty on them, and represents the id of such element in the host application in which it was first created. If the element was created in Revit it’s the
UniqueId, if coming from Grasshopper/Rhino an analogous field
- When a stream is received in Revit the
applicationIdsof all BuiltElements created are cached in the receiver
- When receiving a second time from the same stream, if the received elements have the same
applicationIdof something that was previously received (and it still exists in the document), the connector will attempt to modify them instead of creating new ones. If the update fails (or is not permitted by the API), it’ll delete them and create new ones
- If no cached element is found, but there is an element in the document with a matching
applicationIdthat is used for the update (this is the case of someone restoring changes previously sent, in the same project)
- If an element being received doesn’t have an
applicationIdno update mechanism will happen (this could be the case of BuiltElements created in Python if no
applicationIdsare generated manually)
Levels in Revit are updated following the logic described above with just one minor exception: if you receive a level in a model that already has a level at the same elevation, the existing one will be used and its name will be updated if needed.
For example, you receive
Level 03 which is at 9000mm, in a file that has
3rd Floor at 9000mm =>
3rd Floor will be renamed and used (we use a tolerance of 5mm for matching levels by elevation).
NOTE: Levels are not matched by name as this could end up with undesired results.
# Revit & BIM Data
When sending from Revit, Speckle takes care of converting the data to a Speckle friendly format. If you're curious about how this data is being structured, please have a look at our Objects Kit class definitions (opens new window).
For instance, a Revit room will look like this:
At a high level we have all the main properties that define the room, such as the name, area, number, geometry etc. All the other Revit parameters, both type and instance, are nested inside the parameters property.
See an example below:
All the parameters are stored using their internal Revit names. You can see the full list of
BuiltInParameter values here (opens new window). If you need to access their display name, just refer to the
name property of each parameter, but please keep in mind these are not unique and can vary between languages.
To easily explore on object's data and parameters, our Speckle Web App interface can be of great help. As well as any other applications that lets you explore the object metadata (eg Grasshopper, Dynamo, Unity, etc).
# Scheduler (alpha)
Sometimes you might want to send data to Speckle automatically, based on a few triggers. For this, we have recently added a "Scheduler" functionality to the Revit Connector.
To use the scheduler, you first need to set up a Sender via the main connector interface. Make sure to select the filter you intent to use when the scheduler is triggered, for instance to send all the model:
Now that your sender stream is saved you can open the Scheduler and select it, together with the intended trigger:
Currently the following triggers are available:
- On File Save
- On Sync To Central
- On File Export
Click "Save", and that's it! Every time you save your file, for instance, the sender will send data to Speckle. NOTE: currently only one scheduler can be set per file, in the future we will enable multiple scheduler and let you set them up from the main Connector interface.