summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlvin Penner <penner@vaxxine.com>2012-03-12 21:57:44 +0000
committerapenner <penner@vaxxine.com>2012-03-12 21:57:44 +0000
commitcb6a274dca37293697b0e5e8c57ed1d29882df7f (patch)
tree01e0d0da5833e33c3b43687fe245eac369457958
parentFix deprecated Gtk::Widget flags (diff)
downloadinkscape-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.inx22
-rwxr-xr-xshare/extensions/measure.py37
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()