Skip to content

Commit 48562f6

Browse files
authored
Merge pull request #2900 from thumDer/id-fix
fix invalid element id value handling
2 parents ec30537 + cf4bcf2 commit 48562f6

File tree

1 file changed

+19
-23
lines changed
  • extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles3.stack/ViewRange.pushbutton

1 file changed

+19
-23
lines changed

extensions/pyRevitTools.extension/pyRevit.tab/Toggles.panel/toggles3.stack/ViewRange.pushbutton/script.py

Lines changed: 19 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,9 @@
2121
(DB.PlanViewPlane.ViewDepthPlane, ([255, 127, 0], "View Depth Plane", "viewdepth")),
2222
])
2323

24+
get_elementid_value = get_elementid_value_func()
25+
INVALID_ID_VALUE = get_elementid_value(DB.ElementId.InvalidElementId)
26+
2427

2528
class SimpleEventHandler(UI.IExternalEventHandler):
2629
def __init__(self, do_this):
@@ -315,8 +318,7 @@ class LevelItem(object):
315318
def __init__(self, name, element_id, elevation=None, is_special=False):
316319
self.Name = name
317320
self.Id = element_id
318-
get_elementid_value = get_elementid_value_func()
319-
self.IdValue = get_elementid_value(element_id) if element_id else -1
321+
self.IdValue = get_elementid_value(element_id) if element_id else INVALID_ID_VALUE
320322
self.Elevation = elevation
321323
self.IsSpecial = is_special
322324

@@ -353,10 +355,9 @@ def _set_current_level_selections(self, view_range):
353355

354356
if plane == DB.PlanViewPlane.TopClipPlane:
355357
if level_id and level_id != DB.ElementId.InvalidElementId:
356-
get_elementid_value = get_elementid_value_func()
357358
stored_selections["top"] = get_elementid_value(level_id)
358359
else:
359-
stored_selections["top"] = -1
360+
stored_selections["top"] = INVALID_ID_VALUE
360361

361362
elif plane == DB.PlanViewPlane.CutPlane:
362363
# For Cut Plane, show the level name as read-only text
@@ -370,27 +371,25 @@ def _set_current_level_selections(self, view_range):
370371

371372
elif plane == DB.PlanViewPlane.BottomClipPlane:
372373
if level_id and level_id != DB.ElementId.InvalidElementId:
373-
get_elementid_value = get_elementid_value_func()
374374
stored_selections["bottom"] = get_elementid_value(level_id)
375375
else:
376-
stored_selections["bottom"] = -1
376+
stored_selections["bottom"] = INVALID_ID_VALUE
377377

378378
elif plane == DB.PlanViewPlane.ViewDepthPlane:
379379
if level_id and level_id != DB.ElementId.InvalidElementId:
380-
get_elementid_value = get_elementid_value_func()
381380
stored_selections["viewdepth"] = get_elementid_value(level_id)
382381
else:
383-
stored_selections["viewdepth"] = -1
382+
stored_selections["viewdepth"] = INVALID_ID_VALUE
384383

385384
# Force update the view model properties (reset first to force binding refresh)
386385
self.view_model.topplane_level_id = None
387386
self.view_model.bottomplane_level_id = None
388387
self.view_model.viewdepth_level_id = None
389388

390389
# Then set the actual values
391-
self.view_model.topplane_level_id = stored_selections.get("top", -1)
392-
self.view_model.bottomplane_level_id = stored_selections.get("bottom", -1)
393-
self.view_model.viewdepth_level_id = stored_selections.get("viewdepth", -1)
390+
self.view_model.topplane_level_id = stored_selections.get("top", INVALID_ID_VALUE)
391+
self.view_model.bottomplane_level_id = stored_selections.get("bottom", INVALID_ID_VALUE)
392+
self.view_model.viewdepth_level_id = stored_selections.get("viewdepth", INVALID_ID_VALUE)
394393

395394
except Exception as e:
396395
self.view_model.warning_message = (
@@ -586,9 +585,9 @@ def __init__(self):
586585

587586
# Initialize level-related properties - use INTEGER values for WPF binding
588587
self._available_levels = []
589-
self._topplane_level_id = -1
590-
self._bottomplane_level_id = -1
591-
self._viewdepth_level_id = -1
588+
self._topplane_level_id = INVALID_ID_VALUE
589+
self._bottomplane_level_id = INVALID_ID_VALUE
590+
self._viewdepth_level_id = INVALID_ID_VALUE
592591
self._cutplane_level_name = "Unknown"
593592

594593
self.unit_label = ""
@@ -764,15 +763,15 @@ def apply_changes_click(self, sender, e):
764763
viewdepth_id_int = self.DataContext.viewdepth_level_id
765764

766765
# Top Plane
767-
if top_id_int == -1:
766+
if top_id_int == INVALID_ID_VALUE:
768767
new_levels[DB.PlanViewPlane.TopClipPlane] = (
769768
DB.ElementId.InvalidElementId
770769
)
771770
elif top_id_int is not None:
772771
new_levels[DB.PlanViewPlane.TopClipPlane] = DB.ElementId(top_id_int)
773772

774773
# Bottom Plane
775-
if bottom_id_int == -1:
774+
if bottom_id_int == INVALID_ID_VALUE:
776775
new_levels[DB.PlanViewPlane.BottomClipPlane] = (
777776
DB.ElementId.InvalidElementId
778777
)
@@ -782,7 +781,7 @@ def apply_changes_click(self, sender, e):
782781
)
783782

784783
# View Depth
785-
if viewdepth_id_int == -1:
784+
if viewdepth_id_int == INVALID_ID_VALUE:
786785
new_levels[DB.PlanViewPlane.ViewDepthPlane] = (
787786
DB.ElementId.InvalidElementId
788787
)
@@ -815,12 +814,11 @@ def reset_values_click(self, sender, e):
815814
original_level_id
816815
and original_level_id != DB.ElementId.InvalidElementId
817816
):
818-
get_elementid_value = get_elementid_value_func()
819817
self.DataContext.topplane_level_id = (
820818
get_elementid_value(original_level_id)
821819
)
822820
else:
823-
self.DataContext.topplane_level_id = -1
821+
self.DataContext.topplane_level_id = INVALID_ID_VALUE
824822

825823
elif plane == DB.PlanViewPlane.CutPlane:
826824
# For Cut Plane, show the original level name as read-only text
@@ -849,24 +847,22 @@ def reset_values_click(self, sender, e):
849847
original_level_id
850848
and original_level_id != DB.ElementId.InvalidElementId
851849
):
852-
get_elementid_value = get_elementid_value_func()
853850
self.DataContext.bottomplane_level_id = (
854851
get_elementid_value(original_level_id)
855852
)
856853
else:
857-
self.DataContext.bottomplane_level_id = -1
854+
self.DataContext.bottomplane_level_id = INVALID_ID_VALUE
858855

859856
elif plane == DB.PlanViewPlane.ViewDepthPlane:
860857
if (
861858
original_level_id
862859
and original_level_id != DB.ElementId.InvalidElementId
863860
):
864-
get_elementid_value = get_elementid_value_func()
865861
self.DataContext.viewdepth_level_id = (
866862
get_elementid_value(original_level_id)
867863
)
868864
else:
869-
self.DataContext.viewdepth_level_id = -1
865+
self.DataContext.viewdepth_level_id = INVALID_ID_VALUE
870866
else:
871867
# Fallback: Reset level selections to current view range levels if no original data
872868
if hasattr(context, "source_view") and context.source_view:

0 commit comments

Comments
 (0)