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) ?