From 6f876edd09d9b81649691e529f85653f14b8fd1c Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Tue, 22 Dec 2015 02:45:48 -0500 Subject: Add PCB interface this incorporates some of @chintal's layers.py changes PCB.from_directory() simplifies loading of multiple gerbers the PCB() class should be pretty helpful going forward... the context classes could use some cleaning up, although I'd like to wait until the freecad stuff gets merged, that way we can try to refactor the context base to support more use cases --- examples/pcb_example.py | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 examples/pcb_example.py (limited to 'examples/pcb_example.py') diff --git a/examples/pcb_example.py b/examples/pcb_example.py new file mode 100644 index 0000000..5341da0 --- /dev/null +++ b/examples/pcb_example.py @@ -0,0 +1,39 @@ +#! /usr/bin/env python +# -*- coding: utf-8 -*- + +# Copyright 2015 Hamilton Kibbe + +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at + +# http://www.apache.org/licenses/LICENSE-2.0 + +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +""" +This example demonstrates the use of pcb-tools with cairo to render composite +images using the PCB interface +""" + +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')) + + +# Create a new drawing context +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')) + -- cgit 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/pcb_example.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'examples/pcb_example.py') 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']) -- 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/pcb_example.py | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) (limited to 'examples/pcb_example.py') 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']) -- cgit From 8cd842a41a55ab3d8f558a2e3e198beba7da58a1 Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Thu, 21 Jan 2016 03:57:44 -0500 Subject: Manually mere rendering changes --- examples/pcb_example.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'examples/pcb_example.py') 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']) -- cgit From 19a8fb00487ca182bd3127b4def52719d8be3e30 Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Tue, 13 Dec 2016 20:22:54 -0500 Subject: Add max_width and max_height arguments to --- examples/pcb_example.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'examples/pcb_example.py') diff --git a/examples/pcb_example.py b/examples/pcb_example.py index e6a56fc..9e066a8 100644 --- a/examples/pcb_example.py +++ b/examples/pcb_example.py @@ -37,16 +37,16 @@ pcb = PCB.from_directory(GERBER_FOLDER) # Render PCB top view ctx.render_layers(pcb.top_layers, os.path.join(os.path.dirname(__file__), 'pcb_top.png',), - theme.THEMES['OSH Park']) + theme.THEMES['OSH Park'], max_width=800, max_height=600) # Render PCB bottom view ctx.render_layers(pcb.bottom_layers, os.path.join(os.path.dirname(__file__), 'pcb_bottom.png'), - theme.THEMES['OSH Park']) + theme.THEMES['OSH Park'], max_width=800, max_height=600) # 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']) + theme.THEMES['Transparent Copper'], max_width=800, max_height=600) -- cgit From 5245fb925684b4ebe056e6509bfeca6b167903b5 Mon Sep 17 00:00:00 2001 From: Hamilton Kibbe Date: Tue, 5 Jun 2018 08:57:37 -0400 Subject: Fix hard requirement of cairo per #83, and add stubs for required subclass methods to GerberContext per #84 --- examples/pcb_example.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'examples/pcb_example.py') diff --git a/examples/pcb_example.py b/examples/pcb_example.py index 9e066a8..34afee6 100644 --- a/examples/pcb_example.py +++ b/examples/pcb_example.py @@ -22,7 +22,8 @@ images using the PCB interface import os from gerber import PCB -from gerber.render import GerberCairoContext, theme +from gerber.render import theme +from gerber.render.cairo_backend import GerberCairoContext GERBER_FOLDER = os.path.abspath(os.path.join(os.path.dirname(__file__), 'gerbers')) -- cgit