Commit 523174cd750832c457cd24becc7346d619dc0f49

Authored by tatiana
1 parent 9fbad510

ADD: Surface data and GUI integration

invesalius/data/surface.py
... ... @@ -18,6 +18,7 @@ class Surface():
18 18 self.polydata = None
19 19 self.colour = None
20 20 self.transparency = const.SURFACE_TRANSPARENCY
  21 + self.volume = 0
21 22 self.is_shown = 1
22 23 self.name = const.SURFACE_NAME_PATTERN %(Surface.general_index+1)
23 24  
... ... @@ -45,6 +46,9 @@ class SurfaceManager():
45 46 ps.Publisher().subscribe(self.SetActorColour,
46 47 'Set surface colour')
47 48  
  49 + ps.Publisher().subscribe(self.OnChangeSurfaceName, 'Change surface name')
  50 + ps.Publisher().subscribe(self.OnShowSurface, 'Show surface')
  51 +
48 52 def AddNewActor(self, pubsub_evt):
49 53 """
50 54 Create surface actor, save into project and send it to viewer.
... ... @@ -144,13 +148,10 @@ class SurfaceManager():
144 148 filled_polydata.SetInput(polydata)
145 149 filled_polydata.SetHoleSize(500)
146 150 filled_polydata.AddObserver("ProgressEvent", lambda obj, evt:
147   - UpdateProgress(filled_polydata,
148   - "Filling polydata..."))
  151 + UpdateProgress(filled_polydata,
  152 + "Filling polydata..."))
149 153 polydata = filled_polydata.GetOutput()
150 154  
151   - print "Area: %f mm2" % pu.CalculateSurfaceArea(polydata)
152   - print "Volume: %f mm3" % pu.CalculateSurfaceVolume(polydata)
153   -
154 155 # Orient normals from inside to outside
155 156 normals = vtk.vtkPolyDataNormals()
156 157 normals.SetInput(polydata)
... ... @@ -183,6 +184,7 @@ class SurfaceManager():
183 184 surface = Surface()
184 185 surface.colour = colour
185 186 surface.polydata = polydata
  187 +
186 188  
187 189 # Set actor colour and transparency
188 190 actor.GetProperty().SetColor(colour)
... ... @@ -201,9 +203,17 @@ class SurfaceManager():
201 203 ps.Publisher().sendMessage('Update status text in GUI',
202 204 "Surface created.")
203 205  
  206 + # The following lines have to be here, otherwise all volumes disappear
  207 + measured_polydata = vtk.vtkMassProperties()
  208 + measured_polydata.SetInput(polydata)
  209 + volume = measured_polydata.GetVolume()
  210 + surface.volume = volume
  211 +
204 212 ps.Publisher().sendMessage('Update surface info in GUI',
205 213 (surface.index, surface.name,
206   - surface.colour, surface.transparency))
  214 + surface.colour, surface.volume,
  215 + surface.transparency))
  216 +
207 217  
208 218 def RemoveActor(self, index):
209 219 """
... ... @@ -216,6 +226,16 @@ class SurfaceManager():
216 226 proj.surface_dict.pop(index)
217 227  
218 228  
  229 + def OnChangeSurfaceName(self, pubsub_evt):
  230 + index, name = pubsub_evt.data
  231 + proj = Project()
  232 + proj.surface_dict[index].name = name
  233 +
  234 + def OnShowSurface(self, pubsub_evt):
  235 + index, value = pubsub_evt.data
  236 + print "OnShowSurface", index, value
  237 + self.ShowActor(index, value)
  238 +
219 239 def ShowActor(self, index, value):
220 240 """
221 241 Show or hide actor, according to given actor index and value.
... ... @@ -224,6 +244,7 @@ class SurfaceManager():
224 244 # Update value in project's surface_dict
225 245 proj = Project()
226 246 proj.surface_dict[index].is_shown = value
  247 + ps.Publisher().sendMessage('Render volume viewer')
227 248  
228 249 def SetActorTransparency(self, pubsub_evt):
229 250 """
... ...
invesalius/data/viewer_volume.py
... ... @@ -81,15 +81,16 @@ class Viewer(wx.Panel):
81 81 self.UpdateRender()
82 82  
83 83 def LoadActor(self, pubsub_evt):
  84 + print "****** Load actor"
84 85 actor = pubsub_evt.data
85 86  
86 87 ren = self.ren
87 88 ren.AddActor(actor)
88 89 ren.ResetCamera()
89   - ren.GetActiveCamera().Elevation(90)
90   - ren.GetActiveCamera().SetViewUp(0, 0, 1)
  90 + #ren.GetActiveCamera().Elevation(90)
  91 + #ren.GetActiveCamera().SetViewUp(0, 0, 1)
91 92  
92   - ren.GetActiveCamera().Dolly(1.5)
  93 + #ren.GetActiveCamera().Dolly(1.5)
93 94 ren.ResetCameraClippingRange()
94 95  
95 96 self.iren.Render()
... ...
invesalius/gui/data_notebook.py
... ... @@ -120,7 +120,6 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
120 120 self.image_gray = Image.open("../icons/object_colour.jpg")
121 121  
122 122 def OnEditLabel(self, evt):
123   - print "Editing label", evt.GetIndex(), evt.GetLabel()
124 123 ps.Publisher().sendMessage('Change mask name', (evt.GetIndex(), evt.GetLabel()))
125 124 evt.Skip()
126 125  
... ... @@ -128,7 +127,6 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
128 127 self.ToggleItem(evt.m_itemIndex)
129 128  
130 129 def OnCheckItem(self, index, flag):
131   -
132 130 if flag:
133 131 for key in self.mask_list_index.keys():
134 132 if key != index:
... ... @@ -183,13 +181,6 @@ class MasksListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
183 181 self.imagelist.Replace(image_index, image)
184 182 self.Refresh()
185 183  
186   - def Populate(self):
187   - dict = ((0,"Mask 1", "(1000,4500)"),
188   - (1,"Mask 2", "(2000, 4500)"),
189   - (2,"Background","(0,4500)"))
190   - for data in dict:
191   - self.InsertNewItem(data[0], data[1], data[2])
192   -
193 184 class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
194 185  
195 186 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition,
... ... @@ -205,65 +196,87 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
205 196 self.__init_columns()
206 197 self.__init_image_list()
207 198 self.__init_evt()
208   -
  199 + self.__bind_events_wx()
209 200 self.surface_list_index = {}
210 201 self.surface_bmp_idx_to_name = {}
211 202  
212 203 def __init_evt(self):
213   - self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
214 204 ps.Publisher().subscribe(self.AddSurface,
215 205 'Update surface info in GUI')
  206 + ps.Publisher().subscribe(self.EditSurfaceTransparency,
  207 + 'Set surface transparency')
  208 + ps.Publisher().subscribe(self.EditSurfaceColour,
  209 + 'Set surface colour')
  210 +
  211 + def __bind_events_wx(self):
  212 + self.Bind(wx.EVT_LIST_ITEM_ACTIVATED, self.OnItemActivated)
  213 + self.Bind(wx.EVT_LIST_END_LABEL_EDIT, self.OnEditLabel)
216 214  
217 215 def __init_columns(self):
218 216  
219 217 self.InsertColumn(0, "", wx.LIST_FORMAT_CENTER)
220 218 self.InsertColumn(1, "Name")
221   - self.InsertColumn(2, "Transparency", wx.LIST_FORMAT_RIGHT)
  219 + self.InsertColumn(2, "Volume (mm3)")
  220 + self.InsertColumn(3, "Transparency", wx.LIST_FORMAT_RIGHT)
222 221  
223 222 self.SetColumnWidth(0, 20)
224   - self.SetColumnWidth(1, 120)
225   - self.SetColumnWidth(2, 90)
  223 + self.SetColumnWidth(1, 85)
  224 + self.SetColumnWidth(2, 85)
  225 + self.SetColumnWidth(3, 80)
226 226  
227 227 def __init_image_list(self):
228 228 self.imagelist = wx.ImageList(16, 16)
229 229  
230   - image = wx.Image("../icons//object_visible.jpg")
  230 + image = wx.Image("../icons/object_invisible.jpg")
231 231 bitmap = wx.BitmapFromImage(image.Scale(16, 16))
232 232 bitmap.SetWidth(16)
233 233 bitmap.SetHeight(16)
234   - img_check = self.imagelist.Add(bitmap)
235   -
236   - image = wx.Image("../icons/object_invisible.jpg")
  234 + img_null = self.imagelist.Add(bitmap)
  235 +
  236 + image = wx.Image("../icons//object_visible.jpg")
237 237 bitmap = wx.BitmapFromImage(image.Scale(16, 16))
238 238 bitmap.SetWidth(16)
239 239 bitmap.SetHeight(16)
240   - img_null = self.imagelist.Add(bitmap)
  240 + img_check = self.imagelist.Add(bitmap)
241 241  
242 242 self.SetImageList(self.imagelist, wx.IMAGE_LIST_SMALL)
243 243  
244 244 self.image_gray = Image.open("../icons/object_colour.jpg")
245 245  
  246 +
  247 + def OnEditLabel(self, evt):
  248 + ps.Publisher().sendMessage('Change surface name', (evt.GetIndex(), evt.GetLabel()))
  249 + evt.Skip()
  250 +
  251 + def OnItemActivated(self, evt):
  252 + self.ToggleItem(evt.m_itemIndex)
  253 + #ps.Publisher().sendMessage('Change surface selected',index)
  254 +
  255 + def OnCheckItem(self, index, flag):
  256 + ps.Publisher().sendMessage('Show surface', (index, flag))
  257 +
246 258 def AddSurface(self, pubsub_evt):
247 259 index = pubsub_evt.data[0]
248 260 name = pubsub_evt.data[1]
249 261 colour = pubsub_evt.data[2]
250   - transparency = "%d%%"%(int(100*pubsub_evt.data[3]))
  262 + volume = "%d"%(int(pubsub_evt.data[3]))
  263 + transparency = "%d%%"%(int(100*pubsub_evt.data[4]))
251 264  
252 265 image = self.CreateColourBitmap(colour)
253 266 image_index = self.imagelist.Add(image)
254 267 self.surface_list_index[index] = image_index
255 268  
256   - self.InsertNewItem(index, name, str(transparency), colour)
  269 + self.InsertNewItem(index, name, volume, transparency, colour)
257 270  
258   - def InsertNewItem(self, index=0, label="Surface 1",
259   - transparency="(1000, 4500)", colour=None):
  271 + def InsertNewItem(self, index=0, label="Surface 1", volume="0 mm3",
  272 + transparency="0%%", colour=None):
260 273 self.InsertStringItem(index, "")
261 274 self.SetStringItem(index, 1, label,
262 275 imageId = self.surface_list_index[index])
263   - self.SetStringItem(index, 2, transparency)
  276 + self.SetStringItem(index, 2, volume)
  277 + self.SetStringItem(index, 3, transparency)
  278 + self.SetItemImage(index, 1)
264 279  
265   -
266   -
267 280 def CreateColourBitmap(self, colour):
268 281 """
269 282 Create a wx Image with a mask colour.
... ... @@ -280,16 +293,27 @@ class SurfacesListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
280 293 wx_image = wx.EmptyImage(new_image.size[0],
281 294 new_image.size[1])
282 295 wx_image.SetData(new_image.tostring())
283   - return wx.BitmapFromImage(wx_image.Scale(16, 16))
284   -
285   - def OnItemActivated(self, evt):
286   - self.ToggleItem(evt.m_itemIndex)
  296 + return wx.BitmapFromImage(wx_image.Scale(16, 16))
  297 +
  298 + def EditSurfaceTransparency(self, pubsub_evt):
  299 + """
  300 + Set actor transparency (oposite to opacity) according to given actor
  301 + index and value.
  302 + """
  303 + index, value = pubsub_evt.data
  304 + print "EditSurfaceTransparency", index, value
  305 + self.SetStringItem(index, 3, "%d%%"%(int(value*100)))
287 306  
288   - def OnCheckItem(self, index, flag):
289   - ps.Publisher().sendMessage('Show surface', (index, not flag))
  307 + def EditSurfaceColour(self, pubsub_evt):
  308 + """
  309 + """
  310 + index, colour = pubsub_evt.data
  311 + image = self.CreateColourBitmap(colour)
  312 + image_index = self.surface_list_index[index]
  313 + self.imagelist.Replace(image_index, image)
  314 + self.Refresh()
290 315  
291 316  
292   -
293 317 class MeasuresListCtrlPanel(wx.ListCtrl, listmix.TextEditMixin):
294 318 # TODO: Change edimixin to affect third column also
295 319 def __init__(self, parent, ID=-1, pos=wx.DefaultPosition,
... ...
invesalius/gui/frame.py
... ... @@ -27,14 +27,15 @@ import default_tasks as tasks
27 27 import default_viewers as viewers
28 28  
29 29  
30   -[ID_NEW, ID_OPEN, ID_FULLSCREEN] = [wx.NewId() for number in range(3)]
  30 +
  31 +[ID_FILE_IMPORT, ID_FILE_LOAD_INTERNET, ID_FILE_SAVE, ID_FILE_PRINT] = [wx.NewId() for number in range(4)]
31 32  
32 33 class Frame(wx.Frame):
33 34 def __init__(self, prnt):
34 35 wx.Frame.__init__(self, id=-1, name='', parent=prnt,
35 36 pos=wx.Point(0, 0),
36 37 size=wx.Size(1024, 768), #size = wx.DisplaySize(),
37   - style=wx.DEFAULT_FRAME_STYLE, title='InVesalius 3.0')
  38 + style=wx.DEFAULT_FRAME_STYLE, title='InVesalius 3')
38 39 self.Center(wx.BOTH)
39 40 self.SetIcon(wx.Icon("../icons/invesalius.ico", wx.BITMAP_TYPE_ICO))
40 41  
... ... @@ -84,17 +85,26 @@ class Frame(wx.Frame):
84 85  
85 86 # Add toolbars to manager
86 87  
87   - aui_manager.AddPane(ObjectToolBar(self), wx.aui.AuiPaneInfo().
  88 + if sys.platform == 'win32':
  89 + t1 = ProjectToolBar(self)
  90 + t2 = LayoutToolBar(self)
  91 + t3 = ObjectToolBar(self)
  92 + else:
  93 + t3 = ProjectToolBar(self)
  94 + t2 = LayoutToolBar(self)
  95 + t1 = ObjectToolBar(self)
  96 +
  97 + aui_manager.AddPane(t1, wx.aui.AuiPaneInfo().
88 98 Name("General Features Toolbar").
89 99 ToolbarPane().Top().Floatable(False).
90 100 LeftDockable(False).RightDockable(False))
91 101  
92   - #aui_manager.AddPane(LayoutToolBar(self), wx.aui.AuiPaneInfo().
93   - # Name("Layout Toolbar").
94   - # ToolbarPane().Top().Floatable(False).
95   - # LeftDockable(False).RightDockable(False))
  102 + aui_manager.AddPane(t2, wx.aui.AuiPaneInfo().
  103 + Name("Layout Toolbar").
  104 + ToolbarPane().Top().Floatable(False).
  105 + LeftDockable(False).RightDockable(False))
96 106  
97   - aui_manager.AddPane(ProjectToolBar(self), wx.aui.AuiPaneInfo().
  107 + aui_manager.AddPane(t3, wx.aui.AuiPaneInfo().
98 108 Name("Project Toolbar").
99 109 ToolbarPane().Top().Floatable(False).
100 110 LeftDockable(False).RightDockable(False))
... ... @@ -137,12 +147,11 @@ class MenuBar(wx.MenuBar):
137 147 def __init_items(self):
138 148  
139 149 file_menu = wx.Menu()
140   - file_menu.Append(ID_NEW, "New")
141   - file_menu.Append(ID_OPEN, "Open")
142   - file_menu.Append(wx.ID_EXIT, "Exit")
  150 + file_menu.Append(ID_FILE_IMPORT, "Import...")
  151 + file_menu.Append(101, "Exit")
143 152  
144 153 view_menu = wx.Menu()
145   - view_menu.Append(ID_FULLSCREEN, "Fullscreen")
  154 + view_menu.Append(101, "Fullscreen")
146 155  
147 156 tools_menu = wx.Menu()
148 157  
... ... @@ -169,8 +178,9 @@ class MenuBar(wx.MenuBar):
169 178 # events should be binded directly from wx.Menu / wx.MenuBar
170 179 # message "Binding events of wx.MenuBar" on [wxpython-users]
171 180 # mail list in Oct 20 2008
172   - self.parent.Bind(wx.EVT_MENU, self.OnNew, id=ID_NEW)
173   - self.parent.Bind(wx.EVT_MENU, self.OnOpen, id=ID_OPEN)
  181 + #self.parent.Bind(wx.EVT_MENU, self.OnNew, id=ID_NEW)
  182 + #self.parent.Bind(wx.EVT_MENU, self.OnOpen, id=ID_OPEN)
  183 + pass
174 184  
175 185 def OnNew(self, event):
176 186 print "New"
... ... @@ -215,7 +225,7 @@ class StatusBar(wx.StatusBar):
215 225 self.SetFieldsCount(3)
216 226 self.SetStatusWidths([-2,-2,-1])
217 227 self.SetStatusText("Ready", 0)
218   - self.SetStatusText("Welcome to InVesalius 3.0", 1)
  228 + self.SetStatusText("", 1)
219 229 self.SetStatusText("", 2)
220 230  
221 231 self.progress_bar = ProgressBar(self)
... ... @@ -257,35 +267,36 @@ class TaskBarIcon(wx.TaskBarIcon):
257 267 # ------------------------------------------------------------------------------
258 268  
259 269 class ProjectToolBar(wx.ToolBar):
260   - # TODO: what will appear in menubar?
261 270 def __init__(self, parent):
262   - wx.ToolBar.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize, wx.TB_FLAT|wx.TB_NODIVIDER)
  271 + wx.ToolBar.__init__(self, parent, -1, wx.DefaultPosition,
  272 + wx.DefaultSize, wx.TB_FLAT|wx.TB_NODIVIDER)
263 273 if sys.platform == 'darwin':
264   - self._size = 25
265   - else:
266   - self._size = 16
267   - self.SetToolBitmapSize(wx.Size(self._size,self._size))
  274 + self.SetToolBitmapSize(wx.Size(32,32))
268 275 self.parent = parent
269 276 self.__init_items()
270 277 self.__bind_events()
271 278  
272 279 def __init_items(self):
273 280  
274   - BMP_IMPORT = wx.Bitmap("../icons/file_import.png", wx.BITMAP_TYPE_PNG)
275   - BMP_EXPORT = wx.Bitmap("../icons/file_export.png", wx.BITMAP_TYPE_PNG)
276   - BMP_NET = wx.Bitmap("../icons/file_from_internet.png", wx.BITMAP_TYPE_PNG)
277   - BMP_SAVE = wx.Bitmap("../icons/file_save.png", wx.BITMAP_TYPE_PNG)
278   -
279   - if sys.platform != 'darwin':
280   - bmp_list = [BMP_IMPORT, BMP_EXPORT, BMP_NET, BMP_SAVE]
281   - for bmp in bmp_list:
282   - bmp.SetWidth(self._size)
283   - bmp.SetHeight(self._size)
284 281  
285   - self.AddLabelTool(101, "Import medical image...", BMP_IMPORT)
286   - self.AddLabelTool(101, "Export data.", BMP_EXPORT)
287   - self.AddLabelTool(101, "Load medical image...", BMP_NET)
288   - self.AddLabelTool(101, "Save InVesalius project", BMP_SAVE)
  282 + if sys.platform == 'darwin':
  283 + BMP_IMPORT = wx.Bitmap("../icons/file_import_original.png", wx.BITMAP_TYPE_PNG)
  284 + BMP_NET = wx.Bitmap("../icons/file_from_internet_original.png", wx.BITMAP_TYPE_PNG)
  285 + BMP_SAVE = wx.Bitmap("../icons/file_save_original.png", wx.BITMAP_TYPE_PNG)
  286 + BMP_PRINT = wx.Bitmap("../icons/print_original.png", wx.BITMAP_TYPE_PNG)
  287 + BMP_PHOTO = wx.Bitmap("../icons/tool_photo_original.png", wx.BITMAP_TYPE_PNG)
  288 + else:
  289 + BMP_IMPORT = wx.Bitmap("../icons/file_import.png", wx.BITMAP_TYPE_PNG)
  290 + BMP_NET = wx.Bitmap("../icons/file_from_internet.png", wx.BITMAP_TYPE_PNG)
  291 + BMP_SAVE = wx.Bitmap("../icons/file_save.png", wx.BITMAP_TYPE_PNG)
  292 + BMP_PRINT = wx.Bitmap("../icons/print.png", wx.BITMAP_TYPE_PNG)
  293 + BMP_PHOTO = wx.Bitmap("../icons/tool_photo.png", wx.BITMAP_TYPE_PNG)
  294 +
  295 + self.AddLabelTool(ID_FILE_IMPORT, "Import medical image...", BMP_IMPORT)
  296 + self.AddLabelTool(ID_FILE_LOAD_INTERNET, "Load medical image...", BMP_NET)
  297 + self.AddLabelTool(ID_FILE_SAVE, "Save InVesalius project", BMP_SAVE)
  298 + self.AddLabelTool(101, "Take photo of screen", BMP_PHOTO)
  299 + self.AddLabelTool(ID_FILE_PRINT, "Print medical image...", BMP_PRINT)
289 300  
290 301 self.Realize()
291 302  
... ... @@ -297,10 +308,7 @@ class ObjectToolBar(wx.ToolBar):
297 308 def __init__(self, parent):
298 309 wx.ToolBar.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize, wx.TB_FLAT|wx.TB_NODIVIDER)
299 310 if sys.platform == 'darwin':
300   - self._size = 25
301   - else:
302   - self._size = 16
303   - self.SetToolBitmapSize(wx.Size(self._size,self._size))
  311 + self.SetToolBitmapSize(wx.Size(32,32))
304 312  
305 313 self.parent = parent
306 314 self.__init_items()
... ... @@ -308,24 +316,18 @@ class ObjectToolBar(wx.ToolBar):
308 316  
309 317 def __init_items(self):
310 318  
311   - #BMP_ROTATE = wx.Bitmap("../icons/tool_rotate.gif", wx.BITMAP_TYPE_GIF)
312   - #BMP_TRANSLATE = wx.Bitmap("../icons/tool_translate.gif", wx.BITMAP_TYPE_GIF)
313   - BMP_ZOOM = wx.Bitmap("../icons/tool_zoom.png", wx.BITMAP_TYPE_PNG)
314   - BMP_PHOTO = wx.Bitmap("../icons/tool_photo.png", wx.BITMAP_TYPE_PNG)
315   - BMP_PRINT = wx.Bitmap("../icons/tool_print.png", wx.BITMAP_TYPE_PNG)
316   -
317   - if sys.platform != 'darwin':
318   - bmp_list = [BMP_ZOOM, BMP_PHOTO, BMP_PRINT]
319   - for bmp in bmp_list:
320   - bmp.SetWidth(self._size)
321   - bmp.SetHeight(self._size)
322   -
323   - #self.AddLabelTool(101, "Rotate image", BMP_ROTATE)
324   - #self.AddLabelTool(101, "Translate image", BMP_TRANSLATE)
325   - self.AddLabelTool(101, "Zoom image", BMP_ZOOM)
326   - self.AddLabelTool(101, "Take photo of screen", BMP_PHOTO)
327   - self.AddLabelTool(101, "Print screen", BMP_PRINT)
328 319  
  320 + if sys.platform == 'darwin':
  321 + BMP_ROTATE = wx.Bitmap("../icons/tool_rotate_original.gif", wx.BITMAP_TYPE_GIF)
  322 + BMP_TRANSLATE = wx.Bitmap("../icons/tool_translate_original.png", wx.BITMAP_TYPE_PNG)
  323 + BMP_ZOOM_IN = wx.Bitmap("../icons/tool_zoom_in_original.png", wx.BITMAP_TYPE_PNG)
  324 + BMP_ZOOM_OUT = wx.Bitmap("../icons/tool_zoom_out_original.png", wx.BITMAP_TYPE_PNG)
  325 +
  326 + self.AddLabelTool(101, "Zoom in image", BMP_ZOOM_IN)
  327 + self.AddLabelTool(101, "Zoom out image", BMP_ZOOM_OUT)
  328 + self.AddLabelTool(101, "Rotate image", BMP_ROTATE)
  329 + self.AddLabelTool(101, "Translate image", BMP_TRANSLATE)
  330 +
329 331 self.Realize()
330 332  
331 333 def __bind_events(self):
... ... @@ -336,10 +338,7 @@ class LayoutToolBar(wx.ToolBar):
336 338 def __init__(self, parent):
337 339 wx.ToolBar.__init__(self, parent, -1, wx.DefaultPosition, wx.DefaultSize, wx.TB_FLAT|wx.TB_NODIVIDER)
338 340 if sys.platform == 'darwin':
339   - self._size = 25
340   - else:
341   - self._size = 16
342   - self.SetToolBitmapSize(wx.Size(self._size,self._size))
  341 + self.SetToolBitmapSize(wx.Size(32,32))
343 342  
344 343 self.parent = parent
345 344 self.__init_items()
... ... @@ -347,14 +346,9 @@ class LayoutToolBar(wx.ToolBar):
347 346  
348 347 def __init_items(self):
349 348  
350   - BMP_ROTATE = wx.Bitmap("../icons/layout_data_only.png", wx.BITMAP_TYPE_PNG)
351   - BMP_TRANSLATE = wx.Bitmap("../icons/layout_full.png", wx.BITMAP_TYPE_PNG)
  349 + BMP_ROTATE = wx.Bitmap("../icons/layout_data_only_original.gif", wx.BITMAP_TYPE_GIF)
  350 + BMP_TRANSLATE = wx.Bitmap("../icons/layout_full_original.gif", wx.BITMAP_TYPE_GIF)
352 351  
353   - if sys.platform != 'darwin':
354   - bmp_list = [BMP_ROTATE, BMP_TRANSLATE]
355   - for bmp in bmp_list:
356   - bmp.SetWidth(self._size)
357   - bmp.SetHeight(self._size)
358 352  
359 353 #BMP_ZOOM = wx.Bitmap("../icons/tool_zoom.png", wx.BITMAP_TYPE_PNG)
360 354 #BMP_PHOTO = wx.Bitmap("../icons/tool_photo.png", wx.BITMAP_TYPE_PNG)
... ...
invesalius/gui/task_importer.py
... ... @@ -58,8 +58,8 @@ class InnerTaskPanel(wx.Panel):
58 58 self.float_hyper_list = []
59 59  
60 60 # Fixed hyperlink items
61   - tooltip = wx.ToolTip("Select DICOM files to be reconstructed")
62   - link_import_local = hl.HyperLinkCtrl(self, -1, "Open DICOM files...")
  61 + tooltip = wx.ToolTip("Select DICOM or Analyze files to be reconstructed")
  62 + link_import_local = hl.HyperLinkCtrl(self, -1, "Import medical images...")
63 63 link_import_local.SetUnderlines(False, False, False)
64 64 link_import_local.SetColours("BLACK", "BLACK", "BLACK")
65 65 link_import_local.SetToolTip(tooltip)
... ... @@ -182,9 +182,9 @@ class InnerTaskPanel(wx.Panel):
182 182 self.OnLinkOpenProject()
183 183  
184 184 def TestLoadProjects(self):
185   - self.LoadProject("test1.inv")
186   - self.LoadProject("test2.inv")
187   - self.LoadProject("test3.inv")
  185 + self.LoadProject("test1.iv3")
  186 + self.LoadProject("test2.iv3")
  187 + self.LoadProject("test3.iv3")
188 188  
189 189 def LoadProject(self, proj_name="Unnamed"):
190 190 """
... ...
invesalius/gui/task_slice.py
... ... @@ -298,6 +298,7 @@ class MaskProperties(wx.Panel):
298 298 index = pubsub_evt.data
299 299 self.combo_mask_name.SetSelection(index)
300 300  
  301 +
301 302 def ChangeMaskName(self, pubsub_evt):
302 303 index, name = pubsub_evt.data
303 304 self.combo_mask_name.SetString(index, name)
... ...
invesalius/gui/task_surface.py
... ... @@ -311,14 +311,14 @@ class SurfaceProperties(wx.Panel):
311 311 (slider_transparency, 1, flag_slider,4)])
312 312  
313 313 # LINE 4
314   - cb = wx.CheckBox(self, -1, "Fill largest surface holes")
315   - cb.SetValue(True)
  314 + #cb = wx.CheckBox(self, -1, "Fill largest surface holes")
  315 + #cb.SetValue(True)
316 316  
317 317 # Add all lines into main sizer
318 318 sizer = wx.BoxSizer(wx.VERTICAL)
319 319 sizer.Add(line1, 1, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)
320 320 sizer.Add(fixed_sizer, 0, wx.GROW|wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, 5)
321   - sizer.Add(cb, 0, wx.GROW|wx.EXPAND|wx.RIGHT|wx.LEFT|wx.TOP|wx.BOTTOM, 5)
  321 + #sizer.Add(cb, 0, wx.GROW|wx.EXPAND|wx.RIGHT|wx.LEFT|wx.TOP|wx.BOTTOM, 5)
322 322 sizer.Fit(self)
323 323  
324 324 self.SetSizer(sizer)
... ... @@ -328,17 +328,21 @@ class SurfaceProperties(wx.Panel):
328 328 self.__bind_events()
329 329  
330 330 def __bind_events(self):
331   - #ps.Publisher().sendMessage('Update surface info in GUI',
332   - # (surface.name, surface.colour,
333   - # surface.transparency))
334 331 ps.Publisher().subscribe(self.InsertNewSurface,
335 332 'Update surface info in GUI')
  333 + ps.Publisher().subscribe(self.ChangeMaskName,
  334 + 'Change surface name')
336 335  
337 336  
  337 + def ChangeMaskName(self, pubsub_evt):
  338 + index, name = pubsub_evt.data
  339 + self.combo_surface_name.SetString(index, name)
  340 + self.combo_surface_name.Refresh()
  341 +
338 342 def InsertNewSurface(self, pubsub_evt):
339 343 name = pubsub_evt.data[1]
340 344 colour = [value*255 for value in pubsub_evt.data[2]]
341   - transparency = 100*pubsub_evt.data[3]
  345 + transparency = 100*pubsub_evt.data[4]
342 346 index = self.combo_surface_name.Append(name)
343 347 self.combo_surface_name.SetSelection(index)
344 348 self.button_colour.SetColour(colour)
... ...