def canvas_menu(self): if self._drag_mode == 2: p = self.get_path() if self._drag_hit == -1: m = [("Add node", self.onAddNode, None), ] if self._hit_seg_i != -1: segpath = cbook.BezierSplit(self.get_path()) if len(segpath[self._hit_seg_i]) == 2: m = m + \ [("Convert to curve", self.onConvCurve, None), ] else: m = m + [("Convert to Line", self.onConvLine, None), ] return m else: if cbook.BezierNodeType(p, self._drag_hit) == 1: return [("Remove Node", self.onRmNode, None), ("Convert to symmetric node", self.onMakeSym, None)] if cbook.BezierNodeType(p, self._drag_hit) == 2: if p[self._drag_hit][2] == 1: # smooth node return [("Remove node", self.onRmNode, None), ("Convert to coner node", self.onMakeCorner, None), ("Convert to asymmetric node", self.onMakeAsym, None)] elif p[self._drag_hit][2] == 2: # coner node return [("Remove Node", self.onRmNode, None), ("Convert to symmetric node", self.onMakeSym, None)] elif p[self._drag_hit][2] == 3: # asymmetricr node return [("Remove Node", self.onRmNode, None), ("Convert to symmetric node", self.onMakeSym, None)] return []
def onConvLine(self, evt): segpath = cbook.BezierSplit(self.get_path()) p = segpath[self._hit_seg_i] segpath[self._hit_seg_i] = [p[0], (mpath.Path.LINETO, p[-1][1], 0)] path = cbook.BezierJoin(segpath) window = evt.GetEventObject().GetTopLevelParent() hist = GlobalHistory().get_history(window) # hist = self.get_root_parent().app.history hist.start_record() hist.add_history( UndoRedoFigobjMethod(self._artists[0], 'pathdata', path)) hist.stop_record()
def onConvCurve(self, evt): segpath = cbook.BezierSplit(self.get_path()) p = segpath[self._hit_seg_i] x0, y0 = p[0][1] x1, y1 = p[-1][1] segpath[self._hit_seg_i] = [p[0], (mpath.Path.CURVE4, (x0*0.7+x1*0.3, y0*0.7+y1*0.3), p[0][2]), (mpath.Path.CURVE4, (x0*0.3+x1*0.7, y0*0.3+y1*0.7), 2), (mpath.Path.CURVE4, p[-1][1], 2)] path = cbook.BezierJoin(segpath) window = evt.GetEventObject().GetTopLevelParent() hist = GlobalHistory().get_history(window) hist.start_record() hist.add_history(UndoRedoFigobjMethod(self._artists[0], 'pathdata', path)) hist.stop_record()