Пример #1
0
class Dialog(qg.QDialog):
    def __init__(self, design, prioroperations, placeop=None):
        super(Dialog, self).__init__()

        if placeop is None:
            self.placeop = TransformExternal(
                None,
                None,
                None,
                None,
                TransformExternal.transformtypes.scale,
                TransformExternal.transformtypes.scale,
                0,
                False,
                1.0,
                1.0,
            )
        else:
            self.placeop = placeop

        self.prioroperations = prioroperations
        self.design = design

        self.designwidget = DesignListManager(design)

        self.operation_list = DraggableTreeWidget()
        self.operation_list.linklist(prioroperations)

        self.sketchwidget_from = SketchListManager(design)
        self.sketchwidget_to = SketchListManager(design)

        self.radiobox_scale_x = qg.QRadioButton("Scale X")
        self.radiobox_custom_x = qg.QRadioButton("Custom X")
        self.radiobox_scale_y = qg.QRadioButton("Scale Y")
        self.radiobox_custom_y = qg.QRadioButton("Custom Y")

        self.x_scale_option = qg.QButtonGroup()
        self.x_scale_option.addButton(self.radiobox_scale_x)
        self.x_scale_option.addButton(self.radiobox_custom_x)

        self.y_scale_option = qg.QButtonGroup()
        self.y_scale_option.addButton(self.radiobox_scale_y)
        self.y_scale_option.addButton(self.radiobox_custom_y)

        self.scalex = qg.QLineEdit()
        self.scaley = qg.QLineEdit()

        templayout1 = qg.QHBoxLayout()
        templayout1.addStretch()
        templayout1.addWidget(self.radiobox_scale_x)
        templayout1.addWidget(self.radiobox_custom_x)
        templayout1.addWidget(self.scalex)
        templayout1.addStretch()
        templayout2 = qg.QHBoxLayout()
        templayout2.addStretch()
        templayout2.addWidget(self.radiobox_scale_y)
        templayout2.addWidget(self.radiobox_custom_y)
        templayout2.addWidget(self.scaley)
        templayout2.addStretch()

        layout5 = qg.QHBoxLayout()
        layout5.addWidget(qg.QLabel("Flip Layers"))
        self.flip = qg.QCheckBox()
        layout5.addWidget(self.flip)

        layout4 = qg.QHBoxLayout()
        layout4.addWidget(qg.QLabel("Shift Layers"))
        self.sb = qg.QSpinBox()
        self.sb.setRange(-100, 100)
        self.sb.setSingleStep(1)
        layout4.addWidget(self.sb)

        button1 = qg.QPushButton("Ok")
        button1.clicked.connect(self.accept)
        button2 = qg.QPushButton("Cancel")
        button2.clicked.connect(self.reject)

        layout2 = qg.QHBoxLayout()
        layout2.addWidget(button1)
        layout2.addWidget(button2)

        layout = qg.QVBoxLayout()
        layout.addWidget(self.designwidget)
        layout.addWidget(qg.QLabel("Operations"))
        layout.addWidget(self.operation_list)
        layout.addWidget(self.sketchwidget_from)
        layout.addWidget(self.sketchwidget_to)
        layout.addLayout(templayout1)
        layout.addLayout(templayout2)
        layout.addLayout(layout5)
        layout.addLayout(layout4)
        layout.addLayout(layout2)
        self.setLayout(layout)

        self.radiobox_scale_x.setChecked(False)
        self.radiobox_custom_x.setChecked(False)
        self.radiobox_scale_y.setChecked(False)
        self.radiobox_custom_y.setChecked(False)

        if self.placeop.transformtype_x == TransformExternal.transformtypes.scale:
            self.radiobox_scale_x.setChecked(True)
        elif self.placeop.transformtype_x == TransformExternal.transformtypes.custom:
            self.radiobox_custom_x.setChecked(True)

        if self.placeop.transformtype_y == TransformExternal.transformtypes.scale:
            self.radiobox_scale_y.setChecked(True)
        elif self.placeop.transformtype_y == TransformExternal.transformtypes.custom:
            self.radiobox_custom_y.setChecked(True)

        self.designwidget.itemlist.itemSelectionChanged.connect(self.loadoperations)

        if self.placeop.sketch_links is not None:
            sketch_to = self.design.sketches[self.placeop.sketch_links["sketch_to"][0]]

            for ii in range(self.sketchwidget_to.itemlist.count()):
                item = self.sketchwidget_to.itemlist.item(ii)
                if item.value == sketch_to:
                    item.setSelected(True)

        self.loadoperations()

        try:
            subdesign = design.subdesigns[self.placeop.design_links["subdesign"][0]]
            for ii in range(self.designwidget.itemlist.count()):
                item = self.designwidget.itemlist.item(ii)
                if item.value == subdesign:
                    item.setSelected(True)

            if self.placeop.subopref is not None:
                id, jj = self.placeop.subopref
                ii = subdesign.operation_index(id)
                self.operation_list.selectIndeces([(ii, jj)])

            sketch_from = subdesign.sketches[self.placeop.sub_sketch_id]
            for ii in range(self.sketchwidget_from.itemlist.count()):
                item = self.sketchwidget_from.itemlist.item(ii)
                if item.value == sketch_from:
                    item.setSelected(True)
        except TypeError:
            pass

        self.scalex.setText(str(self.placeop.scalex))
        self.scaley.setText(str(self.placeop.scaley))
        self.flip.setChecked(self.placeop.flip)
        self.sb.setValue(self.placeop.shift)

    def subdesign(self):
        try:
            return self.designwidget.itemlist.selectedItems()[0].value
        except IndexError:
            return None

    def sketch(self):
        try:
            return self.sketchwidget.itemlist.selectedItems()[0].value
        except IndexError:
            return None

    def build_sketch_links(self):
        try:
            sketch_links = {}
            sketch_links["sketch_to"] = [self.sketchwidget_to.itemlist.selectedItems()[0].value.id]
            return sketch_links
        except IndexError:
            return None

    def loadoperations(self):
        if len(self.designwidget.itemlist.selectedItems()) > 0:
            self.operation_list.linklist(self.subdesign().operations)
            self.sketchwidget_from.update_list(self.subdesign().sketches)

    def acceptdata(self):
        if self.radiobox_scale_x.isChecked():
            transformtype_x = TransformExternal.transformtypes.scale
        elif self.radiobox_custom_x.isChecked():
            transformtype_x = TransformExternal.transformtypes.custom

        if self.radiobox_scale_y.isChecked():
            transformtype_y = TransformExternal.transformtypes.scale
        elif self.radiobox_custom_y.isChecked():
            transformtype_y = TransformExternal.transformtypes.custom

        ii, jj = self.operation_list.currentIndeces2()[0]
        sketch_links = self.build_sketch_links()
        subopid = self.subdesign().operations[ii].id
        subopref = subopid, jj
        sub_sketch_id = self.sketchwidget_from.itemlist.selectedItems()[0].value.id
        design_links = {"subdesign": [self.subdesign().id]}

        shift = self.sb.value()
        flip = self.flip.isChecked()
        scale_x = float(self.scalex.text())
        scale_y = float(self.scaley.text())

        return (
            sketch_links,
            design_links,
            subopref,
            sub_sketch_id,
            transformtype_x,
            transformtype_y,
            shift,
            flip,
            scale_x,
            scale_y,
        )