def picker_a0(self, a, evt): from ifigure.widgets.canvas.custom_picker import linehit_test, abs_d self._picker_a_mode = 0 hit, extra, type, loc = super(FigCircle, self).picker_a0(a, evt) if not self._selected: flag, extra = self._artists[0].contains(evt) if not flag: return False, {}, None, 0 if type == 'area': flag, extra = self._artists[0].contains(evt) if not flag: return False, {}, None, 0 self._selected = hit return hit, extra, type, loc self._drag_hit = -1 hit2, hit_seg_i = cbook.BezierHitTest(self.get_path(), evt.x, evt.y) if self._drag_mode == 2: i = 0 for item in self.get_path(): if ((evt.x - item[1][0])**2 + (evt.y - item[1][1])**2) < 25: self._drag_hit = i self._drag_opath = item break i = i+1 if self._drag_hit != -1: return True, {}, 'area', 3 self._hit_seg_i = hit_seg_i if self._drag_mode != 0: if type == 'point': return hit, extra, type, loc # x = np.transpose(a.get_verts())[0] # y = np.transpose(a.get_verts())[1] # ans, idx = cpicker.CheckLineHit(x, y, # evt.x, evt.y) if hit2: type = 'area' if self._drag_mode == 1: self._drag_mode = 2 self._picker_a_mode = 1 self._hit_seg_i = hit_seg_i else: if evt.button == 1: self._drag_mode = 1 return True, {}, 'area', 3 self._drag_mode = 0 return False, {}, type, loc
def onAddNode(self, evt): fig_page = self.get_figpage() xy = self._artists[0].get_verts() path = self.get_path() hit, idx = cbook.BezierHitTest(path, self._st_p[0], self._st_p[1]) if hit: path = cbook.BezierInsert(path, idx, self._st_p[0], self._st_p[1]) 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()