Commit fea0946c7c0eb3719d0f63834d6b989866092562

Authored by tatiana
1 parent b5b338bc

FIX: Load surfaces from an existing project

invesalius/data/surface.py
... ... @@ -141,16 +141,49 @@ class SurfaceManager():
141 141  
142 142 def OnLoadSurfaceDict(self, pubsub_evt):
143 143 surface_dict = pubsub_evt.data
144   - #self.actors_dict[surface.index]
145 144  
146 145 for key in surface_dict:
147 146 surface = surface_dict[key]
  147 + # Map polygonal data (vtkPolyData) to graphics primitives.
  148 +
  149 + normals = vtk.vtkPolyDataNormals()
  150 + normals.SetInput(surface.polydata)
  151 + normals.SetFeatureAngle(80)
  152 + normals.AutoOrientNormalsOn()
  153 + normals.GetOutput().ReleaseDataFlagOn()
  154 +
  155 + stripper = vtk.vtkStripper()
  156 + stripper.SetInput(normals.GetOutput())
  157 + stripper.PassThroughCellIdsOn()
  158 + stripper.PassThroughPointIdsOn()
  159 +
  160 + mapper = vtk.vtkPolyDataMapper()
  161 + mapper.SetInput(stripper.GetOutput())
  162 + mapper.ScalarVisibilityOff()
  163 +
  164 + # Represent an object (geometry & properties) in the rendered scene
  165 + actor = vtk.vtkActor()
  166 + actor.SetMapper(mapper)
  167 +
  168 + # Set actor colour and transparency
  169 + actor.GetProperty().SetColor(surface.colour)
  170 + actor.GetProperty().SetOpacity(1-surface.transparency)
  171 +
  172 + self.actors_dict[surface.index] = actor
  173 +
  174 +
  175 + # Send actor by pubsub to viewer's render
  176 + ps.Publisher().sendMessage('Load surface actor into viewer', (actor))
  177 +
  178 + ps.Publisher().sendMessage('Update status text in GUI',
  179 + _("Ready"))
  180 +
  181 + # The following lines have to be here, otherwise all volumes disappear
148 182  
149 183 ps.Publisher().sendMessage('Update surface info in GUI',
150 184 (surface.index, surface.name,
151 185 surface.colour, surface.volume,
152 186 surface.transparency))
153   -
154 187 def AddNewActor(self, pubsub_evt):
155 188 """
156 189 Create surface actor, save into project and send it to viewer.
... ...
invesalius/gui/task_surface.py
... ... @@ -291,7 +291,7 @@ class SurfaceProperties(wx.Panel):
291 291 def ChangeSurfaceName(self, pubsub_evt):
292 292 index, name = pubsub_evt.data
293 293 old_name = self.surface_dict.get_key(index)
294   - self.surface_dict.pop(old_name, None)
  294 + self.surface_dict.remove(old_name)
295 295 self.surface_dict[name] = index
296 296 self.combo_surface_name.SetString(index, name)
297 297 self.combo_surface_name.Refresh()
... ...
invesalius/utils.py
... ... @@ -63,6 +63,12 @@ class TwoWaysDictionary(dict):
63 63 """
64 64 return [item[0] for item in self.items() if item[1] == value]
65 65  
  66 + def remove(self, key):
  67 + try:
  68 + self.pop(key)
  69 + except TypeError:
  70 + print "TwoWaysDictionary: no item"
  71 +
66 72 def get_value(self, key):
67 73 """
68 74 Find the value given a key.
... ...