I am trying to develop a workflow that will copy the profile including openings of a wall and send it to a curtain wall that sits outboard of the main wall.
I am planning to use wombat’s byprofile node for the wall creation but I don’t know how to extract the geometry from the first wall.
Check out the How to get help on the Dynamo forums post
What have you tried so far?
I would suggest this is not as easy as it sounds
Firstly I would review what Revit can already do - curtain walls can be cut by windows with openings when you join an external wall to an internal wall even with a gap. Then all you would have to do is copy the wall, change the type and join
Synthesize have some nodes which can join geometry
Thanks. That is what I was trying to do. I can’t seem to get the curtain wall to join to the wall that hosts the windows. It doesn’t seem to allow me to select the curtain wall system with the join tool.
Start with a basic Revit template and see if you can join a curtain wall and basic wall. If there is a gap you should get a warning, which you can accept.
A curtain wall ‘window’ may not cut the external curtain wall component, however it may be affected by the curtain wall grids.
Check that any window families cut with an opening, not a void.
Are these material joints, reveals, protruding joints? Are they needed for rendering?
If not needed for rendering and just surface joints, you are better off with a model patter for CD’s. Less overhead and simpler to manage over the life of the project.
If they are reveals, I’d go a different route. You could use the geometry in the curtain wall to create voids and subtract from the wall.
You have a lot of odd shaped panels that will be difficult to construct. If you were to work on a module based on the panel size, I’d approach it a little differently. I’d do the finish panels as a part of the curtain wall as a curtain wall panels and the windows could be curtain wall panels as well. It would reinforce the modular nature of the wall system.
The join method as suggested doesn’t work between a wall and a curtain wall in the manner implied. Would be a slick solution if that was the case. You’ll see you can do the cut/join, but it leaves the window - still in the wall - floating behind the curtain wall.
Getting the profile of the wall is possible and easy in the API, but I don’t know of a node off the top of my head that gets the info. The basic structure is: Wall > Geometry > Solid > Face > EdgeLoops
You could shorten the programing with some manual input. Use pick face to more directly get the face instead of running through the logic of finding the right face. (Pick Face > Get EdgeLops | Pick curtain wall. > Wombat.
Walls with a profile have a valid SketchId
attribute, you can also generate them for walls that don’t - example python script below. Note: this will generate a profile sketch for all walls that currently do not have one
import clr
clr.AddReference("RevitServices")
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
clr.AddReference("RevitAPI")
from Autodesk.Revit.DB import *
doc = DocumentManager.Instance.CurrentDBDocument
walls = FilteredElementCollector(doc).OfClass(Wall).ToElements()
# Filter if wall can have profile
walls = [wall for wall in walls if wall.CanHaveProfileSketch()]
TransactionManager.Instance.EnsureInTransaction(doc)
wall_sketches = [
w.CreateProfileSketch() for w in walls if w.SketchId == ElementId.InvalidElementId
]
# Required to generate the profile sketches
doc.Regenerate()
TransactionManager.Instance.TransactionTaskDone()
# Return wall profile sketches
OUT = [(wall, doc.GetElement(wall.SketchId)) for wall in walls]
2 Likes