Пример #1
0
    def update_draw_object_columns(self):
        unit = self.unit
        max_large_ml = self.large_mark_line_max_length
        min_large_ml = self.large_mark_line_min_length

        def _make_segment():
            segment = HorizontalLineSegment(length=node.value * unit)
            ml_length = (max_large_ml -
                         (node.get_distance() * (max_large_ml - min_large_ml) /
                          self._fractal_tree.number_of_layers)) / 2
            segment.start_mark_line.length = ml_length
            segment.end_mark_line.length = ml_length
            return segment

        for node in self._fractal_tree.traverse():
            node.graphic._draw_object_column = DrawObjectColumn()
            node.graphic._draw_object_column.add_draw_object(_make_segment())

            if node.get_children():
                node.graphic._draw_object_column.add_draw_object(
                    DrawObjectRow(top_margin=3))
            if node.up:
                node.up.graphic._draw_object_column.draw_objects[
                    1].add_draw_object(node.graphic)
            if not node.up or node.up.get_children().index(node) == len(
                    node.up.get_children()) - 1:
                node.graphic._draw_object_column.draw_objects[
                    0].end_mark_line.show = True
                node.graphic._draw_object_column.draw_objects[
                    0].end_mark_line.length *= 2
            if not node.up or node.up.get_children().index(node) == 0:
                node.graphic._draw_object_column.draw_objects[
                    0].start_mark_line.length *= 2
Пример #2
0
 def _make_column(self):
     c = DrawObjectColumn()
     c.add_draw_object(HorizontalLineSegment(10))
     do2 = c.add_draw_object(HorizontalLineSegment(20))
     c.add_draw_object(VerticalSegmentedLine(lengths=[5, 6, 7, 8]))
     do2.start_mark_line.length = 6
     self.column = c
Пример #3
0
 def test_with_clipping_area(self):
     c = DrawObjectColumn()
     c.bottom_margin = 60
     c.add_draw_object(HorizontalRuler(length=1200, bottom_margin=5))
     c.add_draw_object(HorizontalSegmentedLine(lengths=600 * [2]))
     ca = ClippingArea(self.pdf, draw_object=c)
     self.pdf.translate_page_margins()
     ca.draw()
     with self.file_path(path, 'with_clipping_area', 'pdf') as pdf_path:
         self.pdf.write(pdf_path)
Пример #4
0
    def test_column_page_break(self):
        self.pdf.t_margin = 15

        def _prepare_page():
            self.pdf.translate_page_margins()
            self.pdf.draw_ruler('v')
            self.pdf.draw_ruler('h')
            self.pdf.translate(clip_area_left_margin, clip_area_top_margin)

        def _add_page():
            self.pdf.add_page()
            _prepare_page()

        def draw_with_clip(index):
            with self.pdf.saved_state():
                self.pdf.clip_rect(-1, -5, clip_area_width + 1.14,
                                   clip_area_height)
                self.pdf.translate(index * -clip_area_width, 0)
                c.draw(self.pdf)

        c = DrawObjectColumn()
        c.bottom_margin = 60
        c.add_draw_object(HorizontalRuler(length=1200, bottom_margin=5))
        c.add_draw_object(HorizontalSegmentedLine(lengths=600 * [2]))

        clip_area_left_margin = 10
        clip_area_top_margin = 10
        clip_area_width = self.pdf.w - self.pdf.l_margin - self.pdf.r_margin - clip_area_left_margin
        clip_area_height = c.get_height()

        with self.file_path(path, 'column_page_break', 'pdf') as pdf_path:
            _prepare_page()
            number_of_rows = int(ceil(c.get_width() / clip_area_width))
            for index in range(number_of_rows):
                if index != 0:
                    self.pdf.translate(0, c.get_height())
                if self.pdf.absolute_y > self.pdf.h - self.pdf.b_margin:
                    _add_page()
                draw_with_clip(index)
            self.pdf.write(pdf_path)
Пример #5
0
    def test_draw_row_of_column_of_segments(self):
        c = DrawObjectColumn()
        c.add_draw_object(HorizontalLineSegment(30))
        c.add_draw_object(HorizontalLineSegment(10))
        c.add_draw_object(HorizontalLineSegment(20))
        r = DrawObjectRow()
        r.add_draw_object(c)

        with self.file_path(path, 'draw_row_of_column_of_segments', 'pdf') as pdf_path:
            self.pdf.translate_page_margins()
            self.pdf.draw_ruler('h')
            self.pdf.draw_ruler('v')
            self.pdf.translate(10, 10)
            c.draw(self.pdf)
            self.pdf.write(pdf_path)
Пример #6
0
    def test_column_line_break(self):
        def draw_with_clip(index):
            with self.pdf.saved_state():
                self.pdf.clip_rect(-1, -5, 196, 50)
                self.pdf.translate(index * -190, 0)
                c.draw(self.pdf)

        c = DrawObjectColumn()
        c.bottom_margin = 10
        c.add_draw_object(HorizontalRuler(length=800))
        c.add_draw_object(HorizontalSegmentedLine(lengths=400 * [2]))
        with self.file_path(path, 'column_line_break', 'pdf') as pdf_path:
            self.pdf.translate_page_margins()
            number_of_rows = int(ceil(c.get_width() / 190))
            for index in range(number_of_rows):
                if index != 0:
                    self.pdf.translate(0, c.get_height())
                draw_with_clip(index)
            self.pdf.write(pdf_path)
Пример #7
0
    def test_clipped_draw(self):
        c = DrawObjectColumn()
        c.bottom_margin = 60
        c.add_draw_object(HorizontalRuler(length=1200, bottom_margin=5))
        c.add_draw_object(HorizontalSegmentedLine(lengths=600 * [2]))
        self.pdf.translate_page_margins()
        title = PageText('A very nice title',
                         v_position='center',
                         font_weight='bold',
                         font_size=12,
                         top_margin=10)
        title.draw(self.pdf)
        self.pdf.translate(0, title.get_height())
        c.clipped_draw(self.pdf)

        for page in self.pdf.pages:
            self.pdf.page = page
            self.pdf.reset_position()
            self.pdf.translate_page_margins()
            self.pdf.draw_ruler('h')
            self.pdf.draw_ruler('v')
        with self.file_path(path, 'clipped_draw', 'pdf') as pdf_path:
            self.pdf.write(pdf_path)
Пример #8
0
def fill_tree_with_columns(fractal_tree, factor=1):
    max_large_ml = 6
    min_large_ml = 3
    for node in fractal_tree.traverse():
        node.manual_graphic = DrawObjectColumn()
        segment = node.manual_graphic.add_draw_object(
            HorizontalLineSegment(length=node.value * factor))
        ml_length = (max_large_ml -
                     (node.get_distance() * (max_large_ml - min_large_ml) /
                      fractal_tree.number_of_layers)) / 2
        segment.start_mark_line.length = ml_length
        segment.end_mark_line.length = ml_length
        if node.get_children():
            node.children_manual_graphics_row = node.manual_graphic.add_draw_object(
                DrawObjectRow(top_margin=3))
        if node.up:
            node.up.children_manual_graphics_row.add_draw_object(
                node.manual_graphic)
        if not node.up or node.up.get_children().index(node) == len(
                node.up.get_children()) - 1:
            node.manual_graphic.draw_objects[0].end_mark_line.show = True
            node.manual_graphic.draw_objects[0].end_mark_line.length *= 2
        if not node.up or node.up.get_children().index(node) == 0:
            node.manual_graphic.draw_objects[0].start_mark_line.length *= 2