def accept(self): surfType = [] radius = [] thick = [] semid = [] matcat = [] matref = [] lo = QLocale() X = self.form.Xpos.value() Y = self.form.Ypos.value() Z = self.form.Zpos.value() Xrot = self.form.Xrot.value() Yrot = self.form.Yrot.value() Zrot = self.form.Zrot.value() for r in range(self.form.surfTable.rowCount()): surfType.append(self.form.surfTable.item(r, 0).text()) radius.append(lo.toFloat(self.form.surfTable.item(r, 1).text())[0]) thick.append(lo.toFloat(self.form.surfTable.item(r, 2).text())[0]) semid.append(lo.toFloat(self.form.surfTable.item(r, 3).text())[0]) matcat.append(self.form.surfTable.item(r, 4).text()) matref.append(self.form.surfTable.item(r, 5).text()) datalist = (surfType, radius, thick, semid, matcat, matref) obj = InsertLD(datalist, ID="L") m = FreeCAD.Matrix() m.rotateX(radians(Xrot)) m.rotateY(radians(Yrot)) m.rotateZ(radians(Zrot)) m.move((X, Y, Z)) p1 = FreeCAD.Placement(m) obj.Placement = p1 FreeCADGui.Control.closeDialog()
def testToNumberFloat(self): obj = QLocale(QLocale.C) self.assertEqual((ctypes.c_float(37.109).value, True), obj.toFloat('37.109'))
class SliderBar(QWidget): value_changed = Signal(float) def __init__(self, title: str = '', value: float = 0, min_value: float = 0, max_value: float = 100, displayed_value_factor: float = 1, parent: QWidget = None): super().__init__(parent) self._value = value self._min_value = min_value self._max_value = max_value self._displayed_value_factor = displayed_value_factor self._title_label = QLabel(title) self._color = DEFAULT_BAR_COLOR self._locale = QLocale(QLocale.English) self._locale.setNumberOptions(self._locale.numberOptions() | QLocale.RejectGroupSeparator) validator = QDoubleValidator(self._min_value, self._max_value, 2) validator.setNotation(QDoubleValidator.StandardNotation) validator.setLocale(self._locale) self._value_line_edit = SliderValueLineEdit() self._value_line_edit.setValidator(validator) max_label_width = self._value_line_edit.fontMetrics().width( self._value_to_str(self.max_value)) self._value_line_edit.setFixedWidth(6 + max_label_width) self._value_line_edit.editingFinished.connect( self._on_value_line_edit_editing_finished) h_layout = QHBoxLayout(self) h_layout.setContentsMargins(4, 0, 4, 0) # h_layout.setSpacing(0) h_layout.addWidget(self._title_label, 0, Qt.AlignLeft) h_layout.addWidget(self._value_line_edit, 0, Qt.AlignRight) self._update_value_line_edit() @property def title(self) -> str: return self._title_label.text() @title.setter def title(self, value: str): self._title_label.setText(value) @property def value(self) -> float: return self._value @value.setter def value(self, value: float): value = max(min(value, self._max_value), self._min_value) if self._value != value: self._value = value self._update_value_line_edit() self.update() self.value_changed.emit(self._value) @property def min_value(self) -> float: return self._min_value @min_value.setter def min_value(self, value: float): if self._min_value != value: self._min_value = value if self.value < self._min_value: self.value = self._min_value else: self.update() @property def max_value(self) -> float: return self._max_value @max_value.setter def max_value(self, value: float): if self._max_value != value: self._max_value = value if self.value > self._max_value: self.value = self._max_value else: self.update() @property def color(self) -> QColor: return self._color @color.setter def color(self, value: QColor): if self._color != value: self._color = value self.update() @property def font_height(self): return self._title_label.fontMetrics().height() def set_focus(self): self._value_line_edit.setFocus() def increase_value(self, factor: float = 1): self.change_value_by_delta(1 * factor) def decrease_value(self, factor: float = 1): self.change_value_by_delta(-1 * factor) def change_value_by_delta(self, delta: float): self.value += delta self._value_line_edit.selectAll() def paintEvent(self, event: QPaintEvent): super().paintEvent(event) painter = QPainter(self) painter.setPen(Qt.NoPen) painter.setBrush(self.color) painter.drawRect( 0, 0, round((self._value - self._min_value) / (self._max_value - self._min_value) * self.width()), self.height()) def mouseMoveEvent(self, event: QMouseEvent): self._update_value_by_x(event.x()) event.accept() def mousePressEvent(self, event: QMouseEvent): self.set_focus() self._update_value_by_x(event.x()) event.accept() def mouseDoubleClickEvent(self, event: QMouseEvent): self._value_line_edit.selectAll() event.accept() def keyPressEvent(self, event: QKeyEvent): if event.key() == Qt.Key_Up: self.increase_value() elif event.key() == Qt.Key_Down: self.decrease_value() elif event.key() == Qt.Key_PageUp: self.increase_value(10) elif event.key() == Qt.Key_PageDown: self.decrease_value(10) def wheelEvent(self, event: QWheelEvent): value_delta = event.angleDelta().y() / 120 if event.modifiers() & Qt.ControlModifier: value_delta *= 10 self.set_focus() self.increase_value(value_delta) event.accept() def _on_value_line_edit_editing_finished(self): self.value, ok = self._locale.toFloat(self._value_line_edit.text()) def _update_value_by_x(self, x: int): self.value = (self.max_value - self.min_value) * x / self.width() + self.min_value def _update_value_line_edit(self): self._value_line_edit.setText(self._value_to_str(self.value)) def _value_to_str(self, value: float) -> str: return self._locale.toString( float(value * self._displayed_value_factor), 'f', 2)