Esempio n. 1
0
 def set_new_node(self, win_point):
     path = self.is_path_clicked(win_point)
     if not path is None:
         hit_surface = self.canvas.hit_surface
         segments = path.get_segments()
         segment = None
         for item in segments:
             start = item[0].point
             end = item[1].point
             if hit_surface.is_point_on_segment(win_point, start, end):
                 segment = item
                 break
         if segment and len(segment[1].point) > 2:
             before = segment[0]
             after = segment[1]
             t = hit_surface.get_t_parameter(win_point, start, end)
             new_p, new_end_p = libgeom.split_bezier_curve(start, end, t)
             self.new_node = NewPoint(self.canvas, new_p, new_end_p, before,
                                      after)
             self.set_selected_nodes()
         elif segment and len(segment[1].point) == 2:
             before = segment[0]
             after = segment[1]
             point = self.canvas.win_to_doc(win_point)
             new_p = libgeom.split_bezier_line(start, end, point)
             new_end_p = [] + after.point
             self.new_node = NewPoint(self.canvas, new_p, new_end_p, before,
                                      after)
             self.set_selected_nodes()
Esempio n. 2
0
	def set_new_node(self, win_point):
		path = self.is_path_clicked(win_point)
		if not path is None:
			hit_surface = self.canvas.hit_surface
			segments = path.get_segments()
			segment = None
			for item in segments:
				start = item[0].point
				end = item[1].point
				if hit_surface.is_point_on_segment(win_point, start, end):
					segment = item
					break
			if segment and len(segment[1].point) > 2:
				before = segment[0]
				after = segment[1]
				t = hit_surface.get_t_parameter(win_point, start, end)
				new_p, new_end_p = libgeom.split_bezier_curve(start, end, t)
				self.new_node = NewPoint(self.canvas, new_p, new_end_p,
										before, after)
				self.set_selected_nodes()
			elif segment and len(segment[1].point) == 2:
				before = segment[0]
				after = segment[1]
				point = self.canvas.win_to_doc(win_point)
				new_p = libgeom.split_bezier_line(start, end, point)
				new_end_p = [] + after.point
				self.new_node = NewPoint(self.canvas, new_p, new_end_p,
										before, after)
				self.set_selected_nodes()
Esempio n. 3
0
 def get_t_parameter(self, win_point, start, end, t=0.5, dt=0.5):
     dt /= 2.0
     new, new_end = libgeom.split_bezier_curve(start, end, t)
     ret1 = self.is_point_on_segment(win_point, start, new)
     ret2 = self.is_point_on_segment(win_point, new, new_end)
     if ret1 and ret2:
         return t
     elif ret1:
         return self.get_t_parameter(win_point, start, end, t - dt, dt)
     elif ret2:
         return self.get_t_parameter(win_point, start, end, t + dt, dt)
Esempio n. 4
0
 def get_t_parameter(self, win_point, start, end, t=0.5, dt=0.5):
     dt /= 2.0
     new, new_end = libgeom.split_bezier_curve(start, end, t)
     ret1 = self.is_point_on_segment(win_point, start, new)
     ret2 = self.is_point_on_segment(win_point, new, new_end)
     if ret1 and ret2:
         return t
     elif ret1:
         return self.get_t_parameter(win_point, start, end, t - dt, dt)
     elif ret2:
         return self.get_t_parameter(win_point, start, end, t + dt, dt)
Esempio n. 5
0
 def get_vector(path, trafo):
     p0 = p1 = path[0]
     is_cp = libgeom.is_curve_point
     t = 0.001
     for point in path[1]:
         p0 = point[0] if is_cp(point) else point
         if not p0 == p1:
             break
         elif is_cp(point) and p1 != point[2]:
             p0 = libgeom.split_bezier_curve(p1, point, t)[0][2]
             break
     return [libgeom.apply_trafo_to_point(p, trafo)
             for p in (p0, p1)]