Fix units to mm

This commit is contained in:
Florian Festi 2016-07-10 09:31:33 +02:00
parent c0a9d42abd
commit 0b963f30a1
1 changed files with 11 additions and 28 deletions

View File

@ -322,7 +322,7 @@ class Gears():
self.OptionParser.add_option("-s", "--system", self.OptionParser.add_option("-s", "--system",
action="store", type="string", action="store", type="string",
dest="system", default='CP', dest="system", default='MM',
help="Select system: 'CP' (Cyclic Pitch (default)), 'DP' (Diametral Pitch), 'MM' (Metric Module)") help="Select system: 'CP' (Cyclic Pitch (default)), 'DP' (Diametral Pitch), 'MM' (Metric Module)")
self.OptionParser.add_option("-d", "--dimension", self.OptionParser.add_option("-d", "--dimension",
@ -457,38 +457,20 @@ class Gears():
line = inkex.etree.SubElement(node, inkex.addNS('text','svg'), line_attribs) line = inkex.etree.SubElement(node, inkex.addNS('text','svg'), line_attribs)
line.text = text line.text = text
def calc_unit_factor(self):
""" return the scale factor for all dimension conversions.
- The document units are always irrelevant as
everything in inkscape is expected to be in 90dpi pixel units
"""
# namedView = self.document.getroot().find(inkex.addNS('namedview', 'sodipodi'))
# doc_units = uutounit(self, 1.0, namedView.get(inkex.addNS('document-units', 'inkscape')))
dialog_units = uutounit(self, 1.0, self.options.units)
unit_factor = 1.0 / dialog_units
return unit_factor
def calc_circular_pitch(self): def calc_circular_pitch(self):
""" We use math based on circular pitch. """ We use math based on circular pitch.
Expressed in inkscape units which is 90dpi 'pixel' units.
""" """
dimension = self.options.dimension dimension = self.options.dimension
# print >> self.tty, "unit_factor=%s, doc_units=%s, dialog_units=%s (%s), system=%s" % (unit_factor, doc_units, dialog_units, self.options.units, self.options.system)
if self.options.system == 'CP': # circular pitch if self.options.system == 'CP': # circular pitch
circular_pitch = dimension circular_pitch = dimension * 25.4
elif self.options.system == 'DP': # diametral pitch elif self.options.system == 'DP': # diametral pitch
circular_pitch = pi / dimension circular_pitch = pi * 25.4 / dimension
elif self.options.system == 'MM': # module (metric) elif self.options.system == 'MM': # module (metric)
circular_pitch = dimension * pi / 25.4 circular_pitch = dimension
else: else:
inkex.debug("unknown system '%s', try CP, DP, MM" % self.options.system) raise ValueError("unknown system '%s', try CP, DP, MM" % self.options.system)
# circular_pitch defines the size in inches. # circular_pitch defines the size in mm
# We divide the internal inch factor (px = 90dpi), to remove the inch return circular_pitch
# unit.
# The internal inkscape unit is always px,
# it is independent of the doc_units!
return circular_pitch # XXX / uutounit(self, 1.0, 'in')
def generate_spokes(self, root_radius, spoke_width, spoke_count, mount_radius, mount_hole, def generate_spokes(self, root_radius, spoke_width, spoke_count, mount_radius, mount_hole,
unit_factor, unit_label): unit_factor, unit_label):
@ -573,7 +555,7 @@ class Gears():
# #
warnings = [] # list of extra messages to be shown in annotations warnings = [] # list of extra messages to be shown in annotations
# calculate unit factor for units defined in dialog. # calculate unit factor for units defined in dialog.
unit_factor = 1 # XXX self.calc_unit_factor() unit_factor = 1
# User defined options # User defined options
teeth = self.options.teeth teeth = self.options.teeth
# Angle of tangent to tooth at circular pitch wrt radial line. # Angle of tangent to tooth at circular pitch wrt radial line.
@ -740,7 +722,7 @@ class Gears():
notes.extend(warnings) notes.extend(warnings)
#notes.append('Document (%s) scale conversion = %2.4f' % (self.document.getroot().find(inkex.addNS('namedview', 'sodipodi')).get(inkex.addNS('document-units', 'inkscape')), unit_factor)) #notes.append('Document (%s) scale conversion = %2.4f' % (self.document.getroot().find(inkex.addNS('namedview', 'sodipodi')).get(inkex.addNS('document-units', 'inkscape')), unit_factor))
notes.extend(['Teeth: %d CP: %2.4f(%s) ' % (teeth, pitch / unit_factor, self.options.units), notes.extend(['Teeth: %d CP: %2.4f(%s) ' % (teeth, pitch / unit_factor, self.options.units),
'DP: %2.3f Module: %2.4f' % (pi / pitch * unit_factor, pitch / pi * 25.4), 'DP: %2.3f Module: %2.4f(mm)' % (25.4 * pi / pitch, pitch),
'Pressure Angle: %2.2f degrees' % (angle), 'Pressure Angle: %2.2f degrees' % (angle),
'Pitch diameter: %2.3f %s' % (pitch_radius * 2 / unit_factor, self.options.units), 'Pitch diameter: %2.3f %s' % (pitch_radius * 2 / unit_factor, self.options.units),
'Outer diameter: %2.3f %s' % (outer_dia / unit_factor, self.options.units), 'Outer diameter: %2.3f %s' % (outer_dia / unit_factor, self.options.units),
@ -754,7 +736,8 @@ class Gears():
# position above # position above
y = - outer_radius - (len(notes)+1) * text_height * 1.2 y = - outer_radius - (len(notes)+1) * text_height * 1.2
for note in notes: for note in notes:
self.add_text(g, note, [0,y], text_height) #self.add_text(g, note, [0,y], text_height)
self.boxes.text(note, -outer_radius, y)
y += text_height * 1.2 y += text_height * 1.2
if __name__ == '__main__': if __name__ == '__main__':