From 01409c1407480ec5f8df5a51de4cb72ea79381e5 Mon Sep 17 00:00:00 2001 From: Roy-043 <70520633+Roy-043@users.noreply.github.com> Date: Thu, 13 Feb 2025 16:00:30 +0100 Subject: [PATCH] Draft: gui_utils.py fix error in select function (#19539) * Draft: gui_utils.py fix error in select function PR #18795 changed the select function to also handle tuples. This PR adds a check to ensure the referenced objects in the tuple still exist before calling `Gui.Selection.addSelection()`. --- src/Mod/Draft/draftutils/gui_utils.py | 14 +++++++++----- src/Mod/Draft/draftutils/utils.py | 8 ++++++++ 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/Mod/Draft/draftutils/gui_utils.py b/src/Mod/Draft/draftutils/gui_utils.py index 9753bc87d2..bf91bf30fe 100644 --- a/src/Mod/Draft/draftutils/gui_utils.py +++ b/src/Mod/Draft/draftutils/gui_utils.py @@ -696,12 +696,16 @@ def select(objs=None, gui=App.GuiUp): if not obj: continue if isinstance(obj, tuple): - Gui.Selection.addSelection(*obj) + # Example of tuple (Rectangle in Part): + # ("", "Part", "Rectangle.") + # See: + # utils._modifiers_process_selection() + # utils._modifiers_process_subselection() + parent = App.ActiveDocument.getObject(obj[1]) + if parent and parent.getSubObject(obj[2]): + Gui.Selection.addSelection(*obj) continue - try: - if not obj.isAttachedToDocument(): - continue - except: + if utils.is_deleted(obj): continue Gui.Selection.addSelection(obj) diff --git a/src/Mod/Draft/draftutils/utils.py b/src/Mod/Draft/draftutils/utils.py index 76f58081f0..d7ae12d157 100644 --- a/src/Mod/Draft/draftutils/utils.py +++ b/src/Mod/Draft/draftutils/utils.py @@ -389,6 +389,14 @@ def tolerance(): return 10 ** -precision() +def is_deleted(obj): + """Return `True` if obj is deleted.""" + try: + return not obj.isAttachedToDocument() + except: + return True + + def get_real_name(name): """Strip the trailing numbers from a string to get only the letters.