2020-07-30 01:16:18 +02:00
|
|
|
#!/usr/bin/env python3
|
|
|
|
'''
|
|
|
|
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
|
|
|
|
from math import *
|
|
|
|
from lxml import etree
|
|
|
|
|
2020-09-03 00:35:27 +02:00
|
|
|
from involute import *
|
2020-07-30 01:16:18 +02:00
|
|
|
|
2021-04-16 14:41:12 +02:00
|
|
|
class Gears(inkex.EffectExtension):
|
|
|
|
|
|
|
|
def add_arguments(self, pars):
|
|
|
|
pars.add_argument("--tab", default="Options", help="The tab selected when OK was pressed")
|
|
|
|
pars.add_argument("-t", "--teeth", type=int, default=24, help="Number of teeth")
|
|
|
|
pars.add_argument("-p", "--pressure_angle", type=float, default="20", help="Pressure angle")
|
|
|
|
pars.add_argument("-y", "--size_type", type=int, default="1", help="Size type (1 = module (mm), 2 = pitch diameter (inches), 3 = diametral pitch (inches)")
|
|
|
|
pars.add_argument("-s", "--size", type=float, default="5", help="Size")
|
|
|
|
pars.add_argument("-o", "--orientation", type=int, default="1", help="Gear orientation")
|
2020-07-30 01:16:18 +02:00
|
|
|
|
|
|
|
def effect(self):
|
|
|
|
Z = self.options.teeth
|
|
|
|
phi = self.options.pressure_angle
|
|
|
|
size_type = self.options.size_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.svg.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': self.svg.unittouu(str(0.1) + "mm"),
|
|
|
|
'fill': 'none'
|
|
|
|
}
|
|
|
|
g_attribs = {inkex.addNS('label','inkscape'): 'Gear ' + str(Z),
|
|
|
|
'transform': 'translate(' + str( self.svg.namedview.center[0] ) + ',' + str( self.svg.namedview.center[1] ) + ')',
|
|
|
|
'style' : str(inkex.Style(gear_style)),
|
|
|
|
'd' : svg }
|
|
|
|
g = etree.SubElement(self.svg.get_current_layer(), inkex.addNS('path','svg'), g_attribs)
|
|
|
|
|
2020-08-31 21:25:41 +02:00
|
|
|
if __name__ == '__main__':
|
|
|
|
Gears().run()
|