diff --git a/SketchWidget.py b/SketchWidget.py index 8807aa4..17e94f5 100644 --- a/SketchWidget.py +++ b/SketchWidget.py @@ -19,6 +19,7 @@ class SketchWidget: self.drawingShape = None self.drawingConstraints = [] self.mode = '' + self.snap_points = {} # keyed by (shape, ptNum) # Configuration parameters self.line_width = 1.5 @@ -31,6 +32,7 @@ class SketchWidget: self.constraint_color = (0.8, 1.0, 0.0, 1.0) self.snap_angle = 10 self.hv_snap_dist = 10 + self.snap_dist = 4 try: # try double-buffered @@ -99,6 +101,8 @@ class SketchWidget: gldrawable.gl_end() + self.update_snap_points() + return True def draw(self, glarea, event): @@ -234,6 +238,7 @@ class SketchWidget: def button_release_event(self, widget, event, data = None): if event.button == 2: self.panning = False + self.update_snap_points() def motion_event(self, widget, event, data = None): if self.panning: @@ -258,6 +263,7 @@ class SketchWidget: self.view_center = (zoom_pt[0] - off_x / self.zoom_factor, zoom_pt[1] - off_y / self.zoom_factor) self.view_width /= self.zoom_factor + self.update_snap_points() self.queue_redraw() elif event.direction == gtk.gdk.SCROLL_DOWN: zoom_pt = self.screenPtToPt((event.x, @@ -267,6 +273,7 @@ class SketchWidget: self.view_center = (zoom_pt[0] - off_x * self.zoom_factor, zoom_pt[1] - off_y * self.zoom_factor) self.view_width *= self.zoom_factor + self.update_snap_points() self.queue_redraw() def queue_redraw(self): @@ -424,3 +431,13 @@ class SketchWidget: x = pt2[0] - pt1[0] y = pt2[1] - pt1[1] 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