Hi all, as the title, I have a script that updates my door parameter based from an excel file and it’s working really well. I wanted to add a prompt to tell a user that the script was properly executed, but when I put this:
before or after the commit it doesn’t update the parameters, I’m wondering if there’s an attribute that controls the execution that I’m not aware of. thanks!
from pyrevit import revit #if you did not import it in your boilerplate
with revit.Transaction(doc, __title__): # the pyrevit.revit module has a nicer way to handle transaction
# 🟨 ASSIGN DOOR MARK AND NUMBERS
doors_by_room = {}
for door in door_list:
room = selected_room
if room:
room_number = room.Number
if room_number not in doors_by_room:
doors_by_room[room_number] = []
doors_by_room[room_number].append(door)
# Generate a sequence for each group of doors and assign door numbers
for room_number, doors in doors_by_room.items():
for i, door in enumerate(doors):
door_sequence = str(i + 1).zfill(2)
door_mark = "{}-{}".format(room_number, door_sequence)
door_number = "D{}".format(door_sequence)
door.get_Parameter(BuiltInParameter.ALL_MODEL_MARK).Set(door_mark)
door.LookupParameter('Door Number').Set(door_number)
# 🟡 COPYING DOORS PARAM TO ROOM
# GET THE LIST TO BE SET
room_door_marks_list = []
room_door_clear_heights_list = []
room_door_clear_widths_list = []
room_door_remarks_list = []
for door in door_list:
# 🟦 GET DOOR PARAMETERS TO COPY
# -------xxx get the type first xxx------
dr_type_id = door.GetTypeId()
door_symbol = doc.GetElement(dr_type_id)
# parameter
door_mark_param = door.LookupParameter('Door Number')
door_height_param = door_symbol.LookupParameter('Door Designated Clear Height')
door_width1_param = door_symbol.LookupParameter('Door Designated Clear Width 1')
door_width2_param = door_symbol.LookupParameter('Door Designated Clear Width 2')
door_remarks_param = door_symbol.LookupParameter('Door Remarks')
# 🟨 add string method
door_mark = door_mark_param.AsValueString()
door_height = door_height_param.AsValueString()
if door_width1_param and door_width2_param:
door_width1 = door_width1_param.AsValueString()
door_width2 = door_width2_param.AsValueString()
# append
room_door_clear_widths_list.append(door_width1 + "+" + door_width2)
else:
door_width1 = door_width1_param.AsValueString()
# append
room_door_clear_widths_list.append(door_width1)
door_remarks = door_remarks_param.AsValueString()
# Append door parameters to lists
room_door_marks_list.append(door_mark)
room_door_clear_heights_list.append(door_height)
room_door_remarks_list.append(door_remarks)
# Convert lists to strings
room_door_marks_str = '\n\n'.join(room_door_marks_list)
room_door_clear_heights_str = '\n\n'.join(room_door_clear_heights_list)
room_door_clear_widths_str = '\n\n'.join(room_door_clear_widths_list)
room_door_remarks_str = '\n\n'.join(room_door_remarks_list)
#
# 🟪 ROOM PARAMETERS
room = selected_room
room_door_marks = room.LookupParameter('Room Door Marks')
room_door_clear_widths = room.LookupParameter('Room Door Clear Widths')
room_door_clear_heights = room.LookupParameter('Room Door Clear Heights')
room_door_remarks = room.LookupParameter('Room Door Description')
# ⭕SET
# ---------------XXX--------------------
# DOOR MARKS
room_door_marks.Set(room_door_marks_str)
room_door_clear_heights.Set(room_door_clear_heights_str)
room_door_clear_widths.Set(room_door_clear_widths_str)
room_door_remarks.Set(room_door_remarks_str)
forms.alert('Door Parameters updated!', warn_icon=False, exitscript=True)
hi @Jean-Marc thank for this, but still the alert didn’t show but the script executed, i found out about output window so i guess that’ll do for now, thanks!
from pyrevit import revit, forms, DB #if you did not import it in your boilerplate
doc = revit.doc
doors = DB.FilteredElementCollector(doc).OfCategory(DB.BuiltInCategory.OST_Doors).WhereElementIsNotElementType().ToElements()
phase = DB.FilteredElementCollector(doc).OfCategory(DB.BuiltInCategory.OST_Phases).WhereElementIsNotElementType().ToElements()
with revit.Transaction("blah"):
doors_by_room = {}
for door in doors:
room = door.ToRoom[phase[1]]
if room:
name = room.get_Parameter(DB.BuiltInParameter.ROOM_NAME).AsString()
door.get_Parameter(DB.BuiltInParameter. ALL_MODEL_INSTANCE_COMMENTS
).Set(name)
forms.alert('Door Parameters updated!', warn_icon=False, exitscript=False) # here is the important part, the exit script rolls back the transaction
the exitscript set to True rolls back the transaction