add snap points, update on viewport changes
This commit is contained in:
parent
ea43216f16
commit
cd1deb3c8b
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user