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.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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user