Thanks @Mark.Ackerley. Yep that was pretty much it. Just had to append the output…
import clr
clr.AddReference('RevitServices')
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument
clr.AddReference('RevitAPI')
from Autodesk.Revit.DB import *
#rotations to be in radians
rot = UnwrapElement(IN[0])
viewports = UnwrapElement(IN[1])
views = []
def GetViewCropBoxElement(view):
doc = DocumentManager.Instance.CurrentDBDocument
TransactionManager.Instance.ForceCloseTransaction()
tGroup = TransactionGroup(doc, "Temp to find crop box element")
tGroup.Start()
trans1 = Transaction(doc, "Temp to find crop box element")
trans1.Start()
view.CropBoxVisible = False
trans1.Commit()
shownElems = FilteredElementCollector(doc, view.Id).ToElementIds()
trans1.Start()
view.CropBoxVisible = True
trans1.Commit()
cropBoxElement = FilteredElementCollector(doc, view.Id).Excluding(shownElems).FirstElement()
tGroup.RollBack()
return cropBoxElement
def RotateCropBox(view, cropBox, angle):
doc = DocumentManager.Instance.CurrentDBDocument
bbox = view.CropBox
center = 0.5 * (bbox.Max + bbox.Min)
axis = Line.CreateBound(center, center + XYZ.BasisZ)
TransactionManager.Instance.EnsureInTransaction(doc)
ElementTransformUtils.RotateElement(doc, cropBox.Id, axis, angle)
TransactionManager.Instance.TransactionTaskDone()
return view
for v, r in zip(viewports, rot):
crpbx = GetViewCropBoxElement(v)
crpbxRt = RotateCropBox(v, crpbx, r)
views.append(crpbxRt)
OUT = views