From d6dadf0a3be8f51e86a2cc7d5e9b5338dad7b26f Mon Sep 17 00:00:00 2001 From: jrheinlaender Date: Fri, 22 Mar 2013 08:12:05 +0430 Subject: [PATCH] Fixed unit mismatches in Shaft Wizard --- .../PartDesign/WizardShaft/SegmentFunction.py | 2 +- src/Mod/PartDesign/WizardShaft/Shaft.py | 33 ++++++++++--------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/src/Mod/PartDesign/WizardShaft/SegmentFunction.py b/src/Mod/PartDesign/WizardShaft/SegmentFunction.py index 35e3b4d4e..365aa30a1 100644 --- a/src/Mod/PartDesign/WizardShaft/SegmentFunction.py +++ b/src/Mod/PartDesign/WizardShaft/SegmentFunction.py @@ -285,7 +285,7 @@ class TranslationFunction: transfunc = None # The segment function for translations of the shaft (the bending line) intfunc = None # The divisors, a vector of tuples (location, divisor) boundaries = {} # The boundary conditions, dictionary of location:[left boundary, right boundary] - module = 210000.0 + module = 2.1E12 name = "w" def __init__(self, f, E, d, tangents, translations): diff --git a/src/Mod/PartDesign/WizardShaft/Shaft.py b/src/Mod/PartDesign/WizardShaft/Shaft.py index 032111c04..6503e7c31 100644 --- a/src/Mod/PartDesign/WizardShaft/Shaft.py +++ b/src/Mod/PartDesign/WizardShaft/Shaft.py @@ -256,7 +256,7 @@ class Shaft: del (self.diagrams[self.w[ax].name]) return self.diagrams[self.w[ax].name] = Diagram() - self.diagrams[self.w[ax].name].create(text[0], self.w[ax], self.getLengthTo(len(self.segments)) / 1000.0, text[1], text[2], 1000.0, text[3], text[4], 1.0, 30) + self.diagrams[self.w[ax].name].create(text[0], self.w[ax], self.getLengthTo(len(self.segments)) / 1000.0, text[1], text[2], 1000.0, text[3], text[4], 1000.0, 30) elif which in self.sigmaNstr: ax = self.sigmaNstr.index(which) text = self.sigmaNstrings[ax] @@ -269,7 +269,7 @@ class Shaft: del (self.diagrams[self.sigmaN[ax].name]) return self.diagrams[self.sigmaN[ax].name] = Diagram() - self.diagrams[self.sigmaN[ax].name].create(text[0], self.sigmaN[ax], self.getLengthTo(len(self.segments)) / 1000.0, text[1], text[2], 1000.0, text[3], text[4], 1.0, 10) + self.diagrams[self.sigmaN[ax].name].create(text[0], self.sigmaN[ax], self.getLengthTo(len(self.segments)) / 1000.0, text[1], text[2], 1000.0, text[3], text[4], 1.0E-6, 10) elif which in self.sigmaBstr: ax = self.sigmaBstr.index(which) text = self.sigmaBstrings[ax] @@ -282,7 +282,7 @@ class Shaft: del (self.diagrams[self.sigmaB[ax].name]) return self.diagrams[self.sigmaB[ax].name] = Diagram() - self.diagrams[self.sigmaB[ax].name].create(text[0], self.sigmaB[ax], self.getLengthTo(len(self.segments)) / 1000.0, text[1], text[2], 1000.0, text[3], text[4], 1.0, 20) + self.diagrams[self.sigmaB[ax].name].create(text[0], self.sigmaB[ax], self.getLengthTo(len(self.segments)) / 1000.0, text[1], text[2], 1000.0, text[3], text[4], 1.0E-6, 20) def addTo(self, dict, location, value): if location not in dict: @@ -454,6 +454,7 @@ class Shaft: areas = [None, None, None] areamoments = [None, None, None] + bendingmoments = [None, None, None] torquemoments = [None, None, None] for ax in range(3): @@ -528,25 +529,27 @@ class Shaft: # Areas and area moments location = 0.0 - areas[ax] = IntervalFunction() - areamoments[ax] = IntervalFunction() - torquemoments[ax] = IntervalFunction() + areas[ax] = IntervalFunction() # A [m²] + areamoments[ax] = IntervalFunction() # I [m⁴] + bendingmoments[ax] = IntervalFunction() # W_b [m³] + torquemoments[ax] = IntervalFunction() # W_t [m³] for i in range(len(self.segments)): - od = self.segments[i].diameter - id = self.segments[i].innerdiameter + od = self.segments[i].diameter/1000.0 + id = self.segments[i].innerdiameter/1000.0 length = self.segments[i].length/1000.0 - areas[ax].addInterval(location, length, math.pi/4.0 * (math.pow(self.segments[i].diameter, 2.0) - math.pow(self.segments[i].innerdiameter, 2.0))) - areamoment = math.pi/32.0 * (math.pow(self.segments[i].diameter, 4.0) - math.pow(self.segments[i].innerdiameter, 4.0)) / self.segments[i].diameter + areas[ax].addInterval(location, length, math.pi/4.0 * (math.pow(od, 2.0) - math.pow(id, 2.0))) + areamoment = math.pi/64.0 * (math.pow(od, 4.0) - math.pow(id, 4.0)) areamoments[ax].addInterval(location, length, areamoment) - torquemoments[ax].addInterval(location, length, 2 * areamoment) + bendingmoments[ax].addInterval(location, length, areamoment / (od / 2.0)) + torquemoments[ax].addInterval(location, length, 2 * (areamoment / (od / 2.0))) location += length # Bending line if ax > 0: if len(tangents[ax])+ len(translations[ax]) == 2: - # TODO: Get Young's module from material type instead of using 210000 N/mm² - self.w[ax] = TranslationFunction(self.M[ax].negated() * 1000.0, 210000, areamoments[ax], tangents[ax], translations[ax]) + # TODO: Get Young's module from material type instead of using 210000 N/mm² = 2.1E12 N/m² + self.w[ax] = TranslationFunction(self.M[ax].negated(), 2.1E12, areamoments[ax], tangents[ax], translations[ax]) self.w[ax].name= self.wstr[ax] self.parent.updateButton(3, ax, not self.w[ax].isZero()) else: @@ -557,9 +560,9 @@ class Shaft: self.sigmaN[ax].name = self.sigmaNstr[ax] self.parent.updateButton(4, ax, not self.sigmaN[ax].isZero()) if ax == 0: - self.sigmaB[ax] = StressFunction(self.M[ax] * 1000.0, torquemoments[ax]) + self.sigmaB[ax] = StressFunction(self.M[ax] , torquemoments[ax]) else: - self.sigmaB[ax] = StressFunction(self.M[ax] * 1000.0, areamoments[ax]) + self.sigmaB[ax] = StressFunction(self.M[ax], bendingmoments[ax]) self.sigmaB[ax].name = self.sigmaBstr[ax] self.parent.updateButton(5, ax, not self.sigmaB[ax].isZero())