128 lines
4.1 KiB
Python
128 lines
4.1 KiB
Python
|
#!/usr/bin/env python2
|
||
|
|
||
|
|
||
|
# Copyright 2016 Luke Phillips (lukerazor@hotmail.com)
|
||
|
# This program is free software; you can redistribute it and/or modify
|
||
|
# it under the terms of the GNU General Public License as published by
|
||
|
# the Free Software Foundation; either version 2 of the License, or
|
||
|
# (at your option) any later version.
|
||
|
#
|
||
|
# This program is distributed in the hope that it will be useful,
|
||
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
# GNU General Public License for more details.
|
||
|
#
|
||
|
# You should have received a copy of the GNU General Public License
|
||
|
#along with this program; if not, write to the Free Software
|
||
|
#Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||
|
|
||
|
# Extension dirs
|
||
|
# linux:~/.config/inkscape/extensions
|
||
|
# windows: D:\Program Files\Inkscape\share\extensions
|
||
|
|
||
|
import inkex
|
||
|
import simplestyle
|
||
|
import simplepath
|
||
|
from inkex import *
|
||
|
import csv
|
||
|
import fnmatch
|
||
|
import re
|
||
|
import os
|
||
|
import os.path
|
||
|
import lxml
|
||
|
from lxml import etree
|
||
|
from copy import deepcopy
|
||
|
import sys
|
||
|
import copy
|
||
|
|
||
|
CSNS = ""
|
||
|
|
||
|
NSS[u'cs'] = u'http://www.razorfoss.org/tuckboxextension/'
|
||
|
|
||
|
class PaperBase():
|
||
|
def __init__(self, width, height):
|
||
|
self.Width = width
|
||
|
self.Height = height
|
||
|
|
||
|
class A5(PaperBase):
|
||
|
def __init__(self):
|
||
|
PaperBase.__init__(self, 150, 100)
|
||
|
|
||
|
class InsertPaperTemplateEffect(inkex.Effect):
|
||
|
def __init__(self):
|
||
|
inkex.Effect.__init__(self)
|
||
|
self.OptionParser.add_option('-p', '--papertype', action = 'store', type = 'string', dest = 'PaperType')
|
||
|
self.OptionParser.add_option('-s', '--show_type', action = 'store', type = 'string', dest = 'ShowType')
|
||
|
|
||
|
### colour ###
|
||
|
self.StrokeWidthFloat = 0.5
|
||
|
self.StrokeWidth = self.MMtoUU(self.StrokeWidthFloat)
|
||
|
|
||
|
self.FontSize = "11px"
|
||
|
|
||
|
def effect(self):
|
||
|
self.Group = inkex.etree.SubElement(self.current_layer, inkex.addNS('g','svg'), {} )
|
||
|
|
||
|
paperTypes = {}
|
||
|
paperTypes["A5"] = (148, 210, "#ffeeaa") # yellow
|
||
|
paperTypes["A4"] = (210, 297, "#ffccaa") # orange
|
||
|
paperTypes["A3"] = (297, 420, "#afdde9") # blue
|
||
|
paperTypes["A2"] = (420, 594, "#ccaaff") # purple
|
||
|
paperTypes["A1"] = (594, 841, "#afe9c6") # green
|
||
|
paperTypes["A0"] = (841, 1189, "#ffd5d5") # red
|
||
|
|
||
|
paperTypes["POKER"] = (63.5, 88, "#ffffff") # white
|
||
|
paperTypes["BRIDGE"] = (56, 88, "#ffffff") # white
|
||
|
paperTypes["MINI_US"] = (41, 63, "#ffffff") # white
|
||
|
paperTypes["MINI_EU"] = (44, 68, "#ffffff") # white
|
||
|
paperTypes["TAROT"] = (70, 120, "#ffffff") # white
|
||
|
|
||
|
|
||
|
if self.options.PaperType in paperTypes:
|
||
|
self.CreateTemplate(self.options.PaperType, *(paperTypes[self.options.PaperType]))
|
||
|
else:
|
||
|
raise Exception("Paper type '{0}' is undefined".format(self.options.PaperType))
|
||
|
|
||
|
def CreateTemplate(self, label, width, height, colour):
|
||
|
# TODO Read mouse position
|
||
|
x = 0
|
||
|
y = 0
|
||
|
self._CreateRectangleInMillimetres(width-self.StrokeWidthFloat, height-self.StrokeWidthFloat, x, y, colour)
|
||
|
if self.options.ShowType == "true":
|
||
|
self._CreateText(label, x + width/2 , y + height/2)
|
||
|
|
||
|
def _CreateText(self, labelText, x, y):
|
||
|
style = {'stroke': '#000000',
|
||
|
'stroke-width': self.StrokeWidth,
|
||
|
'fill' : '#000000',
|
||
|
'font-size' : self.FontSize,
|
||
|
'text-align' : 'center',
|
||
|
'text-anchor' : 'middle'
|
||
|
}
|
||
|
|
||
|
attribs = {'style': simplestyle.formatStyle(style), 'x': self.MMtoUU(x), 'y': self.MMtoUU(y)}
|
||
|
|
||
|
text = inkex.etree.Element(inkex.addNS('text','svg'), attribs)
|
||
|
text.text = labelText
|
||
|
|
||
|
self.Group.append(text)
|
||
|
|
||
|
def _CreateRectangleInMillimetres(self, width, height, x, y, color):
|
||
|
style = {'stroke': '#000000', 'stroke-width': self.StrokeWidth, 'fill' : color}
|
||
|
attribs = {'style': simplestyle.formatStyle(style), 'height': self.MMtoUU(height), 'width': self.MMtoUU(width), 'x': self.MMtoUU(x), 'y': self.MMtoUU(y)}
|
||
|
inkex.etree.SubElement(self.Group, inkex.addNS('rect','svg'), attribs )
|
||
|
|
||
|
def MMtoUU(self, mmval):
|
||
|
if hasattr(self, "xxxunittouu"):
|
||
|
return str(self.unittouu("{0}mm".format(mmval)))
|
||
|
else:
|
||
|
MM_TO_PIXELS = 1
|
||
|
|
||
|
return str(MM_TO_PIXELS * mmval)
|
||
|
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
creator = InsertPaperTemplateEffect()
|
||
|
|
||
|
creator.affect()
|