Commit 355784ccd3da86f73be0292569a4de9b4c66cc49

Authored by tfmoraes
1 parent 68794cab

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 110 self.repositioned_coronal_plan = 0
111 111 self.added_actor = 0
112 112  
  113 + self._mode_cross = False
113 114 self._to_show_ball = 0
  115 + self._ball_ref_visibility = False
114 116  
115 117 def __bind_events(self):
116 118 Publisher.subscribe(self.LoadActor,
... ... @@ -227,15 +229,22 @@ class Viewer(wx.Panel):
227 229 self.ball_actor.SetMapper(mapper)
228 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 237 def ActivateBallReference(self, pubsub_evt):
  238 + self._mode_cross = True
  239 + self._ball_ref_visibility = True
231 240 if self._to_show_ball:
232 241 if not self.ball_reference:
233 242 self.CreateBallReference()
234 243 self.ren.AddActor(self.ball_actor)
235 244  
236 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 249 def OnShowSurface(self, pubsub_evt):
241 250 index, value = pubsub_evt.data
... ... @@ -243,7 +252,8 @@ class Viewer(wx.Panel):
243 252 self._to_show_ball += 1
244 253 else:
245 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 258 def SetBallReferencePosition(self, pubsub_evt):
249 259 x, y, z = pubsub_evt.data
... ... @@ -338,6 +348,8 @@ class Viewer(wx.Panel):
338 348 self.ren.RemoveVolume(volumes.GetLastProp())
339 349 self.interactor.Render()
340 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 354 def RemoveActors(self, pubsub_evt):
343 355 "Remove a list of actors"
... ... @@ -621,17 +633,20 @@ class Viewer(wx.Panel):
621 633 self.text.SetValue("WL: %d WW: %d"%(wl, ww))
622 634  
623 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 644 def OnHideRaycasting(self, pubsub_evt):
631 645 self.raycasting_volume = False
632 646 self.text.Hide()
633 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 651 def OnSize(self, evt):
637 652 self.UpdateRender()
... ... @@ -661,7 +676,8 @@ class Viewer(wx.Panel):
661 676 #self.ShowOrientationCube()
662 677 self.interactor.Render()
663 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 682 def RemoveActor(self, pubsub_evt):
667 683 utils.debug("RemoveActor")
... ... @@ -669,8 +685,9 @@ class Viewer(wx.Panel):
669 685 ren = self.ren
670 686 ren.RemoveActor(actor)
671 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 692 def RemoveAllActor(self, pubsub_evt):
676 693 utils.debug("RemoveAllActor")
... ... @@ -712,10 +729,12 @@ class Viewer(wx.Panel):
712 729  
713 730 def UnloadVolume(self, pubsub_evt):
714 731 volume = pubsub_evt.data
715   - self._to_show_ball -= 1
716 732 self.ren.RemoveVolume(volume)
717 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 739 def OnSetViewAngle(self, evt_pubsub):
721 740 view = evt_pubsub.data
... ... @@ -854,10 +873,14 @@ class Viewer(wx.Panel):
854 873 self.SetViewAngle(const.VOL_ISO)
855 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 886 class SlicePlane:
... ...