diff options
| author | Alvin Penner <penner@vaxxine.com> | 2012-03-12 21:57:44 +0000 |
|---|---|---|
| committer | apenner <penner@vaxxine.com> | 2012-03-12 21:57:44 +0000 |
| commit | cb6a274dca37293697b0e5e8c57ed1d29882df7f (patch) | |
| tree | 01e0d0da5833e33c3b43687fe245eac369457958 | |
| parent | Fix deprecated Gtk::Widget flags (diff) | |
| download | inkscape-cb6a274dca37293697b0e5e8c57ed1d29882df7f.tar.gz inkscape-cb6a274dca37293697b0e5e8c57ed1d29882df7f.zip | |
extensions. measure path. add option to choose text angle (Bug 946098)
Fixed bugs:
- https://launchpad.net/bugs/946098
(bzr r11074)
| -rw-r--r-- | share/extensions/measure.inx | 22 | ||||
| -rwxr-xr-x | share/extensions/measure.py | 37 |
2 files changed, 47 insertions, 12 deletions
diff --git a/share/extensions/measure.inx b/share/extensions/measure.inx index 63a919806..67d44616f 100644 --- a/share/extensions/measure.inx +++ b/share/extensions/measure.inx @@ -10,6 +10,25 @@ <_item value="length">Length</_item> <_item msgctxt="measure extension" value="area">Area</_item> </param> + <param name="format" type="enum" _gui-text="Display Format: "> + <_item value="textonpath">Text On Path</_item> + <_item value="0">Angle 0</_item> + <_item value="30">Angle 30</_item> + <_item value="45">Angle 45</_item> + <_item value="60">Angle 60</_item> + <_item value="90">Angle 90</_item> + <_item value="120">Angle 120</_item> + <_item value="135">Angle 135</_item> + <_item value="150">Angle 150</_item> + <_item value="180">Angle 180</_item> + <_item value="210">Angle 210</_item> + <_item value="225">Angle 225</_item> + <_item value="240">Angle 240</_item> + <_item value="270">Angle 270</_item> + <_item value="300">Angle 300</_item> + <_item value="315">Angle 315</_item> + <_item value="330">Angle 330</_item> + </param> <param name="fontsize" type="int" min="1" max="1000" _gui-text="Font size (px):">12</param> <param name="offset" type="float" min="-10000" max="10000" _gui-text="Offset (px):">-6</param> <param name="precision" type="int" min="0" max="25" _gui-text="Precision:">2</param> @@ -29,8 +48,9 @@ </param> </page> <page name="desc" _gui-text="Help"> - <_param name="measurehelp" type="description" xml:space="preserve">This effect measures the length, or area, of the selected path and adds it as a text-on-path object with the selected unit. + <_param name="measurehelp" type="description" xml:space="preserve">This effect measures the length, or area, of the selected paths and adds it as a text object with the selected units. + * Display format can be either Text-On-Path, or stand-alone text at a specified angle. * The number of significant digits can be controlled by the Precision field. * The Offset field controls the distance from the text to the path. * The Scale factor can be used to make measurements in scaled drawings. For example, if 1 cm in the drawing equals 2.5 m in the real world, Scale must be set to 250. diff --git a/share/extensions/measure.py b/share/extensions/measure.py index e1f8eab1d..415b21898 100755 --- a/share/extensions/measure.py +++ b/share/extensions/measure.py @@ -91,6 +91,10 @@ class Length(inkex.Effect): 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", + help="Display Format") self.OptionParser.add_option("-f", "--fontsize", action="store", type="int", dest="fontsize", default=20, @@ -139,14 +143,6 @@ class Length(inkex.Effect): for id, node in self.selected.iteritems(): if node.tag == inkex.addNS('path','svg'): self.group = inkex.etree.SubElement(node.getparent(),inkex.addNS('text','svg')) - - # t = node.get('transform') - # Removed to fix LP #308183 - # (Measure Path text shifted when used with a copied object) - #if t: - # self.group.set('transform', t) - - a =[] mat = simpletransform.composeParents(node, [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0]]) p = cubicsuperpath.parsePath(node.get('d')) @@ -158,10 +154,16 @@ class Length(inkex.Effect): stotal = csparea(p)*factor*self.options.scale # 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.type == "length": - self.addTextOnPath(self.group, 0, 0, lenstr+' '+self.options.unit, id, 'start', '50%', self.options.offset) + 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) else: - self.addTextOnPath(self.group, 0, 0, lenstr+' '+self.options.unit+'^2', id, 'start', '0%', self.options.offset) + 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.format), 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.format), -self.options.offset + self.options.fontsize/2) def addTextOnPath(self, node, x, y, text, id, anchor, startOffset, dy = 0): new = inkex.etree.SubElement(node,inkex.addNS('textPath','svg')) @@ -179,6 +181,19 @@ class Length(inkex.Effect): node.set('x', str(x)) node.set('y', str(y)) + def addTextWithTspan(self, node, x, y, text, id, anchor, angle, dy = 0): + new = inkex.etree.SubElement(node,inkex.addNS('tspan','svg'), {inkex.addNS('role','sodipodi'): 'line'}) + s = {'text-align': 'center', 'vertical-align': 'bottom', + 'text-anchor': anchor, 'font-size': str(self.options.fontsize), + 'fill-opacity': '1.0', 'stroke': 'none', + 'font-weight': 'normal', 'font-style': 'normal', 'fill': '#000000'} + new.set('style', simplestyle.formatStyle(s)) + new.set('dy', str(dy)) + new.text = str(text) + node.set('x', str(x)) + node.set('y', str(y)) + node.set('transform', 'rotate(%s, %s, %s)' % (angle, x, y)) + if __name__ == '__main__': e = Length() e.affect() |
