Switch join order node

Here is an example that works with floors and columns:

Floor.SwitchJoinOrderCutWithColumn.dyn (2.7 KB)

import clr

clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
from Autodesk.Revit.DB.Structure import *

clr.AddReference('RevitAPIUI')
from Autodesk.Revit.UI import *

clr.AddReference('System')
from System.Collections.Generic import List

clr.AddReference('RevitNodes')
import Revit
clr.ImportExtensions(Revit.GeometryConversion)
clr.ImportExtensions(Revit.Elements)

clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager

doc = DocumentManager.Instance.CurrentDBDocument
uidoc=DocumentManager.Instance.CurrentUIApplication.ActiveUIDocument

#Get selected floors or ask user to pick:
selectedIds = uidoc.Selection.GetElementIds()
if selectedIds:
	ids = selectedIds
else:
	refArray = uidoc.Selection.PickObjects(Selection.ObjectType.Element,"Pick floor(s)")
	ids = [ref.ElementId for ref in refArray]
	
for id in ids:
	floor = doc.GetElement(id)
	
	bb = floor.get_BoundingBox(doc.ActiveView)
	outline = Outline(bb.Min, bb.Max)
	filter = BoundingBoxIntersectsFilter(outline)
	columns = FilteredElementCollector(doc, doc.ActiveView.Id).OfCategory(BuiltInCategory.OST_StructuralColumns).WherePasses(filter)
	
	count = 0
		
	#Do some action in a Transaction
	TransactionManager.Instance.EnsureInTransaction(doc)
	for column in columns:
		areJoined = JoinGeometryUtils.AreElementsJoined(doc,floor,column)
		if areJoined:
			columnIsCut = JoinGeometryUtils.IsCuttingElementInJoin(doc,floor,column)
			if columnIsCut:
				JoinGeometryUtils.SwitchJoinOrder(doc,floor,column)
				count = count + 1
	TransactionManager.Instance.TransactionTaskDone()

OUT = str(count) + ' join orders are changed.'
6 Likes