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
This commit is contained in:
Yorik van Havre
2019-07-08 22:07:14 -03:00
parent e21a6c0366
commit 46f253d5d0
3 changed files with 54 additions and 59 deletions

View File

@@ -241,8 +241,9 @@ def get3DView():
if FreeCAD.GuiUp:
import FreeCADGui
v = FreeCADGui.ActiveDocument.ActiveView
if str(type(v)) == "<type 'View3DInventorPy'>":
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]

View File

@@ -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()

View File

@@ -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"