Before, we were sending family instances as a flat list of mesh elements along with their non-geometric properties. Now, get the fully nested structure of your Revit elements as block-compatible instances for more useful data, and a massive speed boost 🚀
What are Instances?
In simple terms, an instance is created from a definition (for example, some geometry) and a transform (usually stored as a matrix of numbers) that applies rotation, translation, and scaling changes to the definition.
Under the hood, most Revit elements are actually parametric instances. These objects inherit their parameters from their family and type, and share a common base geometry definition that may change depending on the particular parameters on the instance.
In Speckle, Revit Instances use a Revit Symbol Element Type as the definition. These contain:
- Family, Category, and Type information
- Placement information (eg two-level based, workplane based, etc)
- Subcomponents (such as other nested instances) if any exist
- Meshes representing the symbol geometry for displaying in the viewer or creating in other applications.
The Revit Instance itself contains:
- A Transform matrix describing the full transformation of the definition geometry
- Instance-specific Parameters
- Other helpful properties, like hand flipped, facing flipped, and mirrored information.
::: tip 🤓
For the technical readers out there, nested instance transforms are always local transforms indicating the transformation of the nested instance relative to its parent instance. The instance transform will apply to anything located inside its definition’s elements property, but not to any other property on the instance (including hosted elements).
:::
Why is Instancing better?
Speckle’s Revit Instances may be the only solution currently that enables receiving Revit elements as fully functioning block instances in other block-compatible applications, without visual programming tools like Grasshopper or Dynamo. Continue reading for some extra nice advantages when sending Revit elements as instances 👇
High Performance Gains when Receiving Revit Models
Instancing means that geometry is only stored and created once, in the definition. Any additional instance that shares the same definition only adds transform matrix information, without carrying the transformed geometry data as well. This results in super fast receives in any application that supports instances natively, with sometimes exponential speed increase and data size reduction especially when sending models with lots of the same kinds of instances, or super heavy complex nested geometry.
Useful Object Structure
By preserving the original nested instance structure of your Revit family instances as nested blocks in other applications, this means you can quickly assign different materials, properties, and other information to your instance subcomponents by editing their specific block definitions directly!
Meaningful Diffing
By sending instance objects as geometry + transform, now you can more meaningfully determine when the definition geometry itself has changed, or just the transformation of that definition. Without this, when sending the object already in its final transformed state, any changes to the instance won’t be differentiable between changes to the definition and changes to the instance itself.
Which Revit Elements are being upgraded?
With 2.14, any point-based family instance element without a direct conversion is now sent as a RevitInstance
instead of the old FamilyInstance
object. There are a few exceptions for some elements like structural foundations or face-hosted generic models due to technical challenges, but we are constantly rolling out better support for Revit elements so keep your ears tuned for updates!
Conclusion
At Speckle we’re always improving the sophistication and performance of the data we extract from our Connectors, and introducing Revit Instances is a significant step in enabling more advanced and faster workflows into other applications. Join our next Community StandUp to see what else is new in 2.14!