=== modified file 'share/extensions/measure.inx' --- share/extensions/measure.inx 2014-04-02 19:22:44 +0000 +++ share/extensions/measure.inx 2015-05-31 12:16:23 +0000 @@ -11,11 +11,29 @@ <_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="0%">Start + <_item value="50%">Middle + <_item value="100%">End + <_item value="custom">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 geom bbox + + 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-05-31 12:16:23 +0000 @@ -137,6 +137,22 @@ action="store", type="string", dest="format", default="textonpath", help="Text Orientation") + self.OptionParser.add_option("--startOffset", + action="store", type="string", + dest="startOffset", default="0%", + 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", dest="angle", default=0, @@ -199,7 +215,7 @@ 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 + 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 +225,28 @@ 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.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, 'start', '50%', self.options.offset) + 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, 'start', '0%', self.options.offset) + self.addTextOnPath(self.group, 0, 0, lenstr+' '+self.options.unit+'^2', id, self.options.anchor, startOffset, self.options.offset) else: + if self.options.position == "start": + tx = p[0][0][1][0] + ty = p[0][0][1][1] + anchor = 'start' + else: + bbox = simpletransform.computeBBox([node]) + tx = bbox[0] + (bbox[1] - bbox[0])/2.0 + ty = bbox[2] + (bbox[3] - bbox[2])/2.0 + anchor = 'middle' 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) + 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, 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) + self.addTextWithTspan(self.group, tx, ty, lenstr+' '+self.options.unit+'^2', id, anchor, -int(self.options.angle), -self.options.offset + self.options.fontsize/2) def addCross(self, node, x, y, scale): l = 3*scale # 3 pixels in document units