Пример #1
0
    def setView(self, view):
        self.alignementProcessState.setView(view)
        ####### CENTER DRAWING #######
        self.__centerRotation = QubPointDrawingMgr(view.canvas(), view.matrix())
        self.__centerRotation.setCanBeModify(False)
        target = QubCanvasTarget(view.canvas())
        self.__centerRotation.addDrawingObject(target)
        view.addDrawingMgr(self.__centerRotation)
        self.__centerRotation.setColor(qt.QColor("red"))

        ####### Help lines #######
        self.__helpLines = []
        for i in range(3):
            dMgr = QubPointDrawingMgr(view.canvas(), view.matrix())
            view.addDrawingMgr(dMgr)
            if self.alignementProcessState.verticalPhi():
                line = QubCanvasVLine(view.canvas())
            else:
                line = QubCanvasHLine(view.canvas())
            dMgr.addDrawingObject(line)
            if not i:
                dMgr.setCanBeModify(False)
                dMgr.setPen(qt.QPen(qt.Qt.red, 1, qt.Qt.DashLine))
            else:
                dMgr.setPen(qt.QPen(qt.Qt.red, 2))
                dMgr.setEndDrawCallBack(self.__helpLineMoved)
            self.__helpLines.append(dMgr)
Пример #2
0
    def setView(self, view):
        self.alignementProcessState.setView(view)
        ####### CENTER DRAWING #######
        self.__centerRotation = QubPointDrawingMgr(view.canvas(),
                                                   view.matrix())
        self.__centerRotation.setCanBeModify(False)
        target = QubCanvasTarget(view.canvas())
        self.__centerRotation.addDrawingObject(target)
        view.addDrawingMgr(self.__centerRotation)
        self.__centerRotation.setColor(qt.QColor("red"))

        ####### Help lines #######
        self.__helpLines = []
        for i in range(3):
            dMgr = QubPointDrawingMgr(view.canvas(), view.matrix())
            view.addDrawingMgr(dMgr)
            if self.alignementProcessState.verticalPhi():
                line = QubCanvasVLine(view.canvas())
            else:
                line = QubCanvasHLine(view.canvas())
            dMgr.addDrawingObject(line)
            if not i:
                dMgr.setCanBeModify(False)
                dMgr.setPen(qt.QPen(qt.Qt.red, 1, qt.Qt.DashLine))
            else:
                dMgr.setPen(qt.QPen(qt.Qt.red, 2))
                dMgr.setEndDrawCallBack(self.__helpLineMoved)
            self.__helpLines.append(dMgr)
Пример #3
0
    def _helpLineDraw(self):
        hline = QubPointDrawingMgr(self._view.canvas(), self._view.matrix())
        hline.setAutoDisconnectEvent(True)
        hline.setEventName("HelpLine")
        hline.setExceptExclusiveListName(["StickAlignement"])
        if self._vertPhiFlag:
            drawingobject = QubCanvasHLine(self._view.canvas())
        else:
            drawingobject = QubCanvasVLine(self._view.canvas())
        hline.addDrawingObject(drawingobject)
        hline.setEndDrawCallBack(self._centeringPlug.endHline)
        self._view.addDrawingMgr(hline)
        hline.setPen(qt.QPen(qt.Qt.red, 2, qt.Qt.DashLine))

        hline.startDrawing()
        self._centeringPlug.hLines.append(hline)
Пример #4
0
    def _helpLineDraw(self):
        hline = QubPointDrawingMgr(self._view.canvas(), self._view.matrix())
        hline.setAutoDisconnectEvent(True)
        hline.setEventName("HelpLine")
        hline.setExceptExclusiveListName(["StickAlignement"])
        if self._vertPhiFlag:
            drawingobject = QubCanvasHLine(self._view.canvas())
        else:
            drawingobject = QubCanvasVLine(self._view.canvas())
        hline.addDrawingObject(drawingobject)
        hline.setEndDrawCallBack(self._centeringPlug.endHline)
        self._view.addDrawingMgr(hline)
        hline.setPen(qt.QPen(qt.Qt.red, 2, qt.Qt.DashLine))

        hline.startDrawing()
        self._centeringPlug.hLines.append(hline)
class CameraCalibrationBrick(BlissWidget):
    def __init__(self, parent, name):
        BlissWidget.__init__(self, parent, name)

        """
        variables
        """
        self.firstTime = True
        self.YCalib  = None
        self.ZCalib  = None
        self.calibration = 0
        self.drawing = None
        self.y1 = 0
        self.z1 = 0
        self.y2 = 0
        self.z2 = 0
        self.drawingMgr = None

        """
        property
        """
        self.addProperty("zoom", "string", "")
        self.addProperty("vertical motor", "string", "")
        self.addProperty("horizontal motor", "string", "")
        self.hwZoom = None
        self.hmot   = None
        self.vmot   = None

        """
        signals
        """
        self.defineSignal('getView',())
        self.defineSignal("ChangePixelCalibration", ())

        """
        slots
        """
        self.defineSlot('getCalibration',())
        self.defineSlot('useExpertMode',())

        self.buildInterface()

    def buildInterface(self):
        vlayout = qt.QVBoxLayout(self)

        title = qt.QLabel("<B>Pixel Size Calibration<B>", self)
        title.setSizePolicy(qt.QSizePolicy(qt.QSizePolicy.Expanding,
                                           qt.QSizePolicy.Fixed))
        vlayout.addWidget(title)

        self.calibFrame = qt.QFrame(self)
        self.calibFrame.setFrameShape(qt.QFrame.Box)
        self.calibFrame.setFrameShadow(qt.QFrame.Sunken)
        vlayout.addWidget(self.calibFrame)

        vlayout1 = qt.QVBoxLayout(self.calibFrame)
        vlayout1.setMargin(10)

        self.table = qttable.QTable(0,3, self.calibFrame)
        self.table.setFocusPolicy(qt.QWidget.NoFocus)
        self.table.setSelectionMode(qttable.QTable.NoSelection)
        self.table.setSizePolicy(qt.QSizePolicy(qt.QSizePolicy.Minimum,
                                                qt.QSizePolicy.Minimum))
        self.table.verticalHeader().hide()
        self.table.setLeftMargin(0)
        self.table.setReadOnly(True)

        header = self.table.horizontalHeader()
        header.setLabel(0, "Zoom")
        header.setLabel(1, "Y Size (nm)")
        header.setLabel(2, "Z Size (nm)")

        self.table.clearSelection(True)

        vlayout1.addWidget(self.table)

        vlayout1.addSpacing(10)
        f1 = qt.QFrame(self.calibFrame)
        f1.setFrameShape(qt.QFrame.HLine)
        f1.setFrameShadow(qt.QFrame.Sunken)
        vlayout1.addWidget(f1)
        vlayout1.addSpacing(10)

        self.saveButton = qt.QPushButton("Save Current Calibration",
                                         self.calibFrame)
        self.connect(self.saveButton, qt.SIGNAL("clicked()"),
                     self.saveCalibration)
        vlayout1.addWidget(self.saveButton)

        vlayout1.addSpacing(10)
        f1 = qt.QFrame(self.calibFrame)
        f1.setFrameShape(qt.QFrame.HLine)
        f1.setFrameShadow(qt.QFrame.Sunken)
        vlayout1.addWidget(f1)
        vlayout1.addSpacing(10)

        hlayout1 = qt.QHBoxLayout(vlayout1)
        self.relYLabel = qt.QLabel("Y Move:", self.calibFrame)
        hlayout1.addWidget(self.relYLabel)
        self.relYText = qt.QLineEdit("0.1", self.calibFrame)
        hlayout1.addWidget(self.relYText)

        hlayout2 = qt.QHBoxLayout(vlayout1)
        self.relZLabel = qt.QLabel("Z Move:", self.calibFrame)
        hlayout2.addWidget(self.relZLabel)
        self.relZText = qt.QLineEdit("0.1", self.calibFrame)
        hlayout2.addWidget(self.relZText)

        vlayout1.addSpacing(5)

        self.calibButton = qt.QPushButton("Start New Calibration",
                                          self.calibFrame)
        self.connect(self.calibButton, qt.SIGNAL("clicked()"),
                     self.calibrationAction)
        vlayout1.addWidget(self.calibButton)

        vlayout1.addStretch(1)

    def propertyChanged(self, prop, oldValue, newValue):
        if prop == "zoom":
            if self.hwZoom is not None:
                self.disconnect(self.hwZoom, qt.PYSIGNAL("positionReached"),
                                self.zoomChanged)
                self.disconnect(self.hwZoom, qt.PYSIGNAL("noPosition"),
                                self.zoomChanged)

            self.hwZoom = self.getHardwareObject(newValue)

            if self.hwZoom is not None:
                self.connect(self.hwZoom, qt.PYSIGNAL("positionReached"),
                             self.zoomChanged)
                self.connect(self.hwZoom, qt.PYSIGNAL("noPosition"),
                             self.zoomChanged)

        if prop == "vertical motor":
            self.vmot = self.getHardwareObject(newValue)
            mne = self.vmot.getMotorMnemonic()
            self.relZLabel.setText("Delta on \"%s\" "%mne)
            self.vmotUnit = self.vmot.getProperty("unit")
            if self.vmotUnit is None:
                self.vmotUnit = 1e-3

        if prop == "horizontal motor":
            self.hmot = self.getHardwareObject(newValue)
            mne = self.hmot.getMotorMnemonic()
            self.relYLabel.setText("Delta on \"%s\" "%mne)
            self.hmotUnit = self.hmot.getProperty("unit")
            if self.hmotUnit is  None:
                self.hmotUnit = 1e-3

        if not self.firstTime:
            self.initInterface()
            self.zoomChanged()

    def run(self):
        if self.firstTime:
            self.initInterface()
            self.zoomChanged()

            """
            get view
            """
            view = {}
            self.emit(qt.PYSIGNAL("getView"), (view,))
            try:
                self.drawing = view["drawing"]

                cvs = self.drawing.canvas()
                matrix = self.drawing.matrix()
                drawingobject = QubCanvasTarget(cvs)
                color = self.drawing.foregroundColor()

                self.drawingMgr = QubPointDrawingMgr(cvs, matrix)
                self.drawingMgr.setDrawingEvent(QubMoveNPressed1Point)
                self.drawingMgr.setAutoDisconnectEvent(True)
                self.drawingMgr.addDrawingObject(drawingobject)
                self.drawingMgr.setEndDrawCallBack(self.pointSelected)
                qt.QWidget.connect(self.drawing,
                                   qt.PYSIGNAL("ForegroundColorChanged"),
                                   self.setColor)

                self.drawing.addDrawingMgr(self.drawingMgr)
            except:
                print "No View"

        self.firstTime = False

    def setColor(self, color):
        if self.drawingMgr is not None:
            self.drawingMgr.setColor(color)

    def initInterface(self):
        if self.hwZoom is not None:
            pos = self.hwZoom.positionsIndex
            self.table.setNumRows(len(pos))
            for i in range(len(pos)):
                aux = self.hwZoom.getPositionKeyValue(pos[i], "resox")
                if aux is None:
                    aux = "1"
                resoy = float(aux)
                aux = self.hwZoom.getPositionKeyValue(pos[i], "resoy")
                if aux is None:
                    aux = "1"
                resoz = float(aux)
                self.table.setText(i, 0, pos[i])
                """
                resolution are displayed in nanometer and saved in merter
                """
                if resoy is not None:
                    self.table.setText(i, 1, str(int(resoy * 1e9)))
                else:
                    self.table.setText(i, 1, "Not Defined")
                if resoz is not None:
                    self.table.setText(i, 2, str(int(resoz * 1e9)))
                else:
                    self.table.setText(i, 2, "Not Defined")
            self.table.adjustColumn(0)
            self.table.adjustColumn(1)
            self.table.adjustColumn(2)

    def getZoomIndex(self, position):
        if self.hwZoom is not None:
            positions = self.hwZoom.positionsIndex
            for i in range(len(positions)):
                if position == positions[i]:
                    return(i)
            return(-1)

    def zoomChanged(self):
        if self.hwZoom is not None:
            currentPos = self.hwZoom.getPosition()
            self.currIdx = self.getZoomIndex(currentPos)
            if self.table.numSelections() != -1:
                self.table.clearSelection(True)
            if self.currIdx != -1:
                aux = self.hwZoom.getPositionKeyValue(currentPos, "resox")
                if aux is None:
                    aux = "1"
                resoy = float(aux)
                aux = self.hwZoom.getPositionKeyValue(currentPos, "resoy")
                if aux is None:
                    aux = "1"
                resoz = float(aux)
                self.YCalib = resoy
                self.ZCalib = resoz
                self.table.selectRow(self.currIdx)
                if resoy is not None:
                    self.table.setText(self.currIdx, 1, str(int(resoy * 1e9)))
                else:
                    self.table.setText(self.currIdx, 1,"Not Defined")
                if resoz is not None:
                    self.table.setText(self.currIdx, 2, str(int(resoz * 1e9)))
                else:
                    self.table.setText(self.currIdx, 2, "Not Defined")
            else:
                self.YCalib = None
                self.ZCalib = None
        else:
            self.YCalib = None
            self.ZCalib = None

        self.emit(qt.PYSIGNAL("ChangePixelCalibration"),
                  (self.YCalib, self.ZCalib))

    def saveCalibration(self):
        if self.hwZoom is not None:
            currentPos = self.hwZoom.getPosition()
            self.hwZoom.setPositionKeyValue(currentPos, "resox", str(self.YCalib))
            self.hwZoom.setPositionKeyValue(currentPos, "resoy", str(self.ZCalib))
        else:
            print "CameraCalibrationBrick--ARG--hwZoom is None"

    def calibrationAction(self):
        if self.calibration == 0:

            if self.drawingMgr is not None:
                self.calibration = 1
                self.calibButton.setText("Cancel Calibration")

                self.drawingMgr.startDrawing()

        elif self.calibration == 1:
            self.calibration = 0
            self.calibButton.setText("Start New Calibration")
            self.drawingMgr.stopDrawing()
            self.drawingMgr.hide()

        elif self.calibration == 2:
            self.disconnect(self.vmot, qt.PYSIGNAL("moveDone"),
                            self.moveFinished)
            self.disconnect(self.hmot, qt.PYSIGNAL("moveDone"),
                            self.moveFinished)
            self.hmot.stop()
            self.vmot.stop()
            self.calibration = 0
            self.calibButton.setText("Start New Calibration")
            self.drawingMgr.stopDrawing()
            self.drawingMgr.hide()


    def pointSelected(self, drawingMgr):
        point = drawingMgr.point()
        if self.calibration == 1:
            self.y1 = point[0]
            self.z1 = point[1]

            ymne = self.hmot.getMotorMnemonic()
            zmne = self.vmot.getMotorMnemonic()
            self.deltaY  = float(str(self.relYText.text()))
            self.deltaZ  = float(str(self.relZText.text()))

            self.calibration = 2
            self.calibButton.setText("STOP")
            self.motorArrived = 0

            self.connect(self.hmot, qt.PYSIGNAL("moveDone"), self.moveFinished)
            self.connect(self.vmot, qt.PYSIGNAL("moveDone"), self.moveFinished)

            self.hmot.moveRelative(self.deltaY)
            self.vmot.moveRelative(self.deltaZ)

        elif self.calibration == 3:
            self.y2 = point[0]
            self.z2 = point[1]

            self.calcCalib()

            self.table.setText(self.currIdx, 1, str(int(self.YCalib * 1e9)))
            self.table.setText(self.currIdx, 2, str(int(self.ZCalib * 1e9)))

            self.calibButton.setText("Start New Calibration")
            self.calibration = 0
            self.drawingMgr.hide()

    def moveFinished(self, ver, mne):
        if mne == self.hmot.getMotorMnemonic():
            self.disconnect(self.hmot, qt.PYSIGNAL("moveDone"),
                            self.moveFinished)
            self.motorArrived = self.motorArrived + 1

        if mne == self.vmot.getMotorMnemonic():
            self.disconnect(self.vmot, qt.PYSIGNAL("moveDone"),
                            self.moveFinished)
            self.motorArrived = self.motorArrived + 1

        if self.calibration == 2 and self.motorArrived == 2:
            self.calibration = 3
            self.calibButton.setText("Cancel Calibration")
            self.drawingMgr.startDrawing()

    def calcCalib(self):
        if (abs(self.y1 - self.y2) != 0) and \
           (abs(self.z1 - self.z2) != 0):
            self.YCalib = self.deltaY * self.hmotUnit / float(self.y1 - self.y2)
            self.ZCalib = self.deltaZ * self.vmotUnit / float(self.z1 - self.z2)
            self.emit(qt.PYSIGNAL("ChangePixelCalibration"),
                      (self.YCalib, self.ZCalib))

    """
    SLOTS
    """

    def getCalibration(self, calib):
        calib["ycalib"] = self.YCalib
        calib["zcalib"] = self.ZCalib


    def useExpertMode(self, value):
        if value:
            # print "Someone ask to enable CameraCalibrationBrick."
            self.setEnabled(True)
        else:
            # print "Someone ask to disable CameraCalibrationBrick."
            self.setEnabled(False)
class CameraCalibrationBrick(BlissWidget):
    def __init__(self, parent, name):
        BlissWidget.__init__(self, parent, name)
        """
        variables
        """
        self.firstTime = True
        self.YCalib = None
        self.ZCalib = None
        self.calibration = 0
        self.drawing = None
        self.y1 = 0
        self.z1 = 0
        self.y2 = 0
        self.z2 = 0
        self.drawingMgr = None
        """
        property
        """
        self.addProperty("zoom", "string", "")
        self.addProperty("vertical motor", "string", "")
        self.addProperty("horizontal motor", "string", "")
        self.hwZoom = None
        self.hmot = None
        self.vmot = None
        """
        signals
        """
        self.defineSignal('getView', ())
        self.defineSignal("ChangePixelCalibration", ())
        """
        slots
        """
        self.defineSlot('getCalibration', ())
        self.defineSlot('useExpertMode', ())

        self.buildInterface()

    def buildInterface(self):
        vlayout = qt.QVBoxLayout(self)

        title = qt.QLabel("<B>Pixel Size Calibration<B>", self)
        title.setSizePolicy(
            qt.QSizePolicy(qt.QSizePolicy.Expanding, qt.QSizePolicy.Fixed))
        vlayout.addWidget(title)

        self.calibFrame = qt.QFrame(self)
        self.calibFrame.setFrameShape(qt.QFrame.Box)
        self.calibFrame.setFrameShadow(qt.QFrame.Sunken)
        vlayout.addWidget(self.calibFrame)

        vlayout1 = qt.QVBoxLayout(self.calibFrame)
        vlayout1.setMargin(10)

        self.table = qttable.QTable(0, 3, self.calibFrame)
        self.table.setFocusPolicy(qt.QWidget.NoFocus)
        self.table.setSelectionMode(qttable.QTable.NoSelection)
        self.table.setSizePolicy(
            qt.QSizePolicy(qt.QSizePolicy.Minimum, qt.QSizePolicy.Minimum))
        self.table.verticalHeader().hide()
        self.table.setLeftMargin(0)
        self.table.setReadOnly(True)

        header = self.table.horizontalHeader()
        header.setLabel(0, "Zoom")
        header.setLabel(1, "Y Size (nm)")
        header.setLabel(2, "Z Size (nm)")

        self.table.clearSelection(True)

        vlayout1.addWidget(self.table)

        vlayout1.addSpacing(10)
        f1 = qt.QFrame(self.calibFrame)
        f1.setFrameShape(qt.QFrame.HLine)
        f1.setFrameShadow(qt.QFrame.Sunken)
        vlayout1.addWidget(f1)
        vlayout1.addSpacing(10)

        self.saveButton = qt.QPushButton("Save Current Calibration",
                                         self.calibFrame)
        self.connect(self.saveButton, qt.SIGNAL("clicked()"),
                     self.saveCalibration)
        vlayout1.addWidget(self.saveButton)

        vlayout1.addSpacing(10)
        f1 = qt.QFrame(self.calibFrame)
        f1.setFrameShape(qt.QFrame.HLine)
        f1.setFrameShadow(qt.QFrame.Sunken)
        vlayout1.addWidget(f1)
        vlayout1.addSpacing(10)

        hlayout1 = qt.QHBoxLayout(vlayout1)
        self.relYLabel = qt.QLabel("Y Move:", self.calibFrame)
        hlayout1.addWidget(self.relYLabel)
        self.relYText = qt.QLineEdit("0.1", self.calibFrame)
        hlayout1.addWidget(self.relYText)

        hlayout2 = qt.QHBoxLayout(vlayout1)
        self.relZLabel = qt.QLabel("Z Move:", self.calibFrame)
        hlayout2.addWidget(self.relZLabel)
        self.relZText = qt.QLineEdit("0.1", self.calibFrame)
        hlayout2.addWidget(self.relZText)

        vlayout1.addSpacing(5)

        self.calibButton = qt.QPushButton("Start New Calibration",
                                          self.calibFrame)
        self.connect(self.calibButton, qt.SIGNAL("clicked()"),
                     self.calibrationAction)
        vlayout1.addWidget(self.calibButton)

        vlayout1.addStretch(1)

    def propertyChanged(self, prop, oldValue, newValue):
        if prop == "zoom":
            if self.hwZoom is not None:
                self.disconnect(self.hwZoom, qt.PYSIGNAL("positionReached"),
                                self.zoomChanged)
                self.disconnect(self.hwZoom, qt.PYSIGNAL("noPosition"),
                                self.zoomChanged)

            self.hwZoom = self.getHardwareObject(newValue)

            if self.hwZoom is not None:
                self.connect(self.hwZoom, qt.PYSIGNAL("positionReached"),
                             self.zoomChanged)
                self.connect(self.hwZoom, qt.PYSIGNAL("noPosition"),
                             self.zoomChanged)

        if prop == "vertical motor":
            self.vmot = self.getHardwareObject(newValue)
            mne = self.vmot.getMotorMnemonic()
            self.relZLabel.setText("Delta on \"%s\" " % mne)
            self.vmotUnit = self.vmot.getProperty("unit")
            if self.vmotUnit is None:
                self.vmotUnit = 1e-3

        if prop == "horizontal motor":
            self.hmot = self.getHardwareObject(newValue)
            mne = self.hmot.getMotorMnemonic()
            self.relYLabel.setText("Delta on \"%s\" " % mne)
            self.hmotUnit = self.hmot.getProperty("unit")
            if self.hmotUnit is None:
                self.hmotUnit = 1e-3

        if not self.firstTime:
            self.initInterface()
            self.zoomChanged()

    def run(self):
        if self.firstTime:
            self.initInterface()
            self.zoomChanged()
            """
            get view
            """
            view = {}
            self.emit(qt.PYSIGNAL("getView"), (view, ))
            try:
                self.drawing = view["drawing"]

                cvs = self.drawing.canvas()
                matrix = self.drawing.matrix()
                drawingobject = QubCanvasTarget(cvs)
                color = self.drawing.foregroundColor()

                self.drawingMgr = QubPointDrawingMgr(cvs, matrix)
                self.drawingMgr.setDrawingEvent(QubMoveNPressed1Point)
                self.drawingMgr.setAutoDisconnectEvent(True)
                self.drawingMgr.addDrawingObject(drawingobject)
                self.drawingMgr.setEndDrawCallBack(self.pointSelected)
                qt.QWidget.connect(self.drawing,
                                   qt.PYSIGNAL("ForegroundColorChanged"),
                                   self.setColor)

                self.drawing.addDrawingMgr(self.drawingMgr)
            except:
                print "No View"

        self.firstTime = False

    def setColor(self, color):
        if self.drawingMgr is not None:
            self.drawingMgr.setColor(color)

    def initInterface(self):
        if self.hwZoom is not None:
            pos = self.hwZoom.positionsIndex
            self.table.setNumRows(len(pos))
            for i in range(len(pos)):
                aux = self.hwZoom.getPositionKeyValue(pos[i], "resox")
                if aux is None:
                    aux = "1"
                resoy = float(aux)
                aux = self.hwZoom.getPositionKeyValue(pos[i], "resoy")
                if aux is None:
                    aux = "1"
                resoz = float(aux)
                self.table.setText(i, 0, pos[i])
                """
                resolution are displayed in nanometer and saved in merter
                """
                if resoy is not None:
                    self.table.setText(i, 1, str(int(resoy * 1e9)))
                else:
                    self.table.setText(i, 1, "Not Defined")
                if resoz is not None:
                    self.table.setText(i, 2, str(int(resoz * 1e9)))
                else:
                    self.table.setText(i, 2, "Not Defined")
            self.table.adjustColumn(0)
            self.table.adjustColumn(1)
            self.table.adjustColumn(2)

    def getZoomIndex(self, position):
        if self.hwZoom is not None:
            positions = self.hwZoom.positionsIndex
            for i in range(len(positions)):
                if position == positions[i]:
                    return (i)
            return (-1)

    def zoomChanged(self):
        if self.hwZoom is not None:
            currentPos = self.hwZoom.getPosition()
            self.currIdx = self.getZoomIndex(currentPos)
            if self.table.numSelections() != -1:
                self.table.clearSelection(True)
            if self.currIdx != -1:
                aux = self.hwZoom.getPositionKeyValue(currentPos, "resox")
                if aux is None:
                    aux = "1"
                resoy = float(aux)
                aux = self.hwZoom.getPositionKeyValue(currentPos, "resoy")
                if aux is None:
                    aux = "1"
                resoz = float(aux)
                self.YCalib = resoy
                self.ZCalib = resoz
                self.table.selectRow(self.currIdx)
                if resoy is not None:
                    self.table.setText(self.currIdx, 1, str(int(resoy * 1e9)))
                else:
                    self.table.setText(self.currIdx, 1, "Not Defined")
                if resoz is not None:
                    self.table.setText(self.currIdx, 2, str(int(resoz * 1e9)))
                else:
                    self.table.setText(self.currIdx, 2, "Not Defined")
            else:
                self.YCalib = None
                self.ZCalib = None
        else:
            self.YCalib = None
            self.ZCalib = None

        self.emit(qt.PYSIGNAL("ChangePixelCalibration"),
                  (self.YCalib, self.ZCalib))

    def saveCalibration(self):
        if self.hwZoom is not None:
            currentPos = self.hwZoom.getPosition()
            self.hwZoom.setPositionKeyValue(currentPos, "resox",
                                            str(self.YCalib))
            self.hwZoom.setPositionKeyValue(currentPos, "resoy",
                                            str(self.ZCalib))
        else:
            print "CameraCalibrationBrick--ARG--hwZoom is None"

    def calibrationAction(self):
        if self.calibration == 0:

            if self.drawingMgr is not None:
                self.calibration = 1
                self.calibButton.setText("Cancel Calibration")

                self.drawingMgr.startDrawing()

        elif self.calibration == 1:
            self.calibration = 0
            self.calibButton.setText("Start New Calibration")
            self.drawingMgr.stopDrawing()
            self.drawingMgr.hide()

        elif self.calibration == 2:
            self.disconnect(self.vmot, qt.PYSIGNAL("moveDone"),
                            self.moveFinished)
            self.disconnect(self.hmot, qt.PYSIGNAL("moveDone"),
                            self.moveFinished)
            self.hmot.stop()
            self.vmot.stop()
            self.calibration = 0
            self.calibButton.setText("Start New Calibration")
            self.drawingMgr.stopDrawing()
            self.drawingMgr.hide()

    def pointSelected(self, drawingMgr):
        point = drawingMgr.point()
        if self.calibration == 1:
            self.y1 = point[0]
            self.z1 = point[1]

            ymne = self.hmot.getMotorMnemonic()
            zmne = self.vmot.getMotorMnemonic()
            self.deltaY = float(str(self.relYText.text()))
            self.deltaZ = float(str(self.relZText.text()))

            self.calibration = 2
            self.calibButton.setText("STOP")
            self.motorArrived = 0

            self.connect(self.hmot, qt.PYSIGNAL("moveDone"), self.moveFinished)
            self.connect(self.vmot, qt.PYSIGNAL("moveDone"), self.moveFinished)

            self.hmot.moveRelative(self.deltaY)
            self.vmot.moveRelative(self.deltaZ)

        elif self.calibration == 3:
            self.y2 = point[0]
            self.z2 = point[1]

            self.calcCalib()

            self.table.setText(self.currIdx, 1, str(int(self.YCalib * 1e9)))
            self.table.setText(self.currIdx, 2, str(int(self.ZCalib * 1e9)))

            self.calibButton.setText("Start New Calibration")
            self.calibration = 0
            self.drawingMgr.hide()

    def moveFinished(self, ver, mne):
        if mne == self.hmot.getMotorMnemonic():
            self.disconnect(self.hmot, qt.PYSIGNAL("moveDone"),
                            self.moveFinished)
            self.motorArrived = self.motorArrived + 1

        if mne == self.vmot.getMotorMnemonic():
            self.disconnect(self.vmot, qt.PYSIGNAL("moveDone"),
                            self.moveFinished)
            self.motorArrived = self.motorArrived + 1

        if self.calibration == 2 and self.motorArrived == 2:
            self.calibration = 3
            self.calibButton.setText("Cancel Calibration")
            self.drawingMgr.startDrawing()

    def calcCalib(self):
        if (abs(self.y1 - self.y2) != 0) and \
           (abs(self.z1 - self.z2) != 0):
            self.YCalib = self.deltaY * self.hmotUnit / float(self.y1 -
                                                              self.y2)
            self.ZCalib = self.deltaZ * self.vmotUnit / float(self.z1 -
                                                              self.z2)
            self.emit(qt.PYSIGNAL("ChangePixelCalibration"),
                      (self.YCalib, self.ZCalib))

    """
    SLOTS
    """

    def getCalibration(self, calib):
        calib["ycalib"] = self.YCalib
        calib["zcalib"] = self.ZCalib

    def useExpertMode(self, value):
        if value:
            # print "Someone ask to enable CameraCalibrationBrick."
            self.setEnabled(True)
        else:
            # print "Someone ask to disable CameraCalibrationBrick."
            self.setEnabled(False)
Пример #7
0
class _alignementProcess:
    def __init__(self, centeringPlug, widgetTree, view, verticalPhi):
        self._centeringPlug = centeringPlug
        self._widgetTree = widgetTree
        self._view = view
        self._vertPhiFlag = verticalPhi
        self._lastDrawing = None
        centeringPlug.alignementProcessState = self

    def __del__(self):
        if self._lastDrawing is not None:
            self._lastDrawing.stopDrawing()

    def begin(self):
        pass

    def endDraw(self, aDrawingMgr):
        pass

    def cancel(self):
        _cancelAlignementProcess(
            self._centeringPlug, self._widgetTree, self._view, self._vertPhiFlag
        )

    def setView(self, view):
        self._view = view

    def setVerticalPhi(self, aFlag):
        self._vertPhiFlag = aFlag

    def verticalPhi(self):
        return self._vertPhiFlag

    def _clearTable(self):
        at = self._widgetTree.child("alignementTable")
        self._centeringPlug.nbPoint4Alignement = self._widgetTree.child(
            "__nbPoint"
        ).value()
        at.setNumRows(self._centeringPlug.nbPoint4Alignement)

        for rowid in range(at.numRows()):
            for colid in range(at.numCols()):
                at.setText(rowid, colid, "")

    def _insertPos(self, aDrawingMgr, rowid):
        phiPos = str(self._centeringPlug.getPhi())
        x, y = aDrawingMgr.point()

        aDrawingMgr.hide()

        at = self._widgetTree.child("alignementTable")
        at.setText(rowid, 0, phiPos)
        at.setText(rowid, 1, str(x))
        at.setText(rowid, 2, str(y))

    def _startDraw(self):
        self._lastDrawing = QubPointDrawingMgr(self._view.canvas(), self._view.matrix())
        drawingobject = QubCanvasTarget(self._view.canvas())

        self._lastDrawing.setAutoDisconnectEvent(True)
        self._lastDrawing.setEventName("StickAlignement")
        self._lastDrawing.setExceptExclusiveListName(["HelpLine"])
        self._lastDrawing.addDrawingObject(drawingobject)
        self._view.addDrawingMgr(self._lastDrawing)
        self._lastDrawing.startDrawing()
        self._lastDrawing.setEndDrawCallBack(self._centeringPlug.endAlignementDraw)

    def _helpLineDraw(self):
        hline = QubPointDrawingMgr(self._view.canvas(), self._view.matrix())
        hline.setAutoDisconnectEvent(True)
        hline.setEventName("HelpLine")
        hline.setExceptExclusiveListName(["StickAlignement"])
        if self._vertPhiFlag:
            drawingobject = QubCanvasHLine(self._view.canvas())
        else:
            drawingobject = QubCanvasVLine(self._view.canvas())
        hline.addDrawingObject(drawingobject)
        hline.setEndDrawCallBack(self._centeringPlug.endHline)
        self._view.addDrawingMgr(hline)
        hline.setPen(qt.QPen(qt.Qt.red, 2, qt.Qt.DashLine))

        hline.startDrawing()
        self._centeringPlug.hLines.append(hline)

    def _phiStep(self):
        phiStepLineEditor = self._widgetTree.child("__deltaPhiCalib")
        step, valid = phiStepLineEditor.text().toFloat()
        self._centeringPlug.mvPhi(step)

    def endHline(self, drawingMgr):
        pass
Пример #8
0
class _alignementProcess:
    def __init__(self, centeringPlug, widgetTree, view, verticalPhi):
        self._centeringPlug = centeringPlug
        self._widgetTree = widgetTree
        self._view = view
        self._vertPhiFlag = verticalPhi
        self._lastDrawing = None
        centeringPlug.alignementProcessState = self

    def __del__(self):
        if self._lastDrawing is not None:
            self._lastDrawing.stopDrawing()

    def begin(self):
        pass

    def endDraw(self, aDrawingMgr):
        pass

    def cancel(self):
        _cancelAlignementProcess(self._centeringPlug, self._widgetTree,
                                 self._view, self._vertPhiFlag)

    def setView(self, view):
        self._view = view

    def setVerticalPhi(self, aFlag):
        self._vertPhiFlag = aFlag

    def verticalPhi(self):
        return self._vertPhiFlag

    def _clearTable(self):
        at = self._widgetTree.child("alignementTable")
        self._centeringPlug.nbPoint4Alignement = self._widgetTree.child(
            "__nbPoint").value()
        at.setNumRows(self._centeringPlug.nbPoint4Alignement)

        for rowid in range(at.numRows()):
            for colid in range(at.numCols()):
                at.setText(rowid, colid, "")

    def _insertPos(self, aDrawingMgr, rowid):
        phiPos = str(self._centeringPlug.getPhi())
        x, y = aDrawingMgr.point()

        aDrawingMgr.hide()

        at = self._widgetTree.child("alignementTable")
        at.setText(rowid, 0, phiPos)
        at.setText(rowid, 1, str(x))
        at.setText(rowid, 2, str(y))

    def _startDraw(self):
        self._lastDrawing = QubPointDrawingMgr(self._view.canvas(),
                                               self._view.matrix())
        drawingobject = QubCanvasTarget(self._view.canvas())

        self._lastDrawing.setAutoDisconnectEvent(True)
        self._lastDrawing.setEventName("StickAlignement")
        self._lastDrawing.setExceptExclusiveListName(["HelpLine"])
        self._lastDrawing.addDrawingObject(drawingobject)
        self._view.addDrawingMgr(self._lastDrawing)
        self._lastDrawing.startDrawing()
        self._lastDrawing.setEndDrawCallBack(
            self._centeringPlug.endAlignementDraw)

    def _helpLineDraw(self):
        hline = QubPointDrawingMgr(self._view.canvas(), self._view.matrix())
        hline.setAutoDisconnectEvent(True)
        hline.setEventName("HelpLine")
        hline.setExceptExclusiveListName(["StickAlignement"])
        if self._vertPhiFlag:
            drawingobject = QubCanvasHLine(self._view.canvas())
        else:
            drawingobject = QubCanvasVLine(self._view.canvas())
        hline.addDrawingObject(drawingobject)
        hline.setEndDrawCallBack(self._centeringPlug.endHline)
        self._view.addDrawingMgr(hline)
        hline.setPen(qt.QPen(qt.Qt.red, 2, qt.Qt.DashLine))

        hline.startDrawing()
        self._centeringPlug.hLines.append(hline)

    def _phiStep(self):
        phiStepLineEditor = self._widgetTree.child("__deltaPhiCalib")
        step, valid = phiStepLineEditor.text().toFloat()
        self._centeringPlug.mvPhi(step)

    def endHline(self, drawingMgr):
        pass