fvpolpeta / devide

Automatically exported from code.google.com/p/devide
BSD 3-Clause "New" or "Revised" License
2 stars 1 forks source link

enhance dicom drag-drop-support with Clinical Graphics series selection patch #183

Open GoogleCodeExporter opened 9 years ago

GoogleCodeExporter commented 9 years ago
mail from clinicalgraphics.com :

### Kan je vast ook wel gebruiken en misschien wil je het wel in DeVIDE stoppen?

    def SpacingCheck(self):
        filenames = [str(i) for i in self.dicom_filenames]
        file_spacing_tuples = []
        for filename in filenames:
            r = gdcm.ImageReader()
            r.SetFileName( filename )
            if not r.Read():
                return False
            gdcm.ImageHelper.SetForcePixelSpacing( True )
            spacing = gdcm.ImageHelper.GetSpacingValue( r.GetFile() )
            file_spacing_tuples.append((filename, spacing))

        datasets = []
        for key, group in groupby(file_spacing_tuples, lambda x: x[1]):
            dataset = []
            for thing in group:
                dataset.append(thing[0])
            datasets.append(dataset)
        return datasets

### En voor de drag&drop-handler:

        DICOM_reader = DICOMReader.DICOMReader.DICOMReader()
        DICOM_reader.dicom_filenames = files
        datasets = DICOM_reader.SpacingCheck()
        if len(datasets) > 1:
            dataset = self.RequestDatasetSelection(datasets)
            if dataset == -1:
                return
            else:
                DICOM_reader.dicom_filenames = dataset
        else:
            pass

### Tenslotte nog het openen van de dialog, vast ook wel handig:

    def RequestDatasetSelection(self, datasets):
        dialog = self._root.main.createImageDataSelectionDialog()
        dialog.list_ctrl_2.InsertColumn(0, " ", 1, 24)
        dialog.list_ctrl_2.InsertColumn(1, "Number of slices", 1, 240)
        for i in range(0,len(datasets)):
            dialog.list_ctrl_2.Append(["%d" % i, '%d' % len(datasets[i])])
        dialog.list_ctrl_2.Select(0)

        selected_item = -1
        if dialog.ShowModal() == wx.ID_OK:
            selected_item = dialog.list_ctrl_2.GetFirstSelected() 
        dialog.Destroy()
        if selected_item != -1:
            return datasets[int(selected_item)]
        else:
            return -1

### waarbij het panel weer in een aparte Class staat:

class ImageDataSelection(wx.Dialog):
    def __init__(self, *args, **kwds):
        # begin wxGlade: ImageDataSelection.__init__
        kwds["style"] = wx.DEFAULT_DIALOG_STYLE
        wx.Dialog.__init__(self, *args, **kwds)
        self.panel_13 = wx.Panel(self, -1)
        self.label_9 = wx.StaticText(self.panel_13, -1, "Multiple scans were detected. Please select the data you would like to import:")
        self.list_ctrl_2 = wx.ListCtrl(self.panel_13, -1, style=wx.LC_REPORT|wx.LC_SINGLE_SEL|wx.SUNKEN_BORDER)
        self.panel_14 = wx.Panel(self.panel_13, -1)
        self.button_6 = wx.Button(self.panel_13, wx.ID_CANCEL, "")
        self.button_9 = wx.Button(self.panel_13, wx.ID_OK, "")

        self.__set_properties()
        self.__do_layout()
        # end wxGlade

    def __set_properties(self):
        # begin wxGlade: ImageDataSelection.__set_properties
        self.SetTitle("dialog_1")
        self.button_9.SetFocus()
        # end wxGlade

    def __do_layout(self):
        # begin wxGlade: ImageDataSelection.__do_layout
        sizer_42 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_43 = wx.BoxSizer(wx.VERTICAL)
        sizer_44 = wx.BoxSizer(wx.VERTICAL)
        sizer_45 = wx.BoxSizer(wx.HORIZONTAL)
        sizer_44.Add(self.label_9, 0, wx.ALL, 4)
        sizer_44.Add(self.list_ctrl_2, 1, wx.ALL|wx.EXPAND, 4)
        sizer_45.Add(self.panel_14, 1, wx.EXPAND, 0)
        sizer_45.Add(self.button_6, 0, wx.ALL, 4)
        sizer_45.Add(self.button_9, 0, wx.ALL, 4)
        sizer_44.Add(sizer_45, 0, wx.EXPAND, 0)
        self.panel_13.SetSizer(sizer_44)
        sizer_43.Add(self.panel_13, 1, wx.ALL|wx.EXPAND, 7)
        sizer_42.Add(sizer_43, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_42)
        sizer_42.Fit(self)
        self.Layout()
        # end wxGlade

Original issue reported on code.google.com by cpbotha on 3 Dec 2010 at 8:05