From 25a07ede90a2dc265281cd025ccd9ce069f0d709 Mon Sep 17 00:00:00 2001 From: Juan Pablo Caram Date: Sat, 4 Jan 2014 16:20:57 -0500 Subject: [PATCH] Gerber extends Geometry, added Geometry.isolation_geometry() --- camlib.py | 56 ++++++++++++++++++++++++++++++++++++----------------- camlib.pyc | Bin 45148 -> 48107 bytes 2 files changed, 38 insertions(+), 18 deletions(-) diff --git a/camlib.py b/camlib.py index fbea85b8..893464fa 100644 --- a/camlib.py +++ b/camlib.py @@ -16,10 +16,46 @@ from shapely.geometry import box as shply_box from shapely.ops import cascaded_union -class Gerber(): +class Geometry: def __init__(self): # Units (in or mm) - self.units = 'in' + self.units = 'in' + + # Final geometry: MultiPolygon + self.solid_geometry = None + + def isolation_geometry(self, offset): + ''' + Creates contours around geometry at a given + offset distance. + ''' + return self.solid_geometry.buffer(offset) + + def bounds(self): + ''' + Returns coordinates of rectangular bounds + of geometry: (xmin, ymin, xmax, ymax). + ''' + if self.solid_geometry == None: + print "Warning: solid_geometry not computed yet." + return (0,0,0,0) + return self.solid_geometry.bounds + + def size(self): + ''' + Returns (width, height) of rectangular + bounds of geometry. + ''' + if self.solid_geometry == None: + print "Warning: solid_geometry not computed yet." + return 0 + bounds = self.bounds() + return (bounds[2]-bounds[0], bounds[3]-bounds[1]) + +class Gerber (Geometry): + def __init__(self): + # Initialize parent + Geometry.__init__(self) # Number format self.digits = 3 @@ -45,22 +81,6 @@ class Gerber(): # Flashes [{'loc':[float,float], 'aperture':dict}] self.flashes = [] - # Final geometry: MultiPolygon - self.solid_geometry = None - - def bounds(self): - if self.solid_geometry == None: - print "Warning: solid_geometry not computed yet." - return (0,0,0,0) - return self.solid_geometry.bounds - - def size(self): - if self.solid_geometry == None: - print "Warning: solid_geometry not computed yet." - return 0 - bounds = self.bounds() - return (bounds[2]-bounds[0], bounds[3]-bounds[1]) - def fix_regions(self): ''' Overwrites the region polygons with fixed diff --git a/camlib.pyc b/camlib.pyc index 97bc744846fb452057afcc14d4e9e7194102653c..09514b84c73c9c2a3e54e1d1cccc5e36ba0d78f4 100644 GIT binary patch delta 6824 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