Openings/voids in RevitFloor and RevitWall

Hi everyone !

After some time I had some hours left to do some some further testing and I had a couple of discussions with some of our BIM modellers regarding openings/voids in floors and walls. It’s already a major improvement Speckle 2.0 supports openings/voids, so keep up the good work :rocket:! However, we might have some additional requests.

In a traditional project we have specific methods according to our company’s BIM standards to create openings/voids in floors and walls in Revit. The different situations are shown in the picture below on the left, which shows examples for a floor. It basically comes down to the following:

  1. Big openings/atria: edit floor boundary sketch line
  2. Openings at the edge: edit floor boundary sketch line
  3. Repeating openings over height: use Shaft
  4. Smaller (repeating) openings: use a Generic Model Opening family

In the current implementation in Speckle a Floor Opening Cut is used to create voids in floors, see right side of the image below. However, this is currently not according to our own BIM standards.

For Walls the RevitWallOpening component was released recently, using a similar method to create openings in walls. In our own BIM standards we usually use a Generic Model Opening family to create openings in walls. The major advantage is that you can create multiple instances of a type which increases the flexibility if you have to adjust the dimensions of a repeating opening in a later stage of the project. You can imagine that this saves a lot of time when designing a concrete core of a high-rise building.

Basically it comes down to a couple of questions from our side:

  • Is there a possibility to implement support for openings by editing the floor boundary sketch line (method 1)? Speckle already recognizes this type of void when sending a floor with this type of void from Revit to Grasshopper. Below an image of an example in Revit.

  • Is there a possibility to implement support for Generic Model Openings? This is a more difficult question I suppose, but I’m not exactly sure how complex. So I’m more than interested in your ideas about this. Below an image of an example in Revit.

I’m curious about your thoughts and suggestions :grin:!


Hey @GerranLankhorst ,

As always thanks for the very good feedback, Speckle should definitely be able to comply with your BIM standards :slight_smile:

  • floors with openings: I just checked and it seems that only Revit 2022 and 2023 support the creation of complex floor profiles (with holes), so we’ll add support there! Older versions will have to still fallback to the current method
  • generic model openings: would you be able to use the FamilyInstance node to create them? Or are they a different type of component?



Hi @teocomi,

As always thanks for the quick reply :ok_hand:!

  • Floors with openings: We currently work with Revit 2021 and for some projects with Revit 2020. I just checked: adding a second boundary line within the other boundary line results in a void in the floor object. I’m not sure if this was the support you’re meaning, or are you talking about a Revit API thing?
  • Thanks for your suggestion, I’ll have a look! It might be a bit tricky though as the generic model opening object needs a host (Work Plane). Also you need to specify that this object is used to cut the wall. I’ll come back to you later if I succeeded.
  • Floors with openings: yes, I was referring to the Revit API. I have just added support for this in Revit 2022 and 2023, but there’s nothing we can do for earlier versions unfortunately
  • Generic model openings: if you could share a sample family/project we’d be happy to see what we can do on our end to support them too!

Hi @GerranLankhorst :wave:,

RevitWall components in Grasshopper have Elements input. So any component that’ll be hosted in the wall can go into this input. It works the same way as Revit does, but the other way around. Instead of each object having a Host input, each Host as Elements input. Opening in the image below is a Generic Model👇.

I attached the Grasshopper definition, feel free to take a look at it.
Revit Wall with (18.1 KB)

As a side note, i agree with your point on creating openings in wall as Generic Model families. It makes it much easier and plus, it is schedulable.:blush:


Hi @gokermu,

Thanks for your feedback! I’ll try to have a look next week if it works with our current families.

@teocomi thanks for your offer regarding the generic model openings! We were already preparing a sample project for you, but I’ll first have a look on gokermu’s suggestion.

I’ll keep you posted!


Hi @teocomi, @gokermu,

This has been on my to-do list for a while now, but I finally managed to test the approach @gokermu mentioned.

Unfortunately this doesn’t work with the families we currently have, as the Generic Model Openings need a face or work plane as host. However, I’m able to create the Generic Model Opening object itself using the FamilyInstance component from Grasshopper. Also see the screenshot below:

@teocomi, we’ve prepared a Revit project to share with you. I’ll send you a DM.


Hi @GerranLankhorst ,

Are you trying to add a Generic Model family to an existing wall, meaning wall created inside Revit? Or are both wall and opening family generated through Grasshopper?

If you are trying case #1 then yes we are aware of that limitation. We are planning to add an Host input for RevitFamilyInstance nodes. :point_down:

Hey @gokermu,

Sorry for the late reply and thanks for your answer. No it was case #2 as you mentioned. I believe @gokermu and @connor will be picking this up and check the Revit sample project that I send.

1 Like

Hey @GerranLankhorst,

Apologies for the wait, but I believe that I have the functionality in place for the wall hosted Generic Model openings. The edited floor boundary functionality was previously implemented, but like @teocomi said, it only works in Revit 2022 and above.


We’re releasing Speckle 2.7 today but I still need to test the generic model openings to make sure I didn’t break any other type of revit object conversion. The generic model openings should be released in a minor version update in a few days. I’ll ping you when that happens.


Hi @connor,

That looks great! Thx and I’m looking forward to the release :partying_face:


@GerranLankhorst the feature has been released! Download Revit 2.7.1 from the Speckle Manager for the added functionality. Please let me know if you have any issues with it or if it doesn’t perform as expected.


Hi @connor, thanks! Looks and works great! I was also trying to generate the objects from Grasshopper, but ran into an error. Did you also already have a look at this?



03-08-22 11:39:12 Using converter: ConverterRevit v2.7.1.0
03-08-22 11:39:12 Using document: 
03-08-22 11:39:12 Using units: mm
03-08-22 11:39:12 Created FamilyInstance (Generic Models) 517245
03-08-22 11:39:12 Created Wall 517242
03-08-22 11:39:13 Can't rotate element into this position.
1 Like

Hi @GerranLankhorst, could you share the GH file and the stream you sent it to so we can double check this?

1 Like

Hi @AlanRynne, thx for the quick reply!

GH file: Speckle 2.0 - GH to Revit - Generic Model (53.6 KB)
Stream: Speckle

1 Like

Regarding RevitFloor and openings. The first floor boundary line becomes the outline (speckle-sharp/ConvertFloor.cs at main · specklesystems/speckle-sharp · GitHub), but how should it behave if people have multiple floor outlines in one RevitFloor instance?

A users experienced this issue with a large model, when they wanted to receive a large Revit model in GH, multiple RevitFloor objects had oulines in the voids.

Below is a screenshot of a simplified version to show the issue. On the left there is one Revit floor instance, with multiple floor outlines in them - there are plenty of cases where BIM modellers work this way instead of having multiple Revit floor instances. When you receive it in GH, you get only 1 floor outline, which makes it difficult to work with the geometry.

Side note

On a side note, when receiving the Speckle RevitFloor object back in Revit, you don’t get the original object and receive some errors. Original is on the right and the received one on the left (2 separate Revit floor instances).


Oh… interesting. Thanks @JdB!

I think it’s safe to say that this is a current limitation on our object model… and I’m not really sure if there’s something you can do about it right now.

I’ll ping @connor on this one, as he may have some ideas. But it may be that we just need to expand our object model to cover this case better


Hi @AlanRynne, @connor,

Do you already have some feedback for me regarding my latest post trying to generate the Generic Model openings from Grasshopper?

Sorry, I let this slip through the cracks.

The issue here is that your GH object is sending the wall opening with a rotation of 0 and Revit can’t make that work. You can see from the image above that the default value for the rotation of that object is 4.1888 rad (240 degrees). I have to admit that I don’t really understand the rotation parameter that Revit uses because it is defined as the ‘rotation around the insertion point’. Maybe @teocomi can explain it, but I don’t know how you define rotation about a point with a single number.

To add to the confusion (at least for me), if I rotate the opening 1.57 rad (90 degrees) in the plane of the wall, then the rotation parameter has a value of pi (a change of 1.047 rad (60 degrees).

I was playing around with the rotation of this object and I never could get the rotation value to come out to 0. Unfortunately this error doesn’t show up until the Revit transaction is committed so I’m not sure if we can catch invalid rotation values. I will definitely look into it though.

In the meantime, maybe try to send your GH object with a rotation value of 240 or 180 degrees (of course it has to be set in radians though) and see if that is able to be sent to Revit.


No worries, that was the case for me too!

For me it would seem logical that the rotation would around the normal axis of the plane/face that the GM opening object is working on. However, that doesn’t really explain the 240 and 180 degrees values and the actual outcome.

I tried a couple of a values for the rotation but couldn’t get it to work. I then created the objects in Revit and send it to the stream to check the rotation value. In my case it was about 120 degrees.When I copied this exact value and used this as input in the GH script to create the GM opening object, I was able to import the objects back into Revit without errors.

There was a small rounding issue in GH however. Converting 120 degrees into radians resulted in 2.094395 instead of 2.0943951023931957 that I got from Revit.