示例#1
0
    def loadNextCase(self):

        while len(self.caseList):
            self.activeCase = self.caseList.pop(0)
            # Load Volumes of first case
            nodeList = []
            nodeImgList = []
            missingList = []
            for vType in xrange(3):
                fileList = []
                if len(postList[vType]):
                    for BASE, FILE in zip(preList, postList[vType]):
                        fileList.append(BASE + self.activeCase + FILE)

                (nodes, images, missing) = viewerUtilities.loadVolumes(
                    fileList, vType > 1, fourDFlag)

                if len(missing):
                    missingList.extend(missing)
                else:
                    nodeList.append(nodes)
                    nodeImgList.append(images)

            if len(missingList):
                liteViewer.errorPrint(
                    1,
                    "Going to next case as the following files could not be loaded for %s: %s"
                    % (self.activeCase, missingList))
                self.activeCase = None

            else:
                self.cpWidget.setNodeListsAndDisplay(nodeList, nodeImgList, 1)
                if self.cpWidget.ctrlWidget:
                    self.cpWidget.ctrlWidget.setWindowTitle(self.activeCase)
                break
示例#2
0
    def setup(self, orientation):
        if self.ctrlWin:
            return

        self.cpWidget = viewerUtilities.CtrlPanelWidget(
            None, None, None, None, None, None, None, None, orientation)
        self.loadNextCase()
        if not self.activeCase:
            liteViewer.errorPrint(0, "Nothing to do!")
            exit()
            return

        self.cvLogic = CompareVolumes.CompareVolumesLogic()
        sliceNodeList = self.cvLogic.viewerPerVolume(
            volumeNodes=self.cpWidget.nodeList[0],
            background=self.cpWidget.nodeList[1],
            label=self.cpWidget.nodeList[2],
            orientation=orientation)
        self.cpWidget.sliceNodeList = sliceNodeList

        self.ctrlWin = self.cpWidget.setup(self.activeCase, "")

        # Add Next button to CTRL Panel
        self.nextButton = qt.QPushButton("Next")
        self.nextButton.toolTip = "Next Case"
        self.nextButton.name = "next case"
        self.cpWidget.buttonPanel.layout().addWidget(self.nextButton, 0, 1)
        self.nextButton.connect('clicked()', self.showNext)

        self.ctrlWin.show()
示例#3
0
def load4DVolume(listFileNames, labelFlag):

    # Needs to be done that way to work for single file name and multi one
    firstFileName = listFileNames
    if isinstance(firstFileName, basestring):
        multiFileFlag = False
    else:
        firstFileName = listFileNames[0]
        if len(listFileNames) > 1:
            multiFileFlag = True
        else:
            multiFileFlag = False

    # Load first volume
    vNode = liteViewer.loadVolume(firstFileName, labelFlag)
    if not vNode:
        liteViewer.errorPrint(0, "Could not load %s!" % firstFileName)
        return (None, None)

    iVtkList = [vNode.GetImageData()]
    #
    # Load Multi File Volume
    #
    if multiFileFlag:
        for FILE in listFileNames[1:]:
            img = ReadImageSlicer(FILE)
            if img:
                iVtkList.append(img)
            else:
                return (None, None)

        return (vNode, iVtkList)

    #
    # Load Single File Volume
    #
    fileExt = os.path.splitext(firstFileName)[1]
    if fileExt == ".gz":
        fileExt = os.path.splitext(firstFileName)[1]

    # nibabel 1.3 cannot read nrrd file - so assume it is 3D right now
    if fileExt == ".nrrd":
        print "Warning: NRRD files are assumed to be 3D"
        return (vNode, iVtkList)

    loadedFile = nib.load(firstFileName)
    # Nothing to do as it is a 3D Volume - so already read by slicer function
    if len(loadedFile.shape) == 3:
        return (vNode, iVtkList)

    # Sadly enough this was the best solution I found so far - write to file and read in again
    # imgList=nibVtkConversionWrite(loadedFile)
    imgList = nibVtkConversionDirect(loadedFile,
                                     vNode.GetImageData().GetScalarType())
    iVtkList.extend(imgList)

    return (vNode, iVtkList)
示例#4
0
    def setup(self, orientation, allOrientationFlag):
        if self.ctrlWin:
            return

        self.cpWidget = viewerUtilities.CtrlPanelWidget(
            None, None, None, None, None, None, None, None, orientation,
            allOrientationFlag, args.fg_color_table, args.fg_lower_threshold)
        self.loadNextCase()
        if not self.activeCase:
            liteViewer.errorPrint(0, "Nothing to do!")
            exit()
            return

        numCols = len(self.cpWidget.nodeList[0])
        if args.all_3_orientations:
            outline = [3, numCols]
        else:
            outline = [1, numCols]

        self.cvLogic = CompareVolumes.CompareVolumesLogic()
        sliceNodeList = self.cvLogic.viewerPerVolume(
            volumeNodes=self.cpWidget.nodeList[0],
            background=None,
            label=None,
            layout=outline,
            orientation=orientation)
        self.cpWidget.sliceNodeList = sliceNodeList

        self.ctrlWin = self.cpWidget.setup(self.activeCase, True, "")

        # Add Next button to CTRL Panel
        self.nextButton = qt.QPushButton("Next")
        self.nextButton.toolTip = "Next Case"
        self.nextButton.name = "next case"
        self.cpWidget.buttonPanel.layout().addWidget(self.nextButton, 0, 1)
        self.nextButton.connect('clicked()', self.showNext)
        if len(self.caseList) == 0:
            self.nextButton.enabled = False

        self.ctrlWin.show()
示例#5
0
# Create Lists
tmpCaseList = [item for sublist in args.cases for item in sublist]
caseList = []
for CASE in tmpCaseList:
    if '*' in CASE or '?' in CASE:
        fullCaseList = glob.glob(fgPreList[0] + CASE)
        if fullCaseList:
            for dirCase in sorted(fullCaseList):
                caseList.append(dirCase.replace(fgPreList[0], ""))
    else:
        caseList.append(CASE)

if not len(caseList):
    liteViewer.errorPrint(
        0,
        "Base path seems to be incorrect - none of the cases %s exists in %s !"
        % (tmpCaseList, preList[0]))
    sys.exit(1)

bgList = []
if args.bgPostfix:
    if len(args.bgPostfix) == 1:
        bg = args.bgPostfix[0]
        for index in xrange(len(postList[0])):
            bgList.extend(bg)

    else:
        bgList = [item for sublist in args.bgPostfix for item in sublist]

postList.append(bgList)