Allow renderer to write to memory per #38
Some updates to rendering colors/themes
This commit is contained in:
parent
d1598b46c9
commit
af5541ac93
5 changed files with 35 additions and 11 deletions
|
|
@ -256,9 +256,10 @@ class CamFile(object):
|
|||
"""
|
||||
ctx.set_bounds(self.bounds)
|
||||
ctx._paint_background()
|
||||
|
||||
if invert:
|
||||
ctx.invert = True
|
||||
ctx._paint_inverted_layer()
|
||||
ctx._clear_mask()
|
||||
for p in self.primitives:
|
||||
ctx.render(p)
|
||||
if invert:
|
||||
|
|
|
|||
|
|
@ -18,14 +18,18 @@
|
|||
class ParseError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class GerberParseError(ParseError):
|
||||
pass
|
||||
|
||||
|
||||
class ExcellonParseError(ParseError):
|
||||
pass
|
||||
|
||||
|
||||
class ExcellonFileError(IOError):
|
||||
pass
|
||||
|
||||
|
||||
class GerberFileError(IOError):
|
||||
pass
|
||||
|
|
|
|||
|
|
@ -15,16 +15,20 @@
|
|||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
|
||||
from .render import GerberContext
|
||||
|
||||
import cairocffi as cairo
|
||||
|
||||
from operator import mul
|
||||
import math
|
||||
import tempfile
|
||||
|
||||
from .render import GerberContext
|
||||
from ..primitives import *
|
||||
|
||||
try:
|
||||
from cStringIO import StringIO
|
||||
except(ImportError):
|
||||
from io import StringIO
|
||||
|
||||
|
||||
class GerberCairoContext(GerberContext):
|
||||
def __init__(self, scale=300):
|
||||
|
|
@ -184,7 +188,7 @@ class GerberCairoContext(GerberContext):
|
|||
self.ctx.show_text(primitive.net_name)
|
||||
self.ctx.scale(1, -1)
|
||||
|
||||
def _paint_inverted_layer(self):
|
||||
def _clear_mask(self):
|
||||
self.mask_ctx.set_operator(cairo.OPERATOR_OVER)
|
||||
self.mask_ctx.set_source_rgba(*self.color, alpha=self.alpha)
|
||||
self.mask_ctx.paint()
|
||||
|
|
@ -214,7 +218,16 @@ class GerberCairoContext(GerberContext):
|
|||
else:
|
||||
self.surface.write_to_png(filename)
|
||||
|
||||
def dump_str(self):
|
||||
""" Return a string containing the rendered image.
|
||||
"""
|
||||
fobj = StringIO()
|
||||
self.surface.write_to_png(fobj)
|
||||
return fobj.getvalue()
|
||||
|
||||
def dump_svg_str(self):
|
||||
""" Return a string containg the rendered SVG.
|
||||
"""
|
||||
self.surface.finish()
|
||||
self.surface_buffer.flush()
|
||||
return self.surface_buffer.read()
|
||||
|
|
|
|||
|
|
@ -19,12 +19,13 @@
|
|||
COLORS = {
|
||||
'black': (0.0, 0.0, 0.0),
|
||||
'white': (1.0, 1.0, 1.0),
|
||||
'fr-4': (0.702, 0.655, 0.192),
|
||||
'fr-4': (0.290, 0.345, 0.0),
|
||||
'green soldermask': (0.0, 0.612, 0.396),
|
||||
'blue soldermask': (0.059, 0.478, 0.651),
|
||||
'red soldermask': (0.968, 0.169, 0.165),
|
||||
'black soldermask': (0.298, 0.275, 0.282),
|
||||
'enig copper': (0.780, 0.588, 0.286),
|
||||
'purple soldermask': (0.2, 0.0, 0.334),
|
||||
'enig copper': (0.686, 0.525, 0.510),
|
||||
'hasl copper': (0.871, 0.851, 0.839)
|
||||
}
|
||||
|
||||
|
|
@ -40,11 +41,19 @@ class Theme(object):
|
|||
def __init__(self, **kwargs):
|
||||
self.background = kwargs.get('background', RenderSettings(COLORS['black'], 0.0))
|
||||
self.topsilk = kwargs.get('topsilk', RenderSettings(COLORS['white']))
|
||||
self.topsilk = kwargs.get('bottomsilk', RenderSettings(COLORS['white']))
|
||||
self.topmask = kwargs.get('topmask', RenderSettings(COLORS['green soldermask'], 0.8, True))
|
||||
self.bottomsilk = kwargs.get('bottomsilk', RenderSettings(COLORS['white']))
|
||||
self.topmask = kwargs.get('topmask', RenderSettings(COLORS['green soldermask'], 0.8, True))
|
||||
self.bottommask = kwargs.get('bottommask', RenderSettings(COLORS['green soldermask'], 0.8, True))
|
||||
self.top = kwargs.get('top', RenderSettings(COLORS['hasl copper']))
|
||||
self.bottom = kwargs.get('top', RenderSettings(COLORS['hasl copper']))
|
||||
self.drill = kwargs.get('drill', self.background)
|
||||
|
||||
|
||||
THEMES = {
|
||||
'Default': Theme(),
|
||||
'Osh Park': Theme(top=COLORS['enig copper'],
|
||||
bottom=COLORS['enig copper'],
|
||||
topmask=COLORS['purple soldermask'],
|
||||
bottommask=COLORS['purple soldermask']),
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -110,16 +110,13 @@ class GerberFile(CamFile):
|
|||
def bounds(self):
|
||||
min_x = min_y = 1000000
|
||||
max_x = max_y = -1000000
|
||||
|
||||
for stmt in [stmt for stmt in self.statements if isinstance(stmt, CoordStmt)]:
|
||||
if stmt.x is not None:
|
||||
min_x = min(stmt.x, min_x)
|
||||
max_x = max(stmt.x, max_x)
|
||||
|
||||
if stmt.y is not None:
|
||||
min_y = min(stmt.y, min_y)
|
||||
max_y = max(stmt.y, max_y)
|
||||
|
||||
return ((min_x, max_x), (min_y, max_y))
|
||||
|
||||
def write(self, filename, settings=None):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue