diff --git a/src/Mod/Assembly/JointObject.py b/src/Mod/Assembly/JointObject.py index 0f0029cd02..66a54b4b31 100644 --- a/src/Mod/Assembly/JointObject.py +++ b/src/Mod/Assembly/JointObject.py @@ -1213,22 +1213,6 @@ class TaskAssemblyCreateJoint(QtCore.QObject): self.jType = JointTypes[self.form.jointType.currentIndex()] self.form.jointType.currentIndexChanged.connect(self.onJointTypeChanged) - self.form.distanceSpinbox.valueChanged.connect(self.onDistanceChanged) - self.form.distanceSpinbox2.valueChanged.connect(self.onDistance2Changed) - self.form.offsetSpinbox.valueChanged.connect(self.onOffsetChanged) - self.form.rotationSpinbox.valueChanged.connect(self.onRotationChanged) - self.form.offset1Button.clicked.connect(self.onOffset1Clicked) - self.form.offset2Button.clicked.connect(self.onOffset2Clicked) - - self.form.limitCheckbox1.stateChanged.connect(self.adaptUi) - self.form.limitCheckbox2.stateChanged.connect(self.adaptUi) - self.form.limitCheckbox3.stateChanged.connect(self.adaptUi) - self.form.limitCheckbox4.stateChanged.connect(self.adaptUi) - self.form.limitLenMinSpinbox.valueChanged.connect(self.onLimitLenMinChanged) - self.form.limitLenMaxSpinbox.valueChanged.connect(self.onLimitLenMaxChanged) - self.form.limitRotMinSpinbox.valueChanged.connect(self.onLimitRotMinChanged) - self.form.limitRotMaxSpinbox.valueChanged.connect(self.onLimitRotMaxChanged) - self.form.reverseRotCheckbox.setChecked(self.jType == "Gears") self.form.reverseRotCheckbox.stateChanged.connect(self.reverseRotToggled) @@ -1261,6 +1245,33 @@ class TaskAssemblyCreateJoint(QtCore.QObject): self.adaptUi() + self.form.distanceSpinbox.valueChanged.connect(self.onDistanceChanged) + self.form.distanceSpinbox2.valueChanged.connect(self.onDistance2Changed) + self.form.offsetSpinbox.valueChanged.connect(self.onOffsetChanged) + self.form.rotationSpinbox.valueChanged.connect(self.onRotationChanged) + bind = Gui.ExpressionBinding(self.form.distanceSpinbox).bind(self.joint, "Distance") + bind = Gui.ExpressionBinding(self.form.distanceSpinbox2).bind(self.joint, "Distance2") + bind = Gui.ExpressionBinding(self.form.offsetSpinbox).bind(self.joint, "Offset2.Base.z") + bind = Gui.ExpressionBinding(self.form.rotationSpinbox).bind( + self.joint, "Offset2.Rotation.Yaw" + ) + self.form.offset1Button.clicked.connect(self.onOffset1Clicked) + self.form.offset2Button.clicked.connect(self.onOffset2Clicked) + + self.form.limitCheckbox1.stateChanged.connect(self.adaptUi) + self.form.limitCheckbox2.stateChanged.connect(self.adaptUi) + self.form.limitCheckbox3.stateChanged.connect(self.adaptUi) + self.form.limitCheckbox4.stateChanged.connect(self.adaptUi) + + self.form.limitLenMinSpinbox.valueChanged.connect(self.onLimitLenMinChanged) + self.form.limitLenMaxSpinbox.valueChanged.connect(self.onLimitLenMaxChanged) + self.form.limitRotMinSpinbox.valueChanged.connect(self.onLimitRotMinChanged) + self.form.limitRotMaxSpinbox.valueChanged.connect(self.onLimitRotMaxChanged) + bind = Gui.ExpressionBinding(self.form.limitLenMinSpinbox).bind(self.joint, "LengthMin") + bind = Gui.ExpressionBinding(self.form.limitLenMaxSpinbox).bind(self.joint, "LengthMax") + bind = Gui.ExpressionBinding(self.form.limitRotMinSpinbox).bind(self.joint, "AngleMin") + bind = Gui.ExpressionBinding(self.form.limitRotMaxSpinbox).bind(self.joint, "AngleMax") + if self.creating: # This has to be after adaptUi so that properties default values are adapted # if needed. For instance for gears adaptUi will prevent radii from being 0 @@ -1630,16 +1641,28 @@ class TaskAssemblyCreateJoint(QtCore.QObject): needAngleLimits = self.jType in JointUsingLimitAngle if needLengthLimits: distance = UtilsAssembly.getJointDistance(self.joint) - if not self.form.limitCheckbox1.isChecked(): + if ( + not self.form.limitCheckbox1.isChecked() + and self.form.limitLenMinSpinbox.property("expression") == "" + ): self.form.limitLenMinSpinbox.setProperty("rawValue", distance) - if not self.form.limitCheckbox2.isChecked(): + if ( + not self.form.limitCheckbox2.isChecked() + and self.form.limitLenMaxSpinbox.property("expression") == "" + ): self.form.limitLenMaxSpinbox.setProperty("rawValue", distance) if needAngleLimits: angle = UtilsAssembly.getJointXYAngle(self.joint) / math.pi * 180 - if not self.form.limitCheckbox3.isChecked(): + if ( + not self.form.limitCheckbox3.isChecked() + and self.form.limitRotMinSpinbox.property("expression") == "" + ): self.form.limitRotMinSpinbox.setProperty("rawValue", angle) - if not self.form.limitCheckbox4.isChecked(): + if ( + not self.form.limitCheckbox4.isChecked() + and self.form.limitRotMaxSpinbox.property("expression") == "" + ): self.form.limitRotMaxSpinbox.setProperty("rawValue", angle) def moveMouse(self, info):