Commit 51c65c2f9342d80d727a4781a9e6419f49d5bbd6

Authored by Paulo Henrique Junqueira Amorim
1 parent 14de9547

ENH: Finalization of Add GPU support

invesalius/data/viewer_volume.py
... ... @@ -178,7 +178,8 @@ class Viewer(wx.Panel):
178 178 ps.Publisher().subscribe(self.SetStereoMode, 'Set stereo mode')
179 179  
180 180 ps.Publisher().subscribe(self.Reposition3DPlane, 'Reposition 3D Plane')
181   -
  181 +
  182 + ps.Publisher().subscribe(self.RemoveVolume, 'Remove Volume')
182 183  
183 184 def SetStereoMode(self, pubsub_evt):
184 185 mode = pubsub_evt.data
... ... @@ -318,6 +319,12 @@ class Viewer(wx.Panel):
318 319 for actor in actors:
319 320 self.ren.AddActor(actor)
320 321  
  322 + def RemoveVolume(self, pub_evt):
  323 + volumes = self.ren.GetVolumes()
  324 + if (volumes.GetNumberOfItems()):
  325 + self.ren.RemoveVolume(volumes.GetLastProp())
  326 + self.interactor.Render()
  327 +
321 328 def RemoveActors(self, pubsub_evt):
322 329 "Remove a list of actors"
323 330 actors = pubsub_evt.data[0]
... ...
invesalius/data/volume.py
... ... @@ -85,6 +85,7 @@ class Volume():
85 85 self.plane = None
86 86 self.plane_on = False
87 87 self.volume = None
  88 + self.loaded_image = 0
88 89 self.__bind_events()
89 90  
90 91 def __bind_events(self):
... ... @@ -106,6 +107,14 @@ class Volume():
106 107 ps.Publisher().subscribe(self.ChangeBackgroundColour,
107 108 'Change volume viewer background colour')
108 109  
  110 + ps.Publisher().subscribe(self.ResetRayCasting, 'Reset Reaycasting')
  111 +
  112 + def ResetRayCasting(self, pub_evt):
  113 + if self.exist:
  114 + self.exist = None
  115 + self.LoadVolume()
  116 +
  117 +
109 118 def OnCloseProject(self, pubsub_evt):
110 119 self.CloseProject()
111 120  
... ... @@ -134,7 +143,7 @@ class Volume():
134 143 self.plane.Disable()
135 144 ps.Publisher().sendMessage('Render volume viewer')
136 145  
137   - def OnShowVolume(self, pubsub_evt):
  146 + def OnShowVolume(self, pubsub_evt = None):
138 147 if self.exist:
139 148 self.volume.SetVisibility(1)
140 149 if (self.plane and self.plane_on):
... ... @@ -451,17 +460,30 @@ class Volume():
451 460 #convolve.GetOutput().ReleaseDataFlagOn()
452 461 return imagedata
453 462  
454   - def LoadVolume(self):
455   - proj = prj.Project()
  463 + def LoadImage(self):
  464 +
  465 +
456 466 slice_data = slice_.Slice()
457 467 n_array = slice_data.matrix
458 468 spacing = slice_data.spacing
459 469 slice_number = 0
460 470 orientation = 'AXIAL'
461 471  
  472 +
462 473 image = imagedata_utils.to_vtk(n_array, spacing, slice_number, orientation)
463 474 self.image = image
464 475  
  476 +
  477 + def LoadVolume(self):
  478 + proj = prj.Project()
  479 + #image = imagedata_utils.to_vtk(n_array, spacing, slice_number, orientation)
  480 +
  481 + if not self.loaded_image:
  482 + self.LoadImage()
  483 + self.loaded_image = 1
  484 +
  485 + image = self.image
  486 +
465 487 number_filters = len(self.config['convolutionFilters'])
466 488  
467 489 if (prj.Project().original_orientation == const.AXIAL):
... ... @@ -517,7 +539,8 @@ class Volume():
517 539 volume_mapper.IntermixIntersectingGeometryOn()
518 540 self.volume_mapper = volume_mapper
519 541 else:
520   - if ses.Session().rendering == '0':
  542 +
  543 + if int(ses.Session().rendering) == 0:
521 544 volume_mapper = vtk.vtkFixedPointVolumeRayCastMapper()
522 545 #volume_mapper.AutoAdjustSampleDistancesOff()
523 546 self.volume_mapper = volume_mapper
... ... @@ -568,6 +591,8 @@ class Volume():
568 591  
569 592 colour = self.GetBackgroundColour()
570 593  
  594 + self.exist = 1
  595 +
571 596 ps.Publisher().sendMessage('Load volume into viewer',
572 597 (volume, colour, (self.ww, self.wl)))
573 598  
... ...
invesalius/gui/frame.py
... ... @@ -325,12 +325,18 @@ class Frame(wx.Frame):
325 325 evt.Skip()
326 326  
327 327 def ShowPreferences(self):
328   - if self.preferences.ShowModal():
  328 +
  329 + if self.preferences.ShowModal() == wx.ID_OK:
329 330 values = self.preferences.GetPreferences()
330 331 self.preferences.Close()
331   -
332   - ses.Session().rendering = values[const.RENDERING]
333   - ses.Session().surface_interpolation = values[const.SURFACE_INTERPOLATION]
  332 +
  333 + ses.Session().rendering = values[const.RENDERING]
  334 + ses.Session().surface_interpolation = values[const.SURFACE_INTERPOLATION]
  335 +
  336 + ps.Publisher().sendMessage('Remove Volume')
  337 + ps.Publisher().sendMessage('Reset Reaycasting')
  338 +
  339 +
334 340  
335 341 def ShowAbout(self):
336 342 """
... ...