From aee3e86e6158d7a8b735ec1bffa75051575b0364 Mon Sep 17 00:00:00 2001 From: Syres916 <46537884+Syres916@users.noreply.github.com> Date: Wed, 17 Feb 2021 15:59:14 +0000 Subject: [PATCH] [0.20][PartDesign] Sprocket - Allow multiple... ... standard reference sprockets rather than just ANSI as well as capturing the thickness as stated in the particular standard. The user is not bound by this but it saves them looking it up manually. See recent posts in discussion : https://forum.freecadweb.org/viewtopic.php?f=22&t=44525 --- src/Mod/PartDesign/SprocketFeature.py | 77 ++++++++++++++++++--------- 1 file changed, 52 insertions(+), 25 deletions(-) diff --git a/src/Mod/PartDesign/SprocketFeature.py b/src/Mod/PartDesign/SprocketFeature.py index 95977518cb..15e6b704ec 100644 --- a/src/Mod/PartDesign/SprocketFeature.py +++ b/src/Mod/PartDesign/SprocketFeature.py @@ -87,12 +87,14 @@ class Sprocket: obj.addProperty("App::PropertyInteger","NumberOfTeeth","Sprocket","Number of gear teeth") obj.addProperty("App::PropertyLength","Pitch","Sprocket","Chain Pitch") obj.addProperty("App::PropertyLength","RollerDiameter","Sprocket","Roller Diameter") - obj.addProperty("App::PropertyString","ANSISize","Sprocket","ANSI Size") + obj.addProperty("App::PropertyString","SprocketReference","Sprocket","Sprocket Reference") + obj.addProperty("App::PropertyLength","Thickness","Sprocket","Thickness as stated in the reference specification") obj.NumberOfTeeth = 50 obj.Pitch = "0.375 in" obj.RollerDiameter = "0.20 in" - obj.ANSISize = "35" + obj.SprocketReference = "ANSI 35" + obj.Thickness = "0.11 in" obj.Proxy = self @@ -154,7 +156,8 @@ class SprocketTaskPanel: QtCore.QObject.connect(self.form.Quantity_Pitch, QtCore.SIGNAL("valueChanged(double)"), self.pitchChanged) QtCore.QObject.connect(self.form.Quantity_RollerDiameter, QtCore.SIGNAL("valueChanged(double)"), self.rollerDiameterChanged) QtCore.QObject.connect(self.form.spinBox_NumberOfTeeth, QtCore.SIGNAL("valueChanged(int)"), self.numTeethChanged) - QtCore.QObject.connect(self.form.comboBox_ANSISize, QtCore.SIGNAL("currentTextChanged(const QString)"), self.ANSISizeChanged) + QtCore.QObject.connect(self.form.comboBox_SprocketReference, QtCore.SIGNAL("currentTextChanged(const QString)"), self.SprocketReferenceChanged) + QtCore.QObject.connect(self.form.Quantity_Thickness, QtCore.SIGNAL("valueChanged(double)"), self.ThicknessChanged) self.update() @@ -166,10 +169,11 @@ class SprocketTaskPanel: """ Transfer from the dialog to the object """ - self.obj.NumberOfTeeth = self.form.spinBox_NumberOfTeeth.value() - self.obj.Pitch = self.form.Quantity_Pitch.text() - self.obj.RollerDiameter = self.form.Quantity_RollerDiameter.text() - self.obj.ANSISize = self.form.comboBox_ANSISize.currentText() + self.obj.NumberOfTeeth = self.form.spinBox_NumberOfTeeth.value() + self.obj.Pitch = self.form.Quantity_Pitch.text() + self.obj.RollerDiameter = self.form.Quantity_RollerDiameter.text() + self.obj.SprocketReference = self.form.comboBox_SprocketReference.currentText() + self.obj.Thickness = self.form.Quantity_Thickness.text() def transferFrom(self): """ @@ -178,37 +182,56 @@ class SprocketTaskPanel: self.form.spinBox_NumberOfTeeth.setValue(self.obj.NumberOfTeeth) self.form.Quantity_Pitch.setText(self.obj.Pitch.UserString) self.form.Quantity_RollerDiameter.setText(self.obj.RollerDiameter.UserString) - self.form.comboBox_ANSISize.setCurrentText(self.obj.ANSISize) + self.form.comboBox_SprocketReference.setCurrentText(self.obj.SprocketReference) + self.form.Quantity_Thickness.setText(self.obj.Thickness.UserString) def pitchChanged(self, value): self.obj.Pitch = value self.obj.Proxy.execute(self.obj) FreeCAD.Gui.SendMsgToActiveView("ViewFit") - def ANSISizeChanged(self, size): + def SprocketReferenceChanged(self, size): """ ANSI B29.1-2011 standard roller chain sizes in USCS units (inches) {size: [Pitch, Roller Diameter]} """ - ANSIRollerTable = {"25": [0.250, 0.130], - "35": [0.375, 0.200], - "41": [0.500, 0.306], - "40": [0.500, 0.312], - "50": [0.625, 0.400], - "60": [0.750, 0.469], - "80": [1.000, 0.625], - "100":[1.250, 0.750], - "120":[1.500, 0.875], - "140":[1.750, 1.000], - "160":[2.000, 1.125], - "180":[2.250, 1.460], - "200":[2.500, 1.562], - "240":[3.000, 1.875]} + SprocketReferenceRollerTable = {"ANSI 25": [0.250, 0.130, 0.110], + "ANSI 35": [0.375, 0.200, 0.168], + "ANSI 41": [0.500, 0.306, 0.227], + "ANSI 40": [0.500, 0.312, 0.284], + "ANSI 50": [0.625, 0.400, 0.343], + "ANSI 60": [0.750, 0.469, 0.459], + "ANSI 80": [1.000, 0.625, 0.575], + "ANSI 100":[1.250, 0.750, 0.692], + "ANSI 120":[1.500, 0.875, 0.924], + "ANSI 140":[1.750, 1.000, 0.924], + "ANSI 160":[2.000, 1.125, 1.156], + "ANSI 180":[2.250, 1.460, 1.301], + "ANSI 200":[2.500, 1.562, 1.389], + "ANSI 240":[3.000, 1.875, 1.738], + "Motorcycle 420":[0.500, 0.3125, 0.227], + "Motorcycle 425":[0.500, 0.3125, 0.284], + "Motorcycle 428":[0.500, 0.335, 0.284], + "Motorcycle 520":[0.625, 0.400, 0.227], + "Motorcycle 525":[0.625, 0.400, 0.284], + "Motorcycle 530":[0.625, 0.400, 0.343], + "Motorcycle 630":[0.75, 0.400, 0.343], + "Bicycle with Derailleur":[0.500, 0.3125, 0.11], + "Bicycle without Derailleur":[0.500, 0.3125, 0.084], + "ISO 606 06B":[0.375, 5.72/25.4, 5.2/25.4], + "ISO 606 08B":[0.500, 7.75/25.4, 7.0/25.4], + "ISO 606 10B":[0.625, 9.65/25.4, 9.1/25.4], + "ISO 606 12B":[0.750, 11.68/25.4, 11.1/25.4], + "ISO 606 16B":[1.000, 17.02/25.4, 16.2/25.4], + "ISO 606 20B":[1.250, 19.56/25.4, 18.5/25.4], + "ISO 606 24B":[1.5, 25.4/25.4, 24.1/25.4]} - self.obj.Pitch = str(ANSIRollerTable[size][0]) + " in" - self.obj.RollerDiameter = str(ANSIRollerTable[size][1]) + " in" + self.obj.Pitch = str(SprocketReferenceRollerTable[size][0]) + " in" + self.obj.RollerDiameter = str(SprocketReferenceRollerTable[size][1]) + " in" + self.obj.Thickness = str(SprocketReferenceRollerTable[size][2]) + " in" self.form.Quantity_Pitch.setText(self.obj.Pitch.UserString) self.form.Quantity_RollerDiameter.setText(self.obj.RollerDiameter.UserString) + self.form.Quantity_Thickness.setText(self.obj.Thickness.UserString) self.obj.Proxy.execute(self.obj) FreeCAD.Gui.SendMsgToActiveView("ViewFit") @@ -221,6 +244,10 @@ class SprocketTaskPanel: self.obj.NumberOfTeeth = value self.obj.Proxy.execute(self.obj) FreeCAD.Gui.SendMsgToActiveView("ViewFit") + + def ThicknessChanged(self, value): + self.obj.Thickness = str(value) + self.obj.Proxy.execute(self.obj) def getStandardButtons(self): return int(QtGui.QDialogButtonBox.Ok) | int(QtGui.QDialogButtonBox.Cancel)| int(QtGui.QDialogButtonBox.Apply)