diff options
| author | Martin Owens <doctormo@gmail.com> | 2013-06-26 15:18:52 +0000 |
|---|---|---|
| committer | Martin Owens <doctormo@gmail.com> | 2013-06-26 15:18:52 +0000 |
| commit | 9c54e4ae9e74a13735989977a477141c7a5535cf (patch) | |
| tree | da8573fc1ae357cf193cd13de49034805ff29df2 | |
| parent | Fix Gtk3 build by including togglebutton header (diff) | |
| download | inkscape-9c54e4ae9e74a13735989977a477141c7a5535cf.tar.gz inkscape-9c54e4ae9e74a13735989977a477141c7a5535cf.zip | |
Add render rack gear extension from bug#1174800, modify gears location to render sub-menu
Fixed bugs:
- https://launchpad.net/bugs/1174800
(bzr r12391)
| -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 | ||||
| -rwxr-xr-x | share/extensions/render_gears.py (renamed from share/extensions/gears.py) | 0 | ||||
| -rw-r--r-- | src/libavoid/makefile | 17 |
5 files changed, 131 insertions, 20 deletions
diff --git a/share/extensions/render_gear_rack.inx b/share/extensions/render_gear_rack.inx new file mode 100644 index 000000000..c7750d806 --- /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 --- a/share/extensions/gears.py +++ b/share/extensions/render_gears.py diff --git a/src/libavoid/makefile b/src/libavoid/makefile deleted file mode 100644 index e4f83a52d..000000000 --- a/src/libavoid/makefile +++ /dev/null @@ -1,17 +0,0 @@ -# Convenience stub makefile to call the real Makefile. - - - -OBJEXT = o - -# Explicit so that it's the default rule. -all: - cd .. && $(MAKE) libavoid/all - -clean %.a %.$(OBJEXT): - cd .. && $(MAKE) libavoid/$@ - -.PHONY: all clean - -.SUFFIXES: -.SUFFIXES: .a .$(OBJEXT) |
