From 22eace291947173540e2162f33a4b2125ba9e78b Mon Sep 17 00:00:00 2001 From: Joel Pitt Date: Mon, 17 Apr 2017 14:17:20 +1200 Subject: [PATCH 1/3] Fix Drawing.scale_to_fit to center correctly --- axi/drawing.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/axi/drawing.py b/axi/drawing.py index 37ce1ec..6098ec3 100644 --- a/axi/drawing.py +++ b/axi/drawing.py @@ -113,9 +113,9 @@ def scale_to_fit_width(self, width, padding=0): return self.scale_to_fit(width, 1e9, padding) def scale_to_fit(self, width, height, padding=0): - width -= padding * 2 - height -= padding * 2 - scale = min(width / self.width, height / self.height) + s_width = width - padding * 2 + s_height = height - padding * 2 + scale = min(s_width / self.width, s_height / self.height) return self.scale(scale, scale).center(width, height) def rotate_and_scale_to_fit(self, width, height, padding=0, step=5): From f8d9450e2eb34102e5dfd5ee2d467910dd7e639d Mon Sep 17 00:00:00 2001 From: Joel Pitt Date: Mon, 17 Apr 2017 14:20:36 +1200 Subject: [PATCH 2/3] Add Drawing.crop to remove points outside of 0..width, 0..height --- axi/drawing.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/axi/drawing.py b/axi/drawing.py index 37ce1ec..da7bad4 100644 --- a/axi/drawing.py +++ b/axi/drawing.py @@ -129,6 +129,22 @@ def rotate_and_scale_to_fit(self, width, height, padding=0, step=5): scale, drawing = max(drawings) return drawing.scale(scale, scale).center(width, height) + def crop(self, width, height): + paths = [] + for path in self.paths: + ok = True + new_path = [] + for x, y in path: + if x < 0 or y < 0 or x > width or y > height: + if new_path: + paths.append(new_path) + new_path = [] + else: + new_path.append((x,y)) + if new_path: + paths.append(new_path) + return Drawing(paths) + def remove_paths_outside(self, width, height): paths = [] for path in self.paths: From 9e019ca6a158247f87627666dd01a67121c175d4 Mon Sep 17 00:00:00 2001 From: Joel Pitt Date: Fri, 1 Sep 2017 11:01:11 +1200 Subject: [PATCH 3/3] Fix Drawing.rotate_and_scale_to_fit to also center correctly with padding --- axi/drawing.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/axi/drawing.py b/axi/drawing.py index 63a0e7e..8d87e98 100644 --- a/axi/drawing.py +++ b/axi/drawing.py @@ -120,11 +120,11 @@ def scale_to_fit(self, width, height, padding=0): def rotate_and_scale_to_fit(self, width, height, padding=0, step=5): drawings = [] - width -= padding * 2 - height -= padding * 2 + s_width = width - padding * 2 + s_height = height - padding * 2 for angle in range(0, 180, step): drawing = self.rotate(angle) - scale = min(width / drawing.width, height / drawing.height) + scale = min(s_width / drawing.width, s_height / drawing.height) drawings.append((scale, drawing)) scale, drawing = max(drawings) return drawing.scale(scale, scale).center(width, height)