From 46f253d5d08f937c3102dd1cf5a7b2b1ead5cf69 Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Mon, 8 Jul 2019 22:07:14 -0300 Subject: [PATCH] Draft: General grid fixes - Killed 'double-grid' bug - Consistent one grid per view, be it new doc or new view - Grid recreated when needed on each snap use - Misc optimizations --- src/Mod/Draft/Draft.py | 3 +- src/Mod/Draft/DraftSnap.py | 101 +++++++++++++++++------------------- src/Mod/Draft/DraftTools.py | 9 ++-- 3 files changed, 54 insertions(+), 59 deletions(-) diff --git a/src/Mod/Draft/Draft.py b/src/Mod/Draft/Draft.py index 653fd93621..50e7dae6cf 100644 --- a/src/Mod/Draft/Draft.py +++ b/src/Mod/Draft/Draft.py @@ -241,8 +241,9 @@ def get3DView(): if FreeCAD.GuiUp: import FreeCADGui v = FreeCADGui.ActiveDocument.ActiveView - if str(type(v)) == "": + if "View3DInventor" in str(type(v)): return v + print("Debug: Draft: Warning, not working in active view") v = FreeCADGui.ActiveDocument.mdiViewsOfType("Gui::View3DInventor") if v: return v[0] diff --git a/src/Mod/Draft/DraftSnap.py b/src/Mod/Draft/DraftSnap.py index fb794a9556..42f9cf54aa 100644 --- a/src/Mod/Draft/DraftSnap.py +++ b/src/Mod/Draft/DraftSnap.py @@ -60,6 +60,7 @@ class Snapper: """ def __init__(self): + self.activeview = None self.lastObj = [None,None] self.maxEdges = 0 self.radius = 0 @@ -193,6 +194,10 @@ class Snapper: # setup trackers if needed self.setTrackers() + + # show the grid if it's off (new view, for ex) + if self.grid and Draft.getParam("grid",True): + self.grid.on() # getting current snap Radius self.radius = self.getScreenDist(Draft.getParam("snapRange", 8),screenpos) @@ -1391,69 +1396,59 @@ class Snapper: self.toolbar.hide() self.toolbar.toggleViewAction().setVisible(True) - def setGrid(self,init=False): + def setGrid(self): "sets the grid, if visible" - if init: - if not self.grid: - self.grid = DraftTrackers.gridTracker() + self.setTrackers() if self.grid and (not self.forceGridOff): - if init or self.grid.Visible: + if self.grid.Visible: self.grid.set() - self.setTrackers() - - def respawnGrid(self): - "recreates a grid in the current view if needed" - if self.grid: - if Draft.getParam("grid",True): - if FreeCADGui.ActiveDocument: - s = FreeCADGui.ActiveDocument.ActiveView.getSceneGraph() - if not s.getByName("gridTracker"): - self.grid = DraftTrackers.gridTracker() def setTrackers(self): v = Draft.get3DView() - if v in self.trackers[0]: - i = self.trackers[0].index(v) - self.grid = self.trackers[1][i] - self.tracker = self.trackers[2][i] - self.extLine = self.trackers[3][i] - self.radiusTracker = self.trackers[4][i] - self.dim1 = self.trackers[5][i] - self.dim2 = self.trackers[6][i] - self.trackLine = self.trackers[7][i] - self.extLine2 = self.trackers[8][i] - self.holdTracker = self.trackers[9][i] - else: - if not self.grid: + if v != self.activeview: + if v in self.trackers[0]: + i = self.trackers[0].index(v) + self.grid = self.trackers[1][i] + self.tracker = self.trackers[2][i] + self.extLine = self.trackers[3][i] + self.radiusTracker = self.trackers[4][i] + self.dim1 = self.trackers[5][i] + self.dim2 = self.trackers[6][i] + self.trackLine = self.trackers[7][i] + self.extLine2 = self.trackers[8][i] + self.holdTracker = self.trackers[9][i] + else: if Draft.getParam("grid",True): self.grid = DraftTrackers.gridTracker() + self.grid.on() else: self.grid = None - self.tracker = DraftTrackers.snapTracker() - self.trackLine = DraftTrackers.lineTracker() - if self.snapStyle: - c = FreeCADGui.draftToolBar.getDefaultColor("snap") - self.extLine = DraftTrackers.lineTracker(scolor=c) - self.extLine2 = DraftTrackers.lineTracker(scolor = c) - else: - self.extLine = DraftTrackers.lineTracker(dotted=True) - self.extLine2 = DraftTrackers.lineTracker(dotted=True) - self.radiusTracker = DraftTrackers.radiusTracker() - self.dim1 = DraftTrackers.archDimTracker(mode=2) - self.dim2 = DraftTrackers.archDimTracker(mode=3) - self.holdTracker = DraftTrackers.snapTracker() - self.holdTracker.setMarker("cross") - self.holdTracker.clear() - self.trackers[0].append(v) - self.trackers[1].append(self.grid) - self.trackers[2].append(self.tracker) - self.trackers[3].append(self.extLine) - self.trackers[4].append(self.radiusTracker) - self.trackers[5].append(self.dim1) - self.trackers[6].append(self.dim2) - self.trackers[7].append(self.trackLine) - self.trackers[8].append(self.extLine2) - self.trackers[9].append(self.holdTracker) + self.tracker = DraftTrackers.snapTracker() + self.trackLine = DraftTrackers.lineTracker() + if self.snapStyle: + c = FreeCADGui.draftToolBar.getDefaultColor("snap") + self.extLine = DraftTrackers.lineTracker(scolor=c) + self.extLine2 = DraftTrackers.lineTracker(scolor = c) + else: + self.extLine = DraftTrackers.lineTracker(dotted=True) + self.extLine2 = DraftTrackers.lineTracker(dotted=True) + self.radiusTracker = DraftTrackers.radiusTracker() + self.dim1 = DraftTrackers.archDimTracker(mode=2) + self.dim2 = DraftTrackers.archDimTracker(mode=3) + self.holdTracker = DraftTrackers.snapTracker() + self.holdTracker.setMarker("cross") + self.holdTracker.clear() + self.trackers[0].append(v) + self.trackers[1].append(self.grid) + self.trackers[2].append(self.tracker) + self.trackers[3].append(self.extLine) + self.trackers[4].append(self.radiusTracker) + self.trackers[5].append(self.dim1) + self.trackers[6].append(self.dim2) + self.trackers[7].append(self.trackLine) + self.trackers[8].append(self.extLine2) + self.trackers[9].append(self.holdTracker) + self.activeview = v if self.grid and (not self.forceGridOff): self.grid.set() diff --git a/src/Mod/Draft/DraftTools.py b/src/Mod/Draft/DraftTools.py index f1d208f477..aaaf579317 100644 --- a/src/Mod/Draft/DraftTools.py +++ b/src/Mod/Draft/DraftTools.py @@ -259,6 +259,8 @@ class DraftTool: self.planetrack = None if Draft.getParam("showPlaneTracker",False): self.planetrack = PlaneTracker() + if hasattr(FreeCADGui,"Snapper"): + FreeCADGui.Snapper.setTrackers() def finish(self,close=False): self.node = [] @@ -522,7 +524,7 @@ class SelectPlane(DraftTool): plv = 'd('+str(arg.x)+','+str(arg.y)+','+str(arg.z)+')' self.ui.wplabel.setText(plv+suffix) self.ui.wplabel.setToolTip(translate("draft", "Current working plane:",utf8_decode=True)+self.ui.wplabel.text()) - FreeCADGui.doCommandGui("FreeCADGui.Snapper.setGrid(init=True)") + FreeCADGui.doCommandGui("FreeCADGui.Snapper.setGrid()") #--------------------------------------------------------------------------- # Geometry constructors @@ -5038,17 +5040,14 @@ class ToggleGrid(): def Activated(self): if hasattr(FreeCADGui,"Snapper"): + FreeCADGui.Snapper.setTrackers() if FreeCADGui.Snapper.grid: - FreeCADGui.Snapper.respawnGrid() if FreeCADGui.Snapper.grid.Visible: FreeCADGui.Snapper.grid.off() FreeCADGui.Snapper.forceGridOff=True else: - FreeCADGui.Snapper.grid.reset() FreeCADGui.Snapper.grid.on() FreeCADGui.Snapper.forceGridOff=False - else: - FreeCADGui.Snapper.show() class Heal(): "The Draft Heal command definition"