Roof massing to real Revit roof family

Hi All!
I have been trying to improve the workflow between massing studies using grasshopper>rhino>revit although I can’t seem to find a way to implement the grasshopper script in a way where when I am doing roof forms for Revit to register the massing as a roof form. This would be very beneficial as the walls would automatically adjust for the roof and all that good stuff. So far I have only managed to create a flat roof from "roof from boundary " but I can’t find a way to then edit that roof in grasshopper, any suggestions?

Thank you thank you!

what is your preferred workflow?

do you want to create a native revit roof and then edit the subelements so you could “kink” the roof surface in revit such as adding slopes? if so the “edit subelement” is not an option with OOTB RIR nodes.
perhaps the devs could chime in if that is a possibility to add it.

or were your roof shapes in grasshopper curved? or all of the above?

Yes exactly, Adding a slope or kink was kind of what I have been trying to do. Is there any way to do this by using grasshopper?

so the “edit subelement” is not an option with OOTB RIR nodes.

you could create your own custom c# or python node that taps the revit api to do this for you or ask the devs to include that node in a feature request

Understood, and is there a specific way I can get this across to the developers?
Also I am new to python but am willing to learn, is there a good vid/tutorial out there that can help me get started on coding a component of this type?
Thank you so much!

There are a number a ways to make roofs. And determining the best way is key. @ehsan can address the right way, but here is one way I made a Roof from face:

A roof from face has to be attached to a mass. A mass, per the SDK has to be made a family. So, here I create the mass in Rhino, then I create a Mass Family in Grasshopper named roofmass2.

Then get its Type and Add type by location. Once in Revit, you can use the top face to make a roof by the Roof by Face command:

And while the mass will update with Grasshopper, the Roof will need to be updated by re-building the Roof on face by editing it.

Thank you so much!
I have a couple more questions which arose as a result of me testing this out:
When the mass is generated it is slightly out of place, is there a way to control where the mass is generated. I have tried moving around the point without success. Also can you modify the roof once it is in revit for instance changing the type of roof it is in grasshopper and have that be reflected in Revit? I am attaching a pic of the script, which uses the center area point.image0.jpeg

Technically you would move the rhino geometry to 0,0,0 before making it a family. This allows the insertion point of the Type instance to be the same for the same placement.

You can see here that the geometry is first moved before creating the family:

You can see a larger explanation here:

Hey @scottd,

Thanks for sharing all of this. I managed to set it all up, but at the end, the Add Component (Location) tells me my mass contains no solid geometry. I am referencing a closed solid polysurf. Would you take a look?

I referenced other shapes (also closed polys) and those worked! Even some with double curved faces.

20200828_Adding Roofs from Closed (18.6 KB) 20200902_To Scott.3dm (179.0 KB)

1 Like

So this is a fun category/family problem that we all need to keep in mind. Roofs are system Families. So you cannot add a Roof as a Component Family. You options are:

  1. Add the Brep as Directshapes to the Roof Category. Then use View Filters to control their graphics.
  2. Use the Add Roof Component which only Adds a Roof from outline. (We need to add a couple more here)
  3. Use a Family type that is not a system type. Then Sub-categorize the Forms in the Family as custom objects. For instance GenericModel with a Roof-Building subcategory?

Would any of these work in your case?