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()
Example #2
0
 def testToNumberFloat(self):
     obj = QLocale(QLocale.C)
     self.assertEqual((ctypes.c_float(37.109).value, True),
                      obj.toFloat('37.109'))
Example #3
0
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)