Set Crop View automatically

Hi,
try this one

import clr
import sys
import System
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *
import Autodesk.DesignScript.Geometry as DS

#import Revit API
clr.AddReference('RevitAPI')
import Autodesk
from Autodesk.Revit.DB import *
import Autodesk.Revit.DB as DB

#import transactionManager and DocumentManager (RevitServices is specific to Dynamo)
clr.AddReference('RevitServices')
import RevitServices
from RevitServices.Persistence import DocumentManager
from RevitServices.Transactions import TransactionManager
doc = DocumentManager.Instance.CurrentDBDocument

def get_Global_Middle(all_bbx):
	"""
	# get middle point of global BBX
	"""
	minX = min([bbx.Min.X for bbx in all_bbx])
	minY = min([bbx.Min.Y for bbx in all_bbx])
	minZ = min([bbx.Min.Z for bbx in all_bbx])
	#
	maxX = max([bbx.Max.X for bbx in all_bbx])
	maxY = max([bbx.Max.Y for bbx in all_bbx])
	maxZ = max([bbx.Max.Z for bbx in all_bbx])
	return XYZ((minX + maxX) / 2, (minY + maxY) / 2, (minZ + maxZ) / 2 )
	
def toList(x):
	if isinstance(x, list):
		return x
	elif hasattr(x, "GetType") and x.GetType().GetInterface("IEnumerable") is not None:
		return x
	else :
		return [x]
#Preparing input from dynamo to revit
lstElems = toList(UnwrapElement(IN[0]))
view = UnwrapElement(IN[1])
margin = 8
lstTfPts = []
lstBBx = []

#Do some action in a Transaction
TransactionManager.Instance.EnsureInTransaction(doc)
tfView = view.CropBox.Transform.Inverse
for elem in lstElems:
	bbxElemB = elem.get_BoundingBox(view)
	if bbxElemB is not None:
		lstBBx.append(bbxElemB)
		pt1 = tfView.OfPoint(bbxElemB.Min)
		pt2 = tfView.OfPoint(bbxElemB.Max)
		pt3 = tfView.OfPoint(XYZ(bbxElemB.Min.X, bbxElemB.Max.Y, 0))
		pt4 = tfView.OfPoint(XYZ(bbxElemB.Max.X, bbxElemB.Min.Y, 0))
		lstTfPts.extend([pt1, pt2, pt3, pt4])
	
# get min max coordinate from transform points
minX = min(lstTfPts, key = lambda p : p.X).X
minY = min(lstTfPts, key = lambda p : p.Y).Y
maxX = max(lstTfPts, key = lambda p : p.X).X
maxY = max(lstTfPts, key = lambda p : p.Y).Y
# set a new Transform
t = Transform.Identity
t.Origin = get_Global_Middle(lstBBx)
t.BasisX = tfView.BasisX
t.BasisY = tfView.BasisY
t.BasisZ = tfView.BasisZ
# set a new BBX
newBox = BoundingBoxXYZ()
newBox.Enabled = True
newBox.Min =  XYZ(minX - margin, minY - margin, -10000)
newBox.Max =  XYZ(maxX + margin, maxY + margin, -0.10)
newBox.Transform = t
view.CropBox = newBox

TransactionManager.Instance.TransactionTaskDone()

OUT = view

If bug persist, can you share a sample rvt file (here or in PM) ?

1 Like