Commit 423f557b3c411f35aaefd0f2183360afb978c4bc

Authored by tatiana
1 parent e4ecdc27

ADD: Import preview and slice auto-play and slider (under devel)

invesalius/gui/dicom_preview_panel.py
... ... @@ -31,6 +31,8 @@ import vtkgdcm
31 31 import constants as const
32 32 from reader import dicom_reader
33 33 import data.vtk_utils as vtku
  34 +import time
  35 +
34 36  
35 37 NROWS = 3
36 38 NCOLS = 6
... ... @@ -47,7 +49,9 @@ class SingleImagePreview(wx.Panel):
47 49 wx.Panel.__init__(self, parent, -1)
48 50 self.__init_gui()
49 51 self.__init_vtk()
50   - self.filelist = []
  52 + self.__bind_evt_gui()
  53 + self.dicom_list = []
  54 + self.nimages = 1
51 55 self.current_index = 0
52 56 self.window_width = const.WINDOW_LEVEL["Bone"][0]
53 57 self.window_level = const.WINDOW_LEVEL["Bone"][1]
... ... @@ -97,7 +101,7 @@ class SingleImagePreview(wx.Panel):
97 101 style = vtk.vtkInteractorStyleImage()
98 102  
99 103 interactor = wxVTKRenderWindowInteractor(self.panel, -1,
100   - size=wx.Size(380,380))
  104 + size=wx.Size(340,340))
101 105 interactor.GetRenderWindow().AddRenderer(renderer)
102 106 interactor.SetInteractorStyle(style)
103 107 interactor.Render()
... ... @@ -113,28 +117,73 @@ class SingleImagePreview(wx.Panel):
113 117  
114 118 def __init_gui(self):
115 119 self.panel = wx.Panel(self, -1)
116   - self.slider = wx.Slider(self, 100, 25, 1, 100, (30, 60), (250, -1),
117   - wx.SL_HORIZONTAL | wx.SL_AUTOTICKS)
118   - self.slider.SetTickFreq(1, 1)
  120 +
  121 + slider = wx.Slider(self,
  122 + id=-1,
  123 + value=0,
  124 + minValue=0,
  125 + maxValue=99,
  126 + style=wx.SL_HORIZONTAL|wx.SL_AUTOTICKS)
  127 + slider.SetWindowVariant(wx.WINDOW_VARIANT_SMALL)
  128 + slider.SetTickFreq(1, 1)
  129 + self.slider = slider
  130 +
  131 + checkbox = wx.CheckBox(self, -1, "Auto-play")
  132 + self.checkbox = checkbox
  133 +
  134 + in_sizer = wx.BoxSizer(wx.HORIZONTAL)
  135 + in_sizer.Add(slider, 1, wx.GROW|wx.EXPAND)
  136 + in_sizer.Add(checkbox, 0)
119 137  
120 138 sizer = wx.BoxSizer(wx.VERTICAL)
121 139 sizer.Add(self.panel, 20, wx.GROW|wx.EXPAND)
122   - sizer.Add(self.slider, 1, wx.GROW|wx.EXPAND)
  140 + sizer.Add(in_sizer, 1, wx.GROW|wx.EXPAND)
123 141 sizer.Fit(self)
124 142  
125 143 self.SetSizer(sizer)
126 144 self.Layout()
127 145 self.Update()
128 146 self.SetAutoLayout(1)
129   -
130 147  
  148 + def __bind_evt_gui(self):
  149 + self.slider.Bind(wx.EVT_SLIDER, self.OnSlider)
  150 + self.checkbox.Bind(wx.EVT_CHECKBOX, self.OnCheckBox)
  151 +
  152 + def OnSlider(self, evt):
  153 + pos = evt.GetInt()
  154 + self.ShowSlice(pos)
  155 + evt.Skip()
  156 +
  157 + def OnCheckBox(self, evt):
  158 + self.ischecked = evt.IsChecked()
  159 + if evt.IsChecked():
  160 + wx.CallAfter(self.OnRun)
  161 + evt.Skip()
  162 +
  163 + def OnRun(self):
  164 + pos = self.slider.GetValue()
  165 + pos += 1
  166 + if not (self.nimages- pos):
  167 + pos = 0
  168 + self.slider.SetValue(pos)
  169 + self.ShowSlice(pos)
  170 + time.sleep(0.2)
  171 + if self.ischecked:
  172 + wx.Yield()
  173 + wx.CallAfter(self.OnRun)
  174 +
131 175 def SetDicomGroup(self, group):
132 176 self.dicom_list = group.GetHandSortedList()
133 177 self.current_index = 0
  178 + self.nimages = len(self.dicom_list)
  179 + # GUI
  180 + self.slider.SetMax(self.nimages-1)
  181 + print self.nimages
  182 + self.slider.SetValue(0)
134 183 self.ShowSlice()
135 184  
136   - def ShowSlice(self):
137   - index = self.current_index
  185 + def ShowSlice(self, index = 0):
  186 + print "ShowSlice"
138 187 dicom = self.dicom_list[index]
139 188  
140 189 # UPDATE GUI
... ... @@ -164,6 +213,10 @@ class SingleImagePreview(wx.Panel):
164 213 # ADJUST CONTRAST
165 214 window_level = dicom.image.level
166 215 window_width = dicom.image.window
  216 + print "======"
  217 + print "WW/WL"
  218 + print window_level
  219 + print window_width
167 220 colorer = vtk.vtkImageMapToWindowLevelColors()
168 221 colorer.SetInput(reader.GetOutput())
169 222 colorer.SetWindow(float(window_width))
... ...
invesalius/gui/import_panel.py
... ... @@ -50,8 +50,16 @@ class InnerPanel(wx.Panel):
50 50 splitter.SetOrientation(wx.VERTICAL)
51 51 self.splitter = splitter
52 52  
  53 + panel = wx.Panel(self)
  54 + button = wx.Button(panel, -1, "Import medical images", (20, 20))
  55 +
  56 + inner_sizer = wx.BoxSizer()
  57 + inner_sizer.Add(button, 0, wx.ALIGN_CENTER_HORIZONTAL, 40)
  58 + panel.SetSizer(inner_sizer)
  59 +
53 60 sizer = wx.BoxSizer(wx.VERTICAL)
54   - sizer.Add(splitter, 1, wx.EXPAND)
  61 + sizer.Add(splitter, 20, wx.EXPAND)
  62 + sizer.Add(panel, 1, wx.EXPAND)
55 63  
56 64 self.SetSizer(sizer)
57 65 sizer.Fit(self)
... ...