Hi, all.
The code at the bottom of the post rotates all selected objects by each of their center/axis points. Currently, that code will open the pyRevit stack/script window (the one that opens at the right side, specially if there are errors) to interact with the user, such as to ask what angle to rotate the objects.
Would anyone know how to change the code so that it uses the pyRevit form or Revit’s dialog box? I’d like to have the user interact with the tool in the most common way possible
Thanks in advance,
Edgar
from pyrevit import revit, DB
from pyrevit import script
import math
def rotate_elements(selection, angle):
with revit.Transaction("Rotate Multiple Elements"):
for element in selection:
# Get the element's location and rotation axis
location = element.Location
if isinstance(location, DB.LocationPoint):
axis = DB.Line.CreateBound(location.Point, location.Point.Add(DB.XYZ.BasisZ))
elif isinstance(location, DB.LocationCurve):
axis = location.Curve
else:
print("Cannot rotate element {}. Skipping...".format(element.Id))
continue
# Rotate the element about its center point or axis
rotation = DB.ElementTransformUtils.RotateElement(revit.doc, element.Id, axis, angle)
if rotation != DB.SetComparisonResult.Disjoint:
print("Element {} rotated by {} degrees.".format(element.Id, math.degrees(angle)))
# Get user selection
selection = revit.get_selection()
# Get rotation angle from user input (in radians)
angle_degrees = float(input("Enter rotation angle in degrees: "))
angle_radians = math.radians(angle_degrees)
# Rotate selected elements
rotate_elements(selection, angle_radians)