From 751b063237c298c2fdc773b64e92028942e01f13 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Mon, 3 Oct 2011 12:29:50 -0400 Subject: [PATCH] add XDim and YDim modes (no graphics yet) --- SketchWidget.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++ Window.py | 2 ++ 2 files changed, 53 insertions(+) diff --git a/SketchWidget.py b/SketchWidget.py index ac7c2e0..b1888c5 100644 --- a/SketchWidget.py +++ b/SketchWidget.py @@ -28,6 +28,8 @@ class SketchWidget(object): 'connect': ConnectMode(), 'horizontal': HorizontalMode(), 'vertical': VerticalMode(), + 'xdim': XDimMode(), + 'ydim': YDimMode(), } self.mode_name = 'select' self.mode = self.modes[self.mode_name] @@ -496,6 +498,7 @@ class SketchWidget(object): ':solve(): Unknown Sketch.solve() result\n') self.window.update_sketch_status(valid, text) self.update_snap_ptrefs() + self.queue_redraw() class Mode(object): def do_left_click(self, sw, x, y): @@ -681,3 +684,51 @@ class VerticalMode(ConnectMode): sw.sketch.constraints.append(c) self.first_ptref = None sw.invalidate() + +class DimMode(Mode): + def start_mode(self, sw): + self.ptrefs = [] + + def get_cursor(self): + return 'crosshair' + + def do_motion(self, sw, x, y): + if len(self.ptrefs) < 2: + sw.update_hover_snap_point(x, y) + + def do_left_click(self, sw, x, y): + if len(self.ptrefs) < 2: + if sw.hover_snap_ptref is not None: + self.ptrefs.append(sw.hover_snap_ptref) + sw.set_hover_snap_point(None) + else: + c = self.get_constraint() + sw.sketch.constraints.append(c) + sw.invalidate() + self.ptrefs = [] + + def do_right_click(self, sw, x, y): + if len(self.ptrefs) > 0: + self.ptrefs = [] + else: + sw.window.set_mode('') + +class XDimMode(DimMode): + def get_constraint(self): + if (self.ptrefs[0].shape.getPt(self.ptrefs[0].ptNum)[0] < + self.ptrefs[1].shape.getPt(self.ptrefs[1].ptNum)[0]): + p1, p2 = self.ptrefs + else: + p2, p1 = self.ptrefs + dist = (p2.shape.getPt(p2.ptNum)[0] - p1.shape.getPt(p1.ptNum)[0]) + return XDistance(p1.shape, p1.ptNum, p2.shape, p2.ptNum, dist) + +class YDimMode(DimMode): + def get_constraint(self): + if (self.ptrefs[0].shape.getPt(self.ptrefs[0].ptNum)[1] < + self.ptrefs[1].shape.getPt(self.ptrefs[1].ptNum)[1]): + p1, p2 = self.ptrefs + else: + p2, p1 = self.ptrefs + dist = (p2.shape.getPt(p2.ptNum)[1] - p1.shape.getPt(p1.ptNum)[1]) + return YDistance(p1.shape, p1.ptNum, p2.shape, p2.ptNum, dist) diff --git a/Window.py b/Window.py index 2dbdc44..49af010 100644 --- a/Window.py +++ b/Window.py @@ -36,6 +36,8 @@ class Window(object): addButton('connect', 'Connect') addButton('horizontal', 'Horiz') addButton('vertical', 'Vert') + addButton('xdim', 'XDim') + addButton('ydim', 'YDim') self.status_lbl = gtk.Label() self.status_lbl.set_alignment(0.0, 0.5)