From 51c65c2f9342d80d727a4781a9e6419f49d5bbd6 Mon Sep 17 00:00:00 2001 From: paulojamorim Date: Wed, 25 May 2011 16:50:45 +0000 Subject: [PATCH] ENH: Finalization of Add GPU support --- invesalius/data/viewer_volume.py | 9 ++++++++- invesalius/data/volume.py | 33 +++++++++++++++++++++++++++++---- invesalius/gui/frame.py | 14 ++++++++++---- 3 files changed, 47 insertions(+), 9 deletions(-) diff --git a/invesalius/data/viewer_volume.py b/invesalius/data/viewer_volume.py index 3e1f5f8..ab8fad9 100755 --- a/invesalius/data/viewer_volume.py +++ b/invesalius/data/viewer_volume.py @@ -178,7 +178,8 @@ class Viewer(wx.Panel): ps.Publisher().subscribe(self.SetStereoMode, 'Set stereo mode') ps.Publisher().subscribe(self.Reposition3DPlane, 'Reposition 3D Plane') - + + ps.Publisher().subscribe(self.RemoveVolume, 'Remove Volume') def SetStereoMode(self, pubsub_evt): mode = pubsub_evt.data @@ -318,6 +319,12 @@ class Viewer(wx.Panel): for actor in actors: self.ren.AddActor(actor) + def RemoveVolume(self, pub_evt): + volumes = self.ren.GetVolumes() + if (volumes.GetNumberOfItems()): + self.ren.RemoveVolume(volumes.GetLastProp()) + self.interactor.Render() + def RemoveActors(self, pubsub_evt): "Remove a list of actors" actors = pubsub_evt.data[0] diff --git a/invesalius/data/volume.py b/invesalius/data/volume.py index 31272d8..e221257 100755 --- a/invesalius/data/volume.py +++ b/invesalius/data/volume.py @@ -85,6 +85,7 @@ class Volume(): self.plane = None self.plane_on = False self.volume = None + self.loaded_image = 0 self.__bind_events() def __bind_events(self): @@ -106,6 +107,14 @@ class Volume(): ps.Publisher().subscribe(self.ChangeBackgroundColour, 'Change volume viewer background colour') + ps.Publisher().subscribe(self.ResetRayCasting, 'Reset Reaycasting') + + def ResetRayCasting(self, pub_evt): + if self.exist: + self.exist = None + self.LoadVolume() + + def OnCloseProject(self, pubsub_evt): self.CloseProject() @@ -134,7 +143,7 @@ class Volume(): self.plane.Disable() ps.Publisher().sendMessage('Render volume viewer') - def OnShowVolume(self, pubsub_evt): + def OnShowVolume(self, pubsub_evt = None): if self.exist: self.volume.SetVisibility(1) if (self.plane and self.plane_on): @@ -451,17 +460,30 @@ class Volume(): #convolve.GetOutput().ReleaseDataFlagOn() return imagedata - def LoadVolume(self): - proj = prj.Project() + def LoadImage(self): + + slice_data = slice_.Slice() n_array = slice_data.matrix spacing = slice_data.spacing slice_number = 0 orientation = 'AXIAL' + image = imagedata_utils.to_vtk(n_array, spacing, slice_number, orientation) self.image = image + + def LoadVolume(self): + proj = prj.Project() + #image = imagedata_utils.to_vtk(n_array, spacing, slice_number, orientation) + + if not self.loaded_image: + self.LoadImage() + self.loaded_image = 1 + + image = self.image + number_filters = len(self.config['convolutionFilters']) if (prj.Project().original_orientation == const.AXIAL): @@ -517,7 +539,8 @@ class Volume(): volume_mapper.IntermixIntersectingGeometryOn() self.volume_mapper = volume_mapper else: - if ses.Session().rendering == '0': + + if int(ses.Session().rendering) == 0: volume_mapper = vtk.vtkFixedPointVolumeRayCastMapper() #volume_mapper.AutoAdjustSampleDistancesOff() self.volume_mapper = volume_mapper @@ -568,6 +591,8 @@ class Volume(): colour = self.GetBackgroundColour() + self.exist = 1 + ps.Publisher().sendMessage('Load volume into viewer', (volume, colour, (self.ww, self.wl))) diff --git a/invesalius/gui/frame.py b/invesalius/gui/frame.py index 5fe7677..4769b79 100755 --- a/invesalius/gui/frame.py +++ b/invesalius/gui/frame.py @@ -325,12 +325,18 @@ class Frame(wx.Frame): evt.Skip() def ShowPreferences(self): - if self.preferences.ShowModal(): + + if self.preferences.ShowModal() == wx.ID_OK: values = self.preferences.GetPreferences() self.preferences.Close() - - ses.Session().rendering = values[const.RENDERING] - ses.Session().surface_interpolation = values[const.SURFACE_INTERPOLATION] + + ses.Session().rendering = values[const.RENDERING] + ses.Session().surface_interpolation = values[const.SURFACE_INTERPOLATION] + + ps.Publisher().sendMessage('Remove Volume') + ps.Publisher().sendMessage('Reset Reaycasting') + + def ShowAbout(self): """ -- libgit2 0.21.2