Пример #1
0
    def createWidgets(self):
        logging.debug("In MarkAction::createWidgets()")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/static/default/icon/48x48/curve.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionMark = QtGui.QAction(self.parent())
        self.actionMark.setCheckable(True)
        self.actionMark.setIcon(icon)
        self.actionMark.setObjectName("actionMark")
        self.actionMark.setText(
            QtGui.QApplication.translate("MarkAction", "&Mark", None, QtGui.QApplication.UnicodeUTF8)
        )

        self.parent().menuTools.addAction(self.actionMark)
        self.parent().toolBarTools.addAction(self.actionMark)

        parentProperties = self.parent().scrollAreaWidgetContents
        self.propertiesAction = MarkProperties(parentProperties)
        parentProperties.layout().addWidget(self.propertiesAction)
        self.propertiesAction.hide()
Пример #2
0
class MarkAction(QtCore.QObject):
    def __init__(self, ilsa):
        logging.debug("In MarkAction::__init__()")
        super(MarkAction, self).__init__(ilsa.parentWidget())
        self._ilsa = ilsa
        self.createWidgets()
        self.createActions()

    def createWidgets(self):
        logging.debug("In MarkAction::createWidgets()")
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(":/static/default/icon/48x48/curve.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.actionMark = QtGui.QAction(self.parent())
        self.actionMark.setCheckable(True)
        self.actionMark.setIcon(icon)
        self.actionMark.setObjectName("actionMark")
        self.actionMark.setText(
            QtGui.QApplication.translate("MarkAction", "&Mark", None, QtGui.QApplication.UnicodeUTF8)
        )

        self.parent().menuTools.addAction(self.actionMark)
        self.parent().toolBarTools.addAction(self.actionMark)

        parentProperties = self.parent().scrollAreaWidgetContents
        self.propertiesAction = MarkProperties(parentProperties)
        parentProperties.layout().addWidget(self.propertiesAction)
        self.propertiesAction.hide()

    def uncheck(self, actionType):
        if self.actionMark.isChecked():
            self.actionMark.setChecked(False)
            self.slotActionMark()

    def createActions(self):
        logging.debug("In MarkAction::createActions()")
        self.connect(self.actionMark, QtCore.SIGNAL("triggered()"), self.slotActionMark)
        self.propertiesAction.connect(
            self.propertiesAction.newMarkButton, QtCore.SIGNAL("clicked ( bool)"), self.slotNewMark
        )
        self.propertiesAction.connect(
            self.propertiesAction.deleteMarkButton, QtCore.SIGNAL("clicked ( bool)"), self.slotDeleteMark
        )

    def slotActionMark(self):
        logging.debug("In MarkAction::slotActionMark()")
        scenes = self._ilsa.scenes()
        if not self.actionMark.isChecked():
            if self.propertiesAction.contour and not self.propertiesAction.contour.started:
                self.propertiesAction.removeSelectedContour()

            self.propertiesAction.hide()
            self.parent().toolProperties.setVisible(False)
            self.propertiesAction.lockAll()
            return
        self._ilsa.desactivateOthers("mark")
        self.parent().toolProperties.setVisible(True)
        self.propertiesAction.show()
        if self.propertiesAction.getContour():
            self.propertiesAction.getPropertiesFromContour()
            return

        replyList = []

        for scene in scenes:
            if isinstance(scene, VtkMultiSliceImagePlane):
                contour = MultiSliceContour(scene)
            else:
                contour = Contour(scene)

            replyList.append(contour)

        self.propertiesAction.addContour(replyList[0])

        for i, scene in enumerate(scenes):
            a = replyList[:]
            b = a.pop(i)
            b.replyList = a

    def slotDeleteMark(self, checked):
        logging.debug("In MarkAction::slotDeleteMark()")
        self.propertiesAction.removeSelectedContour()

    def slotNewMark(self, checked):
        logging.debug("In MarkAction::slotNewMark()")
        for contour in self.propertiesAction.contours.values():
            if contour.contourWidget.GetWidgetState() != 2:
                return
        scenes = self._ilsa.scenes()
        replyList = []

        for scene in scenes:
            if isinstance(scene, VtkMultiSliceImagePlane):
                contour = MultiSliceContour(scene)
            else:
                contour = Contour(scene)
            replyList.append(contour)

        self.propertiesAction.addContour(replyList[0])

        for i, scene in enumerate(scenes):
            a = replyList[:]
            b = a.pop(i)
            b.replyList = a

    def save(self):
        logging.debug("In MarkAction::save()")
        contours = self.propertiesAction.contours.values()
        yamlContours = []
        for contour in contours:
            yamlContours.append(contour.save())
        yaml = {"contours": yamlContours}
        return yaml

    def restore(self, value):
        logging.debug("In MarkAction::restore()")
        contours = value["contours"]
        if contours:
            for contour in contours:
                self.loadContour(contour)

    def loadContour(self, contourData):
        logging.debug("In MarkAction::loadContour()")
        scenes = self._ilsa.scenes()
        replyList = []

        for scene in scenes:
            if isinstance(scene, VtkMultiSliceImagePlane):
                contour = MultiSliceContour(scene)
            else:
                contour = Contour(scene)
            replyList.append(contour)

        self.propertiesAction.addContour(replyList[0])

        for i, scene in enumerate(scenes):
            a = replyList[:]
            b = a.pop(i)
            b.replyList = a

        contour.loadPoints(contourData["points"])

        lc = contourData["lineColor"]
        lineColor = QColor.fromRgbF(lc[0], lc[1], lc[2])
        self.propertiesAction.changeLineColor(lineColor)
        self.propertiesAction.slotActionVisible(contourData["visible"])
        self.propertiesAction.slotActionLock(contourData["locked"])
        self.propertiesAction.lock.setChecked(contourData["locked"])
        self.propertiesAction.slotThicknessChanged(contourData["radius"])

    def addScene(self, scene):
        logging.debug("In MarkAction::addScene()")
        contours = self.propertiesAction.contours.values()
        for contour in contours:
            contour.addScene(scene)

    def removeScene(self, scene):
        logging.debug("In MarkAction::removeScene()")
        contours = self.propertiesAction.contours.values()
        for contour in contours:
            if contour.scene == scene:
                toRemove = contour
                if contour.replyList:
                    contour = contour.replyList[0]
                    self.propertiesAction.switchContourReference(toRemove, contour)
                else:
                    self.propertiesAction.removeCountour(contour)
                    continue

            else:
                for reply in contour.replyList:
                    if reply.scene == scene:
                        toRemove = reply
                        break
            contour.removeScenePlugin(toRemove)
            # TODO free em ToRemove
            for reply in contour.replyList:
                reply.removeScenePlugin(toRemove)
            toRemove.delete()