Create a Curtain Grid Elements


#1

Am struggling finding a way to create orthogonal vertical and horizontal Curtain Grids over a Revit Curtain Wall family (not a Curtain System). Is such a thing possible using Python? From a Dynamo Surface with Isocurves, I would like to create from them curtain grid elements. The only thread found deals with aligning grids, but not about creating them http://dynamobim.org/forums/topic/manipulating-curtain-gridlines/


#2

Hi

This may not work for your particular case, but in a recent project we had a number of empty curtain systems already in our project which we were able to query using the CurtainGrid property (CurtainSystem.CurtainGrids - in your case Wall.CurtainGrid) This got the Curtain Grid geometry into Dynamo, which formed our surface. We then created points on the surface somwhere along our desired gridlines (in your case isolines), then used the CurtainGrid.AddGridline method to create GridLines at the correct location. So - slightly convoluted, but it did allow us to automatically create 12000+ gridlines.

Code snippets: Get Cgrids from CSystem:

cSystem = UnwrapElement(IN[0])
cgrids = []
#check if IN[0] is a list; if not, create one
if hasattr(cSystem, ‘iter’):
for Systems in cSystem:
cgrids.append(Systems.CurtainGrids)
else:
myList=[]
myList.append(cSystem)
for Systems in myList:
cgrids.append(Systems.CurtainGrids)
OUT = cgrids

 

Create GridLines(note vertical and horizontal):

#Get Curtain Grids
cgrids = IN[0]
#get points for vertical gridlines
Vpos = [[j.ToXyz() for j in i] for i in IN[1]]
#get points for horizontal gridlines
Upos = [[p.ToXyz() for p in q] for q in IN[2]]
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
TransactionManager.Instance.EnsureInTransaction(doc)
newlines=[[] for k in range(len(IN[0]))]
for n in range(len(cgrids)):
for m in range(len(Vpos[n])):
newlines[n].append(cgrids[n].AddGridLine(False,Vpos[n][m],False))
for c in range(len(cgrids)):
for d in range(len(Upos[c])):
newlines[c].append(cgrids[c].AddGridLine(True,Upos[c][d],False))
TransactionManager.Instance.TransactionTaskDone()

OUT = newlines

I can post a graph if that helps…

cheers


#3

I’d like to bump this again. Cliff’s script seems to address Curtain Systems, not Curtain Walls. Am I correct? I would like to know if there is a way to select a Curtain Wall and add grids to it.

(In my little time working with Dynamo, I am underwhelmed by the ways to create and manipulate Revit’s system families. Almost every time I’ve gone searching for a solution, I either find nothing, or a solution that requires a Python or custom package. I hope that folks here can help prove me wrong.)