예제 #1
0
    def __init__(self):
    
        #os.system("pwd")
        if os.path.exists(self.gladeFile):
            theFile = self.gladeFile
        elif os.path.exists("gui/"+self.gladeFile):
            theFile = "gui/"+self.gladeFile
        else:
            theFile = os.path.join(
                distutils.sysconfig.PREFIX,
                'share', 'pbrain', self.gladeFile)

        self.widgets = gtk.glade.XML (theFile)
        self.widgets.signal_autoconnect(GladeHandlers.__dict__)
        #self['entryDir'].set_text('/home/jdhunter/python/examples/vtk/images/')
        self.outDim = 256, 256
        
        self.viewer = vtk.vtkImageViewer()
        
        self.preview = GtkGLExtVTKRenderWindow()
        self.preview.set_size_request(self.outDim[0], self.outDim[1])
        self.preview.show()

        self.renderer = self.viewer.GetRenderer()
        self.preview.GetRenderWindow().AddRenderer(self.renderer)
        self['vboxPreview'].pack_start(self.preview, False, False)
        self['vboxPreview'].reorder_child(self.preview, 1)
예제 #2
0
    def __init__(self):
    
        #os.system("pwd")
        if os.path.exists(self.gladeFile):
            theFile = self.gladeFile
        elif os.path.exists("gui/"+self.gladeFile):
            theFile = "gui/"+self.gladeFile
        else:
            theFile = os.path.join(
                distutils.sysconfig.PREFIX,
                'share', 'pbrain', self.gladeFile)

        self.widgets = gtk.glade.XML (theFile)
        self.widgets.signal_autoconnect(GladeHandlers.__dict__)
        #self['entryDir'].set_text('/home/jdhunter/python/examples/vtk/images/')
        self.outDim = 256, 256
        
        self.viewer = vtk.vtkImageViewer()
        
        self.preview = GtkGLExtVTKRenderWindow()
        self.preview.set_size_request(self.outDim[0], self.outDim[1])
        self.preview.show()

        self.renderer = self.viewer.GetRenderer()
        self.preview.GetRenderWindow().AddRenderer(self.renderer)
        self['vboxPreview'].pack_start(self.preview, False, False)
        self['vboxPreview'].reorder_child(self.preview, 1)
예제 #3
0
class WidgetsWrapper:
    gladeFile =  'image_reader.glade'
    def __init__(self):
    
        #os.system("pwd")
        if os.path.exists(self.gladeFile):
            theFile = self.gladeFile
        elif os.path.exists("gui/"+self.gladeFile):
            theFile = "gui/"+self.gladeFile
        else:
            theFile = os.path.join(
                distutils.sysconfig.PREFIX,
                'share', 'pbrain', self.gladeFile)

        self.widgets = gtk.glade.XML (theFile)
        self.widgets.signal_autoconnect(GladeHandlers.__dict__)
        #self['entryDir'].set_text('/home/jdhunter/python/examples/vtk/images/')
        self.outDim = 256, 256
        
        self.viewer = vtk.vtkImageViewer()
        
        self.preview = GtkGLExtVTKRenderWindow()
        self.preview.set_size_request(self.outDim[0], self.outDim[1])
        self.preview.show()

        self.renderer = self.viewer.GetRenderer()
        self.preview.GetRenderWindow().AddRenderer(self.renderer)
        self['vboxPreview'].pack_start(self.preview, False, False)
        self['vboxPreview'].reorder_child(self.preview, 1)
        
    # Gives us the ability to do: widgets['widget_name'].action()
    def __getitem__(self, key):
        return self.widgets.get_widget(key)

    def get_params(self):
        print "WidgetsWrapper.get_params()!"
        
        if widgets['radiobuttonDim256'].get_active(): dim = 256, 256
        elif widgets['radiobuttonDim512'].get_active(): dim = 512, 512
        elif widgets['radiobuttonDimOther'].get_active():
            dim = (widgets['entryDim1'].get_text(),
                   widgets['entryDim2'].get_text())
        
        if widgets['radiobuttonBytes1'].get_active():
            readerClass = 'vtkBMPReader'
        elif widgets['radiobuttonBytes2'].get_active():
            readerClass = 'vtkImageReader2'
        elif widgets['radiobuttonBytes3'].get_active():
            readerClass = 'vtkDICOMImageReader'
        elif widgets['radiobuttonBytes5'].get_active():
            readerClass = 'vtkNiftiImageReader'
        else: readerClass = None
        if widgets['radiobuttonOrderBig'].get_active(): order = 'big endian'
        elif widgets['radiobuttonOrderLittle'].get_active(): order = 'little endian'
        else: order = None

        p = Params()
        
        p.order = order
        p.readerClass = readerClass
        p.dimensions = dim
        p.dir = widgets['entryDir'].get_text()
        p.prefix = widgets['entryPrefix'].get_text()
        p.extension = widgets['entryExt'].get_text()
        p.pattern = widgets['entryPattern'].get_text()
        p.first = widgets['entryFirst'].get_text()
        p.last = widgets['entryLast'].get_text()
        p.dfov = widgets['entryDFOV'].get_text()
        p.spacing = widgets['entrySpacing'].get_text()
        p.header = widgets['entryHeader'].get_text()
        p.mask = widgets['entryMask'].get_text()

        return p

    def load_params_from_file(self, fname):
       dialog = self['dlgReader']
       try: s = file(fname, 'r').read()
       except IOError:
          error_msg('Could not open %s for reading' % fname, dialog)
          return 0

       p = Params()
       p.from_string(s)
       
       widgets.set_params(p)     

       widgets['entryInfoFile'].set_text(fname)
       return 1

    def save_params_to_file(self, fname):
       """
       Pickle the params to file fname.  If successful return 1
       """

       dialog = self['dlgReader']

       pars = widgets.get_params()
       pars = widgets.validate(pars)
       if pars is None:
          error_msg('Invalid parameters')
          return 0

       try: fh = file(fname, 'w')
       except IOError:
          error_msg('Could not open %s for writing' % fname, dialog)
          return 0


       fh.write(str(pars))
       widgets['entryInfoFile'].set_text(fname)
       return 1

    def set_params(self, o):

       print "WidgetsWrapper.set_params()!"
       
       if o.readerClass=='vtkNiftiImageReader':
            bytes2=3
       elif o.readerClass=='vtkDICOMImageReader':
            bytes2=2
       elif o.readerClass=='vtkImageReader2':
            bytes2=1
       else: 
            bytes2 = 0

       group = widgets['radiobuttonOrderBig'].get_group()            
       for b in group: b.set_sensitive(bytes2)
       widgets['labelMask'].set_sensitive(bytes2)
       widgets['labelHeader'].set_sensitive(bytes2)
       widgets['entryMask'].set_sensitive(bytes2)
       widgets['entryHeader'].set_sensitive(bytes2)

       if o.order == 'big endian':
          widgets['radiobuttonOrderBig'].set_active(1) 
       elif o.order == 'little endian':
          widgets['radiobuttonOrderLittle'].set_active(1)

       if bytes2==3: #vtkNiftiImageReader
          widgets['radiobuttonBytes5'].set_active(1) 
       elif bytes2==2: #vtkDICOMImageReader
          widgets['radiobuttonBytes3'].set_active(1) 
       elif bytes2==1: #vtkImageReader2
          widgets['radiobuttonBytes2'].set_active(1) 
       else: #vtkBITMAP
          widgets['radiobuttonBytes1'].set_active(1)

       if os.path.isdir(o.dir):
          widgets['entryDir'].set_text(o.dir)
          
       if o.dimensions[0] == 256 and o.dimensions[1] == 256:
          widgets['radiobuttonDim256'].set_active(1)
       elif o.dimensions[0] == 512 and o.dimensions[1] == 512:
          widgets['radiobuttonDim512'].set_active(1)
       else:
          widgets['radiobuttonDimOther'].set_active(1)
          widgets['entryDim1'].set_text(str(o.dimensions[0]))
          widgets['entryDim2'].set_text(str(o.dimensions[1]))

       widgets['entryPrefix'].set_text(o.prefix)
       widgets['entryExt'].set_text(o.extension)
       widgets['entryPattern'].set_text(o.pattern)
       widgets['entryFirst'].set_text(str(o.first))
       widgets['entryLast'].set_text(str(o.last))
       widgets['entryDFOV'].set_text(str(o.dfov))
       widgets['entrySpacing'].set_text(str(o.spacing))

       widgets['entryHeader'].set_text(str(o.header))

       if o.mask is not None: mask = str(o.mask)
       else: mask = ''
       widgets['entryMask'].set_text(mask)

    def validate(self, o):
        dlg = self['dlgReader']

        if o.readerClass!='vtkNiftiImageReader':
            if len(o.pattern)==0:
                msg = 'You must supply a number pattern for entry %s.\n' % \
                      self['labelPattern'].get_label() + 'Consider "%d"'
                return error_msg(msg, dlg)

            if o.pattern[0]!='%':
                msg = '%s format string must begin with a %%.\n' % \
                      self['labelPattern'].get_label() + 'Consider "%d"'
                return error_msg(msg, dlg)

        if widgets['radiobuttonDimOther'].get_active():
            dim1, dim2 = o.dimensions
            val = dim1 = str2posint_or_err(dim1, 'Other: dimension 1', dlg)
            if val is None: return None
            val = dim2 = str2posint_or_err(dim2, 'Other: dimension 2', dlg)
            if val is None: return None
            o.dimensions = dim1, dim2
            
        val = o.first = str2int_or_err(o.first, widgets['labelFirst'], dlg)
        if val is None:
            return None

        val = o.last = str2posint_or_err(o.last, widgets['labelLast'], dlg)
        if val is None: return None

        if o.readerClass!='vtkNiftiImageReader':
            fnames = self.get_file_names(o)
            for fname in fnames:
                print "validate(): doing fname ", fname
                if not os.path.exists(fname):
                    return error_msg('Could not find file %s' % fname, dlg)
                if o.readerClass=='vtkBMPReader':
                    reader = vtk.vtkBMPReader()
                    b = reader.CanReadFile(fname)
                    if not b:
                        return error_msg('Could not read file %s with reader %s'
                                         % (fname, o.readerClass), dlg)
        else:
            if len(o.extension) > 0:
                fname=os.path.join(o.dir,o.pattern+"."+o.extension)
                if not os.path.exists(fname):
                    return error_msg('Could not find file %s' % fname, dlg)
            else:
                fname=o.pattern
                files=os.listdir(o.dir)
                match=False
                for file in files:
                    file=file.split(".")
                    if len(file)>1:
                        if file[0]==fname:
                            if file[1] in ["nii","img","hdr"]:
                                match=True
                                break
                if not match:
                    return error_msg('Could not find file %s with extension nii, img, hdr [.gz]' % fname, dlg)

        # Depth Field Of View
        val = o.dfov = str2posnum_or_err(o.dfov, widgets['labelDFOV'], dlg)
        print "dfov=", val
        if val is None: return None

        # Spacing between slices
        val = o.spacing = str2posnum_or_err(
            o.spacing, widgets['labelSpacing'], dlg)
        print "spacing=", val
        if val is None: return None

        # Size of header
        if o.header=='': o.header = 0
        else:
           val = o.header = str2int_or_err(
              o.header, widgets['labelHeader'], dlg)
           if val is None: return None
        print "header=", val

        # Data mask
        if o.mask is not None:
           if o.mask=='': o.mask = None

           else:
               val = o.mask = str2int_or_err(
                   o.mask, widgets['labelMask'], dlg)
               if val is None: return None
        print "mask=", val

        return o
    
    def get_file_names(self, o):
        fnames = []

        if os.path.isdir(o.dir): dir = o.dir
        else:
           infopath = widgets['entryInfoFile'].get_text()
           dir, fname = os.path.split(infopath)
        

        fmt = os.path.join( dir, o.prefix ) + o.pattern
        if len(o.extension) > 0:
            fmt += '.' + o.extension

        #print fmt
        for i in range(o.first, o.last+1):
            fname = fmt %i
            fnames.append(fname)
        return fnames
    
    def get_reader(self, o):
       
        reader = get_reader(o)
        self.reader = reader
        widgets.set_params(o)

        return reader

    def get_color_level(self):
        return self['hscrollbarColorLevel'].get_value()

    def get_color_window(self):
        return self['hscrollbarColorWindow'].get_value()

    def get_slice_number(self):
        return self['hscrollbarSlice'].get_value()
예제 #4
0
class WidgetsWrapper:
    gladeFile =  'image_reader.glade'
    def __init__(self):
    
        #os.system("pwd")
        if os.path.exists(self.gladeFile):
            theFile = self.gladeFile
        elif os.path.exists("gui/"+self.gladeFile):
            theFile = "gui/"+self.gladeFile
        else:
            theFile = os.path.join(
                distutils.sysconfig.PREFIX,
                'share', 'pbrain', self.gladeFile)

        self.widgets = gtk.glade.XML (theFile)
        self.widgets.signal_autoconnect(GladeHandlers.__dict__)
        #self['entryDir'].set_text('/home/jdhunter/python/examples/vtk/images/')
        self.outDim = 256, 256
        
        self.viewer = vtk.vtkImageViewer()
        
        self.preview = GtkGLExtVTKRenderWindow()
        self.preview.set_size_request(self.outDim[0], self.outDim[1])
        self.preview.show()

        self.renderer = self.viewer.GetRenderer()
        self.preview.GetRenderWindow().AddRenderer(self.renderer)
        self['vboxPreview'].pack_start(self.preview, False, False)
        self['vboxPreview'].reorder_child(self.preview, 1)
        
    # Gives us the ability to do: widgets['widget_name'].action()
    def __getitem__(self, key):
        return self.widgets.get_widget(key)

    def get_params(self):
        print "WidgetsWrapper.get_params()!"
        
        if widgets['radiobuttonDim256'].get_active(): dim = 256, 256
        elif widgets['radiobuttonDim512'].get_active(): dim = 512, 512
        elif widgets['radiobuttonDimOther'].get_active():
            dim = (widgets['entryDim1'].get_text(),
                   widgets['entryDim2'].get_text())
        
        if widgets['radiobuttonBytes1'].get_active():
            readerClass = 'vtkBMPReader'
        elif widgets['radiobuttonBytes2'].get_active():
            readerClass = 'vtkImageReader2'
        elif widgets['radiobuttonBytes3'].get_active():
            readerClass = 'vtkDICOMImageReader'
        elif widgets['radiobuttonBytes5'].get_active():
            readerClass = 'vtkNiftiImageReader'
        else: readerClass = None
        if widgets['radiobuttonOrderBig'].get_active(): order = 'big endian'
        elif widgets['radiobuttonOrderLittle'].get_active(): order = 'little endian'
        else: order = None

        p = Params()
        
        p.order = order
        p.readerClass = readerClass
        p.dimensions = dim
        p.dir = widgets['entryDir'].get_text()
        p.prefix = widgets['entryPrefix'].get_text()
        p.extension = widgets['entryExt'].get_text()
        p.pattern = widgets['entryPattern'].get_text()
        p.first = widgets['entryFirst'].get_text()
        p.last = widgets['entryLast'].get_text()
        p.dfov = widgets['entryDFOV'].get_text()
        p.spacing = widgets['entrySpacing'].get_text()
        p.header = widgets['entryHeader'].get_text()
        p.mask = widgets['entryMask'].get_text()

        return p

    def load_params_from_file(self, fname):
       dialog = self['dlgReader']
       try: s = file(fname, 'r').read()
       except IOError:
          error_msg('Could not open %s for reading' % fname, dialog)
          return 0

       p = Params()
       p.from_string(s)
       
       widgets.set_params(p)     

       widgets['entryInfoFile'].set_text(fname)
       return 1

    def save_params_to_file(self, fname):
       """
       Pickle the params to file fname.  If successful return 1
       """

       dialog = self['dlgReader']

       pars = widgets.get_params()
       pars = widgets.validate(pars)
       if pars is None:
          error_msg('Invalid parameters')
          return 0

       try: fh = file(fname, 'w')
       except IOError:
          error_msg('Could not open %s for writing' % fname, dialog)
          return 0


       fh.write(str(pars))
       widgets['entryInfoFile'].set_text(fname)
       return 1

    def set_params(self, o):

       print "WidgetsWrapper.set_params()!"
       
       if o.readerClass=='vtkNiftiImageReader':
            bytes2=3
       elif o.readerClass=='vtkDICOMImageReader':
            bytes2=2
       elif o.readerClass=='vtkImageReader2':
            bytes2=1
       else: 
            bytes2 = 0

       group = widgets['radiobuttonOrderBig'].get_group()            
       for b in group: b.set_sensitive(bytes2)
       widgets['labelMask'].set_sensitive(bytes2)
       widgets['labelHeader'].set_sensitive(bytes2)
       widgets['entryMask'].set_sensitive(bytes2)
       widgets['entryHeader'].set_sensitive(bytes2)

       if o.order == 'big endian':
          widgets['radiobuttonOrderBig'].set_active(1) 
       elif o.order == 'little endian':
          widgets['radiobuttonOrderLittle'].set_active(1)

       if bytes2==3: #vtkNiftiImageReader
          widgets['radiobuttonBytes5'].set_active(1) 
       elif bytes2==2: #vtkDICOMImageReader
          widgets['radiobuttonBytes3'].set_active(1) 
       elif bytes2==1: #vtkImageReader2
          widgets['radiobuttonBytes2'].set_active(1) 
       else: #vtkBITMAP
          widgets['radiobuttonBytes1'].set_active(1)

       if os.path.isdir(o.dir):
          widgets['entryDir'].set_text(o.dir)
          
       if o.dimensions[0] == 256 and o.dimensions[1] == 256:
          widgets['radiobuttonDim256'].set_active(1)
       elif o.dimensions[0] == 512 and o.dimensions[1] == 512:
          widgets['radiobuttonDim512'].set_active(1)
       else:
          widgets['radiobuttonDimOther'].set_active(1)
          widgets['entryDim1'].set_text(str(o.dimensions[0]))
          widgets['entryDim2'].set_text(str(o.dimensions[1]))

       widgets['entryPrefix'].set_text(o.prefix)
       widgets['entryExt'].set_text(o.extension)
       widgets['entryPattern'].set_text(o.pattern)
       widgets['entryFirst'].set_text(str(o.first))
       widgets['entryLast'].set_text(str(o.last))
       widgets['entryDFOV'].set_text(str(o.dfov))
       widgets['entrySpacing'].set_text(str(o.spacing))

       widgets['entryHeader'].set_text(str(o.header))

       if o.mask is not None: mask = str(o.mask)
       else: mask = ''
       widgets['entryMask'].set_text(mask)

    def validate(self, o):
        dlg = self['dlgReader']

        if o.readerClass!='vtkNiftiImageReader':
            if len(o.pattern)==0:
                msg = 'You must supply a number pattern for entry %s.\n' % \
                      self['labelPattern'].get_label() + 'Consider "%d"'
                return error_msg(msg, dlg)

            if o.pattern[0]!='%':
                msg = '%s format string must begin with a %%.\n' % \
                      self['labelPattern'].get_label() + 'Consider "%d"'
                return error_msg(msg, dlg)

        if widgets['radiobuttonDimOther'].get_active():
            dim1, dim2 = o.dimensions
            val = dim1 = str2posint_or_err(dim1, 'Other: dimension 1', dlg)
            if val is None: return None
            val = dim2 = str2posint_or_err(dim2, 'Other: dimension 2', dlg)
            if val is None: return None
            o.dimensions = dim1, dim2
            
        val = o.first = str2int_or_err(o.first, widgets['labelFirst'], dlg)
        if val is None:
            return None

        val = o.last = str2posint_or_err(o.last, widgets['labelLast'], dlg)
        if val is None: return None

        if o.readerClass!='vtkNiftiImageReader':
            fnames = self.get_file_names(o)
            for fname in fnames:
                print "validate(): doing fname ", fname
                if not os.path.exists(fname):
                    return error_msg('Could not find file %s' % fname, dlg)
                if o.readerClass=='vtkBMPReader':
                    reader = vtk.vtkBMPReader()
                    b = reader.CanReadFile(fname)
                    if not b:
                        return error_msg('Could not read file %s with reader %s'
                                         % (fname, o.readerClass), dlg)
        else:
            if len(o.extension) > 0:
                fname=os.path.join(o.dir,o.pattern+"."+o.extension)
                if not os.path.exists(fname):
                    return error_msg('Could not find file %s' % fname, dlg)
            else:
                fname=o.pattern
                files=os.listdir(o.dir)
                match=False
                for file in files:
                    file=file.split(".")
                    if len(file)>1:
                        if file[0]==fname:
                            if file[1] in ["nii","img","hdr"]:
                                match=True
                                break
                if not match:
                    return error_msg('Could not find file %s with extension nii, img, hdr [.gz]' % fname, dlg)

        # Depth Field Of View
        val = o.dfov = str2posnum_or_err(o.dfov, widgets['labelDFOV'], dlg)
        print "dfov=", val
        if val is None: return None

        # Spacing between slices
        val = o.spacing = str2posnum_or_err(
            o.spacing, widgets['labelSpacing'], dlg)
        print "spacing=", val
        if val is None: return None

        # Size of header
        if o.header=='': o.header = 0
        else:
           val = o.header = str2int_or_err(
              o.header, widgets['labelHeader'], dlg)
           if val is None: return None
        print "header=", val

        # Data mask
        if o.mask is not None:
           if o.mask=='': o.mask = None

           else:
               val = o.mask = str2int_or_err(
                   o.mask, widgets['labelMask'], dlg)
               if val is None: return None
        print "mask=", val

        return o
    
    def get_file_names(self, o):
        fnames = []

        if os.path.isdir(o.dir): dir = o.dir
        else:
           infopath = widgets['entryInfoFile'].get_text()
           dir, fname = os.path.split(infopath)
        

        fmt = os.path.join( dir, o.prefix ) + o.pattern
        if len(o.extension) > 0:
            fmt += '.' + o.extension

        #print fmt
        for i in range(o.first, o.last+1):
            fname = fmt %i
            fnames.append(fname)
        return fnames
    
    def get_reader(self, o):
       
        reader = get_reader(o)
        self.reader = reader
        widgets.set_params(o)

        return reader

    def get_color_level(self):
        return self['hscrollbarColorLevel'].get_value()

    def get_color_window(self):
        return self['hscrollbarColorWindow'].get_value()

    def get_slice_number(self):
        return self['hscrollbarSlice'].get_value()