From 8e640588bfb11491c75ddf4b868f5b5f3d71aa4b Mon Sep 17 00:00:00 2001 From: paulojamorim Date: Mon, 25 Jan 2010 17:14:07 +0000 Subject: [PATCH] FIX: Close project and open other project the raycast cut plane not removed #126 --- invesalius/data/viewer_volume.py | 13 ++++++++++--- invesalius/data/volume.py | 32 +++++++++++++++++++++++++++----- invesalius/gui/default_viewers.py | 12 +++++++++++- 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/invesalius/data/viewer_volume.py b/invesalius/data/viewer_volume.py index 8592161..96de87d 100755 --- a/invesalius/data/viewer_volume.py +++ b/invesalius/data/viewer_volume.py @@ -127,8 +127,11 @@ class Viewer(wx.Panel): ps.Publisher().subscribe(self.OnShowText, 'Show text actors on viewers') ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') - ps.Publisher().subscribe(self.OnExportPicture,'Export picture to file') + + ps.Publisher().subscribe(self.RemoveAllActor, 'Remove all volume actors') + ps.Publisher().subscribe(self.OnExportPicture,'Export picture to file') + def OnExportPicture(self, pubsub_evt): @@ -420,12 +423,16 @@ class Viewer(wx.Panel): def RemoveActor(self, pubsub_evt): print "RemoveActor" actor = pubsub_evt.data - ren = self.ren ren.RemoveActor(actor) - self.interactor.Render() + + def RemoveAllActor(self, pubsub_evt): + print "RemoveAllActor" + self.ren.RemoveAllProps() + ps.Publisher().sendMessage('Render volume viewer') + def LoadSlicePlane(self, pubsub_evt): self.slice_plane = SlicePlane() diff --git a/invesalius/data/volume.py b/invesalius/data/volume.py index 2ced4e6..82e9f32 100755 --- a/invesalius/data/volume.py +++ b/invesalius/data/volume.py @@ -107,12 +107,23 @@ class Volume(): self.CloseProject() def CloseProject(self): + #if self.plane: + # self.plane = None + # ps.Publisher().sendMessage('Remove surface actor from viewer', self.plane_actor) if self.plane: - self.plane = None - ps.Publisher().sendMessage('Remove surface actor from viewer', self.plane_actor) + print "======================================================================================================" + #ps.Publisher().sendMessage('Remove surface actor from viewer', self.plane.plane_actor) + #self.plane.Disable() + self.plane.DestroyObjs() + del self.plane + #del self.final_imagedata + self.plane = 0 + + if self.exist: self.exist = None ps.Publisher().sendMessage('Remove surface actor from viewer', self.volume) + ps.Publisher().sendMessage('Disable volume cut menu') def OnLoadVolume(self, pubsub_evt): label = pubsub_evt.data @@ -559,6 +570,7 @@ class Volume(): self.plane.Disable() else: print "Enable" + self.final_imagedata.Update() self.plane_on = True self.plane = CutPlane(self.final_imagedata, self.volume_mapper) @@ -618,7 +630,7 @@ class CutPlane: plane_source.SetPoint1(plane_widget.GetPoint1()) plane_source.SetPoint2(plane_widget.GetPoint2()) plane_source.SetNormal(plane_widget.GetNormal()) - plane_mapper = vtk.vtkPolyDataMapper() + plane_mapper = self.plane_mapper = vtk.vtkPolyDataMapper() plane_mapper.SetInput(plane_source.GetOutput()) self.plane_actor = plane_actor = vtk.vtkActor() plane_actor.SetMapper(plane_mapper) @@ -673,5 +685,15 @@ class CutPlane: self.plane_actor.VisibilityOn() self.plane.SetNormal(self.normal) self.plane.SetOrigin(self.origin) - ps.Publisher().sendMessage('Render volume viewer', None) - + ps.Publisher().sendMessage('Render volume viewer', None) + + def DestroyObjs(self): + ps.Publisher().sendMessage('Remove surface actor from viewer', self.plane_actor) + + del self.plane_widget + del self.plane_source + del self.plane_actor + del self.normal + del self.plane + ps.Publisher().sendMessage('Remove all volume actors') + \ No newline at end of file diff --git a/invesalius/gui/default_viewers.py b/invesalius/gui/default_viewers.py index 91ccae9..1ff6cdb 100755 --- a/invesalius/gui/default_viewers.py +++ b/invesalius/gui/default_viewers.py @@ -392,6 +392,7 @@ class VolumeToolPanel(wx.Panel): 'Change volume viewer gui colour') ps.Publisher().subscribe(self.DisablePreset, 'Close project data') ps.Publisher().subscribe(self.Uncheck, 'Uncheck image plane menu') + ps.Publisher().subscribe(self.DisableVolumeCutMenu, 'Disable volume cut menu') def DisablePreset(self, pubsub_evt): self.off_item.Check(1) @@ -422,7 +423,7 @@ class VolumeToolPanel(wx.Panel): def __init_menus(self, pubsub_evt=None): # MENU RELATED TO RAYCASTING TYPES - menu = wx.Menu() + menu = self.menu = wx.Menu() for name in const.RAYCASTING_TYPES: id = wx.NewId() item = wx.MenuItem(menu, id, name, kind=wx.ITEM_RADIO) @@ -434,9 +435,13 @@ class VolumeToolPanel(wx.Panel): menu.AppendSeparator() # MENU RELATED TO RAYCASTING TOOLS + self.id_cutplane = None submenu = wx.Menu() for name in const.RAYCASTING_TOOLS: id = wx.NewId() + if not(self.id_cutplane): + self.id_cutplane = id + item = wx.MenuItem(submenu, id, name, kind=wx.ITEM_CHECK) submenu.AppendItem(item) ID_TO_TOOL[id] = name @@ -480,6 +485,11 @@ class VolumeToolPanel(wx.Panel): self.Fit() self.Update() + + def DisableVolumeCutMenu(self, pusub_evt): + self.menu.Enable(RAYCASTING_TOOLS, 0) + item = ID_TO_TOOL_ITEM[self.id_cutplane] + item.Check(0) def BuildRaycastingMenu(self): presets = [] -- libgit2 0.21.2