Commit 2cfc3302457147bfcebe9bac5168cfc1e8139ffc

Authored by Paulo Henrique Junqueira Amorim
1 parent 2a62683e

ENH: More options on skipping slices on import panel FIX: #168

invesalius/constants.py
... ... @@ -85,7 +85,8 @@ ORIENTATION_COLOUR = {'AXIAL': (1,0,0), # Red
85 85 'SAGITAL': (0,0,1)} # Blue
86 86  
87 87 IMPORT_INTERVAL = [_("Keep all slices"), _("Skip 1 for each 2 slices"),
88   - _("Skip 2 for each 3 slices")]
  88 + _("Skip 2 for each 3 slices"), _("Skip 3 for each 4 slices"),
  89 + _("Skip 4 for each 5 slices"),_("Skip 5 for each 6 slices")]
89 90  
90 91 # Camera according to slice's orientation
91 92 #CAM_POSITION = {"AXIAL":(0, 0, 1), "CORONAL":(0, -1, 0), "SAGITAL":(1, 0, 0)}
... ...
invesalius/gui/import_panel.py
... ... @@ -22,6 +22,7 @@ import wx.lib.pubsub as ps
22 22 import wx.lib.splitter as spl
23 23  
24 24 import constants as const
  25 +import gui.dialogs as dlg
25 26 import dicom_preview_panel as dpp
26 27 import reader.dicom_grouper as dcm
27 28  
... ... @@ -52,16 +53,16 @@ class SelectEvent(wx.PyCommandEvent):
52 53  
53 54 def SetItemData(self, data):
54 55 self.data = data
55   -
  56 +
56 57  
57 58 class Panel(wx.Panel):
58 59 def __init__(self, parent):
59 60 wx.Panel.__init__(self, parent, pos=wx.Point(5, 5))#,
60 61 #size=wx.Size(280, 656))
61   -
62   - sizer = wx.BoxSizer(wx.VERTICAL)
  62 +
  63 + sizer = wx.BoxSizer(wx.VERTICAL)
63 64 sizer.Add(InnerPanel(self), 1, wx.EXPAND|wx.GROW|wx.ALL, 5)
64   -
  65 +
65 66 self.SetSizer(sizer)
66 67 sizer.Fit(self)
67 68  
... ... @@ -75,7 +76,7 @@ class InnerPanel(wx.Panel):
75 76 def __init__(self, parent):
76 77 wx.Panel.__init__(self, parent, pos=wx.Point(5, 5))#,
77 78 #size=wx.Size(680, 656))
78   -
  79 +
79 80 self.patients = []
80 81  
81 82 self._init_ui()
... ... @@ -86,7 +87,7 @@ class InnerPanel(wx.Panel):
86 87 splitter = spl.MultiSplitterWindow(self, style=wx.SP_LIVE_UPDATE)
87 88 splitter.SetOrientation(wx.VERTICAL)
88 89 self.splitter = splitter
89   -
  90 +
90 91 panel = wx.Panel(self)
91 92 #button = wx.Button(panel, -1, _("Import medical images"), (20, 20))
92 93  
... ... @@ -136,7 +137,7 @@ class InnerPanel(wx.Panel):
136 137 self.btn_ok.Bind(wx.EVT_BUTTON, self.OnClickOk)
137 138 self.btn_cancel.Bind(wx.EVT_BUTTON, self.OnClickCancel)
138 139 self.text_panel.Bind(EVT_SELECT_SERIE_TEXT, self.OnDblClickTextPanel)
139   -
  140 +
140 141 def ShowDicomPreview(self, pubsub_evt):
141 142 dicom_groups = pubsub_evt.data
142 143 self.patients.extend(dicom_groups)
... ... @@ -166,16 +167,21 @@ class InnerPanel(wx.Panel):
166 167 if group:
167 168 self.LoadDicom(group)
168 169  
169   - def OnClickCancel(self, evt):
  170 + def OnClickCancel(self, evt):
170 171 ps.Publisher().sendMessage("Cancel DICOM load")
171 172  
172 173 def LoadDicom(self, group):
173 174 interval = self.combo_interval.GetSelection()
174 175 if not isinstance(group, dcm.DicomGroup):
175 176 group = max(group.GetGroups(), key=lambda g: g.nslices)
176   - ps.Publisher().sendMessage('Open DICOM group', (group, interval))
177   -
178   -
  177 +
  178 + nslices_result = group.nslices / (interval + 1)
  179 +
  180 + if (nslices_result > 1):
  181 + ps.Publisher().sendMessage('Open DICOM group', (group, interval))
  182 + else:
  183 + dlg.MissingFilesForReconstruction()
  184 +
179 185 class TextPanel(wx.Panel):
180 186 def __init__(self, parent):
181 187 wx.Panel.__init__(self, parent, -1)
... ... @@ -183,7 +189,7 @@ class TextPanel(wx.Panel):
183 189 self._selected_by_user = True
184 190 self.idserie_treeitem = {}
185 191 self.treeitem_idpatient = {}
186   -
  192 +
187 193 self.__init_gui()
188 194 self.__bind_events_wx()
189 195 self.__bind_pubsub_evt()
... ... @@ -203,8 +209,8 @@ class TextPanel(wx.Panel):
203 209 | wx.TR_FULL_ROW_HIGHLIGHT
204 210 | wx.TR_SINGLE
205 211 )
206   -
207   -
  212 +
  213 +
208 214 tree.AddColumn(_("Patient name"))
209 215 tree.AddColumn(_("Patient ID"))
210 216 tree.AddColumn(_("Age"))
... ... @@ -240,7 +246,7 @@ class TextPanel(wx.Panel):
240 246  
241 247 def Populate(self, patient_list):
242 248 tree = self.tree
243   -
  249 +
244 250 first = 0
245 251 for patient in patient_list:
246 252 if not isinstance(patient, dcm.PatientGroup):
... ... @@ -252,7 +258,7 @@ class TextPanel(wx.Panel):
252 258 dicom.acquisition.time)
253 259  
254 260 parent = tree.AppendItem(self.root, title)
255   -
  261 +
256 262 if not first:
257 263 parent_select = parent
258 264 first += 1
... ... @@ -347,14 +353,14 @@ class ImagePanel(wx.Panel):
347 353 self.splitter = splitter
348 354  
349 355 splitter.ContainingSizer = wx.BoxSizer(wx.HORIZONTAL)
350   -
  356 +
351 357 sizer = wx.BoxSizer(wx.HORIZONTAL)
352 358 sizer.Add(splitter, 1, wx.EXPAND)
353 359 self.SetSizer(sizer)
354   -
  360 +
355 361 self.text_panel = SeriesPanel(splitter)
356 362 splitter.AppendWindow(self.text_panel, 600)
357   -
  363 +
358 364 self.image_panel = SlicePanel(splitter)
359 365 splitter.AppendWindow(self.image_panel, 250)
360 366  
... ... @@ -379,16 +385,16 @@ class ImagePanel(wx.Panel):
379 385 def SetSerie(self, serie):
380 386 self.image_panel.dicom_preview.SetDicomGroup(serie)
381 387  
382   -
  388 +
383 389 class SeriesPanel(wx.Panel):
384 390 def __init__(self, parent):
385 391 wx.Panel.__init__(self, parent, -1)
386   - #self.SetBackgroundColour((0,0,0))
  392 + #self.SetBackgroundColour((0,0,0))
387 393  
388 394 self.serie_preview = dpp.DicomPreviewSeries(self)
389 395 self.dicom_preview = dpp.DicomPreviewSlice(self)
390 396 self.dicom_preview.Show(0)
391   -
  397 +
392 398 self.sizer = wx.BoxSizer(wx.HORIZONTAL)
393 399 self.sizer.Add(self.serie_preview, 1, wx.EXPAND | wx.ALL, 5)
394 400 self.sizer.Add(self.dicom_preview, 1, wx.EXPAND | wx.ALL, 5)
... ... @@ -422,19 +428,19 @@ class SeriesPanel(wx.Panel):
422 428  
423 429 def SetPatientSeries(self, pubsub_evt):
424 430 patient = pubsub_evt.data
425   -
  431 +
426 432 self.dicom_preview.Show(0)
427 433 self.serie_preview.Show(1)
428   -
  434 +
429 435 self.serie_preview.SetPatientGroups(patient)
430   - self.dicom_preview.SetPatientGroups(patient)
431   -
  436 + self.dicom_preview.SetPatientGroups(patient)
  437 +
432 438 self.Update()
433 439  
434 440 def OnSelectSerie(self, evt):
435 441 serie = evt.GetItemData()
436 442 data = evt.GetItemData()
437   -
  443 +
438 444 my_evt = SelectEvent(myEVT_SELECT_SERIE, self.GetId())
439 445 my_evt.SetSelectedID(evt.GetSelectID())
440 446 my_evt.SetItemData(evt.GetItemData())
... ... @@ -455,7 +461,7 @@ class SeriesPanel(wx.Panel):
455 461  
456 462 def ShowDicomSeries(self, pubsub_evt):
457 463 patient = pubsub_evt.data
458   - if isinstance(patient, dcm.PatientGroup):
  464 + if isinstance(patient, dcm.PatientGroup):
459 465 self.serie_preview.SetPatientGroups(patient)
460 466 self.dicom_preview.SetPatientGroups(patient)
461 467  
... ... @@ -502,6 +508,6 @@ class SlicePanel(wx.Panel):
502 508 group = patient.GetGroups()[0]
503 509 self.dicom_preview.SetDicomGroup(group)
504 510 self.sizer.Layout()
505   - self.Update()
  511 + self.Update()
506 512  
507 513  
... ...