summaryrefslogtreecommitdiff
path: root/gerber
diff options
context:
space:
mode:
Diffstat (limited to 'gerber')
-rw-r--r--gerber/render/cairo_backend.py6
-rw-r--r--gerber/tests/test_cairo_backend.py40
2 files changed, 42 insertions, 4 deletions
diff --git a/gerber/render/cairo_backend.py b/gerber/render/cairo_backend.py
index 76be60a..3571ed9 100644
--- a/gerber/render/cairo_backend.py
+++ b/gerber/render/cairo_backend.py
@@ -139,7 +139,7 @@ class GerberCairoContext(GerberContext):
if is_svg:
self.surface.finish()
self.surface_buffer.flush()
- with open(filename, "w") as f:
+ with open(filename, "wb") as f:
self.surface_buffer.seek(0)
f.write(self.surface_buffer.read())
f.flush()
@@ -565,7 +565,7 @@ class GerberCairoContext(GerberContext):
def _flatten(self, color=None, alpha=None):
color = color if color is not None else self.color
alpha = alpha if alpha is not None else self.alpha
- self.output_ctx.set_source_rgba(*color, alpha=alpha)
+ self.output_ctx.set_source_rgba(color[0], color[1], color[2], alpha)
self.output_ctx.mask_surface(self.active_layer)
self.ctx = None
self.active_layer = None
@@ -576,7 +576,7 @@ class GerberCairoContext(GerberContext):
alpha = settings.alpha if settings is not None else 1.0
if not self.has_bg:
self.has_bg = True
- self.output_ctx.set_source_rgba(*color, alpha=alpha)
+ self.output_ctx.set_source_rgba(color[0], color[1], color[2], alpha)
self.output_ctx.paint()
def _clip_primitive(self, primitive):
diff --git a/gerber/tests/test_cairo_backend.py b/gerber/tests/test_cairo_backend.py
index 9195b93..d5ce4ed 100644
--- a/gerber/tests/test_cairo_backend.py
+++ b/gerber/tests/test_cairo_backend.py
@@ -3,7 +3,8 @@
# Author: Garret Fick <garret@ficksworkshop.com>
import os
-
+import shutil
+import tempfile
from ..render.cairo_backend import GerberCairoContext
from ..rs274x import read
@@ -136,6 +137,11 @@ def _DISABLED_test_render_am_exposure_modifier():
_test_render('resources/example_am_exposure_modifier.gbr', 'golden/example_am_exposure_modifier.png')
+def test_render_svg_simple_contour():
+ """Example of rendering to an SVG file"""
+ _test_simple_render_svg('resources/example_simple_contour.gbr')
+
+
def _resolve_path(path):
return os.path.join(os.path.dirname(__file__),
path)
@@ -187,3 +193,35 @@ def _test_render(gerber_path, png_expected_path, create_output_path = None):
assert_true(equal)
return gerber
+
+
+def _test_simple_render_svg(gerber_path):
+ """Render the gerber file as SVG
+
+ Note: verifies only the header, not the full content.
+
+ Parameters
+ ----------
+ gerber_path : string
+ Path to Gerber file to open
+ """
+
+ gerber_path = _resolve_path(gerber_path)
+ gerber = read(gerber_path)
+
+ # Create SVG image to the memory stream
+ ctx = GerberCairoContext()
+ gerber.render(ctx)
+
+ temp_dir = tempfile.mkdtemp()
+ svg_temp_path = os.path.join(temp_dir, 'output.svg')
+
+ assert_false(os.path.exists(svg_temp_path))
+ ctx.dump(svg_temp_path)
+ assert_true(os.path.exists(svg_temp_path))
+
+ with open(svg_temp_path, 'r') as expected_file:
+ expected_bytes = expected_file.read()
+ assert_equal(expected_bytes[:38], '<?xml version="1.0" encoding="UTF-8"?>')
+
+ shutil.rmtree(temp_dir)