Commit fea0946c7c0eb3719d0f63834d6b989866092562
1 parent
b5b338bc
Exists in
master
and in
6 other branches
FIX: Load surfaces from an existing project
Showing
3 changed files
with
42 additions
and
3 deletions
Show diff stats
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. | ... | ... |