Ejemplo n.º 1
0
def write_change_over_switch(canvas, t = I, labels = None):

    if canvas is None:
        return t.r_move(-0.5, 0.0), t.r_move(0.5, 0.5), t.r_move(0.5, -0.5)

    #t = t.r_move(0.5, 0.0)
    OVER = 3.0 / 20.0   # zobacek kontaktu
    EQA = 1.0 - OVER    # Strana rovnostranneho trojuhelnika
    EQH = 0.866 * EQA   # EQH - vyska rovnostranneho trojuhhlnika

    Line([
        (-0.5, 0.0),
        (-0.5 * EQH, 0.0),
        (0.5 * EQH, 0.5 - 0.5 * OVER)
    ], t).write(canvas)
    # kontakty
    Line([
        (0.5 * EQH - 0.5 * OVER, 0.5 - OVER),
        (0.5 * EQH - 0.5 * OVER, 0.5),
        (0.5, 0.5)
    ], t).write(canvas)
    Line([
        (0.5 * EQH - 0.5 * OVER, -0.5 + OVER),
        (0.5 * EQH - 0.5 * OVER, -0.5),
        (0.5, -0.5)
    ], t).write(canvas)

    if labels is not None:
        canvas.text(labels[0], t.transform_point((-0.5 * EQH, 0.0)), 'nw', 'small')
        canvas.text(labels[1], t.transform_point((0.5 * EQH - 0.5 * OVER, 0.5)), 'ne', 'small')
        canvas.text(labels[2], t.transform_point((0.5 * EQH - 0.5 * OVER, -0.5)), 'se', 'small')

    return t.r_move(-0.5, 0.0), t.r_move(0.5, 0.5), t.r_move(0.5, -0.5)
Ejemplo n.º 2
0
def write_arrow(canvas, t=I):
    width = GS
    Line(((0.3, 0.0), (width - 0.3, 0.0)), t).write(canvas)
    Line(EQ_TRIANGLE,
         I.scale(-0.3, 0.3).move(
             (width - 0.3, 0.0)).transform(t)).write(canvas)
    return t.move(t.transform_vector((width, 0.0)))
Ejemplo n.º 3
0
def write_comparator(canvas, t=I):
    width = GS
    t = I.move((0.5 * width, 0.0)).transform(t)
    Line(COMPARATOR_POINTS, I.scale(0.3, 0.3).transform(t)).write(canvas)
    Line(COMPARATOR_POINTS, I.scale(-0.3, -0.3).transform(t)).write(canvas)
    Line(EQ_TRIANGLE, I.scale(-1.3, 1.3).transform(t)).write(canvas)
    return t.move(t.transform_vector((0.5 * GS, 0.0)))
Ejemplo n.º 4
0
def write_mix_valve(canvas, transf=I):
    symbol = Line(MIX_VALVE, transf)
    symbol.write(canvas)
    t1 = transf.move(transf.transform_vector((1.5, 0.0)))
    t2 = transf.rotate_vect()
    t2 = t2.move(t2.transform_vector((1.5, 0.0)))
    return t1, t2
Ejemplo n.º 5
0
def write_gnd(canvas, t=I):
    Line([(-0.5, 0.0), (0.5, 0.0), (0.0, -0.5), (-0.5, 0.0)],
         t.r_scale(0.5).r_move(0.0, -0.5)).write(canvas)
    Line([(0.0, 0.0), (0.0, -0.25)], t).write(canvas)
    canvas.text('GND',
                t.transform_point((0.0, -0.25)),
                position='ne',
                size='small')
Ejemplo n.º 6
0
def write_join(canvas, t1, t2):
    x1, y1 = t1.get_offset()
    x2, y2 = t2.get_offset()
    x = max((x1, x2)) + 0.5
    y = 0.5 * (y1 + y2)
    Line([(x1, y1), (x, y1), (x, y2), (x2, y2)]).write(canvas)
    Line([(x, y), (x + 0.5, y)]).write(canvas)
    return I.move_to((x + 0.5, y))
Ejemplo n.º 7
0
def write_fork(canvas, t, scale = 1.0):
    Line([ (0.0, 0.0), (0.5, 0.0) ], t).write(canvas)
    Line([
        (1.0, 0.5 * scale),
        (0.5, 0.5 * scale),
        (0.5, -0.5 * scale),
        (1.0, -0.5 * scale)
    ], t).write(canvas)
    Circle(t.r_move(0.5, 0.0).r_scale(0.15)).write(canvas)
    return t.r_move(1.0, 0.5 * scale), t.r_move(1.0, -0.5 * scale)
Ejemplo n.º 8
0
def write_coil(canvas = None, t = I, labels = None):
    if canvas is not None:
        WH_RATIO = 3.0 / 4.0
        Square(t.r_scale(WH_RATIO, 1.0)).write(canvas)
        Line([(-0.5, 0.0), (-0.5 * WH_RATIO, 0.0)], t).write(canvas)
        Line([(0.5, 0.0), (0.5 * WH_RATIO, 0.0)], t).write(canvas)
        if labels is not None:
            canvas.text(labels[0], t.transform_point((-0.5 * WH_RATIO, 0.0)), 'nw', 'small')
            canvas.text(labels[1], t.transform_point((0.5 * WH_RATIO, 0.0)), 'ne', 'small')
    return t.r_move(-0.5, 0.0), t.r_move(0.5, 0.0)
Ejemplo n.º 9
0
def write_ref(canvas, t=I, text=''):
    Line([(-0.1, 0.0), (0.0, 0.0)], t).write(canvas)
    Line([(-0.1, 0.20), (-0.1, -0.20), (-1.0, -0.20),
          (-0.4 * 0.866 - 1.0, 0.0), (-1.0, 0.20), (-0.1, 0.20)],
         t).write(canvas)
    canvas.text(text,
                t.transform_point((-0.1, 0.0)),
                position='w',
                size='small')
    return t
Ejemplo n.º 10
0
def write_tee2(canvas, t1, t2):
    p1x, p1y = t1.transform_point((0.0, 0.0))
    v1x, v1y = t1.transform_vector((-1.0, 0.0))
    p2x, p2y = t2.transform_point((0.0, 0.0))
    v2x, v2y = t2.transform_vector((-1.0, 0.0))
    ox = p1x * v2x + p2x * v1x
    oy = p1y * v2y + p2y * v1y
    t = t1.move_to((ox, oy))
    symbol = Line(((-0.5, 0.0), (0.5, 0.0), (0.0, 0.0), (0.0, -0.5)), t)
    symbol.write(canvas)
    return t.move(t.transform_vector((1.5, 0.0)))
Ejemplo n.º 11
0
 def write_ref(self, handle, text = ''):
     Line([ (-0.1, 0.0), (0.0, 0.0) ], handle).write(self.canvas)
     Line([
         (-0.1, 0.20),
         (-0.1, -0.20),
         (-1.0, -0.20),
         (-0.4*0.866-1.0, 0.0),
         (-1.0, 0.20),
         (-0.1, 0.20)
     ], handle).write(self.canvas)
     #self.canvas.text(text, self.t.transform_point((-0.1, 0.0)), position = 'w', size = 'small')
     return handle
Ejemplo n.º 12
0
def write_terminal(canvas, t = I, align = 'left'):
    SCALE = 0.20
    t = t.r_move(0.5 * SCALE * ALIGNMENTS[align], 0.0)
    t_scaled = t.r_scale(SCALE)
    Circle(t_scaled).write(canvas)
    Line([(-0.5, -0.5), (0.5, 0.5)], t_scaled).write(canvas)
    return t.r_move(0.5 * SCALE * ALIGNMENTS[align], 0.0)
Ejemplo n.º 13
0
def write_pump(canvas, transf=I):
    symbol = Circle(transf)
    symbol.write(canvas)
    t = I.scale(-0.6, 0.6).transform(transf)
    symbol = Line(EQ_TRIANGLE, t)
    symbol.write(canvas)
    return transf.move(transf.transform_vector((1.5, 0.0)))
Ejemplo n.º 14
0
def write_converter(labels, canvas, t=I):
    width = GS
    t = I.move((0.5 * width, 0.0)).transform(t)
    Square(I.scale(1.5, 1.5).transform(t)).write(canvas)
    Line(((-0.75, -0.75), (0.75, 0.75)), t).write(canvas)
    canvas.text(labels[0], t.transform_point((-0.35, 0.35)))
    canvas.text(labels[1], t.transform_point((0.35, -0.35)))
    return t.move(t.transform_vector((0.5 * width, 0.0)))
Ejemplo n.º 15
0
 def draw_face_view(self, scheme):
     scheme.draw_rect((12.4, 62))
     Line(
         ((6.2, 24.26), (8.5, 24.26), (8.5, -24.26), (6.2, -24.26)),
         scheme.t
     ).write(scheme.canvas)
     Line(
         ((-6.2, 24.26), (-8.5, 24.26), (-8.5, -24.26), (-6.2, -24.26)),
         scheme.t
     ).write(scheme.canvas)
     Line(((-6.2, 18.38), (6.2, 18.38)), scheme.t).write(scheme.canvas)
     Line(((-6.2, -18.38), (6.2, -18.38)), scheme.t).write(scheme.canvas)
     scheme.draw_rect((10.85, 35.28), 'TINY')
     scheme.draw_circle(2.325, cx=-2.7125, cy=31.0-2.725)
     scheme.draw_circle(2.325, cx=2.7125, cy=31.0-2.725)
     scheme.draw_circle(2.325, cx=-2.7125, cy=-31.0+2.725)
     scheme.draw_circle(2.325, cx=2.7125, cy=-31.0+2.725)
Ejemplo n.º 16
0
def write_temp_sensor(canvas, t = I):
    width = GS
    t = I.move((0.5 * width, 0.0)).transform(t)
    Square(I.scale(RESISTOR_RATIO, 1.0).move((0.0, 0.0)).transform(t)).write(canvas)
    Line(((0.4, 0.4), (-0.4, -0.4), (-0.7, -0.4)), t).write(canvas)
    # Square(I.scale(1.5, 1.5).transform(t)).write(canvas)
    canvas.text('$\\vartheta$', t.transform_point((-0.55, -0.4)), position='n')
    return I.move((0.2 * GS, 0.0)).transform(t)
Ejemplo n.º 17
0
def write_switch(canvas, t=I, labels=None, align='left'):
    t = t.r_move(0.5 * ALIGNMENTS[align], 0.0)
    OVER = 3.0 / 20.0  # zobacek kontaktu
    EQA = 1.0 - OVER  # Strana rovnostranneho trojuhelnika
    EQH = 0.866 * EQA  # EQH - vyska rovnostranneho trojuhhlnika

    Line([(-0.5, 0.0), (-0.5 * EQH, 0.0),
          (0.5 * EQH * 0.866, 0.5 - 0.5 * OVER)], t).write(canvas)
    # kontakt
    Line([(0.5 * EQH - 0.5 * OVER, OVER), (0.5 * EQH - 0.5 * OVER, 0.0),
          (0.5, 0.0)], t).write(canvas)

    if labels is not None:
        canvas.text(labels[0], t.transform_point((-0.5, 0.0)), 'nw', 'small')
        canvas.text(labels[1], t.transform_point((0.5, 0.0)), 'ne', 'small')

    return t.r_move(0.5 * ALIGNMENTS[align], 0.0)
Ejemplo n.º 18
0
def write_pump(canvas, transf=I):
    if canvas is not None:
        symbol = Circle(transf)
        symbol.write(canvas)
        t = I.scale(-0.6, 0.6).transform(transf)
        symbol = Line(EQ_TRIANGLE, t)
        symbol.write(canvas)
    return transf.r_move(-0.5, 0.0), transf.r_move(0.5, 0.0)
Ejemplo n.º 19
0
def write_fork(canvas, t=I):
    width = GS
    Line(((0.3, 0.0), (width - 0.3, 0.0)), t).write(canvas)
    Line(((width - 0.3, 1.25 * GS), (0.5 * width, 1.25 * GS),
          (0.5 * width, -1.25 * GS), (width - 0.3, -1.25 * GS)),
         t).write(canvas)
    Line(EQ_TRIANGLE,
         I.scale(-0.3, 0.3).move(
             (width - 0.3, 1.25 * GS)).transform(t)).write(canvas)
    Line(EQ_TRIANGLE,
         I.scale(-0.3, 0.3).move(
             (width - 0.3, 0.0)).transform(t)).write(canvas)
    Line(EQ_TRIANGLE,
         I.scale(-0.3, 0.3).move(
             (width - 0.3, -1.25 * GS)).transform(t)).write(canvas)
    return [
        I.move((width, 1.25 * GS)).transform(t),
        I.move((width, 0.0)).transform(t),
        I.move((width, -1.25 * GS)).transform(t)
    ]
Ejemplo n.º 20
0
 def draw_vdimension(self, points, x):
     # draw auxiliary lines
     self.canvas.set_line_width(LINE_WIDTHS['TINY'])
     aux_points = [((x1 - 2.0, y1), (x - 2.0, y1)) for x1, y1 in points]
     for p in aux_points:
         Line(p, self.t).write(self.canvas)
     # draw dimension line
     Line(((x, points[0][1]), (x, points[-1][1])),
          self.t).write(self.canvas)
     # draw dimension mark
     for p in [(x, y) for _, y in points[1:]]:
         self.draw_dimension_mark(self.t.r_move(p[0], p[1]).rotate_vect())
     for p in [(x, y) for _, y in points[0:-1]]:
         self.draw_dimension_mark(
             self.t.r_move(p[0], p[1]).r_scale(-1.0, 1.0).rotate_vect())
     # write a dimension
     for i in range(len(points) - 1):
         y1 = points[i][1]
         y2 = points[i + 1][1]
         dim = y2 - y1
         self.canvas.text('{}'.format(dim),
                          self.t.transform_point((x, 0.5 * (y1 + y2))), 'w')
Ejemplo n.º 21
0
 def draw_hdimension(self, points, y):
     # draw auxiliary lines
     self.canvas.set_line_width(LINE_WIDTHS['TINY'])
     aux_points = [((x1, y1 + 2.0), (x1, y + 2.0)) for x1, y1 in points]
     for p in aux_points:
         Line(p, self.t).write(self.canvas)
     # draw dimension line
     Line(((points[0][0], y), (points[-1][0], y)),
          self.t).write(self.canvas)
     # draw dimension mark
     for p in [(x, y) for x, _ in points[1:]]:
         self.draw_dimension_mark(self.t.r_move(p[0], p[1]))
     for p in [(x, y) for x, _ in points[0:-1]]:
         self.draw_dimension_mark(
             self.t.r_move(p[0], p[1]).r_scale(-1.0, 1.0))
     # write a dimension
     for i in range(len(points) - 1):
         x1 = points[i][0]
         x2 = points[i + 1][0]
         dim = x2 - x1
         self.canvas.text('{}'.format(dim),
                          self.t.transform_point((0.5 * (x1 + x2), y)), 'n')
Ejemplo n.º 22
0
def write_tee(canvas, t=I):
    if canvas is not None:
        symbol = Line(((-0.5, 0.0), (0.5, 0.0), (0.0, 0.0), (0.0, -0.5)), t)
        symbol.write(canvas)
    return t.r_move(-0.5,
                    0.0), t.r_move(0.5, 0.0), t.rotate_vect().r_move(0.5, 0.0)
Ejemplo n.º 23
0
def write_corner(canvas, transf=I):
    if canvas is not None:
        symbol = Line(((-0.5, 0.0), (0.0, 0.0), (0.0, -0.5)), transf)
        symbol.write(canvas)
    return transf.r_move(-0.5, 0.0), transf.rotate_vect().r_move(0.5, 0.0)
Ejemplo n.º 24
0
def write_mix_valve(canvas, transf=I):
    if canvas is not None:
        symbol = Line(MIX_VALVE, transf)
        symbol.write(canvas)
    return transf.r_move(-0.5, 0.0), transf.r_move(
        0.5, 0.0), transf.rotate_vect().r_move(0.5, 0.0)
Ejemplo n.º 25
0
def write_wire(canvas, t=I, scale=1.0):
    if canvas is not None:
        Line([(0.0, 0.0), (1.0 * scale, 0.0)], t).write(canvas)
    return t, t.r_move(1.0 * scale, 0.0)
Ejemplo n.º 26
0
                                                      (0.0, 0.0)])

# Schematicka znacka smesovaciho ventilu
MIX_VALVE = Transform().scale(0.5).transform_points([(0.0, 0.0),
                                                     (EQ_TRIANGLE_H, 0.5),
                                                     (EQ_TRIANGLE_H, -0.5),
                                                     (-EQ_TRIANGLE_H, 0.5),
                                                     (-EQ_TRIANGLE_H, -0.5),
                                                     (0.0, 0.0),
                                                     (0.5, -EQ_TRIANGLE_H),
                                                     (-0.5, -EQ_TRIANGLE_H),
                                                     (0.0, 0.0)])

# Schematicka znacka cerpadla
circle = Circle()
triangle = Line(Transform().scale(0.70).transform_points(EQ_TRIANGLE))


# Krbova kamna
def write_heater(canvas, transf=I):
    if canvas is not None:
        t = I.scale(2.0, 3.0).transform(transf)
        symbol = Square(t)
        symbol.write(canvas)
    return transf.r_move(-1.0, 0.0), transf.r_move(1.0, 0.0)


def write_pump(canvas, transf=I):
    if canvas is not None:
        symbol = Circle(transf)
        symbol.write(canvas)
Ejemplo n.º 27
0
    def draw_frame(self):
        # Vykres velikosti A3
        # Vykresovy list
        drawing_frame_size = self.paper['DRAWING_FRAME_SIZE']
        grid_frame_size = self.paper['GRID_FRAME_SIZE']
        outer_frame_size = self.paper['OUTER_FRAME_SIZE']
        self.draw_rect(outer_frame_size, 'TINY')  # draw outer frame
        self.draw_rect(grid_frame_size, style='tiny')  #
        self.draw_rect(drawing_frame_size)
        # draw center marks
        x, y = grid_frame_size
        x, y = 0.5 * x, 0.5 * y
        size = grid_frame_size[0] - drawing_frame_size[0]
        self.draw_hline(x, 0, -size)
        self.draw_hline(-x, 0, size)
        self.draw_vline(0, y, -size)
        self.draw_vline(0, -y, size)
        # center triangles
        Line(EQ_TRIANGLE,
             self.t.r_move(x - 5.0, 0.0).r_scale(-5.0, 5.0)).write(self.canvas)
        Line(EQ_TRIANGLE,
             self.t.r_move(0.0, -y + 5.0).r_scale(
                 -5.0, 5.0).rotate_vect()).write(self.canvas)
        # draw grid
        y = 0.5 * grid_frame_size[1]
        hgrid, vgrid = self.paper['GRID']
        size = 0.5 * size
        dist = 0.5 * grid_frame_size[0] / hgrid
        for i in range(hgrid - 1):
            x = (i + 1) * dist
            self.draw_vline(x, y, -size)
            self.draw_vline(-x, y, -size)
            self.draw_vline(x, -y, size)
            self.draw_vline(-x, -y, size)
            self.canvas.text(GRID_NUMBERS[hgrid - 1 - i],
                             (-x + 0.5 * dist, y - 0.5 * size),
                             size='large')
            self.canvas.text(GRID_NUMBERS[hgrid + i],
                             (x - 0.5 * dist, y - 0.5 * size),
                             size='large')
            self.canvas.text(GRID_NUMBERS[hgrid - 1 - i],
                             (-x + 0.5 * dist, -y + 0.5 * size),
                             size='large')
            self.canvas.text(GRID_NUMBERS[hgrid + i],
                             (x - 0.5 * dist, -y + 0.5 * size),
                             size='large')
        self.canvas.text(GRID_NUMBERS[0],
                         (-(hgrid - 0.5) * dist, y - 0.5 * size),
                         size='large')
        self.canvas.text(GRID_NUMBERS[hgrid * 2 - 1],
                         ((hgrid - 0.5) * dist, y - 0.5 * size),
                         size='large')
        self.canvas.text(GRID_NUMBERS[0],
                         (-(hgrid - 0.5) * dist, -y + 0.5 * size),
                         size='large')
        self.canvas.text(GRID_NUMBERS[hgrid * 2 - 1],
                         ((hgrid - 0.5) * dist, -y + 0.5 * size),
                         size='large')

        dist = 0.5 * grid_frame_size[1] / vgrid
        x = 0.5 * grid_frame_size[0]
        for i in range(vgrid - 1):
            x = 0.5 * grid_frame_size[0]
            y = (i + 1) * dist
            self.draw_hline(x, y, -size)
            self.draw_hline(x, -y, -size)
            self.draw_hline(-x, y, size)
            self.draw_hline(-x, -y, size)
            x = x - 0.5 * size
            y = (i + 0.5) * dist
            self.canvas.text(GRID_LETTERS[vgrid - 1 - i], (x, y), size='large')
            self.canvas.text(GRID_LETTERS[vgrid - 1 - i], (-x, y),
                             size='large')
            self.canvas.text(GRID_LETTERS[vgrid + i], (x, -y), size='large')
            self.canvas.text(GRID_LETTERS[vgrid + i], (-x, -y), size='large')
        x = 0.5 * (grid_frame_size[0] - size)
        y = (vgrid - 0.5) * dist
        self.canvas.text(GRID_LETTERS[0], (x, y), size='large')
        self.canvas.text(GRID_LETTERS[0], (-x, y), size='large')
        self.canvas.text(GRID_LETTERS[2 * vgrid - 1], (x, -y), size='large')
        self.canvas.text(GRID_LETTERS[2 * vgrid - 1], (-x, -y), size='large')
        # draw cut marks
        cut_points = ((0.0, 0.0), (10.0, 0.0), (10.0, 2.0), (2.0, 2.0),
                      (2.0, 10.0), (0.0, 10.0), (0.0, 0.0))
        x = 0.5 * grid_frame_size[0]
        y = 0.5 * grid_frame_size[1]
        self.canvas.set_line_width(LINE_WIDTHS['TINY'])
        self.canvas.set_fill(True)
        Line(cut_points, self.t.r_move(-x, -y)).write(self.canvas)
        Line(cut_points,
             self.t.r_scale(1.0, -1.0).r_move(-x, -y)).write(self.canvas)
        Line(cut_points,
             self.t.r_scale(-1.0, 1.0).r_move(-x, -y)).write(self.canvas)
        Line(cut_points,
             self.t.r_scale(-1.0, -1.0).r_move(-x, -y)).write(self.canvas)
        # Description field
        DESC_FIELD_SIZE = (170.0, 50.0)
        self.push()
        self.move(0.5 * (drawing_frame_size[0] - DESC_FIELD_SIZE[0]),
                  0.5 * (DESC_FIELD_SIZE[1] - drawing_frame_size[1]))
        self.draw_rect(DESC_FIELD_SIZE, style='bold')
        if self.description is not None:
            # Cislo vykresu
            if 'number' in self.description:
                self.canvas.text(self.description['number'],
                                 self.t.transform_point((0.0, -10.0)),
                                 size='huge')
            # Nazev vykresu
            if 'name' in self.description:
                self.canvas.text(self.description['name'],
                                 self.t.transform_point((0.0, 0.0)),
                                 size='huge')
            head = list()
            text = list()
            # Projekt
            # Realizator
            # projektant
            # schvalil
            # nakreslil
            if 'author' in self.description:
                head.append('\\hfill{{}}Autor:')
                text.append(self.description['author'])
            # datum
            if 'date' in self.description:
                head.append('\\hfill{{}}Datum:')
                text.append(self.description['date'])
            # meritko
            if 'scale' in self.description:
                head.append('\\hfill{{}}Měřítko:')
                text.append(self.description['scale'])
            # List / listu
            if 'page' in self.description:
                head.append('\\hfill{{}}List:')
                text.append(self.description['page'])
            # zmenove pole
            if text:
                self.canvas.text('\\\\'.join(head),
                                 self.t.transform_point(
                                     (-0.5 * (DESC_FIELD_SIZE[0] - 15.0),
                                      0.0)),
                                 width=15.0)
                self.canvas.text('\\\\'.join(text),
                                 self.t.transform_point(
                                     (-0.5 * (DESC_FIELD_SIZE[0] - 30.0) +
                                      17.0, 0.0)),
                                 width=30.0)
        self.pop()
        # Move drawing coordinates
        self.move(0.0, 0.5 * DESC_FIELD_SIZE[1])
Ejemplo n.º 28
0
 def draw_dimension_mark(self, t):
     Line(((-4.0, 1.37), (0.0, 0.0), (-4.0, -1.37)), t).write(self.canvas)
Ejemplo n.º 29
0
 def draw_vline(self, x, y, size, line='NORMAL', style='normal'):
     self.canvas.set_line_width(LINE_WIDTHS[line])
     self.set_style(style)
     Line(((x, y), (x, y + size)), self.t).write(self.canvas)
Ejemplo n.º 30
0
def write_corner(canvas, transf=I):
    symbol = Line(((-0.5, 0.0), (0.0, 0.0), (0.0, -0.5)), transf)
    symbol.write(canvas)
    transf = transf.rotate_vect()
    return transf.move(transf.transform_vector((1.5, 0.0)))