Example #1
0
    def saveResults(self):
        try:
            if SlicerUtil.isSlicerACILLoaded():
                saveResultsRemotely = qt.QMessageBox.question(
                    slicer.util.mainWindow(), "Save volume remotely?",
                    "Do you want to save the results remotely?",
                    qt.QMessageBox.Yes
                    | qt.QMessageBox.No) == qt.QMessageBox.Yes
            else:
                saveResultsRemotely = False
            # First, save locally to the results directory (as a backup)
            labelmap = self.getCurrentLabelMapNode()
            localPath = os.path.join(self.saveResultsDirectoryButton.directory,
                                     labelmap.GetName() + ".nrrd")
            if saveResultsRemotely:
                self.caseNavigatorWidget.uploadVolume(
                    labelmap,
                    callbackFunction=self._uploadFileCallback_,
                    localPath=localPath)
            else:
                slicer.util.saveNode(labelmap, localPath)
                slicer.util.infoDisplay(
                    "Results saved to '{}'".format(localPath))

        except Exception as ex:
            Util.print_last_exception()
            slicer.util.errorDisplay(ex.message)
Example #2
0
    def restoreStateBeforeExitingModule(self):
        """Load the last state of the module when the user exited (labelmap, opacity, contrast window, etc.)
        """
        try:
            if self.savedVolumeID:
                # There is a previously saved valid state.
                SlicerUtil.setActiveVolumeIds(self.savedVolumeID)
                SlicerUtil.changeContrastWindow(self.savedContrastLevel[0],
                                                self.savedContrastLevel[1])
                # if self.savedLabelmapID:
                #     print "Restoring active labelmap: " + self.savedLabelmapID
                #     # There was a valid labelmap. Restore it
                #     SlicerUtil.displayLabelmapVolume(self.savedLabelmapID)
                #     # Restore previous opacity
                #     SlicerUtil.changeLabelmapOpacity(self.savedLabelmapOpacity)
                # else:
                #     # Hide labelmap
                #     print "No labelmap saved. Hide all"
                #     SlicerUtil.displayLabelmapVolume(None)
            # else:
            #     # Hide labelmap
            #     print "No volume saved. Hide labelmap"
            #     SlicerUtil.displayLabelmapVolume(None)

            # Restore layout
            SlicerUtil.changeLayout(self.savedLayout)
        except:
            Util.print_last_exception()
            pass
Example #3
0
 def saveResultsCurrentNode(self):
     """ Get current active node and save the xml fiducials file
     """
     try:
         d = self.saveResultsDirectoryButton.directory
         if not os.path.isdir(d):
             # Ask the user if he wants to create the folder
             if qt.QMessageBox.question(
                     slicer.util.mainWindow(), "Create directory?",
                     "The directory '{0}' does not exist. Do you want to create it?"
                     .format(d), qt.QMessageBox.Yes
                     | qt.QMessageBox.No) == qt.QMessageBox.Yes:
                 try:
                     os.makedirs(d)
                     # Make sure that everybody has write permissions (sometimes there are problems because of umask)
                     os.chmod(d, 0o777)
                 except:
                     qt.QMessageBox.warning(
                         slicer.util.mainWindow(), 'Directory incorrect',
                         'The folder "{0}" could not be created. Please select a valid directory'
                         .format(d))
                     return
             else:
                 # Abort process
                 SlicerUtil.logDevelop("Saving results process aborted",
                                       includePythonConsole=True)
                 return
                 # self.logic.saveCurrentFiducials(d, self.caseNavigatorWidget, self.uploadFileResult)
                 # qt.QMessageBox.information(slicer.util.mainWindow(), 'Results saved',
                 #                            "The results have been saved succesfully")
         # else:
         if SlicerUtil.isSlicerACILLoaded():
             question = qt.QMessageBox.question(
                 slicer.util.mainWindow(), "Save results remotely?",
                 "Your results will be saved locally. Do you also want to save your results in your remote server? (MAD, etc.)",
                 qt.QMessageBox.Yes | qt.QMessageBox.No
                 | qt.QMessageBox.Cancel)
             if question == qt.QMessageBox.Cancel:
                 return
             saveInRemoteRepo = question == qt.QMessageBox.Yes
         else:
             saveInRemoteRepo = False
         self.logic.saveCurrentFiducials(
             d,
             caseNavigatorWidget=self.caseNavigatorWidget,
             callbackFunction=self.uploadFileResult,
             saveInRemoteRepo=saveInRemoteRepo)
         qt.QMessageBox.information(
             slicer.util.mainWindow(), 'Results saved',
             "The results have been saved succesfully")
     except:
         Util.print_last_exception()
         qt.QMessageBox.critical(
             slicer.util.mainWindow(), "Error when saving the results",
             "Error when saving the results. Please review the console for additional info"
         )
Example #4
0
    def refreshTextboxes(self, reset=False):
        """ Update the information of the textboxes that give information about the measurements
        """
        self.aortaTextBox.setText("0")
        self.paTextBox.setText("0")
        self.ratioTextBox.setText("0")
        self.ratioTextBox.setStyleSheet(
            " QLineEdit { background-color: white; color: black}")

        volumeId = self.volumeSelector.currentNodeID
        # if volumeId not in self.logic.currentVolumesLoaded:
        #     return

        if volumeId:
            self.logic.changeActiveRulersColor(volumeId,
                                               self.logic.defaultColor)
        aorta = None
        pa = None
        if not reset:
            rulerAorta, newAorta = self.logic.getRulerNodeForVolumeAndStructure(
                self.volumeSelector.currentNodeID,
                self.logic.AORTA,
                createIfNotExist=False)
            rulerPA, newPA = self.logic.getRulerNodeForVolumeAndStructure(
                self.volumeSelector.currentNodeID,
                self.logic.PA,
                createIfNotExist=False)
            if rulerAorta:
                aorta = rulerAorta.GetDistanceMeasurement()
                self.aortaTextBox.setText(str(aorta))
            if rulerPA:
                pa = rulerPA.GetDistanceMeasurement()
                self.paTextBox.setText(str(pa))
            if pa is not None and aorta is not None and aorta != 0:
                try:
                    ratio = pa / aorta
                    self.ratioTextBox.setText(str(ratio))
                    if ratio > 1.0:
                        # Switch colors ("alarm")
                        st = " QLineEdit {{ background-color: rgb({0}, {1}, {2}); color: white }}". \
                                                        format(int(self.logic.defaultWarningColor[0]*255),
                                                                int(self.logic.defaultWarningColor[1]*255),
                                                                int(self.logic.defaultWarningColor[2]*255))
                        self.ratioTextBox.setStyleSheet(st)
                        self.logic.changeActiveRulersColor(
                            volumeId, self.logic.defaultWarningColor)
                except Exception:
                    Util.print_last_exception()
Example #5
0
    def refreshTextboxes(self, reset=False):
        """ Update the information of the textboxes that give information about the measurements
        """
        self.rvTextBox.setText("0")
        self.lvTextBox.setText("0")
        self.ratioTextBox.setText("0")
        self.ratioTextBox.setStyleSheet(
            " QLineEdit { background-color: white; color: black}")

        volumeId = self.volumeSelector.currentNodeID
        # if volumeId not in self.logic.currentVolumesLoaded:
        #     return

        rv = None
        lv = None
        if not reset:
            rulerRV, newRV = self.logic.getRulerNodeForVolumeAndStructure(
                self.volumeSelector.currentNodeID,
                self.logic.RV,
                createIfNotExist=False)
            rulerLV, newLV = self.logic.getRulerNodeForVolumeAndStructure(
                self.volumeSelector.currentNodeID,
                self.logic.LV,
                createIfNotExist=False)
            if rulerRV:
                rv = rulerRV.GetDistanceMeasurement()
                self.rvTextBox.setText(str(rv))
            if rulerLV:
                lv = rulerLV.GetDistanceMeasurement()
                self.lvTextBox.setText(str(lv))
            if lv is not None and rv is not None and rv != 0:
                try:
                    ratio = lv / rv
                    self.ratioTextBox.setText(str(ratio))
                    if ratio > 1.0:
                        # Switch colors ("alarm")
                        st = " QLineEdit {{ background-color: rgb({0}, {1}, {2}); color: white }}". \
                                                        format(int(self.logic.defaultWarningColor[0]*255),
                                                                int(self.logic.defaultWarningColor[1]*255),
                                                                int(self.logic.defaultWarningColor[2]*255))
                        self.ratioTextBox.setStyleSheet(st)
                except Exception:
                    Util.print_last_exception()
Example #6
0
 def saveResultsCurrentNode(self):
     """ Get current active node and save the xml fiducials file
     """
     try:
         d = self.saveResultsDirectoryButton.directory
         if not os.path.isdir(d):
             # Ask the user if he wants to create the folder
             if qt.QMessageBox.question(
                     slicer.util.mainWindow(), "Create directory?",
                     "The directory '{0}' does not exist. Do you want to create it?"
                     .format(d), qt.QMessageBox.Yes
                     | qt.QMessageBox.No) == qt.QMessageBox.Yes:
                 try:
                     os.makedirs(d)
                     # Make sure that everybody has write permissions (sometimes there are problems because of umask)
                     os.chmod(d, 0777)
                 except:
                     qt.QMessageBox.warning(
                         slicer.util.mainWindow(), 'Directory incorrect',
                         'The folder "{0}" could not be created. Please select a valid directory'
                         .format(d))
                     return
                 self.logic.saveCurrentFiducials(d,
                                                 self.caseNavigatorWidget,
                                                 self.uploadFileResult)
                 qt.QMessageBox.information(
                     slicer.util.mainWindow(), 'Results saved',
                     "The results have been saved succesfully")
         else:
             self.logic.saveCurrentFiducials(d, self.caseNavigatorWidget,
                                             self.uploadFileResult)
             qt.QMessageBox.information(
                 slicer.util.mainWindow(), 'Results saved',
                 "The results have been saved succesfully")
     except:
         Util.print_last_exception()
         qt.QMessageBox.critical(
             slicer.util.mainWindow(), "Error when saving the results",
             "Error when saving the results. Please review the console for additional info"
         )
Example #7
0
    def saveStateBeforeEnteringModule(self):
        """Save the state of the module regarding labelmap, etc. This state will be saved/loaded when
        exiting/entering the module
        """
        if self.preventSavingState:
            # Avoid that the first time that the module loads, the state is saved twice
            self.preventSavingState = False
            return

        # Save existing layout
        self.savedLayout = None
        if slicer.app.layoutManager() is not None:
            self.savedLayout = slicer.app.layoutManager().layout

        # Get the active volume (it it exists)
        activeVolumeId = SlicerUtil.getFirstActiveVolumeId()
        if activeVolumeId is None:
            # Reset state
            self.resetModuleState()
        else:
            # There is a Volume loaded. Save state
            try:
                self.savedVolumeID = activeVolumeId
                displayNode = SlicerUtil.getNode(
                    activeVolumeId).GetDisplayNode()
                self.savedContrastLevel = (displayNode.GetWindow(),
                                           displayNode.GetLevel())
                # activeLabelmapId = SlicerUtil.getFirstActiveLabelmapId()
                # self.savedLabelmapID = activeLabelmapId
                # if activeLabelmapId is None:
                #     self.savedLabelmapOpacity = None
                # else:
                #     self.savedLabelmapOpacity = SlicerUtil.getLabelmapOpacity()
                #     # Hide any labelmap
                #     SlicerUtil.displayLabelmapVolume(None)
            except:
                Util.print_last_exception()
                # Not action really needed
                pass
Example #8
0
    def refreshTextboxes(self, reset=False):
        """ Update the information of the textboxes that give information about the measurements
        """
        self.aortaTextBox.setText("0")
        self.paTextBox.setText("0")
        self.ratioTextBox.setText("0")
        self.ratioTextBox.setStyleSheet(" QLineEdit { background-color: white; color: black}")

        volumeId = self.volumeSelector.currentNodeId
        if volumeId not in self.logic.currentVolumesLoaded:
            return

        if volumeId:
            self.logic.changeColor(volumeId, self.logic.defaultColor)
        aorta = None
        pa = None
        if not reset:
            rulerAorta, newAorta = self.logic.getRulerNodeForVolumeAndStructure(
                self.volumeSelector.currentNodeId, self.logic.AORTA, createIfNotExist=False
            )
            rulerPA, newPA = self.logic.getRulerNodeForVolumeAndStructure(
                self.volumeSelector.currentNodeId, self.logic.PA, createIfNotExist=False
            )
            if rulerAorta:
                aorta = rulerAorta.GetDistanceMeasurement()
                self.aortaTextBox.setText(str(aorta))
            if rulerPA:
                pa = rulerPA.GetDistanceMeasurement()
                self.paTextBox.setText(str(pa))
            if aorta is not None and aorta != 0:
                try:
                    ratio = pa / aorta
                    self.ratioTextBox.setText(str(ratio))
                    if ratio > 1:
                        # Switch colors ("alarm")
                        self.ratioTextBox.setStyleSheet(" QLineEdit { background-color: rgb(255, 0, 0); color: white}")
                        self.logic.changeColor(volumeId, self.logic.defaultWarningColor)
                except Exception:
                    Util.print_last_exception()