add snap points, update on viewport changes

This commit is contained in:
Josh Holtrop 2011-07-27 22:14:48 -04:00
parent ea43216f16
commit cd1deb3c8b

View File

@ -19,6 +19,7 @@ class SketchWidget:
self.drawingShape = None self.drawingShape = None
self.drawingConstraints = [] self.drawingConstraints = []
self.mode = '' self.mode = ''
self.snap_points = {} # keyed by (shape, ptNum)
# Configuration parameters # Configuration parameters
self.line_width = 1.5 self.line_width = 1.5
@ -31,6 +32,7 @@ class SketchWidget:
self.constraint_color = (0.8, 1.0, 0.0, 1.0) self.constraint_color = (0.8, 1.0, 0.0, 1.0)
self.snap_angle = 10 self.snap_angle = 10
self.hv_snap_dist = 10 self.hv_snap_dist = 10
self.snap_dist = 4
try: try:
# try double-buffered # try double-buffered
@ -99,6 +101,8 @@ class SketchWidget:
gldrawable.gl_end() gldrawable.gl_end()
self.update_snap_points()
return True return True
def draw(self, glarea, event): def draw(self, glarea, event):
@ -234,6 +238,7 @@ class SketchWidget:
def button_release_event(self, widget, event, data = None): def button_release_event(self, widget, event, data = None):
if event.button == 2: if event.button == 2:
self.panning = False self.panning = False
self.update_snap_points()
def motion_event(self, widget, event, data = None): def motion_event(self, widget, event, data = None):
if self.panning: if self.panning:
@ -258,6 +263,7 @@ class SketchWidget:
self.view_center = (zoom_pt[0] - off_x / self.zoom_factor, self.view_center = (zoom_pt[0] - off_x / self.zoom_factor,
zoom_pt[1] - off_y / self.zoom_factor) zoom_pt[1] - off_y / self.zoom_factor)
self.view_width /= self.zoom_factor self.view_width /= self.zoom_factor
self.update_snap_points()
self.queue_redraw() self.queue_redraw()
elif event.direction == gtk.gdk.SCROLL_DOWN: elif event.direction == gtk.gdk.SCROLL_DOWN:
zoom_pt = self.screenPtToPt((event.x, zoom_pt = self.screenPtToPt((event.x,
@ -267,6 +273,7 @@ class SketchWidget:
self.view_center = (zoom_pt[0] - off_x * self.zoom_factor, self.view_center = (zoom_pt[0] - off_x * self.zoom_factor,
zoom_pt[1] - off_y * self.zoom_factor) zoom_pt[1] - off_y * self.zoom_factor)
self.view_width *= self.zoom_factor self.view_width *= self.zoom_factor
self.update_snap_points()
self.queue_redraw() self.queue_redraw()
def queue_redraw(self): def queue_redraw(self):
@ -424,3 +431,13 @@ class SketchWidget:
x = pt2[0] - pt1[0] x = pt2[0] - pt1[0]
y = pt2[1] - pt1[1] y = pt2[1] - pt1[1]
return math.sqrt(x * x + y * y) return math.sqrt(x * x + y * y)
def update_snap_points(self):
self.snap_points = {}
for s in self.sketch.shapes:
self.add_snap_points(s)
def add_snap_points(self, shape):
for i in range(shape.nPts()):
pt = self.ptToScreenPt(shape.getPt(i))
self.snap_points[(shape, i)] = pt