Commit 8057fbeddc02d5811e2f56c01f1b278ca7c23d22

Authored by tatiana
1 parent 7040d74d

EHN: Surface GUI, select surface from combo working

invesalius/data/surface.py
... ... @@ -45,6 +45,7 @@ class Surface():
45 45 self.index = Surface.general_index
46 46 else:
47 47 self.index = index
  48 + Surface.general_index -= 1
48 49 self.polydata = ''
49 50 self.colour = ''
50 51 self.transparency = const.SURFACE_TRANSPARENCY
... ... @@ -113,6 +114,7 @@ class SurfaceManager():
113 114 ps.Publisher().subscribe(self.OnExportSurface,'Export surface to file')
114 115 ps.Publisher().subscribe(self.OnLoadSurfaceDict, 'Load surface dict')
115 116 ps.Publisher().subscribe(self.OnCloseProject, 'Close project data')
  117 + ps.Publisher().subscribe(self.OnSelectSurface, 'Change surface selected')
116 118  
117 119 def OnCloseProject(self, pubsub_evt):
118 120 self.CloseProject()
... ... @@ -121,47 +123,28 @@ class SurfaceManager():
121 123 del self.actors_dict
122 124 self.actors_dict = {}
123 125  
  126 + def OnSelectSurface(self, pubsub_evt):
  127 + index = pubsub_evt.data
  128 + #self.last_surface_index = index
  129 + # self.actors_dict.
  130 + proj = prj.Project()
  131 + surface = proj.surface_dict[index]
  132 +
  133 + ps.Publisher().sendMessage('Update surface info in GUI',
  134 + (surface.index, surface.name,
  135 + surface.colour, surface.volume,
  136 + surface.transparency))
  137 + self.last_surface_index = index
  138 +
  139 +
  140 +
124 141  
125 142 def OnLoadSurfaceDict(self, pubsub_evt):
126 143 surface_dict = pubsub_evt.data
  144 + #self.actors_dict[surface.index]
127 145  
128 146 for key in surface_dict:
129 147 surface = surface_dict[key]
130   - # Map polygonal data (vtkPolyData) to graphics primitives.
131   -
132   - normals = vtk.vtkPolyDataNormals()
133   - normals.SetInput(surface.polydata)
134   - normals.SetFeatureAngle(80)
135   - normals.AutoOrientNormalsOn()
136   - normals.GetOutput().ReleaseDataFlagOn()
137   -
138   - stripper = vtk.vtkStripper()
139   - stripper.SetInput(normals.GetOutput())
140   - stripper.PassThroughCellIdsOn()
141   - stripper.PassThroughPointIdsOn()
142   -
143   - mapper = vtk.vtkPolyDataMapper()
144   - mapper.SetInput(stripper.GetOutput())
145   - mapper.ScalarVisibilityOff()
146   -
147   - # Represent an object (geometry & properties) in the rendered scene
148   - actor = vtk.vtkActor()
149   - actor.SetMapper(mapper)
150   -
151   - # Set actor colour and transparency
152   - actor.GetProperty().SetColor(surface.colour)
153   - actor.GetProperty().SetOpacity(1-surface.transparency)
154   -
155   - self.actors_dict[surface.index] = actor
156   -
157   -
158   - # Send actor by pubsub to viewer's render
159   - ps.Publisher().sendMessage('Load surface actor into viewer', (actor))
160   -
161   - ps.Publisher().sendMessage('Update status text in GUI',
162   - _("Ready"))
163   -
164   - # The following lines have to be here, otherwise all volumes disappear
165 148  
166 149 ps.Publisher().sendMessage('Update surface info in GUI',
167 150 (surface.index, surface.name,
... ... @@ -280,15 +263,12 @@ class SurfaceManager():
280 263 os.remove(filename_polydata)
281 264 except (WindowsError):
282 265 print "Error while removing surface temporary file"
283   - elif sys.platform == 'linux2':
  266 + else: # sys.platform == "linux2" or sys.platform == "darwin"
284 267 try:
285 268 os.remove(filename_img)
286 269 os.remove(filename_polydata)
287 270 except (OSError):
288 271 print "Error while removing surface temporary file"
289   - else:
290   - os.remove(filename_img)
291   - os.remove(filename_polydata)
292 272  
293 273 # Append surface into Project.surface_dict
294 274 proj = prj.Project()
... ...
invesalius/gui/dialogs.py
... ... @@ -29,6 +29,7 @@ import wx.lib.pubsub as ps
29 29 import project
30 30 import session as ses
31 31  
  32 +
32 33 class NumberDialog(wx.Dialog):
33 34 def __init__(self, message, value=0):
34 35 pre = wx.PreDialog()
... ... @@ -385,11 +386,13 @@ def ShowSavePresetDialog(default_filename="raycasting"):
385 386  
386 387 return filename
387 388  
388   -
  389 +MASK_LIST = []
389 390 class NewSurfaceDialog(wx.Dialog):
390 391 def __init__(self, parent, ID, title, size=wx.DefaultSize,
391 392 pos=wx.DefaultPosition, style=wx.DEFAULT_DIALOG_STYLE,
392 393 useMetal=False):
  394 + import data.surface as surface
  395 + import constants as const
393 396  
394 397 # Instead of calling wx.Dialog.__init__ we precreate the dialog
395 398 # so we can set an extra style that must be set before
... ... @@ -429,7 +432,9 @@ class NewSurfaceDialog(wx.Dialog):
429 432  
430 433 text = wx.TextCtrl(self, -1, "", size=(80,-1))
431 434 text.SetHelpText(_("Name of the new surface to be created"))
432   - text.SetValue(_("Surface"))
  435 +
  436 + default_name = const.SURFACE_NAME_PATTERN %(surface.Surface.general_index+2)
  437 + text.SetValue(default_name)
433 438 self.text = text
434 439  
435 440 sizer = wx.BoxSizer(wx.VERTICAL)
... ...
invesalius/gui/task_surface.py
... ... @@ -26,10 +26,9 @@ import wx.lib.pubsub as ps
26 26 import gui.dialogs as dlg
27 27 import gui.widgets.foldpanelbar as fpb
28 28 import gui.widgets.colourselect as csel
  29 +import utils as utl
29 30  
30 31 #INTERPOLATION_MODE_LIST = ["Cubic", "Linear", "NearestNeighbor"]
31   -SURFACE_LIST = []
32   -MASK_LIST = []
33 32 MIN_TRANSPARENCY = 0
34 33 MAX_TRANSPARENCY = 100
35 34  
... ... @@ -128,10 +127,11 @@ class InnerTaskPanel(wx.Panel):
128 127 evt.Skip()
129 128  
130 129 def OnLinkNewSurface(self, evt=None):
131   - dlg = dlg.NewSurfaceDialog(self, -1, _('InVesalius 3 - New surface'))
132   - if dlg.ShowModal() == wx.ID_OK:
133   - print "TODO: Send Signal - Create 3d surface %s \n" % dlg.GetValue()
134   - dlg.Destroy()
  130 + #import gui.dialogs as dlg
  131 + dialog = dlg.NewSurfaceDialog(self, -1, _('InVesalius 3 - New surface'))
  132 + if dialog.ShowModal() == wx.ID_OK:
  133 + print "TODO: Send Signal - Create 3d surface %s \n" % dialog.GetValue()
  134 + dialog.Destroy()
135 135 if evt:
136 136 evt.Skip()
137 137  
... ... @@ -211,10 +211,12 @@ class SurfaceProperties(wx.Panel):
211 211 default_colour = wx.SystemSettings_GetColour(wx.SYS_COLOUR_MENUBAR)
212 212 self.SetBackgroundColour(default_colour)
213 213  
  214 + self.surface_dict = utl.TwoWaysDictionary()
  215 +
214 216 ## LINE 1
215 217  
216 218 # Combo related to mask naem
217   - combo_surface_name = wx.ComboBox(self, -1, "", choices= SURFACE_LIST,
  219 + combo_surface_name = wx.ComboBox(self, -1, "", choices= self.surface_dict.keys(),
218 220 style=wx.CB_DROPDOWN|wx.CB_READONLY)
219 221 combo_surface_name.SetSelection(0)
220 222 if sys.platform != 'win32':
... ... @@ -288,20 +290,31 @@ class SurfaceProperties(wx.Panel):
288 290  
289 291 def ChangeSurfaceName(self, pubsub_evt):
290 292 index, name = pubsub_evt.data
  293 + old_name = self.surface_dict.get_key(index)
  294 + self.surface_dict.pop(old_name, None)
  295 + self.surface_dict[name] = index
291 296 self.combo_surface_name.SetString(index, name)
292 297 self.combo_surface_name.Refresh()
293 298  
294 299 def InsertNewSurface(self, pubsub_evt):
  300 + #not_update = len(pubsub_evt.data) == 5
  301 + index = pubsub_evt.data[0]
295 302 name = pubsub_evt.data[1]
296 303 colour = [value*255 for value in pubsub_evt.data[2]]
  304 + overwrite = name in self.surface_dict.keys()
  305 + if not overwrite or not self.surface_dict:
  306 + self.surface_dict[name] = index
  307 + index = self.combo_surface_name.Append(name)
  308 + self.combo_surface_name.SetSelection(index)
  309 +
297 310 transparency = 100*pubsub_evt.data[4]
298   - index = self.combo_surface_name.Append(name)
299   - self.combo_surface_name.SetSelection(index)
300 311 self.button_colour.SetColour(colour)
301 312 self.slider_transparency.SetValue(transparency)
302 313  
303 314 def OnComboName(self, evt):
304   - print "TODO: Send Signal - Change 3D surface selected: %s" % (evt.GetString())
  315 + surface_name = evt.GetString()
  316 + surface_index = evt.GetSelection()
  317 + ps.Publisher().sendMessage('Change surface selected', surface_index)
305 318  
306 319 def OnSelectColour(self, evt):
307 320 colour = [value/255.0 for value in evt.GetValue()]
... ...