Commit 8e640588bfb11491c75ddf4b868f5b5f3d71aa4b
1 parent
dab3ed36
Exists in
master
and in
6 other branches
FIX: Close project and open other project the raycast cut plane not removed #126
Showing
3 changed files
with
48 additions
and
9 deletions
Show diff stats
invesalius/data/viewer_volume.py
@@ -127,8 +127,11 @@ class Viewer(wx.Panel): | @@ -127,8 +127,11 @@ class Viewer(wx.Panel): | ||
127 | ps.Publisher().subscribe(self.OnShowText, | 127 | ps.Publisher().subscribe(self.OnShowText, |
128 | 'Show text actors on viewers') | 128 | 'Show text actors on viewers') |
129 | ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') | 129 | ps.Publisher().subscribe(self.OnCloseProject, 'Close project data') |
130 | - ps.Publisher().subscribe(self.OnExportPicture,'Export picture to file') | 130 | + |
131 | + ps.Publisher().subscribe(self.RemoveAllActor, 'Remove all volume actors') | ||
131 | 132 | ||
133 | + ps.Publisher().subscribe(self.OnExportPicture,'Export picture to file') | ||
134 | + | ||
132 | 135 | ||
133 | 136 | ||
134 | def OnExportPicture(self, pubsub_evt): | 137 | def OnExportPicture(self, pubsub_evt): |
@@ -420,12 +423,16 @@ class Viewer(wx.Panel): | @@ -420,12 +423,16 @@ class Viewer(wx.Panel): | ||
420 | def RemoveActor(self, pubsub_evt): | 423 | def RemoveActor(self, pubsub_evt): |
421 | print "RemoveActor" | 424 | print "RemoveActor" |
422 | actor = pubsub_evt.data | 425 | actor = pubsub_evt.data |
423 | - | ||
424 | ren = self.ren | 426 | ren = self.ren |
425 | ren.RemoveActor(actor) | 427 | ren.RemoveActor(actor) |
426 | - | ||
427 | self.interactor.Render() | 428 | self.interactor.Render() |
429 | + | ||
430 | + def RemoveAllActor(self, pubsub_evt): | ||
431 | + print "RemoveAllActor" | ||
432 | + self.ren.RemoveAllProps() | ||
433 | + ps.Publisher().sendMessage('Render volume viewer') | ||
428 | 434 | ||
435 | + | ||
429 | def LoadSlicePlane(self, pubsub_evt): | 436 | def LoadSlicePlane(self, pubsub_evt): |
430 | self.slice_plane = SlicePlane() | 437 | self.slice_plane = SlicePlane() |
431 | 438 |
invesalius/data/volume.py
@@ -107,12 +107,23 @@ class Volume(): | @@ -107,12 +107,23 @@ class Volume(): | ||
107 | self.CloseProject() | 107 | self.CloseProject() |
108 | 108 | ||
109 | def CloseProject(self): | 109 | def CloseProject(self): |
110 | + #if self.plane: | ||
111 | + # self.plane = None | ||
112 | + # ps.Publisher().sendMessage('Remove surface actor from viewer', self.plane_actor) | ||
110 | if self.plane: | 113 | if self.plane: |
111 | - self.plane = None | ||
112 | - ps.Publisher().sendMessage('Remove surface actor from viewer', self.plane_actor) | 114 | + print "======================================================================================================" |
115 | + #ps.Publisher().sendMessage('Remove surface actor from viewer', self.plane.plane_actor) | ||
116 | + #self.plane.Disable() | ||
117 | + self.plane.DestroyObjs() | ||
118 | + del self.plane | ||
119 | + #del self.final_imagedata | ||
120 | + self.plane = 0 | ||
121 | + | ||
122 | + | ||
113 | if self.exist: | 123 | if self.exist: |
114 | self.exist = None | 124 | self.exist = None |
115 | ps.Publisher().sendMessage('Remove surface actor from viewer', self.volume) | 125 | ps.Publisher().sendMessage('Remove surface actor from viewer', self.volume) |
126 | + ps.Publisher().sendMessage('Disable volume cut menu') | ||
116 | 127 | ||
117 | def OnLoadVolume(self, pubsub_evt): | 128 | def OnLoadVolume(self, pubsub_evt): |
118 | label = pubsub_evt.data | 129 | label = pubsub_evt.data |
@@ -559,6 +570,7 @@ class Volume(): | @@ -559,6 +570,7 @@ class Volume(): | ||
559 | self.plane.Disable() | 570 | self.plane.Disable() |
560 | else: | 571 | else: |
561 | print "Enable" | 572 | print "Enable" |
573 | + self.final_imagedata.Update() | ||
562 | self.plane_on = True | 574 | self.plane_on = True |
563 | self.plane = CutPlane(self.final_imagedata, | 575 | self.plane = CutPlane(self.final_imagedata, |
564 | self.volume_mapper) | 576 | self.volume_mapper) |
@@ -618,7 +630,7 @@ class CutPlane: | @@ -618,7 +630,7 @@ class CutPlane: | ||
618 | plane_source.SetPoint1(plane_widget.GetPoint1()) | 630 | plane_source.SetPoint1(plane_widget.GetPoint1()) |
619 | plane_source.SetPoint2(plane_widget.GetPoint2()) | 631 | plane_source.SetPoint2(plane_widget.GetPoint2()) |
620 | plane_source.SetNormal(plane_widget.GetNormal()) | 632 | plane_source.SetNormal(plane_widget.GetNormal()) |
621 | - plane_mapper = vtk.vtkPolyDataMapper() | 633 | + plane_mapper = self.plane_mapper = vtk.vtkPolyDataMapper() |
622 | plane_mapper.SetInput(plane_source.GetOutput()) | 634 | plane_mapper.SetInput(plane_source.GetOutput()) |
623 | self.plane_actor = plane_actor = vtk.vtkActor() | 635 | self.plane_actor = plane_actor = vtk.vtkActor() |
624 | plane_actor.SetMapper(plane_mapper) | 636 | plane_actor.SetMapper(plane_mapper) |
@@ -673,5 +685,15 @@ class CutPlane: | @@ -673,5 +685,15 @@ class CutPlane: | ||
673 | self.plane_actor.VisibilityOn() | 685 | self.plane_actor.VisibilityOn() |
674 | self.plane.SetNormal(self.normal) | 686 | self.plane.SetNormal(self.normal) |
675 | self.plane.SetOrigin(self.origin) | 687 | self.plane.SetOrigin(self.origin) |
676 | - ps.Publisher().sendMessage('Render volume viewer', None) | ||
677 | - | 688 | + ps.Publisher().sendMessage('Render volume viewer', None) |
689 | + | ||
690 | + def DestroyObjs(self): | ||
691 | + ps.Publisher().sendMessage('Remove surface actor from viewer', self.plane_actor) | ||
692 | + | ||
693 | + del self.plane_widget | ||
694 | + del self.plane_source | ||
695 | + del self.plane_actor | ||
696 | + del self.normal | ||
697 | + del self.plane | ||
698 | + ps.Publisher().sendMessage('Remove all volume actors') | ||
699 | + | ||
678 | \ No newline at end of file | 700 | \ No newline at end of file |
invesalius/gui/default_viewers.py
@@ -392,6 +392,7 @@ class VolumeToolPanel(wx.Panel): | @@ -392,6 +392,7 @@ class VolumeToolPanel(wx.Panel): | ||
392 | 'Change volume viewer gui colour') | 392 | 'Change volume viewer gui colour') |
393 | ps.Publisher().subscribe(self.DisablePreset, 'Close project data') | 393 | ps.Publisher().subscribe(self.DisablePreset, 'Close project data') |
394 | ps.Publisher().subscribe(self.Uncheck, 'Uncheck image plane menu') | 394 | ps.Publisher().subscribe(self.Uncheck, 'Uncheck image plane menu') |
395 | + ps.Publisher().subscribe(self.DisableVolumeCutMenu, 'Disable volume cut menu') | ||
395 | 396 | ||
396 | def DisablePreset(self, pubsub_evt): | 397 | def DisablePreset(self, pubsub_evt): |
397 | self.off_item.Check(1) | 398 | self.off_item.Check(1) |
@@ -422,7 +423,7 @@ class VolumeToolPanel(wx.Panel): | @@ -422,7 +423,7 @@ class VolumeToolPanel(wx.Panel): | ||
422 | 423 | ||
423 | def __init_menus(self, pubsub_evt=None): | 424 | def __init_menus(self, pubsub_evt=None): |
424 | # MENU RELATED TO RAYCASTING TYPES | 425 | # MENU RELATED TO RAYCASTING TYPES |
425 | - menu = wx.Menu() | 426 | + menu = self.menu = wx.Menu() |
426 | for name in const.RAYCASTING_TYPES: | 427 | for name in const.RAYCASTING_TYPES: |
427 | id = wx.NewId() | 428 | id = wx.NewId() |
428 | item = wx.MenuItem(menu, id, name, kind=wx.ITEM_RADIO) | 429 | item = wx.MenuItem(menu, id, name, kind=wx.ITEM_RADIO) |
@@ -434,9 +435,13 @@ class VolumeToolPanel(wx.Panel): | @@ -434,9 +435,13 @@ class VolumeToolPanel(wx.Panel): | ||
434 | 435 | ||
435 | menu.AppendSeparator() | 436 | menu.AppendSeparator() |
436 | # MENU RELATED TO RAYCASTING TOOLS | 437 | # MENU RELATED TO RAYCASTING TOOLS |
438 | + self.id_cutplane = None | ||
437 | submenu = wx.Menu() | 439 | submenu = wx.Menu() |
438 | for name in const.RAYCASTING_TOOLS: | 440 | for name in const.RAYCASTING_TOOLS: |
439 | id = wx.NewId() | 441 | id = wx.NewId() |
442 | + if not(self.id_cutplane): | ||
443 | + self.id_cutplane = id | ||
444 | + | ||
440 | item = wx.MenuItem(submenu, id, name, kind=wx.ITEM_CHECK) | 445 | item = wx.MenuItem(submenu, id, name, kind=wx.ITEM_CHECK) |
441 | submenu.AppendItem(item) | 446 | submenu.AppendItem(item) |
442 | ID_TO_TOOL[id] = name | 447 | ID_TO_TOOL[id] = name |
@@ -480,6 +485,11 @@ class VolumeToolPanel(wx.Panel): | @@ -480,6 +485,11 @@ class VolumeToolPanel(wx.Panel): | ||
480 | 485 | ||
481 | self.Fit() | 486 | self.Fit() |
482 | self.Update() | 487 | self.Update() |
488 | + | ||
489 | + def DisableVolumeCutMenu(self, pusub_evt): | ||
490 | + self.menu.Enable(RAYCASTING_TOOLS, 0) | ||
491 | + item = ID_TO_TOOL_ITEM[self.id_cutplane] | ||
492 | + item.Check(0) | ||
483 | 493 | ||
484 | def BuildRaycastingMenu(self): | 494 | def BuildRaycastingMenu(self): |
485 | presets = [] | 495 | presets = [] |