Example #1
0
    def getLoadablesFromFileLists(self, fileLists):
        """Take list of file lists, return loadables by plugin dictionary
    """

        loadablesByPlugin = {}
        loadEnabled = False

        allFileCount = missingFileCount = 0
        for fileList in fileLists:
            for filePath in fileList:
                allFileCount += 1
                if not os.path.exists(filePath):
                    missingFileCount += 1

        if missingFileCount > 0:
            messages.appendslicer.util.warningDisplay(
                "Warning: %d of %d selected files listed in the database cannot be found on disk."
                % (missingFileCount, allFileCount),
                windowTitle="DICOM")

        if missingFileCount == allFileCount:
            # Nothing to load
            return loadablesByPlugin, loadEnabled

        progressDialog = slicer.util.createProgressDialog(parent=self,
                                                          value=0,
                                                          maximum=100)

        def progressCallback(progressDialog, progressLabel, progressValue):
            progressDialog.labelText = '\nChecking %s' % progressLabel
            slicer.app.processEvents()
            progressDialog.setValue(progressValue)
            slicer.app.processEvents()
            cancelled = progressDialog.wasCanceled
            return cancelled

        messages = []
        loadablesByPlugin, loadEnabled = DICOMLib.getLoadablesFromFileLists(
            fileLists,
            self.pluginSelector.selectedPlugins(),
            messages,
            lambda progressLabel, progressValue, progressDialog=progressDialog:
            progressCallback(progressDialog, progressLabel, progressValue),
            self.pluginInstances)

        progressDialog.close()

        if messages:
            slicer.util.warningDisplay(
                "Warning: %s\n\nSee python console for error message." %
                ' '.join(messages),
                windowTitle="DICOM",
                parent=self)

        return loadablesByPlugin, loadEnabled
    def load_dicom_archive(self, file_path):
        """
        Load unzipped DICOMs into Slicer.

        Args:
            file_path (str): path to the cached dicom archive.

        https://discourse.slicer.org/t/fastest-way-to-load-dicom/9317/2
        """
        with tempfile.TemporaryDirectory() as dicomDataDir:
            dicom_zip = ZipFile(file_path)
            dicom_zip.extractall(path=dicomDataDir)
            DICOMLib.importDicom(dicomDataDir)
            dicomFiles = slicer.util.getFilesInDirectory(dicomDataDir)
            loadablesByPlugin, loadEnabled = DICOMLib.getLoadablesFromFileLists([dicomFiles])
            loadedNodeIDs = DICOMLib.loadLoadables(loadablesByPlugin)
Example #3
0
    def getLoadablesFromFileLists(self, fileLists):
        """Take list of file lists, return loadables by plugin dictionary
        """

        loadablesByPlugin = {}
        loadEnabled = False

        # Get selected plugins from application settings
        # Settings are filled in DICOMWidget using DICOMPluginSelector
        settings = qt.QSettings()
        selectedPlugins = []
        if settings.contains('DICOM/disabledPlugins/size'):
            size = settings.beginReadArray('DICOM/disabledPlugins')
            disabledPlugins = []

            for i in range(size):
                settings.setArrayIndex(i)
                disabledPlugins.append(str(settings.allKeys()[0]))
            settings.endArray()

            for pluginClass in slicer.modules.dicomPlugins:
                if pluginClass not in disabledPlugins:
                    selectedPlugins.append(pluginClass)
        else:
            # All DICOM plugins would be enabled by default
            for pluginClass in slicer.modules.dicomPlugins:
                selectedPlugins.append(pluginClass)

        allFileCount = missingFileCount = 0
        for fileList in fileLists:
            for filePath in fileList:
                allFileCount += 1
                if not os.path.exists(filePath):
                    missingFileCount += 1

        messages = []
        if missingFileCount > 0:
            messages.append(
                "Warning: %d of %d selected files listed in the database cannot be found on disk."
                % (missingFileCount, allFileCount))

        if missingFileCount < allFileCount:
            progressDialog = slicer.util.createProgressDialog(parent=self,
                                                              value=0,
                                                              maximum=100)

            def progressCallback(progressDialog, progressLabel, progressValue):
                progressDialog.labelText = '\nChecking %s' % progressLabel
                slicer.app.processEvents()
                progressDialog.setValue(progressValue)
                slicer.app.processEvents()
                cancelled = progressDialog.wasCanceled
                return cancelled

            loadablesByPlugin, loadEnabled = DICOMLib.getLoadablesFromFileLists(
                fileLists,
                selectedPlugins,
                messages,
                lambda progressLabel, progressValue,
                progressDialog=progressDialog: progressCallback(
                    progressDialog, progressLabel, progressValue),
                self.pluginInstances)

            progressDialog.close()

        if messages:
            slicer.util.warningDisplay(
                "Warning: %s\n\nSee python console for error message." %
                ' '.join(messages),
                windowTitle="DICOM",
                parent=self)

        return loadablesByPlugin, loadEnabled