Exemple #1
0
    def SetRenderWindow(self,w):
        """ SetRenderWindow(w: vtkRenderWindow)        
        Set a new render window to QVTKWidget and initialize the
        interactor as well
        
        """
        if w == self.mRenWin:
            return
        
        if self.mRenWin:
            if system.systemType!='Linux':
                self.mRenWin.SetInteractor(None)
            if self.mRenWin.GetMapped():
                self.mRenWin.Finalize()
            
        self.mRenWin = w

        if self.mRenWin:
            self.mRenWin.Register(None)
            if self.mRenWin.GetMapped():
                self.mRenWin.Finalize()
            if system.systemType=='Linux':
                display = None
                try:
                    display = int(QtGui.QX11Info.display())
                except TypeError:
                    # This was changed for PyQt4.2
                    if isinstance(QtGui.QX11Info.display(), QtGui.Display):
                        display = sip.unwrapinstance(QtGui.QX11Info.display())
                if display is not None:
                    v = vtk.vtkVersion()
                    version = [v.GetVTKMajorVersion(),
                               v.GetVTKMinorVersion(),
                               v.GetVTKBuildVersion()]
                    display = hex(display)[2:]
                    if version < [5, 7, 0]:
                        vp = ('_%s_void_p\0x00' % display)
                    elif version < [6, 2, 0]:
                        vp = ('_%s_void_p' % display)
                    else:
                        vp = ('_%s_p_void' % display)
                    self.mRenWin.SetDisplayId(vp)
                self.resizeWindow(1,1)
            self.mRenWin.SetWindowInfo(str(int(self.winId())))
            if self.isVisible():
                self.mRenWin.Start()

            if not self.mRenWin.GetInteractor():
                #iren = vtk.vtkRenderWindowInteractor()
                iren = QVTKRenderWindowInteractor()
#                if system.systemType=='Darwin':
#                    iren.InstallMessageProcOff()
                iren.SetRenderWindow(self.mRenWin)
                iren.Initialize()
#                if system.systemType=='Linux':
#                    system.XDestroyWindow(self.mRenWin.GetGenericDisplayId(),
#                                          self.mRenWin.GetGenericWindowId())
                self.mRenWin.SetWindowInfo(str(int(self.winId())))
                self.resizeWindow(self.width(), self.height())
                self.mRenWin.SetPosition(self.x(), self.y())
class Ui_ReadDICOMSeriesQt(object):
    def setupUi(self, ReadDICOMSeriesQt):
        ReadDICOMSeriesQt.setObjectName(_fromUtf8("ReadDICOMSeriesQt"))
        ReadDICOMSeriesQt.resize(541, 531)
        self.centralWidget = QtGui.QWidget(ReadDICOMSeriesQt)
        self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
        self.buttonOpenFolder = QtGui.QPushButton(self.centralWidget)
        self.buttonOpenFolder.setGeometry(QtCore.QRect(10, 430, 121, 24))
        self.buttonOpenFolder.setObjectName(_fromUtf8("buttonOpenFolder"))
        self.sliderSlices = QtGui.QSlider(self.centralWidget)
        self.sliderSlices.setGeometry(QtCore.QRect(140, 430, 381, 23))
        self.sliderSlices.setOrientation(QtCore.Qt.Horizontal)
        self.sliderSlices.setObjectName(_fromUtf8("sliderSlices"))
        self.labelFolderName = QtGui.QLabel(self.centralWidget)
        self.labelFolderName.setGeometry(QtCore.QRect(140, 470, 381, 15))
        self.labelFolderName.setObjectName(_fromUtf8("labelFolderName"))
        self.labelSlicesNumber = QtGui.QLabel(self.centralWidget)
        self.labelSlicesNumber.setGeometry(QtCore.QRect(140, 500, 381, 15))
        self.labelSlicesNumber.setObjectName(_fromUtf8("labelSlicesNumber"))
        self.labelSlicesNumberTitle = QtGui.QLabel(self.centralWidget)
        self.labelSlicesNumberTitle.setGeometry(QtCore.QRect(20, 500, 59, 15))
        self.labelSlicesNumberTitle.setObjectName(
            _fromUtf8("labelSlicesNumberTitle"))
        self.labelFolderNameTitle = QtGui.QLabel(self.centralWidget)
        self.labelFolderNameTitle.setGeometry(QtCore.QRect(20, 470, 59, 15))
        self.labelFolderNameTitle.setObjectName(
            _fromUtf8("labelFolderNameTitle"))
        self.qvtkWidget = QVTKRenderWindowInteractor(self.centralWidget)
        self.qvtkWidget.setGeometry(QtCore.QRect(10, 10, 521, 411))
        self.qvtkWidget.setObjectName(_fromUtf8("qvtkWidget"))
        ReadDICOMSeriesQt.setCentralWidget(self.centralWidget)

        self.reader = vtk.vtkDICOMImageReader()
        self.imageViewer = vtk.vtkImageViewer()
        self.interactor = vtk.vtkInteractorStyleImage()
        self.renderWindowInteractor = vtk.vtkRenderWindowInteractor()
        self.minSlice = 0
        self.maxSlice = 0
        self.fname = ""
        self.dicomfiles = []

        self.retranslateUi(ReadDICOMSeriesQt)
        QtCore.QMetaObject.connectSlotsByName(ReadDICOMSeriesQt)

    def retranslateUi(self, ReadDICOMSeriesQt):
        ReadDICOMSeriesQt.setWindowTitle(
            _translate("ReadDICOMSeriesQt", "DICOM Series", None))
        self.buttonOpenFolder.setText(
            _translate("ReadDICOMSeriesQt", "Open Folder", None))
        self.labelFolderName.setText(_translate("ReadDICOMSeriesQt", "-",
                                                None))
        self.labelSlicesNumber.setText(
            _translate("ReadDICOMSeriesQt", "-", None))
        self.labelSlicesNumberTitle.setText(
            _translate("ReadDICOMSeriesQt", "Slices:", None))
        self.labelFolderNameTitle.setText(
            _translate("ReadDICOMSeriesQt", "Folder:", None))

        self.buttonOpenFolder.clicked.connect(self.openfolder)
        self.sliderSlices.valueChanged.connect(self.valuechange)

    def openfolder(self, ReadDICOMSeriesQt):
        self.fname = QtGui.QFileDialog.getExistingDirectory(
            None, 'Select a folder:', 'C:\\', QtGui.QFileDialog.ShowDirsOnly)
        self.labelFolderName.setText(
            _translate("ReadDICOMSeriesQt", self.fname, None))

        self.dicomfiles = [
            name for name in os.listdir(self.fname) if name.endswith(".dcm")
        ]
        self.dicomfiles.sort()
        num_files = len(self.dicomfiles)
        print(self.dicomfiles)

        self.sliderSlices.setMinimum(1)
        self.sliderSlices.setMaximum(num_files)

        self.drawdicomseries(ReadDICOMSeriesQt, self.fname, 0)

    def drawdicomseries(self, ReadDICOMSeriesQt, ndicom, slicenum):

        #self.reader.SetDirectoryName(ndicom)
        print(self.dicomfiles[slicenum])
        self.reader.SetFileName(os.path.join(ndicom,
                                             self.dicomfiles[slicenum]))
        self.reader.Update()

        self.imageViewer.SetInputConnection(self.reader.GetOutputPort())

        self.qvtkWidget.SetRenderWindow(self.imageViewer.GetRenderWindow())

        #self.imageViewer.SetupInteractor(self.qvtkWidget.GetInteractor())
        self.renderWindowInteractor.SetInteractorStyle(self.interactor)
        self.imageViewer.SetupInteractor(self.renderWindowInteractor)

        self.imageViewer.Render()

        #num_files = len(glob.glob1(ndicom,"*.dcm"))

        #self.minSlice = self.imageViewer.GetSliceMin()
        #self.maxSlice = self.imageViewer.GetSliceMax()

    def valuechange(self, ReadDICOMSeriesQt):
        size = self.sliderSlices.value()
        self.labelSlicesNumber.setText(str(size))
        #self.imageViewer.SetSlice(size)
        #self.imageViewer.Render()
        self.drawdicomseries(ReadDICOMSeriesQt, self.fname, size - 1)