This tutorial explores the various workflows to create complex void forms within Dynamo. The design intent was to create a diagrid structure, known as the ‘structural tubes’. These structural tubes are based on a NURBS surface which was generated from a loft between rotated ellipses. (For more about this methodology, refer Dynamo Structural diagrid tutorial). The void form, which allows the structural tubes to pass through the floors, is a simple offset of this base surface.
The first problem in using Dynamo to generate this type of geometry is that Revit does not create closed NURBS curves. This is a well-known limitation of Revit. While Dynamo can create closed NURBS curves, if you want to generate Rhino geometry from it, generally you’ll need to break the closed curve into two pieces using the ‘Curve.ParameterSplit’ node.
The first option explored was to have Dynamo pointing to a project. In this scenario Dynamo will allow you to create an ‘ImportInstance.ByGeometry’ from the solid. However once created, the ‘Cut Geometry’ tool will not work when trying to cut floor plates with the important instance. This methodology is therefore best avoided.
The second option is to have Dynamo pointing to a family, say a conceptual mass family. In this instance Dynamo will allow you to create a ‘Form.ByLoftCrossSections’. For this to work as desired you’ll need to set the family to ‘Cut with voids when loaded’ under the family category and parameters. Within Dynamo we can then build in functionality so that the form is actually a void instead of a solid. This is done with the ‘Element.SetParameterByName’ node. Once the void form is generated, the family can be loaded into the project and utilising the ‘Cut Geometry’ tool, the mass will cut the floor plates.
Having experimented with different forms, it was discovered that this workflow was not always successful. It is unclear when this failure was due to the Dynamo version being used (0.8 vs 0.8.2) or because of the geometric complexity of the void. Rhynamo was also explored as a possible solution but while the form was able to imported into Dynamo, you were then left in the same scenario as above, with the inability to use that form to cut the floor plates.
The most robust method was to use an in-place generic model (not an in-place conceptual mass), import a *sat file generated from Grasshopper, explode the geometry, and set the ‘solid/void’ parameter to ‘void’. The cut geometry tool can then be used to cut the floor plates. Since it is not currently possible to create an in-place component due to Revit’s API limitations, it is impossible to use Dynamo to automate this workflow.