From e06fb52bd0d60386610ce1ea89ce91cbd482d56c Mon Sep 17 00:00:00 2001 From: carlopav Date: Sat, 24 Aug 2019 13:47:48 +0200 Subject: [PATCH] [Draft] Edit: separate selectstate functions Separated functions that save, restore and set the select state of edited object from main functions. --- src/Mod/Draft/DraftEdit.py | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/src/Mod/Draft/DraftEdit.py b/src/Mod/Draft/DraftEdit.py index 294cb6d67d..d2f3691057 100644 --- a/src/Mod/Draft/DraftEdit.py +++ b/src/Mod/Draft/DraftEdit.py @@ -102,12 +102,13 @@ class Edit(): "this method defines editpoints and set the editTrackers" self.unregister_selection_callback() self.obj = self.getObjFromSelection() - if not self.obj: return self.finish() + if not self.obj: return self.finish() - # store selectable state of the object TODO: Separate function - if hasattr(self.obj.ViewObject,"Selectable"): - self.selectstate = self.obj.ViewObject.Selectable - self.obj.ViewObject.Selectable = False + # Save selectstate and turn selectable false. + # Object can remain selectable commenting following lines, + # but snap only process the first edge of self.obj TODO: fix it + self.saveSelectState(self.obj) + self.setSelectState(self.obj, False) # start object editing FreeCADGui.Selection.clearSelection() @@ -145,9 +146,7 @@ class Edit(): if not self.obj.Closed: self.obj.Closed = True if self.ui: self.removeTrackers() - if self.obj: - if hasattr(self.obj.ViewObject,"Selectable") and (self.selectstate != None): - self.obj.ViewObject.Selectable = self.selectstate + self.restoreSelectState(self.obj) if Draft.getType(self.obj) == "Structure": if self.originalDisplayMode != None: self.obj.ViewObject.DisplayMode = self.originalDisplayMode @@ -301,10 +300,9 @@ class Edit(): "terminate editing and start object updating process" self.finalizeGhost() self.trackers[self.editing].on() - #if hasattr(self.obj.ViewObject,"Selectable"): - # self.obj.ViewObject.Selectable = True FreeCADGui.Snapper.setSelectMode(True) self.numericInput(self.trackers[self.editing].get()) + self.showTrackers() DraftTools.redraw3DView() #--------------------------------------------------------------------------- @@ -340,6 +338,19 @@ class Edit(): self.ui.editUi(self.ui.lastMode) self.node = [] + def setSelectState(self, obj, selState = False): + if hasattr(obj.ViewObject,"Selectable"): + obj.ViewObject.Selectable = selState + + def saveSelectState(self, obj): + if hasattr(obj.ViewObject,"Selectable"): + self.selectstate = obj.ViewObject.Selectable + + def restoreSelectState(self,obj): + if obj: + if hasattr(obj.ViewObject,"Selectable") and (self.selectstate != None): + obj.ViewObject.Selectable = self.selectstate + def setPlacement(self,obj): "set self.pl and self.invpl to self.obj placement and inverse placement" if "Placement" in obj.PropertiesList: @@ -521,6 +532,7 @@ class Edit(): "called by action, add point to obj and reset trackers" if not (Draft.getType(self.obj) in ["Wire","BSpline","BezCurve"]): return pos = event.getPosition() + self.setSelectState(self.obj, True) selobjs = FreeCADGui.ActiveDocument.ActiveView.getObjectsInfo((pos[0],pos[1])) if not selobjs: return for info in selobjs: @@ -539,6 +551,7 @@ class Edit(): self.editpoints = [] self.setEditPoints(self.obj) self.resetTrackers() + self.setSelectState(self.obj, False) return