🆕 Speckle Mapper: Mapping Tool for CAD > BIM workflows

Hello community, and happy Friday!

I’d like to share with you a sneak peek of a (very early) feature we’ve been working on: a CAD to BIM mapping tool!

After the great success of our Grasshopper BIM and Rhino BIM functionalities, we received a lot of requests to make the creation Revit models from Rhino better and easier.

As you know, our mission is to enable anyone to speak in 3D, and that means enabling all sorts of workflows with 3D models and data. :speckle:

We have finally embarked to do that, but in the Speckle’s Way ™ :smiley: which means not only Rhino> Revit workflows are supported, but eventually other CAD > BIM ones like AutoCAD > ArchiCAD or Civil 3D > Tekla and so on.

Here it is, and hopefully, you’ll have a chance to try it in the upcoming 2.10 release.

What you see are extrusions becoming Walls and breps/meshes becoming DirectShapes; the types, families, and levels are all pulled from a stream that was sent from Revit.

What do you think? Let us know below!

PS: excuse the very basic model, cooler ones will follow soon! :slight_smile:

mapping tool2


For those interested to try this functionality, we have a very early 2.10.0-beta release available in Manager!

How it works:

  • create a Stream and from Revit and send your levels families & types (mapping data)
  • launch Rhino and open the mapping window with the SpeckleMappings command
  • in the Mapping tool slect the stream with the mapping data
  • now you can apply any of the following mappings:
    • Extrusion => Wall
    • Mesh or Brep => DirectShape
    • Point or Block => FamilyInstance
    • Line => Beam or Brace
  • send your mapped geometries to Revit and get them as native BIM elements

What other mappings would you like to see? Let us know below!


Hi @teocomi !

That looks really promising! Do you think that we could create those DirectShapes / Families from any CAD software like Rhino, but reading the Family, Type and Base Level from embeded User Strings in each geometry?

Thanks a lot, and can’t wait too see how it evolves! :slight_smile:

Hey @mserra !

Yes, the goal is to then roll this out to other CAD tools such as AutoCAD, but you’d be able to load your CAD drawings from Rhino already.

Family , Type, Base Level and any other required parameter would be mapped form Revit, we’re also looking to support instance and type parameters.

I’ll upload a video in the following days that shows the process a bit more in detail!


:shushing_face: here are also some initial docs:


Are there any plans or would it even be possible to also create such a mapping tool to IFC?

1 Like

Hi @JoostGevaert , that’s not in the plans, unfortunately - IFC is really hard to work with, and there is no SDK/API that we can leverage to create valid IFC elements.
I’m curious as to why you really have to work with IFC files?


Delivering according to the IFC standard is sometimes a client requirement, and exporting IFC from for example Revit is not trivial.
Do IFC Open Shell (GitHub) or IFC.js (GitHub) not provide an SDK/API that you could leverage?

1 Like

Hi @JoostGevaert :wave:,

Thanks for the additional information! It sounds like what you are mentioning is not under the scope of the Mapping Tool. In its current state, it is designed to allow CAD users to quickly create BIM elements from their existing geometry. This workflow has nothing to do with IFC, it’s instead about generating native elements in the host application (in this case Revit, but Tekla or Archicad in the future too).

IFC.js is just a viewer and IFC open shell instead is written in python and so not compatible with our stack.

Hey all, joining in upon a ping by @JoostGevaert . Why would IFC be out of scope here? IFC is the native element in authoring software like the BlenderBIM Add-on, FreeCAD, Homemaker, as well as others (e.g. 4D software based on IFC.JS and or IfcOpenShell).

IfcOpenShell is primarily written in C++, and has Python bindings, and more recently TypeScript for the web too. I guess if Speckle has a more Windows-centric stack they might look at something like XBim (C#) instead, though the capabilities are significantly less than IfcOpenShell. There’s also ODA if you prefer a proprietary solution.

I’m not convinced IFC is really hard to work with especially once a mature SDK like IfcOpenShell is used. After a short dev tutorial I see folks doing stuff like editing, generating new models, etc pretty quickly. Here are some code examples that might help: Code examples - IfcOpenShell 0.7.0 documentation - I find it’s more the scope of IFC that is pretty daunting, it’s not just a container for some geometry and metadata, it’s abstracted out to include many non-geometric semantics across many disciplines like costing, scheduling, sustainability, facility management. Happy to help where I can to collaborate with the Speckle team and get a prototype going :slight_smile:

More reading: [Speckle] Why doesn't Speckle use IFC as its object model? — OSArch


Hey @Moult great to see you here and thanks for the info! :star_struck:

You’re correct, IFC is definitely not out of scope here, just trying to re-word the above: our short-term plans are to have the mapping tool work for Rhino>Revit workflows.

As soon as we get that solid enough, we’ll look to extend this functionality to other CAD and BIM tools like AutoCAD, ArchiCAD, Tekla, SketchUp, FreeCAD, Blender, IFC and so on :slight_smile:

Would love to have you help us with a prototype!


Cheers! It would be fun to collaborate! I apologise if this was the wrong thread to post in BTW and sorry if it made it off-topic, still a bit new here feeling my way around :slight_smile:


We welcome your contributions wherever they land :smiley:


For anyone following this thread, in the last pre-release we’ve added support for additional conversions!
Here’s the full list:

Rhino Geometry Revit Element
Extrusion Wall
Mesh DirectShape
Mesh Topography
Brep DirectShape
Point FamilyInstance
Block FamilyInstance
Surface Floor
Line Beam
Line Brace
Line Pipe
Line Duct
Line Column

Have you tried it already? Let us know what you think!


It would be very useful to abstract the mapping tool a bit more.

For example:

  • instead of forcing the sender to map it, allow a receiver to map it. This keeps the domain knowledge where the app is. Not all senders understand Revit nuances.
  • instead of forcing the receiver to publish the families they have available in Revit to map to a Speckle stream first, allow a sender to default to a new family instance be created or a default BIM System family to be created.

This would allow the senders to simply publish as usual, and the same stream can be read into different target apps with different mappings associated. A surface in rhino could be a floor in someone’s Revit and a structural deck and someone else’s Tekla model.

It would also allow a user to receive a stream as usual. Maybe there are just a few objects from the sender that the receiver would like to map a special family to it so that it is swapped out automatically each update, instead of having Speckle create a family instance of the geometry from the sender,


Hey @michaelgmccune :wave:,

Definitely agreed. We understand the importance of having the ability to map on receive, and we are working on implementing this feature in the future. Additionally, we agree that the ability to create families from Rhino geometry would be a valuable addition to our tool. Its already on the roadmap🎯. We are currently exploring ways to make this possible and appreciate your input on the matter.

Thank you for your feedback!


Hello @Community :wave:,

We’re excited to share that we’ve publicly announced our “Mapping Tool” (provisional name) that will help you transform your CAD models into BIM ones straight from Rhino - without any Grasshopper knowledge required! Find everything you need to know here, and let us know what you think :heart:


Hi thank you all for this great tool.
Some question appears when i am trying to use it in my workflows.

1-)How can be possible multi-mapping?
For example i have 30 types of facade units as blocks in rhino.
Do i have to create 30 family instances in revit individually and map them one by one in speckle?
Block name-family and type name auto matching would be super useful.

2-) It will be possible to work with nested blocks?
For example i have screws as rhino blocks nested inside the facade units blocks.
How can i convert these screws as nested revit family instances?

1 Like