Commit 355784ccd3da86f73be0292569a4de9b4c66cc49
1 parent
68794cab
Exists in
master
and in
5 other branches
Show and hidding ball reference only when necessary
Showing
1 changed file
with
41 additions
and
18 deletions
Show diff stats
invesalius/data/viewer_volume.py
@@ -110,7 +110,9 @@ class Viewer(wx.Panel): | @@ -110,7 +110,9 @@ class Viewer(wx.Panel): | ||
110 | self.repositioned_coronal_plan = 0 | 110 | self.repositioned_coronal_plan = 0 |
111 | self.added_actor = 0 | 111 | self.added_actor = 0 |
112 | 112 | ||
113 | + self._mode_cross = False | ||
113 | self._to_show_ball = 0 | 114 | self._to_show_ball = 0 |
115 | + self._ball_ref_visibility = False | ||
114 | 116 | ||
115 | def __bind_events(self): | 117 | def __bind_events(self): |
116 | Publisher.subscribe(self.LoadActor, | 118 | Publisher.subscribe(self.LoadActor, |
@@ -227,15 +229,22 @@ class Viewer(wx.Panel): | @@ -227,15 +229,22 @@ class Viewer(wx.Panel): | ||
227 | self.ball_actor.SetMapper(mapper) | 229 | self.ball_actor.SetMapper(mapper) |
228 | self.ball_actor.SetProperty(p) | 230 | self.ball_actor.SetProperty(p) |
229 | 231 | ||
232 | + def RemoveBallReference(self): | ||
233 | + self._ball_ref_visibility = False | ||
234 | + if self.ball_reference: | ||
235 | + self.ren.RemoveActor(self.ball_actor) | ||
236 | + | ||
230 | def ActivateBallReference(self, pubsub_evt): | 237 | def ActivateBallReference(self, pubsub_evt): |
238 | + self._mode_cross = True | ||
239 | + self._ball_ref_visibility = True | ||
231 | if self._to_show_ball: | 240 | if self._to_show_ball: |
232 | if not self.ball_reference: | 241 | if not self.ball_reference: |
233 | self.CreateBallReference() | 242 | self.CreateBallReference() |
234 | self.ren.AddActor(self.ball_actor) | 243 | self.ren.AddActor(self.ball_actor) |
235 | 244 | ||
236 | def DeactivateBallReference(self, pubsub_evt): | 245 | def DeactivateBallReference(self, pubsub_evt): |
237 | - if self.ball_reference: | ||
238 | - self.ren.RemoveActor(self.ball_actor) | 246 | + self._mode_cross = False |
247 | + self.RemoveBallReference() | ||
239 | 248 | ||
240 | def OnShowSurface(self, pubsub_evt): | 249 | def OnShowSurface(self, pubsub_evt): |
241 | index, value = pubsub_evt.data | 250 | index, value = pubsub_evt.data |
@@ -243,7 +252,8 @@ class Viewer(wx.Panel): | @@ -243,7 +252,8 @@ class Viewer(wx.Panel): | ||
243 | self._to_show_ball += 1 | 252 | self._to_show_ball += 1 |
244 | else: | 253 | else: |
245 | self._to_show_ball -= 1 | 254 | self._to_show_ball -= 1 |
246 | - print "to show ball", self._to_show_ball | 255 | + self._check_and_set_ball_visibility() |
256 | + print "OnShowSurface: to show ball", self._to_show_ball | ||
247 | 257 | ||
248 | def SetBallReferencePosition(self, pubsub_evt): | 258 | def SetBallReferencePosition(self, pubsub_evt): |
249 | x, y, z = pubsub_evt.data | 259 | x, y, z = pubsub_evt.data |
@@ -338,6 +348,8 @@ class Viewer(wx.Panel): | @@ -338,6 +348,8 @@ class Viewer(wx.Panel): | ||
338 | self.ren.RemoveVolume(volumes.GetLastProp()) | 348 | self.ren.RemoveVolume(volumes.GetLastProp()) |
339 | self.interactor.Render() | 349 | self.interactor.Render() |
340 | self._to_show_ball -= 1 | 350 | self._to_show_ball -= 1 |
351 | + self._check_and_set_ball_visibility() | ||
352 | + print "RemoveVolume: to show ball", self._to_show_ball | ||
341 | 353 | ||
342 | def RemoveActors(self, pubsub_evt): | 354 | def RemoveActors(self, pubsub_evt): |
343 | "Remove a list of actors" | 355 | "Remove a list of actors" |
@@ -621,17 +633,20 @@ class Viewer(wx.Panel): | @@ -621,17 +633,20 @@ class Viewer(wx.Panel): | ||
621 | self.text.SetValue("WL: %d WW: %d"%(wl, ww)) | 633 | self.text.SetValue("WL: %d WW: %d"%(wl, ww)) |
622 | 634 | ||
623 | def OnShowRaycasting(self, pubsub_evt): | 635 | def OnShowRaycasting(self, pubsub_evt): |
624 | - self.raycasting_volume = True | ||
625 | - self._to_show_ball += 1 | ||
626 | - print "to show ball", self._to_show_ball | ||
627 | - if self.on_wl: | ||
628 | - self.text.Show() | 636 | + if not self.raycasting_volume: |
637 | + self.raycasting_volume = True | ||
638 | + self._to_show_ball += 1 | ||
639 | + self._check_and_set_ball_visibility() | ||
640 | + print "OnShowRaycasting: to show ball", self._to_show_ball | ||
641 | + if self.on_wl: | ||
642 | + self.text.Show() | ||
629 | 643 | ||
630 | def OnHideRaycasting(self, pubsub_evt): | 644 | def OnHideRaycasting(self, pubsub_evt): |
631 | self.raycasting_volume = False | 645 | self.raycasting_volume = False |
632 | self.text.Hide() | 646 | self.text.Hide() |
633 | self._to_show_ball -= 1 | 647 | self._to_show_ball -= 1 |
634 | - print "to show ball", self._to_show_ball | 648 | + self._check_and_set_ball_visibility() |
649 | + print "OnHideRaycasting: to show ball", self._to_show_ball | ||
635 | 650 | ||
636 | def OnSize(self, evt): | 651 | def OnSize(self, evt): |
637 | self.UpdateRender() | 652 | self.UpdateRender() |
@@ -661,7 +676,8 @@ class Viewer(wx.Panel): | @@ -661,7 +676,8 @@ class Viewer(wx.Panel): | ||
661 | #self.ShowOrientationCube() | 676 | #self.ShowOrientationCube() |
662 | self.interactor.Render() | 677 | self.interactor.Render() |
663 | self._to_show_ball += 1 | 678 | self._to_show_ball += 1 |
664 | - print "to show ball", self._to_show_ball | 679 | + self._check_and_set_ball_visibility() |
680 | + print "LoadActor: to show ball", self._to_show_ball | ||
665 | 681 | ||
666 | def RemoveActor(self, pubsub_evt): | 682 | def RemoveActor(self, pubsub_evt): |
667 | utils.debug("RemoveActor") | 683 | utils.debug("RemoveActor") |
@@ -669,8 +685,9 @@ class Viewer(wx.Panel): | @@ -669,8 +685,9 @@ class Viewer(wx.Panel): | ||
669 | ren = self.ren | 685 | ren = self.ren |
670 | ren.RemoveActor(actor) | 686 | ren.RemoveActor(actor) |
671 | self.interactor.Render() | 687 | self.interactor.Render() |
672 | - #self._to_show_ball -= 1 | ||
673 | - #print "to show ball", self._to_show_ball | 688 | + self._to_show_ball -= 1 |
689 | + self._check_and_set_ball_visibility() | ||
690 | + print "to show ball", self._to_show_ball | ||
674 | 691 | ||
675 | def RemoveAllActor(self, pubsub_evt): | 692 | def RemoveAllActor(self, pubsub_evt): |
676 | utils.debug("RemoveAllActor") | 693 | utils.debug("RemoveAllActor") |
@@ -712,10 +729,12 @@ class Viewer(wx.Panel): | @@ -712,10 +729,12 @@ class Viewer(wx.Panel): | ||
712 | 729 | ||
713 | def UnloadVolume(self, pubsub_evt): | 730 | def UnloadVolume(self, pubsub_evt): |
714 | volume = pubsub_evt.data | 731 | volume = pubsub_evt.data |
715 | - self._to_show_ball -= 1 | ||
716 | self.ren.RemoveVolume(volume) | 732 | self.ren.RemoveVolume(volume) |
717 | del volume | 733 | del volume |
718 | - print "to show ball", self._to_show_ball | 734 | + self.raycasting_volume = False |
735 | + self._to_show_ball -= 1 | ||
736 | + self._check_and_set_ball_visibility() | ||
737 | + print "UnloadVolume: to show ball", self._to_show_ball | ||
719 | 738 | ||
720 | def OnSetViewAngle(self, evt_pubsub): | 739 | def OnSetViewAngle(self, evt_pubsub): |
721 | view = evt_pubsub.data | 740 | view = evt_pubsub.data |
@@ -854,10 +873,14 @@ class Viewer(wx.Panel): | @@ -854,10 +873,14 @@ class Viewer(wx.Panel): | ||
854 | self.SetViewAngle(const.VOL_ISO) | 873 | self.SetViewAngle(const.VOL_ISO) |
855 | self.repositioned_coronal_plan = 1 | 874 | self.repositioned_coronal_plan = 1 |
856 | 875 | ||
857 | - def _verify_necessity_ball_ref(self): | ||
858 | - pass | ||
859 | - | ||
860 | - | 876 | + def _check_and_set_ball_visibility(self): |
877 | + if self._mode_cross: | ||
878 | + if self._to_show_ball > 0 and not self._ball_ref_visibility: | ||
879 | + self.ActivateBallReference(None) | ||
880 | + self.interactor.Render() | ||
881 | + elif not self._to_show_ball and self._ball_ref_visibility: | ||
882 | + self.RemoveBallReference() | ||
883 | + self.interactor.Render() | ||
861 | 884 | ||
862 | 885 | ||
863 | class SlicePlane: | 886 | class SlicePlane: |