diff options
author | jaseg <git@jaseg.de> | 2023-04-06 16:27:57 +0200 |
---|---|---|
committer | jaseg <git@jaseg.de> | 2023-04-10 23:57:15 +0200 |
commit | 0dcd2814061e8ee93bfef9484a3b3de56d156ff9 (patch) | |
tree | 0fbe7c71ae728b6e97adf0374cf686bbb1573440 | |
parent | ba920604311d73fd3a9563d4fcb147d508f080cf (diff) | |
download | gerbonara-0dcd2814061e8ee93bfef9484a3b3de56d156ff9.tar.gz gerbonara-0dcd2814061e8ee93bfef9484a3b3de56d156ff9.tar.bz2 gerbonara-0dcd2814061e8ee93bfef9484a3b3de56d156ff9.zip |
Make generated pretty SVGs smaller
-rw-r--r-- | gerbonara/graphic_primitives.py | 10 | ||||
-rw-r--r-- | gerbonara/utils.py | 5 |
2 files changed, 9 insertions, 6 deletions
diff --git a/gerbonara/graphic_primitives.py b/gerbonara/graphic_primitives.py index 02eac8d..13d626d 100644 --- a/gerbonara/graphic_primitives.py +++ b/gerbonara/graphic_primitives.py @@ -77,7 +77,7 @@ class Circle(GraphicPrimitive): def to_svg(self, fg='black', bg='white', tag=Tag): color = fg if self.polarity_dark else bg - return tag('circle', cx=prec(self.x), cy=prec(self.y), r=prec(self.r), style=f'fill: {color}') + return tag('circle', cx=prec(self.x), cy=prec(self.y), r=prec(self.r), fill=color) @dataclass(frozen=True) @@ -147,7 +147,7 @@ class ArcPoly(GraphicPrimitive): def to_svg(self, fg='black', bg='white', tag=Tag): color = fg if self.polarity_dark else bg - return tag('path', d=' '.join(self.path_d()), style=f'fill: {color}') + return tag('path', d=' '.join(self.path_d()), fill=color) @dataclass(frozen=True) @@ -189,7 +189,7 @@ class Line(GraphicPrimitive): color = fg if self.polarity_dark else bg width = f'{self.width:.6}' if not math.isclose(self.width, 0) else '0.01mm' return tag('path', d=f'M {float(self.x1):.6} {float(self.y1):.6} L {float(self.x2):.6} {float(self.y2):.6}', - style=f'fill: none; stroke: {color}; stroke-width: {width}; stroke-linecap: round') + fill='none', stroke=color, stroke_width=str(width), stroke_linecap='round') @dataclass(frozen=True) class Arc(GraphicPrimitive): @@ -241,7 +241,7 @@ class Arc(GraphicPrimitive): arc = svg_arc((self.x1, self.y1), (self.x2, self.y2), (self.cx, self.cy), self.clockwise) width = f'{self.width:.6}' if not math.isclose(self.width, 0) else '0.01mm' return tag('path', d=f'M {float(self.x1):.6} {float(self.y1):.6} {arc}', - style=f'fill: none; stroke: {color}; stroke-width: {width}; stroke-linecap: round; fill: none') + fill='none', stroke=color, stroke_width=width, stroke_linecap='round') @dataclass(frozen=True) class Rectangle(GraphicPrimitive): @@ -275,5 +275,5 @@ class Rectangle(GraphicPrimitive): color = fg if self.polarity_dark else bg x, y = self.x - self.w/2, self.y - self.h/2 return tag('rect', x=prec(x), y=prec(y), width=prec(self.w), height=prec(self.h), - transform=svg_rotation(self.rotation, self.x, self.y), style=f'fill: {color}') + *svg_rotation(self.rotation, self.x, self.y), fill=color) diff --git a/gerbonara/utils.py b/gerbonara/utils.py index ce5425a..e33a7bf 100644 --- a/gerbonara/utils.py +++ b/gerbonara/utils.py @@ -461,7 +461,10 @@ def svg_arc(old, new, center, clockwise): def svg_rotation(angle_rad, cx=0, cy=0): - return f'rotate({float(math.degrees(angle_rad)):.4} {float(cx):.6} {float(cy):.6})' + if math.isclose(angle_rad, 0.0, abs_tol=1e-3): + return {} + else: + return {'transform': f'rotate({float(math.degrees(angle_rad)):.4} {float(cx):.6} {float(cy):.6})'} def setup_svg(tags, bounds, margin=0, arg_unit=MM, svg_unit=MM, pagecolor='white', tag=Tag, inkscape=False): (min_x, min_y), (max_x, max_y) = bounds |