summaryrefslogtreecommitdiffstats
path: root/share/extensions
diff options
context:
space:
mode:
authorEric Greveson <eric@greveson.co.uk>2013-07-03 22:57:43 +0000
committerEric Greveson <eric@greveson.co.uk>2013-07-03 22:57:43 +0000
commita99dd8508525d8519e46b0acd22e550bf3e39d62 (patch)
treeca6c9b77a81e16b500ceedd873838e2a0b06d006 /share/extensions
parentChanged dbus interface to treat 'division' like other boolops, with a new (diff)
parentShape calculations. do not quantize the coordinates. (Bug 168158) (diff)
downloadinkscape-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.am6
-rw-r--r--share/extensions/render_gear_rack.inx21
-rw-r--r--share/extensions/render_gear_rack.py105
-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