79 lines
2.9 KiB
Python
79 lines
2.9 KiB
Python
|
#! /usr/bin/env python
|
||
|
'''
|
||
|
Copyright (C) 2013 Matthew Dockrey (gfish @ cyphertext.net)
|
||
|
|
||
|
Based on http://arc.id.au/GearDrawing.html by Dr A.R.Collins
|
||
|
And on the original gears.py by Aaron Spike and Tavmjong Bah
|
||
|
'''
|
||
|
|
||
|
import inkex
|
||
|
import simplestyle, sys
|
||
|
from math import *
|
||
|
|
||
|
from fablabchemnitz_involute import *
|
||
|
|
||
|
class Gears(inkex.Effect):
|
||
|
def __init__(self):
|
||
|
inkex.Effect.__init__(self)
|
||
|
self.OptionParser.add_option("--tab",
|
||
|
action="store", type="string",
|
||
|
dest="tab", default="Options",
|
||
|
help="The tab selected when OK was pressed")
|
||
|
self.OptionParser.add_option("-t", "--teeth",
|
||
|
action="store", type="int",
|
||
|
dest="teeth", default=24,
|
||
|
help="Number of teeth")
|
||
|
self.OptionParser.add_option("-p", "--pangle",
|
||
|
action="store", type="float",
|
||
|
dest="pressure_angle", default="20",
|
||
|
help="Pressure angle")
|
||
|
self.OptionParser.add_option("-y", "--size_type",
|
||
|
action="store", type="int",
|
||
|
dest="type", default="1",
|
||
|
help="Size type (1 = module (mm), 2 = pitch diameter (inches), 3 = diametral pitch (inches)")
|
||
|
self.OptionParser.add_option("-s", "--size",
|
||
|
action="store", type="float",
|
||
|
dest="size", default="5",
|
||
|
help="Size")
|
||
|
self.OptionParser.add_option("-o", "--orientation",
|
||
|
action="store", type="int",
|
||
|
dest="orientation", default="1",
|
||
|
help="Gear orientation")
|
||
|
|
||
|
def effect(self):
|
||
|
Z = self.options.teeth
|
||
|
phi = self.options.pressure_angle
|
||
|
size_type = self.options.type
|
||
|
size = self.options.size
|
||
|
orientation = self.options.orientation
|
||
|
|
||
|
# Convert size to module (mm) if needed
|
||
|
if (size_type == 2):
|
||
|
# Pitch diameter
|
||
|
size = 25.4 * size / Z
|
||
|
elif (size_type == 3):
|
||
|
# Diametral pitch
|
||
|
size = 25.4 / size
|
||
|
|
||
|
m = self.unittouu(str(size) + "mm")
|
||
|
|
||
|
if (orientation == 2):
|
||
|
svg = CreateInternalGear(m, Z, phi)
|
||
|
else:
|
||
|
svg = CreateExternalGear(m, Z, phi)
|
||
|
|
||
|
# Insert as a new element
|
||
|
gear_style = { 'stroke': '#000000',
|
||
|
'stroke-width': '0.1',
|
||
|
'fill': 'none'
|
||
|
}
|
||
|
g_attribs = {inkex.addNS('label','inkscape'): 'Gear ' + str(Z),
|
||
|
'transform': 'translate(' + str( self.view_center[0] ) + ',' + str( self.view_center[1] ) + ')',
|
||
|
'style' : simplestyle.formatStyle(gear_style),
|
||
|
'd' : svg }
|
||
|
g = inkex.etree.SubElement(self.current_layer, inkex.addNS('path','svg'), g_attribs)
|
||
|
|
||
|
if __name__ == '__main__':
|
||
|
e = Gears()
|
||
|
e.affect()
|