Exemple #1
0
    def __init__(self):
        super(RobPathUI, self).__init__()
        path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
        uic.loadUi(os.path.join(path, 'resources', 'robpath.ui'), self)

        self.plot = QMayavi()
        self.boxPlot.addWidget(self.plot)
        self.plot.drawWorkingArea()

        self.btnLoadMesh.clicked.connect(self.btnLoadMeshClicked)
        self.btnProcessMesh.clicked.connect(self.btnProcessMeshClicked)
        self.btnProcessContours.clicked.connect(self.btnProcessContoursClicked)
        self.btnSaveRapid.clicked.connect(self.btnSaveRapidClicked)

        self.sbPositionX.valueChanged.connect(self.changePosition)
        self.sbPositionY.valueChanged.connect(self.changePosition)
        self.sbPositionZ.valueChanged.connect(self.changePosition)

        self.sbSizeX.valueChanged.connect(self.changeSize)
        self.sbSizeY.valueChanged.connect(self.changeSize)
        self.sbSizeZ.valueChanged.connect(self.changeSize)

        self.btnQuit.clicked.connect(self.btnQuitClicked)

        self.processing = False
        self.timer = QtCore.QTimer(self.plot)
        self.timer.timeout.connect(self.updateProcess)

        self.robpath = RobPath()
Exemple #2
0
    def __init__(self):
        super(RobPathUI, self).__init__()
        path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
        uic.loadUi(os.path.join(path, 'resources', 'robpath.ui'), self)

        self.plot = QMayavi()
        self.boxPlot.addWidget(self.plot)
        self.plot.drawWorkingArea()

        self.btnLoadMesh.clicked.connect(self.btnLoadMeshClicked)
        self.btnProcessMesh.clicked.connect(self.btnProcessMeshClicked)
        self.btnProcessContours.clicked.connect(self.btnProcessContoursClicked)
        self.btnSaveRapid.clicked.connect(self.btnSaveRapidClicked)

        self.sbPositionX.valueChanged.connect(self.changePosition)
        self.sbPositionY.valueChanged.connect(self.changePosition)
        self.sbPositionZ.valueChanged.connect(self.changePosition)

        self.sbSizeX.valueChanged.connect(self.changeSize)
        self.sbSizeY.valueChanged.connect(self.changeSize)
        self.sbSizeZ.valueChanged.connect(self.changeSize)

        self.btnQuit.clicked.connect(self.btnQuitClicked)

        self.processing = False
        self.timer = QtCore.QTimer(self.plot)
        self.timer.timeout.connect(self.updateProcess)

        self.robpath = RobPath()
Exemple #3
0
class RobPathUI(QtGui.QMainWindow):
    def __init__(self):
        super(RobPathUI, self).__init__()
        path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
        uic.loadUi(os.path.join(path, 'resources', 'robpath.ui'), self)

        self.plot = QMayavi()
        self.boxPlot.addWidget(self.plot)
        self.plot.drawWorkingArea()

        self.btnLoadMesh.clicked.connect(self.btnLoadMeshClicked)
        self.btnProcessMesh.clicked.connect(self.btnProcessMeshClicked)
        self.btnProcessContours.clicked.connect(self.btnProcessContoursClicked)
        self.btnSaveRapid.clicked.connect(self.btnSaveRapidClicked)

        self.sbPositionX.valueChanged.connect(self.changePosition)
        self.sbPositionY.valueChanged.connect(self.changePosition)
        self.sbPositionZ.valueChanged.connect(self.changePosition)

        self.sbSizeX.valueChanged.connect(self.changeSize)
        self.sbSizeY.valueChanged.connect(self.changeSize)
        self.sbSizeZ.valueChanged.connect(self.changeSize)

        self.btnQuit.clicked.connect(self.btnQuitClicked)

        self.processing = False
        self.timer = QtCore.QTimer(self.plot)
        self.timer.timeout.connect(self.updateProcess)

        self.robpath = RobPath()

    def changePosition(self):
        x = self.sbPositionX.value()
        y = self.sbPositionY.value()
        z = self.sbPositionZ.value()
        self.robpath.translate_mesh(np.float32([x, y, z]))
        self.plot.drawMesh(self.robpath.mesh)

    def changeSize(self):
        sx = self.sbSizeX.value() + 0.001
        sy = self.sbSizeY.value() + 0.001
        sz = self.sbSizeZ.value() + 0.001
        self.robpath.resize_mesh(np.float32([sx, sy, sz]))
        self.changePosition()

    def updatePosition(self, position):
        x, y, z = position
        self.sbPositionX.setValue(x)
        self.sbPositionY.setValue(y)
        self.sbPositionZ.setValue(z)

    def updateSize(self, size):
        sx, sy, sz = size
        self.sbSizeX.setValue(sx)
        self.sbSizeY.setValue(sy)
        self.sbSizeZ.setValue(sz)

    def updateProcess(self):
        if self.robpath.k < len(self.robpath.levels):
            self.robpath.update_process()
            #self.plot.drawSlice(self.robpath.slices, self.robpath.path)
            self.plot.drawPath(self.robpath.path)
            self.plot.progress.setValue(100.0 * self.robpath.k / len(self.robpath.levels))
            self.btnSaveRapid.setEnabled(False)
        else:
            self.processing = False
            self.timer.stop()
            self.btnSaveRapid.setEnabled(True)

    def blockSignals(self, value):
        self.sbPositionX.blockSignals(value)
        self.sbPositionY.blockSignals(value)
        self.sbPositionZ.blockSignals(value)
        self.sbSizeX.blockSignals(value)
        self.sbSizeY.blockSignals(value)
        self.sbSizeZ.blockSignals(value)

    def btnLoadMeshClicked(self):
        self.blockSignals(True)
        try:
            filename = QtGui.QFileDialog.getOpenFileName(self.plot,
                                                         'Open file', './',
                                                         'Mesh Files (*.stl)')
            print filename
            self.setWindowTitle('Mesh Viewer: %s' % filename)
            self.robpath.load_mesh(filename)
            # -----
            # TODO: Change bpoints.
            self.updatePosition(self.robpath.mesh.bpoint1)
            self.updateSize(self.robpath.mesh.bpoint2 - self.robpath.mesh.bpoint1)
            self.lblInfo.setText('Info:\n')
            # -----
            self.plot.drawMesh(self.robpath.mesh)
            self.btnProcessMesh.setEnabled(True)
            self.btnProcessContours.setEnabled(True)
        except:
            #self.btnProcessMesh.setEnabled(False)
            #self.btnProcessContours.setEnabled(False)
            pass
        self.blockSignals(False)
        self.plot.drawMesh(self.robpath.mesh)

    def update_parameters(self):
        height = self.sbHeight.value() + 0.00001
        width = self.sbWidth.value() + 0.00001
        overlap = 0.01 * self.sbOverlap.value()
        self.robpath.set_track(height, width, overlap)

        speed = self.sbSpeed.value()
        power = self.sbPower.value()
        self.robpath.set_speed(speed)
        self.robpath.set_power(power)

        carrier_gas = self.sbCarrier.value()
        stirrer = self.sbStirrer.value()
        turntable = self.sbTurntable.value()
        self.robpath.set_powder(carrier_gas, stirrer, turntable)

    def __process_shape(self):
        if self.processing:
            self.timer.stop()
            self.processing = False
        else:
            self.plot.drawWorkingArea()

            self.update_parameters()
            self.robpath.init_process()

            self.processing = True
            self.timer.start(100)

    def btnProcessMeshClicked(self):
        self.robpath.filled = True
        self.__process_shape()

    def btnProcessContoursClicked(self):
        self.robpath.filled = False
        self.__process_shape()
        # self.btnSaveRapid.setEnabled(False)
        # self.plot.drawWorkingArea()
        # self.update_parameters()
        # self.robpath.get_contours_path()
        # self.plot.drawPath(self.robpath.path)
        # self.btnSaveRapid.setEnabled(True)

    def btnSaveRapidClicked(self):
        self.robpath.save_rapid()
        QtGui.QMessageBox.information(self, "Export information", "Routine exported to the robot.")

    def btnQuitClicked(self):
        QtCore.QCoreApplication.instance().quit()
Exemple #4
0
class RobPathUI(QtGui.QMainWindow):
    def __init__(self):
        super(RobPathUI, self).__init__()
        path = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))
        uic.loadUi(os.path.join(path, 'resources', 'robpath.ui'), self)

        self.plot = QMayavi()
        self.boxPlot.addWidget(self.plot)
        self.plot.drawWorkingArea()

        self.btnLoadMesh.clicked.connect(self.btnLoadMeshClicked)
        self.btnProcessMesh.clicked.connect(self.btnProcessMeshClicked)
        self.btnProcessContours.clicked.connect(self.btnProcessContoursClicked)
        self.btnSaveRapid.clicked.connect(self.btnSaveRapidClicked)

        self.sbPositionX.valueChanged.connect(self.changePosition)
        self.sbPositionY.valueChanged.connect(self.changePosition)
        self.sbPositionZ.valueChanged.connect(self.changePosition)

        self.sbSizeX.valueChanged.connect(self.changeSize)
        self.sbSizeY.valueChanged.connect(self.changeSize)
        self.sbSizeZ.valueChanged.connect(self.changeSize)

        self.btnQuit.clicked.connect(self.btnQuitClicked)

        self.processing = False
        self.timer = QtCore.QTimer(self.plot)
        self.timer.timeout.connect(self.updateProcess)

        self.robpath = RobPath()

    def changePosition(self):
        x = self.sbPositionX.value()
        y = self.sbPositionY.value()
        z = self.sbPositionZ.value()
        self.robpath.translate_mesh(np.float32([x, y, z]))
        self.plot.drawMesh(self.robpath.mesh)

    def changeSize(self):
        sx = self.sbSizeX.value() + 0.001
        sy = self.sbSizeY.value() + 0.001
        sz = self.sbSizeZ.value() + 0.001
        self.robpath.resize_mesh(np.float32([sx, sy, sz]))
        self.changePosition()

    def updatePosition(self, position):
        x, y, z = position
        self.sbPositionX.setValue(x)
        self.sbPositionY.setValue(y)
        self.sbPositionZ.setValue(z)

    def updateSize(self, size):
        sx, sy, sz = size
        self.sbSizeX.setValue(sx)
        self.sbSizeY.setValue(sy)
        self.sbSizeZ.setValue(sz)

    def updateProcess(self):
        if self.robpath.k < len(self.robpath.levels):
            self.robpath.update_process()
            #self.plot.drawSlice(self.robpath.slices, self.robpath.path)
            self.plot.drawPath(self.robpath.path)
            self.plot.progress.setValue(100.0 * self.robpath.k /
                                        len(self.robpath.levels))
            self.btnSaveRapid.setEnabled(False)
        else:
            self.processing = False
            self.timer.stop()
            self.btnSaveRapid.setEnabled(True)

    def blockSignals(self, value):
        self.sbPositionX.blockSignals(value)
        self.sbPositionY.blockSignals(value)
        self.sbPositionZ.blockSignals(value)
        self.sbSizeX.blockSignals(value)
        self.sbSizeY.blockSignals(value)
        self.sbSizeZ.blockSignals(value)

    def btnLoadMeshClicked(self):
        self.blockSignals(True)
        try:
            filename = QtGui.QFileDialog.getOpenFileName(
                self.plot, 'Open file', './', 'Mesh Files (*.stl)')
            print filename
            self.setWindowTitle('Mesh Viewer: %s' % filename)
            self.robpath.load_mesh(filename)
            # -----
            # TODO: Change bpoints.
            self.updatePosition(self.robpath.mesh.bpoint1)
            self.updateSize(self.robpath.mesh.bpoint2 -
                            self.robpath.mesh.bpoint1)
            self.lblInfo.setText('Info:\n')
            # -----
            self.plot.drawMesh(self.robpath.mesh)
            self.btnProcessMesh.setEnabled(True)
            self.btnProcessContours.setEnabled(True)
        except:
            #self.btnProcessMesh.setEnabled(False)
            #self.btnProcessContours.setEnabled(False)
            pass
        self.blockSignals(False)
        self.plot.drawMesh(self.robpath.mesh)

    def update_parameters(self):
        height = self.sbHeight.value() + 0.00001
        width = self.sbWidth.value() + 0.00001
        overlap = 0.01 * self.sbOverlap.value()
        self.robpath.set_track(height, width, overlap)

        speed = self.sbSpeed.value()
        power = self.sbPower.value()
        self.robpath.set_speed(speed)
        self.robpath.set_power(power)

        carrier_gas = self.sbCarrier.value()
        stirrer = self.sbStirrer.value()
        turntable = self.sbTurntable.value()
        self.robpath.set_powder(carrier_gas, stirrer, turntable)

    def __process_shape(self):
        if self.processing:
            self.timer.stop()
            self.processing = False
        else:
            self.plot.drawWorkingArea()

            self.update_parameters()
            self.robpath.init_process()

            self.processing = True
            self.timer.start(100)

    def btnProcessMeshClicked(self):
        self.robpath.filled = True
        self.__process_shape()

    def btnProcessContoursClicked(self):
        self.robpath.filled = False
        self.__process_shape()
        # self.btnSaveRapid.setEnabled(False)
        # self.plot.drawWorkingArea()
        # self.update_parameters()
        # self.robpath.get_contours_path()
        # self.plot.drawPath(self.robpath.path)
        # self.btnSaveRapid.setEnabled(True)

    def btnSaveRapidClicked(self):
        self.robpath.save_rapid()
        QtGui.QMessageBox.information(self, "Export information",
                                      "Routine exported to the robot.")

    def btnQuitClicked(self):
        QtCore.QCoreApplication.instance().quit()