[PartDesign] Sprocket fix bug with translated references
This commit is contained in:
@@ -86,63 +86,98 @@ class Sprocket:
|
||||
ANSI B29.1-2011 standard roller chain sizes in USCS units (inches)
|
||||
{size: [Pitch, Roller Diameter]}
|
||||
"""
|
||||
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],
|
||||
"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.500, 25.4/25.4, 24.1/25.4],
|
||||
"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.750, 0.400, 0.343]}
|
||||
SprocketReferenceRollerTable = {
|
||||
0: [0.250, 0.130, 0.110],
|
||||
1: [0.375, 0.200, 0.168],
|
||||
2: [0.500, 0.306, 0.227],
|
||||
3: [0.500, 0.312, 0.284],
|
||||
4: [0.625, 0.400, 0.343],
|
||||
5: [0.750, 0.469, 0.459],
|
||||
6: [1.000, 0.625, 0.575],
|
||||
7: [1.250, 0.750, 0.692],
|
||||
8: [1.500, 0.875, 0.924],
|
||||
9: [1.750, 1.000, 0.924],
|
||||
10: [2.000, 1.125, 1.156],
|
||||
11: [2.250, 1.460, 1.301],
|
||||
12: [2.500, 1.562, 1.389],
|
||||
13: [3.000, 1.875, 1.738],
|
||||
14: [0.500, 0.3125, 0.11],
|
||||
15: [0.500, 0.3125, 0.084],
|
||||
16: [0.375, 5.72 / 25.4, 5.2 / 25.4],
|
||||
17: [0.500, 7.75 / 25.4, 7.0 / 25.4],
|
||||
18: [0.625, 9.65 / 25.4, 9.1 / 25.4],
|
||||
19: [0.750, 11.68 / 25.4, 11.1 / 25.4],
|
||||
20: [1.000, 17.02 / 25.4, 16.2 / 25.4],
|
||||
21: [1.250, 19.56 / 25.4, 18.5 / 25.4],
|
||||
22: [1.500, 25.4 / 25.4, 24.1 / 25.4],
|
||||
23: [0.500, 0.3125, 0.227],
|
||||
24: [0.500, 0.3125, 0.284],
|
||||
25: [0.500, 0.335, 0.284],
|
||||
26: [0.625, 0.400, 0.227],
|
||||
27: [0.625, 0.400, 0.284],
|
||||
28: [0.625, 0.400, 0.343],
|
||||
29: [0.750, 0.400, 0.343],
|
||||
}
|
||||
|
||||
def __init__(self,obj):
|
||||
def __init__(self, obj):
|
||||
self.Type = "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::PropertyEnumeration","SprocketReference","Sprocket","Sprocket Reference")
|
||||
obj.addProperty("App::PropertyLength","Thickness","Sprocket","Thickness as stated in the reference specification")
|
||||
|
||||
obj.SprocketReference = list(self.SprocketReferenceRollerTable)
|
||||
|
||||
obj.NumberOfTeeth = 50
|
||||
obj.Pitch = "0.375 in"
|
||||
obj.RollerDiameter = "0.20 in"
|
||||
obj.SprocketReference = "ANSI 35"
|
||||
obj.Thickness = "0.11 in"
|
||||
|
||||
self.indx = 0
|
||||
self.sprockRef = []
|
||||
# As the UI file combobox has been translated the reference field needs populating here
|
||||
tempForm = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/PartDesign/SprocketFeature.ui"
|
||||
)
|
||||
for sKey in self.SprocketReferenceRollerTable:
|
||||
tempForm.comboBox_SprocketReference.setCurrentIndex(self.indx)
|
||||
self.sprockRef.append(tempForm.comboBox_SprocketReference.currentText())
|
||||
self.indx += 1
|
||||
self._ensure_properties(obj, is_restore=False)
|
||||
obj.addProperty(
|
||||
"App::PropertyEnumeration",
|
||||
"SprocketReference",
|
||||
"Sprocket",
|
||||
"Sprocket Reference",
|
||||
)
|
||||
obj.SprocketReference = list(self.sprockRef)
|
||||
obj.Proxy = self
|
||||
|
||||
def onDocumentRestored(self, obj):
|
||||
print(self.sprockRef[1])
|
||||
"""hook used to migrate older versions of this object"""
|
||||
self._ensure_properties(obj, is_restore=True)
|
||||
|
||||
def execute(self,obj):
|
||||
def _ensure_properties(self, obj, is_restore):
|
||||
def ensure_property(type_, name, doc, default):
|
||||
if not hasattr(obj, name):
|
||||
obj.addProperty(type_, name, "Sprocket")
|
||||
if callable(default):
|
||||
setattr(obj, name, default())
|
||||
else:
|
||||
setattr(obj, name, default)
|
||||
|
||||
ensure_property(
|
||||
"App::PropertyInteger", "NumberOfTeeth", "Number of gear teeth", 50
|
||||
)
|
||||
ensure_property("App::PropertyLength", "Pitch", "Chain Pitch", "0.375 in")
|
||||
ensure_property(
|
||||
"App::PropertyLength", "RollerDiameter", "Roller Diameter", "0.20 in"
|
||||
)
|
||||
ensure_property(
|
||||
"App::PropertyLength",
|
||||
"Thickness",
|
||||
"Thickness as stated in the reference specification",
|
||||
"0.11 in",
|
||||
)
|
||||
|
||||
def execute(self, obj):
|
||||
w = fcsprocket.FCWireBuilder()
|
||||
sprocket.CreateSprocket(w, obj.Pitch.Value, obj.NumberOfTeeth, obj.RollerDiameter.Value)
|
||||
sprocket.CreateSprocket(
|
||||
w, obj.Pitch.Value, obj.NumberOfTeeth, obj.RollerDiameter.Value
|
||||
)
|
||||
|
||||
sprocketw = Part.Wire([o.toShape() for o in w.wire])
|
||||
obj.Shape = sprocketw
|
||||
obj.positionBySupport();
|
||||
obj.positionBySupport()
|
||||
return
|
||||
|
||||
|
||||
@@ -151,7 +186,7 @@ class ViewProviderSprocket:
|
||||
A View Provider for the Sprocket object
|
||||
"""
|
||||
|
||||
def __init__(self,vobj):
|
||||
def __init__(self, vobj):
|
||||
vobj.Proxy = self
|
||||
|
||||
def getIcon(self):
|
||||
@@ -161,21 +196,21 @@ class ViewProviderSprocket:
|
||||
self.ViewObject = vobj
|
||||
self.Object = vobj.Object
|
||||
|
||||
def setEdit(self,vobj,mode):
|
||||
taskd = SprocketTaskPanel(self.Object,mode)
|
||||
def setEdit(self, vobj, mode):
|
||||
taskd = SprocketTaskPanel(self.Object, mode)
|
||||
taskd.obj = vobj.Object
|
||||
taskd.update()
|
||||
FreeCADGui.Control.showDialog(taskd)
|
||||
return True
|
||||
|
||||
def unsetEdit(self,vobj,mode):
|
||||
def unsetEdit(self, vobj, mode):
|
||||
FreeCADGui.Control.closeDialog()
|
||||
return
|
||||
|
||||
def dumps(self):
|
||||
return None
|
||||
|
||||
def loads(self,state):
|
||||
def loads(self, state):
|
||||
return None
|
||||
|
||||
|
||||
@@ -184,21 +219,43 @@ class SprocketTaskPanel:
|
||||
The editmode TaskPanel for Sprocket objects
|
||||
"""
|
||||
|
||||
def __init__(self,obj,mode):
|
||||
def __init__(self, obj, mode):
|
||||
self.obj = obj
|
||||
|
||||
self.form=FreeCADGui.PySideUic.loadUi(FreeCAD.getHomePath() + "Mod/PartDesign/SprocketFeature.ui")
|
||||
self.form = FreeCADGui.PySideUic.loadUi(
|
||||
FreeCAD.getHomePath() + "Mod/PartDesign/SprocketFeature.ui"
|
||||
)
|
||||
self.form.setWindowIcon(QtGui.QIcon(":/icons/PartDesign_Sprocket.svg"))
|
||||
|
||||
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_SprocketReference, QtCore.SIGNAL("currentTextChanged(const QString)"), self.sprocketReferenceChanged)
|
||||
QtCore.QObject.connect(self.form.Quantity_Thickness, QtCore.SIGNAL("valueChanged(double)"), self.thicknessChanged)
|
||||
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_SprocketReference,
|
||||
QtCore.SIGNAL("currentIndexChanged(int)"),
|
||||
self.sprocketReferenceChanged,
|
||||
)
|
||||
QtCore.QObject.connect(
|
||||
self.form.Quantity_Thickness,
|
||||
QtCore.SIGNAL("valueChanged(double)"),
|
||||
self.thicknessChanged,
|
||||
)
|
||||
|
||||
self.update()
|
||||
|
||||
if mode == 0: # fresh created
|
||||
if mode == 0: # fresh created
|
||||
self.obj.Proxy.execute(self.obj) # calculate once
|
||||
FreeCAD.Gui.SendMsgToActiveView("ViewFit")
|
||||
|
||||
@@ -209,7 +266,7 @@ class SprocketTaskPanel:
|
||||
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.SprocketReference = self.form.comboBox_SprocketReference.currentIndex()
|
||||
self.obj.Thickness = self.form.Quantity_Thickness.text()
|
||||
|
||||
def transferFrom(self):
|
||||
@@ -228,14 +285,17 @@ class SprocketTaskPanel:
|
||||
FreeCAD.Gui.SendMsgToActiveView("ViewFit")
|
||||
|
||||
def sprocketReferenceChanged(self, size):
|
||||
self.obj.Pitch = str(Sprocket.SprocketReferenceRollerTable[size][0]) + " in"
|
||||
self.obj.RollerDiameter = str(Sprocket.SprocketReferenceRollerTable[size][1]) + " in"
|
||||
self.obj.Thickness = str(Sprocket.SprocketReferenceRollerTable[size][2]) + " in"
|
||||
self.obj.SprocketReference = str(size)
|
||||
self.obj.Pitch = str(Sprocket.SprocketReferenceRollerTable[size][0]) + " in"
|
||||
self.obj.RollerDiameter = (
|
||||
str(Sprocket.SprocketReferenceRollerTable[size][1]) + " in"
|
||||
)
|
||||
self.obj.Thickness = str(Sprocket.SprocketReferenceRollerTable[size][2]) + " in"
|
||||
self.obj.SprocketReference = self.obj.getEnumerationsOfProperty(
|
||||
"SprocketReference"
|
||||
)[size]
|
||||
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")
|
||||
|
||||
@@ -253,9 +313,13 @@ class SprocketTaskPanel:
|
||||
self.obj.Proxy.execute(self.obj)
|
||||
|
||||
def getStandardButtons(self):
|
||||
return int(QtGui.QDialogButtonBox.Ok) | int(QtGui.QDialogButtonBox.Cancel)| int(QtGui.QDialogButtonBox.Apply)
|
||||
return (
|
||||
int(QtGui.QDialogButtonBox.Ok)
|
||||
| int(QtGui.QDialogButtonBox.Cancel)
|
||||
| int(QtGui.QDialogButtonBox.Apply)
|
||||
)
|
||||
|
||||
def clicked(self,button):
|
||||
def clicked(self, button):
|
||||
if button == QtGui.QDialogButtonBox.Apply:
|
||||
self.transferTo()
|
||||
self.obj.Proxy.execute(self.obj)
|
||||
@@ -269,6 +333,8 @@ class SprocketTaskPanel:
|
||||
FreeCADGui.ActiveDocument.resetEdit()
|
||||
|
||||
def reject(self):
|
||||
FreeCAD.ActiveDocument.removeObject(self.obj.Name)
|
||||
FreeCAD.ActiveDocument.recompute()
|
||||
FreeCADGui.ActiveDocument.resetEdit()
|
||||
FreeCAD.ActiveDocument.abortTransaction()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user