def test_draw_order(self): ascii_canvas = AsciiCanvas(3, 3) ascii_canvas.add_text(0, 0, 'TE') ascii_canvas.add_text(0, 1, 'XT') canvas_str = \ line('TE ') + \ line('XT ') + \ last(' ') self.assertEqual(ascii_canvas.get_canvas_as_str(), canvas_str, 'Incorrect canvas with text') # must overlap the text ascii_canvas.add_rect(0, 0, 3, 3) canvas_str = \ line('ooo') + \ line('o o') + \ last('ooo') self.assertEqual(ascii_canvas.get_canvas_as_str(), canvas_str, 'Incorrect canvas with rect')
def test_text_draw(self): ascii_canvas = AsciiCanvas(5, 5) ascii_canvas.add_text(-3, 2, 'hello world!!!!!') canvas_with_text_str = \ line(' ') + \ line(' ') + \ line('lo wo') + \ line(' ') + \ last(' ') self.assertEqual(ascii_canvas.get_canvas_as_str(), canvas_with_text_str, 'Incorrect canvas with text') ascii_canvas = AsciiCanvas(5, 1) ascii_canvas.add_text(2, 0, '') canvas_with_text_str = \ last(' ') self.assertEqual(ascii_canvas.get_canvas_as_str(), canvas_with_text_str, 'Incorrect canvas with text') ascii_canvas = AsciiCanvas(5, 1) ascii_canvas.add_text(2, 0, '\xFF') canvas_with_text_str = \ last(' \xFF ') self.assertEqual(ascii_canvas.get_canvas_as_str(), canvas_with_text_str, 'Incorrect canvas with text')
def draw(self): # NOTE: coordinates might me negative, so we need to shift # everything to the positive plane before we actually draw it. Xs = [] Ys = [] for v in self.sug.g.sV: # NOTE: moving boxes w/2 to the left Xs.append(v.view.xy[0] - v.view.w / 2.0) Xs.append(v.view.xy[0] + v.view.w / 2.0) Ys.append(v.view.xy[1]) Ys.append(v.view.xy[1] + v.view.h) for e in self.sug.g.sE: for xy in e.view._pts: Xs.append(xy[0]) Ys.append(xy[1]) minx = min(Xs) miny = min(Ys) maxx = max(Xs) maxy = max(Ys) canvas_cols = int(math.ceil(math.ceil(maxx) - math.floor(minx))) + 1 canvas_lines = int(round(maxy - miny)) canvas = AsciiCanvas(canvas_cols, canvas_lines) # NOTE: first draw edges so that node boxes could overwrite them for e in self.sug.g.sE: assert len(e.view._pts) > 1 for index in range(1, len(e.view._pts)): start = e.view._pts[index - 1] end = e.view._pts[index] start_x = int(round(start[0] - minx)) start_y = int(round(start[1] - miny)) end_x = int(round(end[0] - minx)) end_y = int(round(end[1] - miny)) assert start_x >= 0 assert start_y >= 0 assert end_x >= 0 assert end_y >= 0 canvas.add_line(start_x, start_y, end_x, end_y, style=Style('*')) for v in self.sug.g.sV: # NOTE: moving boxes w/2 to the left x = v.view.xy[0] - v.view.w / 2.0 y = v.view.xy[1] canvas.add_nine_patch_rect(int(round(x - minx)), int(round(y - miny)), v.view.w, v.view.h) canvas.add_text( int(round(x - minx)) + 1, int(round(y - miny)) + 1, v.data) canvas.print_out()