Object Tracking/Binding - Speckle Objects

Hey guys,

Do you have any plans for object tracking🛤️ for Speckle objects?

Let’s say I send geometry from Revit to Sketchup. When received, geometry in Sketchup has no connection with Speckle/Revit anymore. So when I receive the latest commit from the same stream where a slight change happened in the model, it creates new geometry from scratch. Is there any way to Track/Bind geometry send/received?


1 Like

The answer is “partly yes”, let me explain:

When you send data to Speckle an object will have a few identifiers:

  • the Speckle id: is a hash of the object, if any of its properties change it will change too => not ideal for what you’re after
  • the host application unique id (ie elementId if coming from Revit) => this will stay consistent as long as it is consistent in Revit (which not always is!). Not every application tracks elements with an internal id, so it might not always be available.

In your specific scenario, I’m not sure what Sketchup does with the metatada attached to Speckle elements (ping @izzylys ), but the same Revit element should consistently keep the same elementId even after it’s been modified.

1 Like

I feel like this is what a lot of people are after. There is a great potential in Syncing/Updating models. When a change happens in one environment, it will be reflected in others too (Revit, Sketchup, Blender etc.). At least an optional object tracking for streams is much need IMO. (doesn’t have to be a top priority though :slight_smile: )

1 Like


TL;DR as of right now, applicationIds are preserved in Blender, but not in SketchUp (tho I’ll add it to the list!). however, keep in mind that receiving a Revit element into Blender/SketchUp/other geometry focussed apps will turn it into a Mesh, so sending it back out again will not preserve the Revit element, even if it has the same applicationId

so this is a bit more complicated than it may seem from the surface when we’re talking about going between geometry focussed applications (eg SketchUp, Blender, in some cases Rhino) and BIM focussed application (eg Revit, Archicad, etc). this is because BIM focussed applications are dealing with BuiltElements while a geo focussed application is dealing with Geometry.

so in eg SketchUp, the incoming data is traversed until it hits something it can convert which could for example be the displayValue Mesh of a FamilyInstance. it then converts only this mesh to SketchUp. this mesh will of course have a different applicationId than the parent object.

in Blender I have actually temporarily solved this issue by passing down parent props to child geometry (eg see this commit here which preserves all the Revit applicationIds and custom props in the properties field on each object. ((I can probably get this working in SketchUp as well! I’ll add it to the list.))

in both cases, what is actually being converted is a Mesh, not a BuiltElement, so sending the object from SketchUp/Blender and back into Revit will give you a Direct Shape and not the original BIM element, even if the applicationId is the same.

so what this means is you can currently have one-way object tracking/binding but not two-way. this means that for example, you could have two models

  1. a Blender model where you are:
    • modelling objects and sending updates to Speckle
    • receiving from a Speckle/Revit model and receiving continuous updates on those objects
  2. a Revit model where you are:
    • doin your BIM stuff and sending updates to Speckle
    • receiving from a Speckle/Blender model and getting continuous updates on those objects

Thanks for clarifying @izzylys :handshake:

I think this is more than enough for now. Having a one-way link will create lots of potential workflows. And probably it will increase the performance too, instead of receiving the whole geometry from scratch, only those that changed will be received. (maybe🤔, not an expert.)

Great👏, can’t wait to play with it.

1 Like