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.'