def step_back(self): dbgfname() if abs(self.step_index) < len(self.steps): self.step_index -= 1 s = self.steps[self.step_index] s.unserialize() Singleton.state.set(s.state)
def step_forward(self): dbgfname() if self.step_index < -1: self.step_index += 1 s = self.steps[self.step_index] s.unserialize() Singleton.state.set(s.state)
def vscroll(self, args): dbgfname() debug(" vscroll: " + str(args)) debug(" " + str(args[0][0].get_value())) offset = Singleton.state.get_base_offset() Singleton.state.set_base_offset((offset[0], -args[0][0].get_value())) self.mw.widget.update()
def to_line_sequence(self, precision): dbgfname() sa = 0.0 ea = math.pi * 2 da = (ea - sa) n_steps = int(da / precision) s_pt = (self.center[0] + math.cos(sa) * self.radius, self.center[1] + math.sin(sa) * self.radius) debug(" splitting arc, start angle: " + str(sa) + " start_pt: " + str(s_pt)) converted_elements = [] for i in range(1, n_steps): a = sa + i * 0.1 e_pt = (self.center[0] + math.cos(a) * self.radius, self.center[1] + math.sin(a) * self.radius) ne = ELine(s_pt, e_pt, self.lt, self.color) debug(" angle: " + str(a) + " line: " + str(s_pt) + " " + str(e_pt)) s_pt = e_pt converted_elements.append(ne) e_pt = self.end ne = ELine(s_pt, e_pt, self.lt, self.color) converted_elements.append(ne) return converted_elements
def sketcher_start(self, args): dbgfname() debug(" sketcher start") self.reset() Singleton.state = State() self.pointer_position = (0, 0) project.push_state(Singleton.state, "sketcher_start") self.mw.widget.update()
def push_state(self, state, description): dbgfname() if (self.step_index != -1): self.steps = self.steps[:self.step_index + 1] self.step_index = -1 self.steps.append(Step(state)) self.steps[-1].dsc = description depth = 50 if (len(self.steps) > depth): self.steps = self.steps[-depth:] debug(" steps length:" + str(len(self.steps)))
def screen_left_press(self, args): dbgfname() cx, cy = self.screen_to_cursor_with_snap(args[0][0], args[0][1]) px, py = self.pointer_position if (self.current_mode == EMode.eline_2point): if (self.current_element == None): self.current_element = ELine(start=(px, py), end=(px, py)) else: self.current_element.end = (px, py) Singleton.state.elements.append(self.current_element) self.current_element = ELine(start=(px, py), end=(px, py)) self.mw.widget.update()
def scroll_down(self, args): dbgfname() debug(" scroll down") if self.shift_pressed: offset = Singleton.state.get_base_offset() Singleton.mw.widget_vscroll.set_value( -(offset[1] - 10 * Singleton.state.scale[0])) elif self.ctrl_pressed: offset = Singleton.state.get_base_offset() Singleton.mw.widget_hscroll.set_value( -(offset[0] - 10 * Singleton.state.scale[0])) else: self.scale_generic("down") self.mw.widget.update()
def load(self, project_path): dbgfname() from sketcher.events import ep, ee #global state self.path = project_path debug(" loading project from " + str(project_path)) f = open(project_path) data = f.read() f.close() parsed_json = json.loads(data) self.steps = [] if parsed_json["format_version"] == 2: step = Step(data=parsed_json["step"]) self.steps.append(step) Singleton.state.set(self.steps[-1].state) ep.push_event(ee.update_tool_operations_list, (None)) ep.push_event(ee.update_paths_list, (None)) ep.mw.widget.update() else: debug(" Can't load, unsupported format")
def escape(self, arg): dbgfname() if self.current_element != None: self.current_element = None self.current_mode = None self.mw.widget.update()
def line_2point_click(self, args): dbgfname() self.current_mode = EMode.eline_2point
def screen_left_release(self, args): dbgfname() cx, cy = self.screen_to_cursor_with_snap(args[0][0], args[0][1])
def main_start(self, args): dbgfname() offset = Singleton.state.get_offset() cx = (offset[0]) cy = -(offset[1]) self.cursor_position = (cx, cy)