From 5476da8aa3f4ee424f56f4f2491e7af1c4b7b758 Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Thu, 21 Jan 2016 03:57:44 -0500 Subject: Fix a bunch of rendering bugs. - 'clear' polarity primitives no longer erase background - Added aperture macro support for polygons - Added aperture macro rendring support - Renderer now creates a new surface for each layer and merges them instead of working directly on a single surface - Updated examples accordingly --- examples/cairo_example.png | Bin 104401 -> 104184 bytes examples/pcb_example.py | 7 ++++--- examples/pcb_top.png | Bin 99269 -> 98827 bytes 3 files changed, 4 insertions(+), 3 deletions(-) (limited to 'examples') diff --git a/examples/cairo_example.png b/examples/cairo_example.png index f33cc69..671de5c 100644 Binary files a/examples/cairo_example.png and b/examples/cairo_example.png differ diff --git a/examples/pcb_example.py b/examples/pcb_example.py index 5341da0..bba030e 100644 --- a/examples/pcb_example.py +++ b/examples/pcb_example.py @@ -24,6 +24,7 @@ import os from gerber import PCB from gerber.render import GerberCairoContext, theme + GERBER_FOLDER = os.path.abspath(os.path.join(os.path.dirname(__file__), 'gerbers')) @@ -33,7 +34,7 @@ ctx = GerberCairoContext() # Create a new PCB pcb = PCB.from_directory(GERBER_FOLDER) -pcb.theme = theme.THEMES['OSH Park'] -ctx.render_layers(pcb.top_layers, os.path.join(os.path.dirname(__file__), 'pcb_top.png')) -ctx.render_layers(pcb.bottom_layers, os.path.join(os.path.dirname(__file__), 'pcb_bottom.png')) +# Render PCB +ctx.render_layers(pcb.top_layers, os.path.join(os.path.dirname(__file__), 'pcb_top.png',), theme.THEMES['OSH Park']) +ctx.render_layers(pcb.bottom_layers, os.path.join(os.path.dirname(__file__), 'pcb_bottom.png'), theme.THEMES['OSH Park']) diff --git a/examples/pcb_top.png b/examples/pcb_top.png index bf1d687..60bc245 100644 Binary files a/examples/pcb_top.png and b/examples/pcb_top.png differ -- cgit From 66a0d09e72b078da5820820aa5c6a2a7d7430507 Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Thu, 21 Jan 2016 04:39:55 -0500 Subject: Add support for mirrored rendering - The default theme now renders the bottom layers mirrored. - see https://github.com/curtacircuitos/pcb-tools/blob/master/examples/pcb_bottom.png for an example. --- examples/pcb_bottom.png | Bin 39174 -> 40567 bytes 1 file changed, 0 insertions(+), 0 deletions(-) (limited to 'examples') diff --git a/examples/pcb_bottom.png b/examples/pcb_bottom.png index 1e8c369..b2dab0c 100644 Binary files a/examples/pcb_bottom.png and b/examples/pcb_bottom.png differ -- cgit From 5df38c014fd09792995b2b12b1982c535c962c9a Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Thu, 28 Jan 2016 12:19:03 -0500 Subject: Cleanup, rendering fixes. fixed rendering of tented vias fixed rendering of semi-transparent layers fixed file type detection issues added some examples --- examples/cairo_bottom.png | Bin 0 -> 42847 bytes examples/cairo_example.png | Bin 104184 -> 100397 bytes examples/cairo_example.py | 60 ++++++++++++++++++++---------------- examples/pcb_bottom.png | Bin 40567 -> 36992 bytes examples/pcb_example.py | 23 ++++++++++---- examples/pcb_top.png | Bin 98827 -> 92403 bytes examples/pcb_transparent_copper.png | Bin 0 -> 85302 bytes 7 files changed, 51 insertions(+), 32 deletions(-) create mode 100644 examples/cairo_bottom.png create mode 100644 examples/pcb_transparent_copper.png (limited to 'examples') diff --git a/examples/cairo_bottom.png b/examples/cairo_bottom.png new file mode 100644 index 0000000..03e40e7 Binary files /dev/null and b/examples/cairo_bottom.png differ diff --git a/examples/cairo_example.png b/examples/cairo_example.png index 671de5c..76e3bff 100644 Binary files a/examples/cairo_example.png and b/examples/cairo_example.png differ diff --git a/examples/cairo_example.py b/examples/cairo_example.py index 14a7037..fcd7a44 100644 --- a/examples/cairo_example.py +++ b/examples/cairo_example.py @@ -24,46 +24,54 @@ a .png file. """ import os -from gerber import read -from gerber.render import GerberCairoContext, theme +from gerber import load_layer +from gerber.render import GerberCairoContext, RenderSettings, theme GERBER_FOLDER = os.path.abspath(os.path.join(os.path.dirname(__file__), 'gerbers')) # Open the gerber files -copper = read(os.path.join(GERBER_FOLDER, 'copper.GTL')) -mask = read(os.path.join(GERBER_FOLDER, 'soldermask.GTS')) -silk = read(os.path.join(GERBER_FOLDER, 'silkscreen.GTO')) -drill = read(os.path.join(GERBER_FOLDER, 'ncdrill.DRD')) +copper = load_layer(os.path.join(GERBER_FOLDER, 'copper.GTL')) +mask = load_layer(os.path.join(GERBER_FOLDER, 'soldermask.GTS')) +silk = load_layer(os.path.join(GERBER_FOLDER, 'silkscreen.GTO')) +drill = load_layer(os.path.join(GERBER_FOLDER, 'ncdrill.DRD')) # Create a new drawing context ctx = GerberCairoContext() -# Set opacity and color for copper layer -ctx.alpha = 1.0 -ctx.color = theme.COLORS['hasl copper'] - -# Draw the copper layer -copper.render(ctx) - -# Set opacity and color for soldermask layer -ctx.alpha = 0.75 -ctx.color = theme.COLORS['green soldermask'] +# Draw the copper layer. render_layer() uses the default color scheme for the +# layer, based on the layer type. Copper layers are rendered as +ctx.render_layer(copper) # Draw the soldermask layer -mask.render(ctx, invert=True) +ctx.render_layer(mask) -# Set opacity and color for silkscreen layer -ctx.alpha = 1.0 -ctx.color = theme.COLORS['white'] -# Draw the silkscreen layer -silk.render(ctx) +# The default style can be overridden by passing a RenderSettings instance to +# render_layer(). +# First, create a settings object: +our_settings = RenderSettings(color=theme.COLORS['white'], alpha=0.85) -# Set opacity for drill layer -ctx.alpha = 1.0 -ctx.color = theme.COLORS['black'] -drill.render(ctx) +# Draw the silkscreen layer, and specify the rendering settings to use +ctx.render_layer(silk, settings=our_settings) + +# Draw the drill layer +ctx.render_layer(drill) # Write output to png file ctx.dump(os.path.join(os.path.dirname(__file__), 'cairo_example.png')) + +# Load the bottom layers +copper = load_layer(os.path.join(GERBER_FOLDER, 'bottom_copper.GBL')) +mask = load_layer(os.path.join(GERBER_FOLDER, 'bottom_mask.GBS')) + +# Clear the drawing +ctx.clear() + +# Render bottom layers +ctx.render_layer(copper) +ctx.render_layer(mask) +ctx.render_layer(drill) + +# Write png file +ctx.dump(os.path.join(os.path.dirname(__file__), 'cairo_bottom.png')) diff --git a/examples/pcb_bottom.png b/examples/pcb_bottom.png index b2dab0c..1834c06 100644 Binary files a/examples/pcb_bottom.png and b/examples/pcb_bottom.png differ diff --git a/examples/pcb_example.py b/examples/pcb_example.py index bba030e..d09c17a 100644 --- a/examples/pcb_example.py +++ b/examples/pcb_example.py @@ -1,7 +1,7 @@ #! /usr/bin/env python # -*- coding: utf-8 -*- -# Copyright 2015 Hamilton Kibbe +# Copyright 2016 Hamilton Kibbe # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -27,14 +27,25 @@ from gerber.render import GerberCairoContext, theme GERBER_FOLDER = os.path.abspath(os.path.join(os.path.dirname(__file__), 'gerbers')) - # Create a new drawing context ctx = GerberCairoContext() -# Create a new PCB +# Create a new PCB instance pcb = PCB.from_directory(GERBER_FOLDER) -# Render PCB -ctx.render_layers(pcb.top_layers, os.path.join(os.path.dirname(__file__), 'pcb_top.png',), theme.THEMES['OSH Park']) -ctx.render_layers(pcb.bottom_layers, os.path.join(os.path.dirname(__file__), 'pcb_bottom.png'), theme.THEMES['OSH Park']) +# Render PCB top view +ctx.render_layers(pcb.top_layers, + os.path.join(os.path.dirname(__file__), 'pcb_top.png',), + theme.THEMES['OSH Park']) + +# Render PCB bottom view +ctx.render_layers(pcb.bottom_layers, + os.path.join(os.path.dirname(__file__), 'pcb_bottom.png'), + theme.THEMES['OSH Park']) + +# Render copper layers only +ctx.render_layers(pcb.copper_layers + pcb.drill_layers, + os.path.join(os.path.dirname(__file__), + 'pcb_transparent_copper.png'), + theme.THEMES['Transparent Copper']) diff --git a/examples/pcb_top.png b/examples/pcb_top.png index 60bc245..4e4f656 100644 Binary files a/examples/pcb_top.png and b/examples/pcb_top.png differ diff --git a/examples/pcb_transparent_copper.png b/examples/pcb_transparent_copper.png new file mode 100644 index 0000000..f54d05f Binary files /dev/null and b/examples/pcb_transparent_copper.png differ -- cgit