Elevation CropBox

Does anyone know how to change the CropBox Lineweight through the api? To accomplish this manually the only way I know of is to select the CropBox, right click and select “Override Graphics in View” → “By Element”. Make sure thin lines is turned off. The tedious part is doing this on many Interior Elevation CropBoxes.

Something rough I did a while back:

from pyrevit import revit, DB, forms, script

output = script.get_output()
output.close_others()

doc = revit.doc

views = DB.FilteredElementCollector(doc).OfCategory(
    DB.BuiltInCategory.OST_Views).WhereElementIsNotElementType().ToElements()
views_on_sheet = []
for v in views:
    try:
        if v.get_Parameter(DB.BuiltInParameter.VIEWER_SHEET_NUMBER).AsString() != '':
            views_on_sheet.append(v)
    except:
        pass
selected_views = forms.SelectFromList.show(
    views_on_sheet, button_name='Select Views', multiselect=True, name_attr='Name')

lineweights = range(1, 17, 1)
selected_lineweight = forms.SelectFromList.show(
    lineweights, button_name='Select Lineweight', multiselect=False, height=475)

if selected_lineweight and selected_views:
    override = DB.OverrideGraphicSettings().SetProjectionLineWeight(selected_lineweight)
    with revit.TransactionGroup('Set Viewport Lineweight'):
        for view in selected_views:
            with revit.Transaction('TEMP crop box to false'):
                view.CropBoxVisible = False
            collector = DB.FilteredElementCollector(doc, view.Id)
            shownElems = collector.ToElementIds()
            with revit.Transaction('TEMP crop box to true'):
                view.CropBoxVisible = True
            collector = DB.FilteredElementCollector(doc, view.Id)
            collector.Excluding(shownElems)
            cropBoxElement = collector.FirstElement()
            if cropBoxElement:
                with revit.Transaction('Set Viewport Lineweight'):
                    view.SetElementOverrides(cropBoxElement.Id, override)
else:
    script.exit()

Thanks for your reply. So it appears the issue is getting the cropbox Id. I am wondering why CropBox.Id does not work. Your method of comparing a collector list with and without the cropbox visible makes sense. I tried that and it worked for one of the views, but it did not work for the other three. I will have to dig in some more to see what is going on for the other three views on the elevation marker.

It appears that the CropBox.Id is 1 less than the View.Id. This worked for all of the views on the elevation marker. This might be a risky method, but seems to work as of now.

cb_id = view.Id.IntegerValue - 1
cb_id = DB.ElementId(cb_id)

Apply the override settings to the crop box

view.SetElementOverrides(cb_id, override_settings)