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
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
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)
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)
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)
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)
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)
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