Exemple #1
0
    def draw(self, c, dpi):
        self.c = c
        self.dpi = dpi
        set_background_color(c, self.w, self.h)

        nw, nh = dimensions_mm(dpi, self.w, self.h)
        c.set_antialias(cairo.ANTIALIAS_GRAY)

        self.draw_ruler_pair(c, dpi, mm(dpi, 20))

        # Only calculate offsets if on an OLPC XO-1, 1.5, 1.75
        # Not applicable to XO 3.0
        if self.hw[0:2] == 'xo' and dpi in [200, 201]:
            self.offset_of_xo_side_from_screen = mm(dpi, -38.5)
            c.move_to(self.offset_of_xo_side_from_screen,  mm(dpi, 65))
            self.draw_cm_ruler(c, dpi, 180)
            
            c.save()
            c.move_to(mm(dpi, 20), mm(dpi, 75))
            write(c, _('Use this ruler from the outside edge of the computer.'),
                  self.font, mm(dpi, 4))
            c.restore()

            offset_of_molding_from_screen = mm(dpi, -0.4)
            c.move_to(offset_of_molding_from_screen,  mm(dpi, 95))
            self.draw_cm_ruler(c, dpi, 150)
            self.draw_custom_ruler(self.custom_unit_in_mm, int(nw / 10 * 10))

        else:
            self.offset_of_xo_side_from_screen = mm(dpi, int(nw / 20))
            c.move_to(self.offset_of_xo_side_from_screen,  mm(dpi, 65))
            self.draw_cm_ruler(c, dpi, int(nw / 11 * 10))
            self.draw_custom_ruler(self.custom_unit_in_mm, int(nw / 11 * 10))
Exemple #2
0
    def draw(self, c, dpi):
        set_background_color(c, self.w, self.h)

        nw, nh = dimensions_mm(dpi, self.w, self.h)
        c.set_antialias(cairo.ANTIALIAS_GRAY)

        self.draw_ruler_pair(c, dpi, mm(dpi, 20))

        # only calculate offsets if on an OLPC XO-1
        if self.hw[0:2] == 'XO':
            offset_of_xo_side_from_screen = mm(dpi, -38.5) #XXX needs checking
            c.move_to(offset_of_xo_side_from_screen,  mm(dpi, 65))
            self.draw_cm_ruler(c, dpi, 180)
            
            c.save()
            c.move_to(mm(dpi, 20), mm(dpi, 75))
            write(c, _('Use this ruler from the outside edge of the computer.'),
                  self.font, mm(dpi, 4))
            c.restore()

            offset_of_molding_from_screen = mm(dpi, -0.4) #XXX +- 0.2 ??
            c.move_to(offset_of_molding_from_screen,  mm(dpi, 95))
            self.draw_cm_ruler(c, dpi, 150)

        else:
            offset_of_xo_side_from_screen = mm(dpi, 0)
            c.move_to(offset_of_xo_side_from_screen,  mm(dpi, 65))
            self.draw_cm_ruler(c, dpi, int(nw / 10 * 10))
Exemple #3
0
    def draw(self, c, dpi):
        self.c = c
        self.dpi = dpi
        set_background_color(c, self.w, self.h)

        nw, nh = dimensions_mm(dpi, self.w, self.h)
        c.set_antialias(cairo.ANTIALIAS_GRAY)

        self.draw_ruler_pair(c, dpi, mm(dpi, 20))

        # Only calculate offsets if on an OLPC XO-1, 1.5, 1.75
        # Not applicable to XO 3.0
        if self.hw[0:2] == 'xo' and dpi in [200, 201]:
            self.offset_of_xo_side_from_screen = mm(dpi, -38.5)
            c.move_to(self.offset_of_xo_side_from_screen,  mm(dpi, 65))
            self.draw_cm_ruler(c, dpi, 180)
            
            c.save()
            c.move_to(mm(dpi, 20), mm(dpi, 75))
            write(c, _('Use this ruler from the outside edge of the computer.'),
                  self.font, mm(dpi, 4))
            c.restore()

            offset_of_molding_from_screen = mm(dpi, -0.4)
            c.move_to(offset_of_molding_from_screen,  mm(dpi, 95))
            self.draw_cm_ruler(c, dpi, 150)
            self.draw_custom_ruler(self.custom_unit_in_mm, int(nw / 10 * 10))

        else:
            self.offset_of_xo_side_from_screen = mm(dpi, 0)
            c.move_to(self.offset_of_xo_side_from_screen,  mm(dpi, 65))
            self.draw_cm_ruler(c, dpi, int(nw / 10 * 10))
            self.draw_custom_ruler(self.custom_unit_in_mm, int(nw / 10 * 10))
Exemple #4
0
    def draw_ruler_pair(self, c, dpi, y):
        c.move_to(mm(dpi, 10), y)
        self.connect_rulers(c, dpi)

        c.move_to(mm(dpi, 10), y)
        self.draw_cm_ruler(c, dpi)

        c.move_to(mm(dpi, 10), y+mm(dpi, 10))
        self.draw_mm_ruler(c, dpi)
Exemple #5
0
    def draw_ruler_pair(self, c, dpi, y):
        c.move_to(mm(dpi, 10), y)
        self.connect_rulers(c, dpi)

        c.move_to(mm(dpi, 10), y)
        self.draw_cm_ruler(c, dpi)

        c.move_to(mm(dpi, 10), y+mm(dpi, 10))
        self.draw_mm_ruler(c, dpi)
Exemple #6
0
    def connect_rulers(self, c, dpi):
        c.save()
        c.set_line_cap(cairo.LINE_CAP_SQUARE)
        c.translate(*c.get_current_point())

        c.set_line_width(1)
        for xm in range(0, 130+1, 10):
            c.move_to(mm(dpi, xm), 0)
            c.rel_line_to(0, mm(dpi, 10))
        c.stroke()

        c.set_line_width(2)
        c.move_to(0, 0)
        c.rel_line_to(0, mm(dpi, 10))
        c.stroke()

        c.restore()
Exemple #7
0
    def connect_rulers(self, c, dpi):
        c.save()
        c.set_line_cap(cairo.LINE_CAP_SQUARE)
        c.translate(*c.get_current_point())

        c.set_line_width(1)
        for xm in range(0, 130+1, 10):
            c.move_to(mm(dpi, xm), 0)
            c.rel_line_to(0, mm(dpi, 10))
        c.stroke()

        c.set_line_width(2)
        c.move_to(0, 0)
        c.rel_line_to(0, mm(dpi, 10))
        c.stroke()

        c.restore()
Exemple #8
0
def draw_numbers(p, c, dpi, nw, nh, m=1, unit="cm"):
    c.save()
    v = 0.7
    c.set_source_rgb(v, v, v)
    for n in range(1, 11):
        c.move_to(mm(dpi, n * 10), mm(dpi, n * 10))
        c.rel_move_to(mm(dpi, 0), mm(dpi, 3))
        write(c, "%d" % (n * m), p.font, mm(dpi, 4), centered=True)
        if n == 1:
            c.rel_move_to(mm(dpi, -0.5), mm(dpi, -0.5))
            write(c, " "+unit, p.font, mm(dpi, 3))
    c.restore()
Exemple #9
0
    def draw(self, c, dpi):
        set_background_color(c, self.w, self.h)
        c.set_antialias(cairo.ANTIALIAS_GRAY)

        nw, nh = dimensions_mm(dpi, self.w, self.h)
        if self.hw[0:2] == 'xo':
            scale = 1.
        else:
            scale = 200. / nh

        ox = mm(dpi, nw / 2)
        oy = mm(dpi, nh / 2)
        d = mm(dpi, 44 * scale)

        def xy(angle, m=d):
            return cos(-angle) * m + ox, sin(-angle) * m + oy

        def ray(angle, r0=0, r1=d):
            c.move_to(*xy(angle, r0))
            c.line_to(*xy(angle, r1))

        def annulus(a0, a1, r0, r1):
            c.move_to(*xy(a0, r0))
            c.arc_to(ox, oy, r0, a0, a1)
            c.rel_line_to(*xy(a1, r1))
            c.arc_to(ox, oy, r1, a1, a0)
            c.close_path()

        def rays(step, r0=0, r1=d, w=1):
            c.save()
            c.set_line_width(w)
            for a in range(0, 360, step):
                ray(d2r(a), r0, r1)
            c.stroke()
            c.restore()

        rays(1, mm(dpi, 35 * scale), w=2, r1=mm(dpi, 43 * scale))
        rays(5, mm(dpi, 10 * scale), w=2)
        rays(10, mm(dpi, 10 * scale), w=4)
        #        rays(10, mm(dpi, 3), mm(dpi, 20), w=2)
        c.save()
        #c.set_dash([mm(dpi, 5)])
        set_color(c, 'dark gray')
        rays(45, 0, mm(dpi, 45 * scale), w=6)
        c.restore()
        rays(90, 0, mm(dpi, 45 * scale), w=6)
Exemple #10
0
    def draw(self, c, dpi):
        set_background_color(c, self.w, self.h)
        c.set_antialias(cairo.ANTIALIAS_GRAY)

        nw, nh = dimensions_mm(dpi, self.w, self.h)
        if self.hw[0:2] == 'xo':
            scale = 1.
        else:
            scale = 200./nh

        ox = mm(dpi, nw / 2)
        oy = mm(dpi, nh / 2)
        d = mm(dpi, 44 * scale)

        def xy(angle, m=d):
            return cos(-angle) * m + ox, sin(-angle) * m + oy

        def ray(angle, r0=0, r1=d):
            c.move_to(*xy(angle, r0))
            c.line_to(*xy(angle, r1))

        def annulus(a0, a1, r0, r1):
            c.move_to(*xy(a0, r0))
            c.arc_to(ox, oy, r0, a0, a1)
            c.rel_line_to(*xy(a1, r1))
            c.arc_to(ox, oy, r1, a1, a0)
            c.close_path()

        def rays(step, r0=0, r1=d, w=1):
            c.save()
            c.set_line_width(w)
            for a in range(0, 360, step):
                ray(d2r(a), r0, r1)
            c.stroke()
            c.restore()

        rays(1, mm(dpi, 35 * scale), w=2, r1=mm(dpi, 43 * scale))
        rays(5, mm(dpi, 10 * scale), w=2)
        rays(10, mm(dpi, 10 * scale), w=4)
#        rays(10, mm(dpi, 3), mm(dpi, 20), w=2)
        c.save()
        #c.set_dash([mm(dpi, 5)])
        set_color(c, 'dark gray')
        rays(45, 0, mm(dpi, 45 * scale), w=6)
        c.restore()
        rays(90, 0, mm(dpi, 45 * scale), w=6)
Exemple #11
0
def lay_mm_grid(c, dpi, width_mm=152, height_mm=114, step_mm=1):

    c.save()
    z = mm(dpi, 1)
    c.scale(z, z)
    for x in range(0, width_mm, step_mm):
        c.move_to(x, 0)
        c.rel_line_to(0, height_mm)
    for y in range(0, height_mm, step_mm):
        c.move_to(0, y)
        c.rel_line_to(width_mm, 0)
    c.restore()
Exemple #12
0
    def draw_custom_ruler(self, units_per_mm, width=130):
        if not self.c:
            return

        self.c.set_source_rgb(255, 255, 255)
        self.c.rectangle(0, mm(self.dpi, 85), width, mm(self.dpi, 85) + 10)
        self.c.fill()
        self.c.set_source_rgb(0, 0, 0)

        self.c.move_to(self.offset_of_xo_side_from_screen, mm(self.dpi, 85))
        self.c.save()
        self.c.set_line_cap(cairo.LINE_CAP_SQUARE)
        self.c.translate(*self.c.get_current_point())

        self.c.set_line_width(5)
        self.c.move_to(0, 0)
        self.c.line_to(mm(self.dpi, width), 0)
        for x in [
                mm(self.dpi, xm / 100.)
                for xm in xrange(0, (width + 1) * 100, int(units_per_mm * 100))
        ]:
            self.c.move_to(x, 0)
            self.c.rel_line_to(0, mm(self.dpi, -3))
        self.c.stroke()
        pt_list = [x / int(units_per_mm * 100) for x in \
                   range(0, (width + 1) * 100, int(units_per_mm * 100))]
        coord_list = [
            mm(self.dpi, xm / 100)
            for xm in range(0, (width + 1) * 100, int(units_per_mm * 100))
        ]

        if units_per_mm > 7:  # Avoid overlapping labels
            for a in range(0, len(coord_list)):
                xm = pt_list[a]
                x = coord_list[a]
                n = xm
                self.c.move_to(x, mm(self.dpi, -4))
                write(self.c,
                      "%d" % n,
                      self.font_bold,
                      mm(self.dpi, 2.5),
                      centered=True)

        self.c.restore()
Exemple #13
0
def analyze_platesize(pdf):
    """
    Функция принимает на входе имя файла, и на выходе выдает словарь, в котором ключ - номер страницы (начиная с 1), а
    значение - список (ширина, высота) в мм
    :param pdf: объект pdf
    :return: dict
    """
    from PyPDF2 import PdfFileReader

    pdffile = PdfFileReader(open(pdf.abspath, "rb"))
    pages = pdffile.pages

    plate_sizes = {}

    for index, page in enumerate(pages, 1):
        start_x, start_y = page.mediaBox.lowerLeft
        end_x, end_y = page.mediaBox.upperRight
        w = mm(end_x - start_x)
        h = mm(end_y - start_y)
        if h > w:
            w, h = h, w
        plate_sizes[index] = (w, h)

    return plate_sizes
Exemple #14
0
    def draw_cm_ruler(self, c, dpi, width=130):
        c.save()
        c.set_line_cap(cairo.LINE_CAP_SQUARE)
        c.translate(*c.get_current_point())

        c.set_line_width(5)
        c.move_to(0, 0)
        c.line_to(mm(dpi, width), 0)
        for x in [mm(dpi, xm) for xm in range(0, width+1, 10)]:
            c.move_to(x, 0)
            c.rel_line_to(0, mm(dpi, -3))
        c.stroke()

        for x, xm in [(mm(dpi, xm), xm) for xm in range(0, width+1, 10)]:
            n = xm/10
            c.move_to(x, mm(dpi, -4))
            write(c, "%d" % n, self.font_bold, mm(dpi, 2.5), centered=True)
            
        c.move_to(mm(dpi, 1.5), mm(dpi, -4))
        write(c, "cm", self.font_bold, mm(dpi, 2))

        c.restore()
Exemple #15
0
    def draw_cm_ruler(self, c, dpi, width=130):
        c.save()
        c.set_line_cap(cairo.LINE_CAP_SQUARE)
        c.translate(*c.get_current_point())

        c.set_line_width(5)
        c.move_to(0, 0)
        c.line_to(mm(dpi, width), 0)
        for x in [mm(dpi, xm) for xm in range(0, width+1, 10)]:
            c.move_to(x, 0)
            c.rel_line_to(0, mm(dpi, -3))
        c.stroke()

        for x, xm in [(mm(dpi, xm), xm) for xm in range(0, width+1, 10)]:
            n = xm/10
            c.move_to(x, mm(dpi, -4))
            write(c, "%d" % n, self.font_bold, mm(dpi, 2.5), centered=True)
            
        c.move_to(mm(dpi, 1.5), mm(dpi, -4))
        write(c, "cm", self.font_bold, mm(dpi, 2))

        c.restore()
Exemple #16
0
    def draw_custom_ruler(self, units_per_mm, width=130):
        if not self.c:
            return

        self.c.set_source_rgb(255, 255, 255)
        self.c.rectangle(0, mm(self.dpi, 85),
                    width, mm(self.dpi, 85) + 10)
        self.c.fill()
        self.c.set_source_rgb(0, 0, 0)

        self.c.move_to(self.offset_of_xo_side_from_screen,  mm(self.dpi, 85))
        self.c.save()
        self.c.set_line_cap(cairo.LINE_CAP_SQUARE)
        self.c.translate(*self.c.get_current_point())

        self.c.set_line_width(5)
        self.c.move_to(0, 0)
        self.c.line_to(mm(self.dpi, width), 0)
        for x in [mm(self.dpi, xm / 100.) for xm in xrange(
                0, (width + 1) * 100, int(units_per_mm * 100))]:
            self.c.move_to(x, 0)
            self.c.rel_line_to(0, mm(self.dpi, -3))
        self.c.stroke()
        pt_list = [x / int(units_per_mm * 100) for x in \
                   range(0, (width + 1) * 100, int(units_per_mm * 100))]
        coord_list = [mm(self.dpi, xm / 100) for xm in range(
                0, (width + 1) * 100, int(units_per_mm * 100))]

        if units_per_mm > 7:  # Avoid overlapping labels
            for a in range(0, len(coord_list)):
                xm = pt_list[a]
                x = coord_list[a]
                n = xm
                self.c.move_to(x, mm(self.dpi, -4))
                write(self.c, "%d" % n, self.font_bold, mm(self.dpi, 2.5),
                      centered=True)

        self.c.restore()
Exemple #17
0
 def sq(x, y):
     c.rectangle(x, y, mm(dpi, 10), mm(dpi, 10))
     c.fill()
Exemple #18
0
    def draw(self, c, dpi):

        set_background_color(c, self.w, self.h)
        c.set_antialias(cairo.ANTIALIAS_GRAY)

        nw, nh = dimensions_mm(dpi, self.w, self.h)

        def sq(x, y):
            c.rectangle(x, y, mm(dpi, 10), mm(dpi, 10))
            c.fill()

        w = nw
        h = nh
        for xm in range(0, w, 20):
            for ym in range(0, h, 20):
                sq(mm(dpi, xm), mm(dpi, ym))
        for xm in range(10, w, 20):
            for ym in range(10, h, 20):
                sq(mm(dpi, xm), mm(dpi, ym))

        c.set_line_width(1)
        c.move_to(mm(dpi, 100), 0)
        c.rel_line_to(0, mm(dpi, 100))
        c.rel_line_to(mm(dpi, -100), 0)
        c.stroke()

        c.set_line_width(3)
        v = 0.5
        c.set_source_rgb(v, v, v)
        c.move_to(mm(dpi, 50), 0)
        c.rel_line_to(0, mm(dpi, 100))
        c.move_to(0, mm(dpi, 50))
        c.rel_line_to(mm(dpi, 100), 0)
        c.stroke()
Exemple #19
0
    def draw(self, c, dpi):
        set_background_color(c, self.w, self.h)
        c.set_antialias(cairo.ANTIALIAS_GRAY)

        nw, nh = dimensions_mm(dpi, self.w, self.h)
        if self.hw[0:2] == 'xo':
            scale = 1.
        else:
            scale = 200./nh

        ox = mm(dpi, 0)
        oy = mm(dpi, 99 * scale)
        d = mm(dpi, 90 * scale)

        def xy(angle, m=d):
            return cos(-angle) * m + ox, sin(-angle) * m + oy

        def ray(angle, r0=0, r1=d):
            c.move_to(*xy(angle, r0))
            c.line_to(*xy(angle, r1))

        lw = 6
        c.set_line_width(lw)
        c.move_to(ox, oy + lw / 2)
        c.line_to(*xy(pi / 2))
        ray(0)
        c.stroke()

        c.save()
        c.set_line_width(3)
        c.set_dash([mm(dpi, 5)])
        ray(pi / 4)
        c.stroke()
        c.restore()

        c.set_line_width(4)
        for a in range(10, 81, 10):
            ray(d2r(a), mm(dpi, 10 * scale), mm(dpi, 85 * scale))
        c.stroke()
        c.set_line_width(2)
        for a in range(10, 81, 10):
            ray(d2r(a), mm(dpi, 3 * scale), mm(dpi, 20 * scale))
        c.stroke()

        c.set_line_width(2)
        for a in range(1, 90, 1):
            ray(d2r(a), mm(dpi, 70 * scale), mm(dpi, 80 * scale))
        c.stroke()
        c.set_line_width(2)
        for a in range(0, 90, 5):
            ray(d2r(a), mm(dpi, 20 * scale), mm(dpi, 81 * scale))
        c.stroke()
Exemple #20
0
 def sq(x, y):
     c.rectangle(x, y, mm(dpi, 10), mm(dpi, 10))
     c.fill()
Exemple #21
0
    def draw(self, c, dpi):
        set_background_color(c, self.w, self.h)
        c.set_antialias(cairo.ANTIALIAS_GRAY)

        nw, nh = dimensions_mm(dpi, self.w, self.h)
        if self.hw[0:2] == 'xo':
            scale = 1.
        else:
            scale = 200. / nh

        ox = mm(dpi, 0)
        oy = mm(dpi, 99 * scale)
        d = mm(dpi, 90 * scale)

        def xy(angle, m=d):
            return cos(-angle) * m + ox, sin(-angle) * m + oy

        def ray(angle, r0=0, r1=d):
            c.move_to(*xy(angle, r0))
            c.line_to(*xy(angle, r1))

        lw = 6
        c.set_line_width(lw)
        c.move_to(ox, oy + lw / 2)
        c.line_to(*xy(pi / 2))
        ray(0)
        c.stroke()

        c.save()
        c.set_line_width(3)
        c.set_dash([mm(dpi, 5)])
        ray(pi / 4)
        c.stroke()
        c.restore()

        c.set_line_width(4)
        for a in range(10, 81, 10):
            ray(d2r(a), mm(dpi, 10 * scale), mm(dpi, 85 * scale))
        c.stroke()
        c.set_line_width(2)
        for a in range(10, 81, 10):
            ray(d2r(a), mm(dpi, 3 * scale), mm(dpi, 20 * scale))
        c.stroke()

        c.set_line_width(2)
        for a in range(1, 90, 1):
            ray(d2r(a), mm(dpi, 70 * scale), mm(dpi, 80 * scale))
        c.stroke()
        c.set_line_width(2)
        for a in range(0, 90, 5):
            ray(d2r(a), mm(dpi, 20 * scale), mm(dpi, 81 * scale))
        c.stroke()
Exemple #22
0
def crop(pdf):
    """
    Кропит страницы pdf до размеров бумаги. Если размеры бумаги неизвестны, то высчитывает поля с помощью
    ghostscript bbox. Объект типа файл схраняется в свойство pdf.cropped_file.
    :param pdf: объект pdf
    :return:
    """
    pdf.cropped_file = tempfile.NamedTemporaryFile(mode='w+b', dir=pdf.tmpdir, suffix='.pdf', delete=False)

    input = PdfFileReader(file(pdf.abspath, "rb"))
    output = PdfFileWriter()

    if pdf.paper_sizes:
        logger.info('')
        logger.info('――> Cropping [using signa paper]:')
        for index in range(1, pdf.complects + 1):
            paper_w = pdf.paper_sizes[index][1]
            paper_h = pdf.paper_sizes[index][2]
            plate_w = pdf.machines[index].plate_w
            plate_h = pdf.machines[index].plate_h

            page = input.getPage(index-1)

            """ EXAMLE
            # The resulting document has a trim box that is 200x200 points
            # and starts at 25,25 points inside the media box.
            # The crop box is 25 points inside the trim box.
            logger.debug('{} {}'.format(mm(page.mediaBox.getUpperRight_x()), mm(page.mediaBox.getUpperRight_y())))
            page.trimBox.lowerLeft = (25, 25)
            page.trimBox.upperRight = (225, 225)
            page.cropBox.lowerLeft = (50, 50)
            page.cropBox.upperRight = (200, 200)
            """

            x1 = pt((plate_w - paper_w)/2)                  # отступ слева
            y1 = pt(pdf.machines[index].klapan)             # отступ снизу
            x2 = pt(paper_w + (plate_w - paper_w)/2)        # ширина бумаги + отступ слева
            y2 = pt(paper_h + pdf.machines[index].klapan)   # высота бумаги + отступ снизу

            page.mediaBox.lowerLeft = (x1, y1)
            page.mediaBox.upperRight = (x2, y2)

            logger.info('····page {} to paper {}x{}'.format(index, paper_w, paper_h))

            output.addPage(page)

    else:
        logger.info('')
        logger.info('――> Cropping [using gs bbox]:')
        bbox = get_bbox(pdf.abspath)
        for index in range(1, pdf.complects + 1):

            page = input.getPage(index-1)

            page.mediaBox.lowerLeft = (bbox[index][0], bbox[index][1])
            page.mediaBox.upperRight = (bbox[index][2], bbox[index][3])

            paper_w = mm(bbox[index][2] - bbox[index][0])
            paper_h = mm(bbox[index][3] - bbox[index][1])
            logger.info('····page {} to paper {}x{}'.format(index, paper_w, paper_h))

            output.addPage(page)

    outputstream = file(pdf.cropped_file.name, "wb")
    output.write(outputstream)
    outputstream.close()
    pdf.cropped_file.close()
Exemple #23
0
    def draw_mm_ruler(self, c, dpi, width=130):
        c.save()
        c.set_line_cap(cairo.LINE_CAP_SQUARE)
        c.translate(*c.get_current_point())

        c.move_to(0, 0)
        c.set_line_width(4)
        c.line_to(mm(dpi, width), 0)
        for x in [mm(dpi, xm) for xm in range(0, width+1, 10)]:
            c.move_to(x, 0)
            c.rel_line_to(0, mm(dpi, 3))
        c.stroke()

        c.set_line_width(3)
        for x in [mm(dpi, xm) for xm in range(0, width, 5)]:
            c.move_to(x, 0)
            c.rel_line_to(0, mm(dpi, 2.2))
        for x in [mm(dpi, xm) for xm in range(0, width, 1)]:
            c.move_to(x, 0)
            c.rel_line_to(0, mm(dpi, 2))
        c.stroke()

        base = mm(dpi, 7)
        for x, xm in [(mm(dpi, xm), xm) for xm in range(0, width+1, 10)]:
            c.move_to(x, base)
            write(c, "%d" % xm, self.font, mm(dpi, 2), centered=True)
            
        c.move_to(mm(dpi, 1.2), base)
        write(c, "mm", self.font, mm(dpi, 1.5))

        c.restore()
Exemple #24
0
    def draw_mm_ruler(self, c, dpi, width=130):
        c.save()
        c.set_line_cap(cairo.LINE_CAP_SQUARE)
        c.translate(*c.get_current_point())

        c.move_to(0, 0)
        c.set_line_width(4)
        c.line_to(mm(dpi, width), 0)
        for x in [mm(dpi, xm) for xm in range(0, width+1, 10)]:
            c.move_to(x, 0)
            c.rel_line_to(0, mm(dpi, 3))
        c.stroke()

        c.set_line_width(3)
        for x in [mm(dpi, xm) for xm in range(0, width, 5)]:
            c.move_to(x, 0)
            c.rel_line_to(0, mm(dpi, 2.2))
        for x in [mm(dpi, xm) for xm in range(0, width, 1)]:
            c.move_to(x, 0)
            c.rel_line_to(0, mm(dpi, 2))
        c.stroke()

        base = mm(dpi, 7)
        for x, xm in [(mm(dpi, xm), xm) for xm in range(0, width+1, 10)]:
            c.move_to(x, base)
            write(c, "%d" % xm, self.font, mm(dpi, 2), centered=True)
            
        c.move_to(mm(dpi, 1.2), base)
        write(c, "mm", self.font, mm(dpi, 1.5))

        c.restore()
Exemple #25
0
    def draw(self, c, dpi):

        set_background_color(c, self.w, self.h)
        c.set_antialias(cairo.ANTIALIAS_GRAY)

        nw, nh = dimensions_mm(dpi, self.w, self.h)

        def sq(x, y):
            c.rectangle(x, y, mm(dpi, 10), mm(dpi, 10))
            c.fill()
        
        w=nw
        h=nh
        for xm in range(0, w, 20):
            for ym in range(0, h, 20):
                sq(mm(dpi, xm), mm(dpi, ym))
        for xm in range(10, w, 20):
            for ym in range(10, h, 20):
                sq(mm(dpi, xm), mm(dpi, ym))

        c.set_line_width(1)
        c.move_to(mm(dpi, 100), 0)
        c.rel_line_to(0, mm(dpi, 100))
        c.rel_line_to(mm(dpi, -100), 0)
        c.stroke()

        c.set_line_width(3)
        v = 0.5
        c.set_source_rgb(v, v, v)
        c.move_to(mm(dpi, 50), 0)
        c.rel_line_to(0, mm(dpi, 100))
        c.move_to(0, mm(dpi, 50))
        c.rel_line_to(mm(dpi, 100), 0)
        c.stroke()