Draft: Added exttension X perpendicular snap location

This commit is contained in:
Yorik van Havre 2012-06-09 15:57:09 -03:00
parent 152ed0f77c
commit 1de3bb81c7

View File

@ -148,26 +148,7 @@ class Snapper:
return None
# setup trackers if needed
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]
else:
if Draft.getParam("grid"):
self.grid = DraftTrackers.gridTracker()
else:
self.grid = None
self.tracker = DraftTrackers.snapTracker()
self.extLine = DraftTrackers.lineTracker(dotted=True)
self.radiusTracker = DraftTrackers.radiusTracker()
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.setTrackers()
# getting current snap Radius
self.radius = self.getScreenDist(Draft.getParam("snapRange"),screenpos)
@ -175,10 +156,6 @@ class Snapper:
self.radiusTracker.update(self.radius)
self.radiusTracker.off()
# set the grid
if self.grid and (not self.forceGridOff):
self.grid.set()
# activate snap
oldActive = False
if Draft.getParam("alwaysSnap"):
@ -362,6 +339,19 @@ class Snapper:
self.extLine.on()
self.setCursor(tsnap[1])
return tsnap[2],eline
else:
tsnap = self.snapToExtPerpendicular(last)
if tsnap:
if (tsnap[0].sub(point)).Length < self.radius:
if self.tracker:
self.tracker.setCoords(tsnap[2])
self.tracker.setMarker(self.mk[tsnap[1]])
self.tracker.on()
if self.extLine:
self.extLine.p2(tsnap[2])
self.extLine.on()
self.setCursor(tsnap[1])
return tsnap[2],eline
for o in [self.lastObj[1],self.lastObj[0]]:
if o:
@ -541,6 +531,14 @@ class Snapper:
return None
return None
def snapToExtPerpendicular(self,last):
"returns a perpendicular X extension snap location"
if self.isEnabled("extension") and self.isEnabled("perpendicular"):
if last and self.extLine:
tmpEdge = Part.Line(self.extLine.p1(),self.extLine.p2()).toShape()
np = self.getPerpendicular(tmpEdge,last)
return [np,'perpendicular',np]
def snapToElines(self,e1,e2):
"returns a snap location at the infinite intersection of the given edges"
snaps = []
@ -920,16 +918,31 @@ class Snapper:
mw.addToolBar(self.toolbar)
self.toolbar.show()
if FreeCADGui.ActiveDocument:
if not self.forceGridOff:
if not self.grid:
self.grid = DraftTrackers.gridTracker()
self.grid.set()
self.setTrackers()
def setGrid(self):
"sets the grid, if visible"
if self.grid and (not self.forceGridOff):
if self.grid.Visible:
self.grid.set()
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]
else:
if Draft.getParam("grid"):
self.grid = DraftTrackers.gridTracker()
else:
self.grid = None
self.tracker = DraftTrackers.snapTracker()
self.extLine = DraftTrackers.lineTracker(dotted=True)
self.radiusTracker = DraftTrackers.radiusTracker()
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)
if not self.forceGridOff:
self.grid.set()
if not hasattr(FreeCADGui,"Snapper"):
FreeCADGui.Snapper = Snapper()