=== modified file 'share/extensions/measure.inx'
--- share/extensions/measure.inx 2014-04-02 19:22:44 +0000
+++ share/extensions/measure.inx 2015-06-24 07:23:45 +0000
@@ -11,11 +11,36 @@
<_item msgctxt="measure extension" value="area">Area
<_item msgctxt="measure extension" value="cofm">Center of Mass
-
- <_item msgctxt="measure extension" value="textonpath">Text On Path
- <_item msgctxt="measure extension" value="angle">Fixed Angle
+
+
+
+ <_item value="default">Default
+ <_item value="TaP_start">Text on Path, Start
+ <_item value="TaP_middle">Text on Path, Middle
+ <_item value="TaP_end">Text on Path, End
+ <_item value="FT_start">Fixed Text, Start of Path
+ <_item value="FT_bbox">Fixed Text, Center of BBox
+ <_item value="FT_mass">Fixed Text, Center of Mass
+
+
+
+ custom
+ 50
+
+ <_item value="start">Left
+ <_item value="middle">Center
+ <_item value="end">Right
+
+
+
+
+ <_item value="start">Start of Path
+ <_item value="center">Center of BBox
+ <_item value="mass">Center of Mass
+
+ 0
+
- 0
12
-6
2
=== modified file 'share/extensions/measure.py'
--- share/extensions/measure.py 2015-05-28 10:59:37 +0000
+++ share/extensions/measure.py 2015-06-24 07:23:45 +0000
@@ -5,6 +5,7 @@
Area and Center of Mass calculated using Green's Theorem:
http://mathworld.wolfram.com/GreensTheorem.html
+Copyright (C) 2015 ~suv
Copyright (C) 2010 Alvin Penner
Copyright (C) 2006 Georg Wiora
Copyright (C) 2006 Nathan Hurst
@@ -130,17 +131,37 @@
def __init__(self):
inkex.Effect.__init__(self)
self.OptionParser.add_option("--type",
- action="store", type="string",
- dest="type", default="length",
+ action="store", type="string",
+ dest="type_", default="length",
help="Type of measurement")
self.OptionParser.add_option("--format",
- action="store", type="string",
- dest="format", default="textonpath",
+ action="store", type="string",
+ dest="format_", default="textonpath",
help="Text Orientation")
+ self.OptionParser.add_option("--presetFormat",
+ action="store", type="string",
+ dest="presetFormat", default="TaP_start",
+ help="Preset text layout")
+ self.OptionParser.add_option("--startOffset",
+ action="store", type="string",
+ dest="startOffset", default="custom",
+ help="Text Offset along Path")
+ self.OptionParser.add_option("--startOffsetCustom",
+ action="store", type="int",
+ dest="startOffsetCustom", default=50,
+ help="Text Offset along Path")
+ self.OptionParser.add_option("--anchor",
+ action="store", type="string",
+ dest="anchor", default="start",
+ help="Text Anchor")
+ self.OptionParser.add_option("--position",
+ action="store", type="string",
+ dest="position", default="start",
+ help="Text Position")
self.OptionParser.add_option("--angle",
- action="store", type="float",
+ action="store", type="float",
dest="angle", default=0,
- help="Angle")
+ help="Angle")
self.OptionParser.add_option("-f", "--fontsize",
action="store", type="int",
dest="fontsize", default=20,
@@ -195,11 +216,11 @@
mat = simpletransform.composeParents(node, [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]])
p = cubicsuperpath.parsePath(node.get('d'))
simpletransform.applyTransformToPath(mat, p)
- if self.options.type == "length":
+ if self.options.type_ == "length":
slengths, stotal = csplength(p)
self.group = inkex.etree.SubElement(node.getparent(),inkex.addNS('text','svg'))
- elif self.options.type == "area":
- stotal = csparea(p)*factor*self.options.scale
+ elif self.options.type_ == "area":
+ stotal = abs(csparea(p)*factor*self.options.scale)
self.group = inkex.etree.SubElement(node.getparent(),inkex.addNS('text','svg'))
else:
xc, yc = cspcofm(p)
@@ -209,16 +230,59 @@
continue
# Format the length as string
lenstr = locale.format("%(len)25."+str(prec)+"f",{'len':round(stotal*factor*self.options.scale,prec)}).strip()
- if self.options.format == 'textonpath':
- if self.options.type == "length":
- self.addTextOnPath(self.group, 0, 0, lenstr+' '+self.options.unit, id, 'start', '50%', self.options.offset)
- else:
- self.addTextOnPath(self.group, 0, 0, lenstr+' '+self.options.unit+'^2', id, 'start', '0%', self.options.offset)
+ if self.options.format_ == '"presets"':
+ self.setPreset()
+ if self.options.format_ == '"textonpath"':
+ startOffset = self.options.startOffset
+ if startOffset == "custom":
+ startOffset = '{}%'.format(self.options.startOffsetCustom)
+ if self.options.type_ == "length":
+ self.addTextOnPath(self.group, 0, 0, lenstr+' '+self.options.unit, id, self.options.anchor, startOffset, self.options.offset)
+ else:
+ self.addTextOnPath(self.group, 0, 0, lenstr+' '+self.options.unit+'^2', id, self.options.anchor, startOffset, self.options.offset)
+ elif self.options.format_ == '"fixedtext"':
+ if self.options.position == "mass":
+ tx, ty = cspcofm(p)
+ anchor = 'middle'
+ elif self.options.position == "center":
+ bbox = simpletransform.computeBBox([node])
+ tx = bbox[0] + (bbox[1] - bbox[0])/2.0
+ ty = bbox[2] + (bbox[3] - bbox[2])/2.0
+ anchor = 'middle'
+ else: # default
+ tx = p[0][0][1][0]
+ ty = p[0][0][1][1]
+ anchor = 'start'
+ if self.options.type_ == "length":
+ self.addTextWithTspan(self.group, tx, ty, lenstr+' '+self.options.unit, id, anchor, -int(self.options.angle), self.options.offset + self.options.fontsize/2)
+ else:
+ self.addTextWithTspan(self.group, tx, ty, lenstr+' '+self.options.unit+'^2', id, anchor, -int(self.options.angle), -self.options.offset + self.options.fontsize/2)
else:
- if self.options.type == "length":
- self.addTextWithTspan(self.group, p[0][0][1][0], p[0][0][1][1], lenstr+' '+self.options.unit, id, 'start', -int(self.options.angle), self.options.offset + self.options.fontsize/2)
- else:
- self.addTextWithTspan(self.group, p[0][0][1][0], p[0][0][1][1], lenstr+' '+self.options.unit+'^2', id, 'start', -int(self.options.angle), -self.options.offset + self.options.fontsize/2)
+ # center of mass, no text
+ pass
+
+ def setPreset(self):
+ # keep dict in sync with enum in INX file:
+ preset_dict = {
+ 'default_length': ['"textonpath"', "50%", "start", None, None],
+ 'default_area': ['"fixedtext"', None, None, "start", 0.0],
+ 'default_cofm': [None, None, None, None, None],
+ 'TaP_start': ['"textonpath"', "0%", "start", None, None],
+ 'TaP_middle': ['"textonpath"', "50%", "middle", None, None],
+ 'TaP_end': ['"textonpath"', "100%", "end", None, None],
+ 'FT_start': ['"fixedtext"', None, None, "start", 0.0],
+ 'FT_bbox': ['"fixedtext"', None, None, "center", 0.0],
+ 'FT_mass': ['"fixedtext"', None, None, "mass", 0.0],
+ }
+ if self.options.presetFormat == "default":
+ current_preset = 'default_{}'.format(self.options.type_)
+ else:
+ current_preset = self.options.presetFormat
+ self.options.format_ = preset_dict[current_preset][0]
+ self.options.startOffset = preset_dict[current_preset][1]
+ self.options.anchor = preset_dict[current_preset][2]
+ self.options.position = preset_dict[current_preset][3]
+ self.options.angle = preset_dict[current_preset][4]
def addCross(self, node, x, y, scale):
l = 3*scale # 3 pixels in document units