| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| |
|
| | from PySide import QtCore, QtGui |
| | import FreeCAD |
| |
|
| | translate = FreeCAD.Qt.translate |
| |
|
| |
|
| | class WizardShaftTable: |
| | "The table widget that contains all the data of the shaft" |
| |
|
| | |
| | |
| | rowDict = { |
| | "Length": 0, |
| | "Diameter": 1, |
| | "InnerDiameter": 2, |
| | "ConstraintType": 3, |
| | "StartEdgeType": 4, |
| | "StartEdgeSize": 5, |
| | "EndEdgeType": 6, |
| | "EndEdgeSize": 7, |
| | } |
| | rowDictReverse = {} |
| | headers = [ |
| | translate("WizardShaftTable", "Length [mm]"), |
| | translate("WizardShaftTable", "Diameter [mm]"), |
| | translate("WizardShaftTable", "Inner diameter [mm]"), |
| | translate("WizardShaftTable", "Constraint type"), |
| | translate("WizardShaftTable", "Start edge type"), |
| | translate("WizardShaftTable", "Start edge size"), |
| | translate("WizardShaftTable", "End edge type"), |
| | translate("WizardShaftTable", "End edge size"), |
| | ] |
| |
|
| | def __init__(self, w, s): |
| | for key, val in self.rowDict.items(): |
| | self.rowDictReverse[val] = key |
| | |
| | self.wizard = w |
| | self.shaft = s |
| | |
| | self.widget = QtGui.QTableWidget(len(self.rowDict), 0) |
| | self.widget.setObjectName( |
| | "ShaftWizardTable" |
| | ) |
| | self.widget.setWindowTitle(translate("WizardShaftTable", "Shaft Wizard")) |
| | self.widget.resize(QtCore.QSize(300, 200)) |
| | self.editedRow = None |
| | self.editedColumn = None |
| |
|
| | |
| | self.widget.setVerticalHeaderLabels(self.headers) |
| | self.widget.setHorizontalHeaderLabels( |
| | [translate("WizardShaftTable", "Section 1"), translate("WizardShaftTable", "Section 2")] |
| | ) |
| | |
| |
|
| | |
| | action = QtGui.QAction(translate("WizardShaftTable", "Add column"), self.widget) |
| | action.triggered.connect(self.slotInsertColumn) |
| | self.widget.addAction(action) |
| | self.widget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) |
| | self.widget.horizontalHeader().addAction(action) |
| | self.widget.horizontalHeader().setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) |
| |
|
| | |
| | |
| | self.addColumn() |
| | self.setLength(0, 40.0) |
| | self.setDiameter(0, 50.0) |
| | self.setConstraintType(0, "Fixed") |
| | |
| | self.addColumn() |
| | self.setLength(1, 80.0) |
| | self.setDiameter(1, 60.0) |
| | self.setConstraintType(1, "Force") |
| |
|
| | def slotInsertColumn(self): |
| | |
| | |
| | |
| | self.addColumn() |
| | |
| | |
| |
|
| | def addColumn(self): |
| | "Add a new column, fill it with widgets, and connect the signals" |
| | index = self.widget.columnCount() |
| | |
| | if index > 0: |
| | length = self.shaft.segments[index - 1].length |
| | diameter = self.shaft.segments[index - 1].diameter |
| | if index > 2: |
| | diameter -= 5.0 |
| | else: |
| | diameter += 5.0 |
| | innerdiameter = self.shaft.segments[index - 1].innerdiameter |
| | else: |
| | length = 20.0 |
| | diameter = 10.0 |
| | innerdiameter = 0.0 |
| | self.shaft.addSegment(length, diameter, innerdiameter) |
| |
|
| | self.widget.insertColumn(index) |
| | self.widget.setHorizontalHeaderItem( |
| | index + 1, |
| | QtGui.QTableWidgetItem(translate("WizardShaftTable", "Section %s") % (index + 1)), |
| | ) |
| |
|
| | |
| | widget = QtGui.QDoubleSpinBox(self.widget) |
| | widget.setMinimum(0) |
| | widget.setMaximum(1e9) |
| | self.widget.setCellWidget(self.rowDict["Length"], index, widget) |
| | widget.setValue(length) |
| | widget.valueChanged.connect(self.slotValueChanged) |
| | widget.editingFinished.connect(self.slotEditingFinished) |
| | |
| | widget = QtGui.QDoubleSpinBox(self.widget) |
| | widget.setMinimum(0) |
| | widget.setMaximum(1e9) |
| | self.widget.setCellWidget(self.rowDict["Diameter"], index, widget) |
| | widget.setValue(diameter) |
| | widget.valueChanged.connect(self.slotValueChanged) |
| | widget.editingFinished.connect(self.slotEditingFinished) |
| | |
| | widget = QtGui.QDoubleSpinBox(self.widget) |
| | widget.setMinimum(0) |
| | widget.setMaximum(1e9) |
| | self.widget.setCellWidget(self.rowDict["InnerDiameter"], index, widget) |
| | widget.setValue(innerdiameter) |
| | widget.valueChanged.connect(self.slotValueChanged) |
| | widget.editingFinished.connect(self.slotEditingFinished) |
| | |
| | widget = QtGui.QComboBox(self.widget) |
| | widget.insertItem(0, translate("WizardShaftTable", "None"), "None") |
| | widget.insertItem(1, translate("WizardShaftTable", "Fixed"), "Fixed") |
| | widget.insertItem(2, translate("WizardShaftTable", "Force"), "Force") |
| | widget.insertItem(3, translate("WizardShaftTable", "Bearing"), "Bearing") |
| | widget.insertItem(4, translate("WizardShaftTable", "Gear"), "Gear") |
| | widget.insertItem(5, translate("WizardShaftTable", "Pulley"), "Pulley") |
| | action = QtGui.QAction("Edit constraint", widget) |
| | action.triggered.connect(self.slotEditConstraint) |
| | widget.addAction(action) |
| | widget.setContextMenuPolicy(QtCore.Qt.ActionsContextMenu) |
| | self.widget.setCellWidget(self.rowDict["ConstraintType"], index, widget) |
| | widget.setCurrentIndex(0) |
| | self.widget.connect( |
| | widget, QtCore.SIGNAL("currentIndexChanged(const QString&)"), self.slotConstraintType |
| | ) |
| | |
| | widget = QtGui.QComboBox(self.widget) |
| | widget.insertItem( |
| | 0, |
| | translate("WizardShaftTable", "None"), |
| | "None", |
| | ) |
| | widget.insertItem(1, translate("WizardShaftTable", "Chamfer"), "Chamfer") |
| | widget.insertItem(2, translate("WizardShaftTable", "Fillet"), "Fillet") |
| | self.widget.setCellWidget(self.rowDict["StartEdgeType"], index, widget) |
| | widget.setCurrentIndex(0) |
| | widget.setEnabled(False) |
| | |
| | |
| | widget = QtGui.QDoubleSpinBox(self.widget) |
| | widget.setMinimum(0) |
| | widget.setMaximum(1e9) |
| | self.widget.setCellWidget(self.rowDict["StartEdgeSize"], index, widget) |
| | widget.setValue(1) |
| | widget.valueChanged.connect(self.slotValueChanged) |
| | widget.editingFinished.connect(self.slotEditingFinished) |
| | widget.setEnabled(False) |
| | |
| | widget = QtGui.QComboBox(self.widget) |
| | widget.insertItem( |
| | 0, |
| | "None", |
| | ) |
| | widget.insertItem(1, "Chamfer") |
| | widget.insertItem(2, "Fillet") |
| | self.widget.setCellWidget(self.rowDict["EndEdgeType"], index, widget) |
| | widget.setCurrentIndex(0) |
| | widget.setEnabled(False) |
| | |
| | |
| | widget = QtGui.QDoubleSpinBox(self.widget) |
| | widget.setMinimum(0) |
| | widget.setMaximum(1e9) |
| | self.widget.setCellWidget(self.rowDict["EndEdgeSize"], index, widget) |
| | widget.setValue(1) |
| | widget.valueChanged.connect(self.slotValueChanged) |
| | widget.editingFinished.connect(self.slotEditingFinished) |
| | widget.setEnabled(False) |
| |
|
| | def slotValueChanged(self, value): |
| | (self.editedRow, self.editedColumn) = self.getFocusedCell() |
| | self.editedValue = value |
| |
|
| | def slotEditingFinished(self): |
| | if self.editedRow is None: |
| | return |
| | rowName = self.rowDictReverse[self.editedRow] |
| | if rowName is None: |
| | return |
| | if rowName == "Length": |
| | self.shaft.updateSegment( |
| | self.editedColumn, length=self.getDoubleValue(rowName, self.editedColumn) |
| | ) |
| | elif rowName == "Diameter": |
| | self.shaft.updateSegment( |
| | self.editedColumn, diameter=self.getDoubleValue(rowName, self.editedColumn) |
| | ) |
| | elif rowName == "InnerDiameter": |
| | self.shaft.updateSegment( |
| | self.editedColumn, innerdiameter=self.getDoubleValue(rowName, self.editedColumn) |
| | ) |
| | elif rowName == "ConstraintType": |
| | self.shaft.updateConstraint( |
| | self.editedColumn, self.getListValue(rowName, self.editedColumn) |
| | ) |
| | elif rowName == "StartEdgeType": |
| | pass |
| | elif rowName == "StartEdgeSize": |
| | pass |
| | elif rowName == "EndEdgeType": |
| | pass |
| | elif rowName == "EndEdgeSize": |
| | pass |
| |
|
| | def slotEditConstraint(self): |
| | (self.editedRow, self.editedColumn) = ( |
| | self.getFocusedCell() |
| | ) |
| | self.shaft.editConstraint(self.editedColumn) |
| |
|
| | def finishEditConstraint(self): |
| | self.shaft.updateConstraint(self.editedColumn, self.getConstraintType(self.editedColumn)) |
| |
|
| | def setLength(self, column, l): |
| | self.setDoubleValue("Length", column, l) |
| | self.shaft.updateSegment(column, length=l) |
| |
|
| | def getLength(self, column): |
| | return self.getDoubleValue("Length", column) |
| |
|
| | def setDiameter(self, column, d): |
| | self.setDoubleValue("Diameter", column, d) |
| | self.shaft.updateSegment(column, diameter=d) |
| |
|
| | def getDiameter(self, column): |
| | return self.getDoubleValue("Diameter", column) |
| |
|
| | def setInnerDiameter(self, column, d): |
| | self.setDoubleValue("InnerDiameter", column, d) |
| | self.shaft.updateSegment(column, innerdiameter=d) |
| |
|
| | def getInnerDiameter(self, column): |
| | return self.getDoubleValue("InnerDiameter", column) |
| |
|
| | @QtCore.Slot("QString") |
| | def slotConstraintType(self, text): |
| | self.shaft.updateConstraint(self.getFocusedColumn(), text) |
| |
|
| | def setConstraintType(self, column, t): |
| | self.setListValue("ConstraintType", column, t) |
| | self.shaft.updateConstraint(column, t) |
| |
|
| | def getConstraintType(self, column): |
| | return self.getListValue("ConstraintType", column) |
| |
|
| | def slotStartEdgeType(self, old, new): |
| | pass |
| |
|
| | def setStartEdgeType(self, column, t): |
| | self.setListValue("StartEdgeType", column, t) |
| |
|
| | def getStartEdgeType(self, column): |
| | return self.getListValue("StartEdgeType", column) |
| |
|
| | def setStartEdgeSize(self, column, s): |
| | self.setDoubleValue("StartEdgeSize", column, s) |
| |
|
| | def getStartEdgeSize(self, column): |
| | return self.getDoubleValue("StartEdgeSize", column) |
| |
|
| | def slotEndEdgeType(self, old, new): |
| | pass |
| |
|
| | def setEndEdgeType(self, column, t): |
| | self.setListValue("EndEdgeType", column, t) |
| |
|
| | def getEndEdgeType(self, column): |
| | return self.getListValue("EndEdgeType", column) |
| |
|
| | def setEndEdgeSize(self, column, s): |
| | self.setDoubleValue("EndEdgeSize", column, s) |
| |
|
| | def getEndEdgeSize(self, column): |
| | return self.getDoubleValue("EndEdgeSize", column) |
| |
|
| | def setDoubleValue(self, row, column, v): |
| | widget = self.widget.cellWidget(self.rowDict[row], column) |
| | |
| | widget.blockSignals(True) |
| | widget.setValue(v) |
| | widget.blockSignals(False) |
| |
|
| | def getDoubleValue(self, row, column): |
| | widget = self.widget.cellWidget(self.rowDict[row], column) |
| | if widget is not None: |
| | return widget.value() |
| | else: |
| | return None |
| |
|
| | def setListValue(self, row, column, v): |
| | widget = self.widget.cellWidget(self.rowDict[row], column) |
| | widget.blockSignals(True) |
| | widget.setCurrentIndex(widget.findText(v, QtCore.Qt.MatchExactly)) |
| | widget.blockSignals(False) |
| |
|
| | def getListValue(self, row, column): |
| | widget = self.widget.cellWidget(self.rowDict[row], column) |
| | if widget is not None: |
| | if widget.data(QtCore.Qt.UserRole): |
| | |
| | return widget.data(QtCore.Qt.UserRole) |
| | else: |
| | return widget.currentText() |
| | else: |
| | return None |
| |
|
| | def getFocusedColumn(self): |
| | |
| | widget = QtGui.QApplication.focusWidget() |
| | if widget is not None: |
| | index = self.widget.indexAt(widget.pos()) |
| | self.widget.setCurrentCell(index.row(), index.column()) |
| | return self.widget.currentColumn() |
| |
|
| | def getFocusedCell(self): |
| | |
| | widget = QtGui.QApplication.focusWidget() |
| | if widget is not None: |
| | index = self.widget.indexAt(widget.pos()) |
| | self.widget.setCurrentCell(index.row(), index.column()) |
| | return (self.widget.currentRow(), self.widget.currentColumn()) |
| |
|