From 446a5865a327de5afb7172c0d6facd9734bc2636 Mon Sep 17 00:00:00 2001 From: George Lamprianidis Date: Thu, 14 Mar 2013 18:11:59 +0200 Subject: [PATCH] Add support for line offset parameter --- cascadenik-compile.py | 0 cascadenik/compile.py | 11 +++++++---- cascadenik/output.py | 6 +++++- cascadenik/style.py | 3 +++ 4 files changed, 15 insertions(+), 5 deletions(-) mode change 100644 => 100755 cascadenik-compile.py diff --git a/cascadenik-compile.py b/cascadenik-compile.py old mode 100644 new mode 100755 diff --git a/cascadenik/compile.py b/cascadenik/compile.py index 2f243e0..6a24ebd 100644 --- a/cascadenik/compile.py +++ b/cascadenik/compile.py @@ -905,7 +905,7 @@ def get_line_rules(declarations): This function is wise to line-, inline-, and outline- properties, and will generate multiple LineSymbolizers if necessary. """ - property_map = {'line-color': 'stroke', 'line-width': 'stroke-width', + property_map = {'line-color': 'stroke', 'line-width': 'stroke-width', 'line-offset': 'offset', 'line-opacity': 'stroke-opacity', 'line-join': 'stroke-linejoin', 'line-cap': 'stroke-linecap', 'line-dasharray': 'stroke-dasharray', 'line-meta-output': 'meta-output', 'line-meta-writer': 'meta-writer'} @@ -926,34 +926,37 @@ def get_line_rules(declarations): width = values.has_key('line-width') and values['line-width'].value color = values.has_key('line-color') and values['line-color'].value + offset = values.has_key('line-offset') and values['line-offset'].value or None opacity = values.has_key('line-opacity') and values['line-opacity'].value or None join = values.has_key('line-join') and values['line-join'].value or None cap = values.has_key('line-cap') and values['line-cap'].value or None dashes = values.has_key('line-dasharray') and values['line-dasharray'].value or None - line_symbolizer = color and width and output.LineSymbolizer(color, width, opacity, join, cap, dashes) or False + line_symbolizer = color and width and output.LineSymbolizer(color, width, opacity, join, cap, dashes, offset) or False width = values.has_key('inline-width') and values['inline-width'].value color = values.has_key('inline-color') and values['inline-color'].value + offset = values.has_key('line-offset') and values['line-offset'].value or None opacity = values.has_key('inline-opacity') and values['inline-opacity'].value or None join = values.has_key('inline-join') and values['inline-join'].value or None cap = values.has_key('inline-cap') and values['inline-cap'].value or None dashes = values.has_key('inline-dasharray') and values['inline-dasharray'].value or None - inline_symbolizer = color and width and output.LineSymbolizer(color, width, opacity, join, cap, dashes) or False + inline_symbolizer = color and width and output.LineSymbolizer(color, width, opacity, join, cap, dashes, offset) or False # outline requires regular line to have a meaningful width width = values.has_key('outline-width') and values.has_key('line-width') \ and values['line-width'].value + values['outline-width'].value * 2 color = values.has_key('outline-color') and values['outline-color'].value + offset = values.has_key('line-offset') and values['line-offset'].value or None opacity = values.has_key('outline-opacity') and values['outline-opacity'].value or None join = values.has_key('outline-join') and values['outline-join'].value or None cap = values.has_key('outline-cap') and values['outline-cap'].value or None dashes = values.has_key('outline-dasharray') and values['outline-dasharray'].value or None - outline_symbolizer = color and width and output.LineSymbolizer(color, width, opacity, join, cap, dashes) or False + outline_symbolizer = color and width and output.LineSymbolizer(color, width, opacity, join, cap, dashes, offset) or False if outline_symbolizer or line_symbolizer or inline_symbolizer: rules.append(make_rule(filter, outline_symbolizer, line_symbolizer, inline_symbolizer)) diff --git a/cascadenik/output.py b/cascadenik/output.py index 8335c8b..5fbc33e 100644 --- a/cascadenik/output.py +++ b/cascadenik/output.py @@ -219,13 +219,14 @@ def to_mapnik(self): return sym class LineSymbolizer: - def __init__(self, color, width, opacity=None, join=None, cap=None, dashes=None): + def __init__(self, color, width, opacity=None, join=None, cap=None, dashes=None, offset=None): assert color.__class__ is style.color assert type(width) in (int, float) assert opacity is None or type(opacity) in (int, float) assert join is None or isinstance(join, basestring) assert cap is None or isinstance(cap, basestring) assert dashes is None or dashes.__class__ is style.numbers + assert offset is None or type(offset) in (int, float) self.color = color self.width = width @@ -233,6 +234,7 @@ def __init__(self, color, width, opacity=None, join=None, cap=None, dashes=None) self.join = safe_str(join) self.cap = safe_str(cap) self.dashes = dashes + self.offset = offset def __repr__(self): return 'Line(%s, %s)' % (self.color, self.width) @@ -258,6 +260,8 @@ def to_mapnik(self): stroke.add_dash(length, gap) sym = mapnik.LineSymbolizer(stroke) + if self.offset != None: + sym.offset = self.offset return sym diff --git a/cascadenik/style.py b/cascadenik/style.py index 17cb433..1a17e09 100644 --- a/cascadenik/style.py +++ b/cascadenik/style.py @@ -106,6 +106,9 @@ def __eq__(self, other): # 0.0 - n (default 1.0) 'line-width': float, + # 0.0 - n (default 1.0) + 'line-offset': float, + # 0.0 - 1.0 (default 1.0) 'line-opacity': float,