Пример #1
0
def draw_polyline_nice_corners(cr, points, arrow_degrees, arrow_len, arrow_start = False, arrow_end = False):
    ex, ey = points[-1]
    prev = points[0]

    if arrow_start:
        cr.move_to(prev[0],prev[1])
        draw_arrow(cr, utils.make_vector(points[1], points[0]), arrow_degrees, arrow_len)

    cr.move_to(prev[0],prev[1])
    for i in xrange(1, len(points) - 1):
        a = utils.make_vector(points[i-1], points[i])
        b = utils.make_vector(points[i], points[i + 1])
        la = utils.vector_len(a)
        lb = utils.vector_len(b)
        if la < 0.01 or lb < 0.01:
            continue
        v = utils.vector_mul_scalar(utils.normalize_vector(a), min(la, 20.0))
        w = utils.vector_mul_scalar(utils.normalize_vector(b), min(lb, 20.0))
        t = utils.vector_diff(points[i], v)
        cr.line_to(t[0], t[1])
        cr.rel_curve_to(v[0], v[1], v[0], v[1], v[0] + w[0], v[1] + w[1])
    cr.line_to(ex,ey)
    cr.stroke()

    if arrow_end:
        cr.move_to(ex, ey)
        draw_arrow(cr, utils.make_vector(points[-2], points[-1]), arrow_degrees, arrow_len)
Пример #2
0
def draw_polyline_nice_corners(cr,
                               points,
                               arrow_degrees,
                               arrow_len,
                               arrow_start=False,
                               arrow_end=False):
    ex, ey = points[-1]
    prev = points[0]

    if arrow_start:
        cr.move_to(prev[0], prev[1])
        draw_arrow(cr, utils.make_vector(points[1], points[0]), arrow_degrees,
                   arrow_len)

    cr.move_to(prev[0], prev[1])
    for i in xrange(1, len(points) - 1):
        a = utils.make_vector(points[i - 1], points[i])
        b = utils.make_vector(points[i], points[i + 1])
        la = utils.vector_len(a)
        lb = utils.vector_len(b)
        if la < 0.01 or lb < 0.01:
            continue
        v = utils.vector_mul_scalar(utils.normalize_vector(a), min(la, 20.0))
        w = utils.vector_mul_scalar(utils.normalize_vector(b), min(lb, 20.0))
        t = utils.vector_diff(points[i], v)
        cr.line_to(t[0], t[1])
        cr.rel_curve_to(v[0], v[1], v[0], v[1], v[0] + w[0], v[1] + w[1])
    cr.line_to(ex, ey)
    cr.stroke()

    if arrow_end:
        cr.move_to(ex, ey)
        draw_arrow(cr, utils.make_vector(points[-2], points[-1]),
                   arrow_degrees, arrow_len)
Пример #3
0
 def draw(self, cr):
     NetEditCanvasConfig.draw(self, cr)
     if self.start_position:
         cr.set_source_rgba(1,1,1,0.5)
         px, py = self.start_position
         sx, sy = utils.vector_diff(self.mouse_position, self.start_position)
         cr.rectangle(px, py, sx, sy)
         cr.fill()
         cr.set_line_width(0.5)
         cr.set_source_rgb(0,0,0)
         cr.rectangle(px, py, sx, sy)
         cr.stroke()
Пример #4
0
 def draw(self, cr):
     NetEditCanvasConfig.draw(self, cr)
     if self.start_position:
         cr.set_source_rgba(1,1,1,0.5)
         px, py = self.start_position
         sx, sy = utils.vector_diff(self.mouse_position, self.start_position)
         cr.rectangle(px, py, sx, sy)
         cr.fill()
         cr.set_line_width(0.5)
         cr.set_source_rgb(0,0,0)
         cr.rectangle(px, py, sx, sy)
         cr.stroke()
Пример #5
0
 def is_at_position(self, position):
     p1 = self.point1.get_position()
     p2 = self.point2.get_position()
     return utils.position_on_rect(position, p1, utils.vector_diff(p2, p1),
                                   5)
Пример #6
0
 def set_position(self, position):
     self.position = utils.vector_diff(position,
                                       self.parent_placement.get_position())
Пример #7
0
 def is_at_position(self, position):
     p1 = self.point1.get_position()
     p2 = self.point2.get_position()
     return utils.position_on_rect(position, p1, utils.vector_diff(p2, p1), 5)
Пример #8
0
 def set_position(self, position):
     self.position = utils.vector_diff(position,
                                       self.parent_placement.get_position())