diff options
| author | Eric Greveson <eric@greveson.co.uk> | 2013-07-03 22:57:43 +0000 |
|---|---|---|
| committer | Eric Greveson <eric@greveson.co.uk> | 2013-07-03 22:57:43 +0000 |
| commit | a99dd8508525d8519e46b0acd22e550bf3e39d62 (patch) | |
| tree | ca6c9b77a81e16b500ceedd873838e2a0b06d006 /share/extensions | |
| parent | Changed dbus interface to treat 'division' like other boolops, with a new (diff) | |
| parent | Shape calculations. do not quantize the coordinates. (Bug 168158) (diff) | |
| download | inkscape-a99dd8508525d8519e46b0acd22e550bf3e39d62.tar.gz inkscape-a99dd8508525d8519e46b0acd22e550bf3e39d62.zip | |
Merge recent changes from inkscape trunk
(bzr r12387.1.6)
Diffstat (limited to 'share/extensions')
| -rw-r--r-- | share/extensions/Makefile.am | 6 | ||||
| -rw-r--r-- | share/extensions/render_gear_rack.inx | 21 | ||||
| -rw-r--r-- | share/extensions/render_gear_rack.py | 105 | ||||
| -rw-r--r-- | share/extensions/render_gears.inx (renamed from share/extensions/gears.inx) | 8 | ||||
| -rw-r--r--[-rwxr-xr-x] | share/extensions/render_gears.py (renamed from share/extensions/gears.py) | 0 |
5 files changed, 135 insertions, 5 deletions
diff --git a/share/extensions/Makefile.am b/share/extensions/Makefile.am index 5a600be79..468a8e753 100644 --- a/share/extensions/Makefile.am +++ b/share/extensions/Makefile.am @@ -64,7 +64,8 @@ extensions = \ foldablebox.py \ fractalize.py \ funcplot.py \ - gears.py\ + render_gears.py \ + render_gear_rack.py \ gcodetools.py\ generate_voronoi.py \ gimp_xcf.py \ @@ -243,7 +244,8 @@ modules = \ foldablebox.inx \ fractalize.inx \ funcplot.inx \ - gears.inx\ + render_gears.inx \ + render_gear_rack.inx \ gcodetools_about.inx\ gcodetools_area.inx\ gcodetools_check_for_updates.inx\ diff --git a/share/extensions/render_gear_rack.inx b/share/extensions/render_gear_rack.inx new file mode 100644 index 000000000..9da3e36e4 --- /dev/null +++ b/share/extensions/render_gear_rack.inx @@ -0,0 +1,21 @@ +<?xml version="1.0" encoding="UTF-8"?> +<inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension"> + <_name>Rack Gear</_name> + <id>org.bg.filter.rackgear</id> + <dependency type="executable" location="extensions">render_gear_rack.py</dependency> + <dependency type="executable" location="extensions">inkex.py</dependency> + <param name="length" type="float" min="0.1" max="3000.0" _gui-text="Rack Length:">100.</param> + <param name="spacing" type="float" min="0.01" max="100.0" _gui-text="Tooth Spacing:">10.0</param> + <param name="angle" type="float" min="-45.0" max="45.0" _gui-text="Contact Angle:">20.0</param> + <effect> + <object-type>all</object-type> + <effects-menu> + <submenu _name="Render"> + <submenu _name="Gear" /> + </submenu> + </effects-menu> + </effect> + <script> + <command reldir="extensions" interpreter="python">render_gear_rack.py</command> + </script> +</inkscape-extension> diff --git a/share/extensions/render_gear_rack.py b/share/extensions/render_gear_rack.py new file mode 100644 index 000000000..13eaf1017 --- /dev/null +++ b/share/extensions/render_gear_rack.py @@ -0,0 +1,105 @@ +#! /usr/bin/env python +''' +Copyright (C) 2013 Brett Graham (hahahaha @ hahaha.org) + +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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +''' + +import inkex +import simplestyle +from math import * + + +def involute_intersect_angle(Rb, R): + Rb, R = float(Rb), float(R) + return (sqrt(R**2 - Rb**2) / (Rb)) - (acos(Rb / R)) + + +def point_on_circle(radius, angle): + x = radius * cos(angle) + y = radius * sin(angle) + return (x, y) + + +def points_to_svgd(p): + """ + p: list of 2 tuples (x, y coordinates) + """ + f = p[0] + p = p[1:] + svgd = 'M%.3f,%.3f' % f + for x in p: + svgd += 'L%.3f,%.3f' % x + return svgd + + +class RackGear(inkex.Effect): + def __init__(self): + inkex.Effect.__init__(self) + self.OptionParser.add_option( + "-l", "--length", + action="store", type="float", + dest="length", default=100., + help="Rack Length") + self.OptionParser.add_option( + "-s", "--spacing", + action="store", type="float", + dest="spacing", default=10., + help="Tooth Spacing") + self.OptionParser.add_option( + "-a", "--angle", + action="store", type="float", + dest="angle", default=20., + help="Contact Angle") + + def effect(self): + length = self.options.length + spacing = self.options.spacing + angle = radians(self.options.angle) + + # generate points: list of (x, y) pairs + points = [] + x = 0 + tas = tan(angle) * spacing + while x < length: + # move along path, generating the next 'tooth' + points.append((x, 0)) + points.append((x + tas, spacing)) + points.append((x + spacing, spacing)) + points.append((x + spacing + tas, 0)) + x += spacing * 2. + + path = points_to_svgd(points) + + # Embed gear in group to make animation easier: + # Translate group, Rotate path. + t = 'translate(' + str(self.view_center[0]) + ',' + \ + str(self.view_center[1]) + ')' + g_attribs = { + inkex.addNS('label', 'inkscape'): 'RackGear' + str(length), + 'transform': t} + g = inkex.etree.SubElement(self.current_layer, 'g', g_attribs) + + # Create SVG Path for gear + style = {'stroke': '#000000', 'fill': 'none'} + gear_attribs = { + 'style': simplestyle.formatStyle(style), + 'd': path} + gear = inkex.etree.SubElement( + g, inkex.addNS('path', 'svg'), gear_attribs) + +if __name__ == '__main__': + e = RackGear() + e.affect() diff --git a/share/extensions/gears.inx b/share/extensions/render_gears.inx index 78d556b4a..13a3afd40 100644 --- a/share/extensions/gears.inx +++ b/share/extensions/render_gears.inx @@ -2,7 +2,7 @@ <inkscape-extension xmlns="http://www.inkscape.org/namespace/inkscape/extension"> <_name>Gear</_name> <id>org.ekips.filter.gears</id> - <dependency type="executable" location="extensions">gears.py</dependency> + <dependency type="executable" location="extensions">render_gears.py</dependency> <dependency type="executable" location="extensions">inkex.py</dependency> <param name="teeth" type="int" min="6" max="360" _gui-text="Number of teeth:">24</param> <param name="pitch" type="float" min="0.0" max="1000.0" _gui-text="Circular pitch (tooth size):">20.0</param> @@ -17,10 +17,12 @@ <effect> <object-type>all</object-type> <effects-menu> - <submenu _name="Render"/> + <submenu _name="Render"> + <submenu _name="Gear"/> + </submenu> </effects-menu> </effect> <script> - <command reldir="extensions" interpreter="python">gears.py</command> + <command reldir="extensions" interpreter="python">render_gears.py</command> </script> </inkscape-extension> diff --git a/share/extensions/gears.py b/share/extensions/render_gears.py index a1b3ee666..a1b3ee666 100755..100644 --- a/share/extensions/gears.py +++ b/share/extensions/render_gears.py |
