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
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()
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)
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()
# 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)