Commit bc5f5b372b02519f5cdffa7c7e806c86f5b3c6e7

Authored by okahilak
Committed by GitHub
1 parent 9de68587
Exists in master

MOD: Remove 'Disconnect tracker' option from tracker dropdown menu (#309)

@@ -136,7 +136,7 @@ class Inv3SplashScreen(SplashScreen): @@ -136,7 +136,7 @@ class Inv3SplashScreen(SplashScreen):
136 def __init__(self): 136 def __init__(self):
137 # Splash screen image will depend on currently language 137 # Splash screen image will depend on currently language
138 lang = LANG 138 lang = LANG
139 - self.locale = wx.Locale(wx.LANGUAGE_DEFAULT) 139 + self.locale = wx.Locale(wx.LANGUAGE_ENGLISH)
140 140
141 # Language information is available in session configuration 141 # Language information is available in session configuration
142 # file. First we need to check if this file exist, if now, it 142 # file. First we need to check if this file exist, if now, it
invesalius/constants.py
@@ -670,7 +670,6 @@ POLARISP4 = 7 @@ -670,7 +670,6 @@ POLARISP4 = 7
670 OPTITRACK = 8 670 OPTITRACK = 8
671 DEBUGTRACKRANDOM = 9 671 DEBUGTRACKRANDOM = 9
672 DEBUGTRACKAPPROACH = 10 672 DEBUGTRACKAPPROACH = 10
673 -DISCTRACK = 11  
674 DEFAULT_TRACKER = SELECT 673 DEFAULT_TRACKER = SELECT
675 674
676 NDICOMPORT = b'COM1' 675 NDICOMPORT = b'COM1'
@@ -680,7 +679,7 @@ TRACKERS = [_("Claron MicronTracker"), @@ -680,7 +679,7 @@ TRACKERS = [_("Claron MicronTracker"),
680 _("Polhemus PATRIOT"), _("Camera tracker"), 679 _("Polhemus PATRIOT"), _("Camera tracker"),
681 _("NDI Polaris"), _("NDI Polaris P4"), 680 _("NDI Polaris"), _("NDI Polaris P4"),
682 _("Optitrack"), _("Debug tracker (random)"), 681 _("Optitrack"), _("Debug tracker (random)"),
683 - _("Debug tracker (approach)"), _("Disconnect tracker")] 682 + _("Debug tracker (approach)")]
684 683
685 STATIC_REF = 0 684 STATIC_REF = 0
686 DYNAMIC_REF = 1 685 DYNAMIC_REF = 1
invesalius/gui/task_navigator.py
@@ -475,77 +475,21 @@ class Tracker(): @@ -475,77 +475,21 @@ class Tracker():
475 self.tracker_connected = False 475 self.tracker_connected = False
476 476
477 def SetTracker(self, new_tracker): 477 def SetTracker(self, new_tracker):
478 - if self.trk_init:  
479 - trck = self.trk_init[0]  
480 - else:  
481 - trck = None  
482 -  
483 - # Conditions check if click was on current selection and if any other tracker  
484 - # has been initialized before  
485 - if new_tracker != const.DISCTRACK and trck:  
486 - self.ResetTrackerFiducials()  
487 - Publisher.sendMessage('Update status text in GUI',  
488 - label=_("Disconnecting tracker..."))  
489 - Publisher.sendMessage('Remove sensors ID')  
490 - self.trk_init = dt.TrackerConnection(self.tracker_id, trck, 'disconnect')  
491 - Publisher.sendMessage('Remove object data') 478 + if new_tracker:
  479 + self.DisconnectTracker()
492 480
493 - if not self.trk_init[0] and new_tracker:  
494 - Publisher.sendMessage('Update status text in GUI',  
495 - label=_("Tracker disconnected successfully"))  
496 - self.trk_init = dt.TrackerConnection(new_tracker, None, 'connect')  
497 - if not self.trk_init[0]:  
498 - self.tracked_connected = False  
499 - self.tracker_id = 0  
500 -  
501 - dlg.ShowNavigationTrackerWarning(self.tracker_id, self.trk_init[1])  
502 - print("Tracker not connected!")  
503 - else:  
504 - self.tracked_connected = True  
505 - self.tracker_id = new_tracker  
506 -  
507 - print("Tracker connected!")  
508 -  
509 - # TODO: const.DISCTRACK is not a tracker, so discoupling it from the actual trackers  
510 - # would make this cleaner.  
511 - #  
512 - elif new_tracker == const.DISCTRACK:  
513 - self.ResetTrackerFiducials()  
514 - Publisher.sendMessage('Update status text in GUI',  
515 - label=_("Disconnecting tracker ..."))  
516 - Publisher.sendMessage('Remove sensors ID')  
517 - Publisher.sendMessage('Remove object data')  
518 - self.trk_init = dt.TrackerConnection(self.tracker_id, trck, 'disconnect') 481 + self.trk_init = dt.TrackerConnection(new_tracker, None, 'connect')
519 if not self.trk_init[0]: 482 if not self.trk_init[0]:
520 - dlg.ShowNavigationTrackerWarning(self.tracker_id, 'disconnect') 483 + dlg.ShowNavigationTrackerWarning(self.tracker_id, self.trk_init[1])
521 484
522 - self.tracked_connected = False  
523 self.tracker_id = 0 485 self.tracker_id = 0
524 -  
525 - Publisher.sendMessage('Update status text in GUI',  
526 - label=_("Tracker disconnected"))  
527 -  
528 - print("Tracker disconnected!") 486 + self.tracker_connected = False
529 else: 487 else:
530 - Publisher.sendMessage('Update status text in GUI',  
531 - label=_("Tracker still connected"))  
532 - print("Tracker still connected!") 488 + self.tracker_id = new_tracker
  489 + self.tracker_connected = True
533 490
534 - else:  
535 - # If trk_init is None try to connect. If doesn't succeed show dialog.  
536 - if new_tracker:  
537 - self.trk_init = dt.TrackerConnection(new_tracker, None, 'connect')  
538 - if not self.trk_init[0]:  
539 - dlg.ShowNavigationTrackerWarning(self.tracker_id, self.trk_init[1])  
540 -  
541 - self.tracker_id = 0  
542 - self.tracker_connected = False  
543 - else:  
544 - self.tracker_id = new_tracker  
545 - self.tracker_connected = True  
546 -  
547 - Publisher.sendMessage('Update tracker initializer',  
548 - nav_prop=(self.tracker_id, self.trk_init, self.ref_mode_id)) 491 + Publisher.sendMessage('Update tracker initializer',
  492 + nav_prop=(self.tracker_id, self.trk_init, self.ref_mode_id))
549 493
550 def DisconnectTracker(self): 494 def DisconnectTracker(self):
551 if self.tracker_connected: 495 if self.tracker_connected:
@@ -618,7 +562,7 @@ class Tracker(): @@ -618,7 +562,7 @@ class Tracker():
618 def GetReferenceMode(self): 562 def GetReferenceMode(self):
619 return self.ref_mode_id 563 return self.ref_mode_id
620 564
621 - def UpdateUI(self, selection_ctrl, numctrls_coord, txtctrl_fre): 565 + def UpdateUI(self, selection_ctrl, numctrls_fiducial, txtctrl_fre):
622 if self.tracker_connected: 566 if self.tracker_connected:
623 selection_ctrl.SetSelection(self.tracker_id) 567 selection_ctrl.SetSelection(self.tracker_id)
624 else: 568 else:
@@ -629,7 +573,7 @@ class Tracker(): @@ -629,7 +573,7 @@ class Tracker():
629 coord = self.tracker_fiducials[m, :] 573 coord = self.tracker_fiducials[m, :]
630 for n in range(0, 3): 574 for n in range(0, 3):
631 value = 0.0 if np.isnan(coord[n]) else float(coord[n]) 575 value = 0.0 if np.isnan(coord[n]) else float(coord[n])
632 - numctrls_coord[m][n].SetValue(value) 576 + numctrls_fiducial[m][n].SetValue(value)
633 577
634 txtctrl_fre.SetValue('') 578 txtctrl_fre.SetValue('')
635 txtctrl_fre.SetBackgroundColour('WHITE') 579 txtctrl_fre.SetBackgroundColour('WHITE')
@@ -712,8 +656,8 @@ class NeuronavigationPanel(wx.Panel): @@ -712,8 +656,8 @@ class NeuronavigationPanel(wx.Panel):
712 self.nav_status = False 656 self.nav_status = False
713 657
714 # Initialize list of buttons and numctrls for wx objects 658 # Initialize list of buttons and numctrls for wx objects
715 - self.btns_coord = [None, None, None, None, None, None]  
716 - self.numctrls_coord = [[], [], [], [], [], []] 659 + self.btns_set_fiducial = [None, None, None, None, None, None]
  660 + self.numctrls_fiducial = [[], [], [], [], [], []]
717 661
718 # ComboBox for spatial tracker device selection 662 # ComboBox for spatial tracker device selection
719 tracker_options = [_("Select tracker:")] + self.tracker.get_trackers() 663 tracker_options = [_("Select tracker:")] + self.tracker.get_trackers()
@@ -742,9 +686,9 @@ class NeuronavigationPanel(wx.Panel): @@ -742,9 +686,9 @@ class NeuronavigationPanel(wx.Panel):
742 label = fiducial['label'] 686 label = fiducial['label']
743 tip = fiducial['tip'] 687 tip = fiducial['tip']
744 688
745 - self.btns_coord[n] = wx.ToggleButton(self, button_id, label=label, size=wx.Size(45, 23))  
746 - self.btns_coord[n].SetToolTip(wx.ToolTip(tip))  
747 - self.btns_coord[n].Bind(wx.EVT_TOGGLEBUTTON, partial(self.OnImageFiducials, n)) 689 + self.btns_set_fiducial[n] = wx.ToggleButton(self, button_id, label=label, size=wx.Size(45, 23))
  690 + self.btns_set_fiducial[n].SetToolTip(wx.ToolTip(tip))
  691 + self.btns_set_fiducial[n].Bind(wx.EVT_TOGGLEBUTTON, partial(self.OnImageFiducials, n))
748 692
749 # Push buttons for tracker fiducials 693 # Push buttons for tracker fiducials
750 for n, fiducial in enumerate(const.TRACKER_FIDUCIALS): 694 for n, fiducial in enumerate(const.TRACKER_FIDUCIALS):
@@ -752,9 +696,9 @@ class NeuronavigationPanel(wx.Panel): @@ -752,9 +696,9 @@ class NeuronavigationPanel(wx.Panel):
752 label = fiducial['label'] 696 label = fiducial['label']
753 tip = fiducial['tip'] 697 tip = fiducial['tip']
754 698
755 - self.btns_coord[n + 3] = wx.Button(self, button_id, label=label, size=wx.Size(45, 23))  
756 - self.btns_coord[n + 3].SetToolTip(wx.ToolTip(tip))  
757 - self.btns_coord[n + 3].Bind(wx.EVT_BUTTON, partial(self.OnTrackerFiducials, n)) 699 + self.btns_set_fiducial[n + 3] = wx.Button(self, button_id, label=label, size=wx.Size(45, 23))
  700 + self.btns_set_fiducial[n + 3].SetToolTip(wx.ToolTip(tip))
  701 + self.btns_set_fiducial[n + 3].Bind(wx.EVT_BUTTON, partial(self.OnTrackerFiducials, n))
758 702
759 # TODO: Find a better allignment between FRE, text and navigate button 703 # TODO: Find a better allignment between FRE, text and navigate button
760 txt_fre = wx.StaticText(self, -1, _('FRE:')) 704 txt_fre = wx.StaticText(self, -1, _('FRE:'))
@@ -806,9 +750,9 @@ class NeuronavigationPanel(wx.Panel): @@ -806,9 +750,9 @@ class NeuronavigationPanel(wx.Panel):
806 self.checkbox_pedal_pressed = None 750 self.checkbox_pedal_pressed = None
807 751
808 # Image and tracker coordinates number controls 752 # Image and tracker coordinates number controls
809 - for m in range(len(self.btns_coord)): 753 + for m in range(len(self.btns_set_fiducial)):
810 for n in range(3): 754 for n in range(3):
811 - self.numctrls_coord[m].append( 755 + self.numctrls_fiducial[m].append(
812 wx.lib.masked.numctrl.NumCtrl(parent=self, integerWidth=4, fractionWidth=1)) 756 wx.lib.masked.numctrl.NumCtrl(parent=self, integerWidth=4, fractionWidth=1))
813 757
814 # Sizer to group all GUI objects 758 # Sizer to group all GUI objects
@@ -818,12 +762,12 @@ class NeuronavigationPanel(wx.Panel): @@ -818,12 +762,12 @@ class NeuronavigationPanel(wx.Panel):
818 762
819 coord_sizer = wx.GridBagSizer(hgap=5, vgap=5) 763 coord_sizer = wx.GridBagSizer(hgap=5, vgap=5)
820 764
821 - for m in range(len(self.btns_coord)):  
822 - coord_sizer.Add(self.btns_coord[m], pos=wx.GBPosition(m, 0)) 765 + for m in range(len(self.btns_set_fiducial)):
  766 + coord_sizer.Add(self.btns_set_fiducial[m], pos=wx.GBPosition(m, 0))
823 for n in range(3): 767 for n in range(3):
824 - coord_sizer.Add(self.numctrls_coord[m][n], pos=wx.GBPosition(m, n+1)) 768 + coord_sizer.Add(self.numctrls_fiducial[m][n], pos=wx.GBPosition(m, n+1))
825 if m in range(1, 6): 769 if m in range(1, 6):
826 - self.numctrls_coord[m][n].SetEditable(False) 770 + self.numctrls_fiducial[m][n].SetEditable(False)
827 771
828 nav_sizer = wx.FlexGridSizer(rows=1, cols=5, hgap=5, vgap=5) 772 nav_sizer = wx.FlexGridSizer(rows=1, cols=5, hgap=5, vgap=5)
829 nav_sizer.AddMany([(txt_fre, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL), 773 nav_sizer.AddMany([(txt_fre, 0, wx.ALIGN_CENTER_HORIZONTAL | wx.ALIGN_CENTER_VERTICAL),
@@ -885,15 +829,15 @@ class NeuronavigationPanel(wx.Panel): @@ -885,15 +829,15 @@ class NeuronavigationPanel(wx.Panel):
885 fiducial_index = fiducial['fiducial_index'] 829 fiducial_index = fiducial['fiducial_index']
886 fiducial_name = fiducial['fiducial_name'] 830 fiducial_name = fiducial['fiducial_name']
887 831
888 - if self.btns_coord[fiducial_index].GetValue(): 832 + if self.btns_set_fiducial[fiducial_index].GetValue():
889 print("Fiducial {} already set, not resetting".format(marker_id)) 833 print("Fiducial {} already set, not resetting".format(marker_id))
890 return 834 return
891 835
892 Publisher.sendMessage('Set image fiducial', fiducial_name=fiducial_name, coord=coord[0:3]) 836 Publisher.sendMessage('Set image fiducial', fiducial_name=fiducial_name, coord=coord[0:3])
893 837
894 - self.btns_coord[fiducial_index].SetValue(True) 838 + self.btns_set_fiducial[fiducial_index].SetValue(True)
895 for m in [0, 1, 2]: 839 for m in [0, 1, 2]:
896 - self.numctrls_coord[fiducial_index][m].SetValue(coord[m]) 840 + self.numctrls_fiducial[fiducial_index][m].SetValue(coord[m])
897 841
898 def GetFiducialByAttribute(self, fiducials, attribute_name, attribute_value): 842 def GetFiducialByAttribute(self, fiducials, attribute_name, attribute_value):
899 found = [fiducial for fiducial in fiducials if fiducial[attribute_name] == attribute_value] 843 found = [fiducial for fiducial in fiducials if fiducial[attribute_name] == attribute_value]
@@ -918,7 +862,7 @@ class NeuronavigationPanel(wx.Panel): @@ -918,7 +862,7 @@ class NeuronavigationPanel(wx.Panel):
918 self.tracker.SetTrackerFiducial(fiducial_index) 862 self.tracker.SetTrackerFiducial(fiducial_index)
919 863
920 self.ResetICP() 864 self.ResetICP()
921 - self.tracker.UpdateUI(self.select_tracker_elem, self.numctrls_coord[3:6], self.txtctrl_fre) 865 + self.tracker.UpdateUI(self.select_tracker_elem, self.numctrls_fiducial[3:6], self.txtctrl_fre)
922 866
923 867
924 def UpdatePeelVisualization(self, data): 868 def UpdatePeelVisualization(self, data):
@@ -967,9 +911,9 @@ class NeuronavigationPanel(wx.Panel): @@ -967,9 +911,9 @@ class NeuronavigationPanel(wx.Panel):
967 self.navigation.current_coord = position 911 self.navigation.current_coord = position
968 912
969 for m in [0, 1, 2]: 913 for m in [0, 1, 2]:
970 - if not self.btns_coord[m].GetValue(): 914 + if not self.btns_set_fiducial[m].GetValue():
971 for n in [0, 1, 2]: 915 for n in [0, 1, 2]:
972 - self.numctrls_coord[m][n].SetValue(float(position[n])) 916 + self.numctrls_fiducial[m][n].SetValue(float(position[n]))
973 917
974 def UpdateObjectRegistration(self, data=None): 918 def UpdateObjectRegistration(self, data=None):
975 self.navigation.obj_reg = data 919 self.navigation.obj_reg = data
@@ -988,6 +932,7 @@ class NeuronavigationPanel(wx.Panel): @@ -988,6 +932,7 @@ class NeuronavigationPanel(wx.Panel):
988 def OnDisconnectTracker(self): 932 def OnDisconnectTracker(self):
989 self.tracker.DisconnectTracker() 933 self.tracker.DisconnectTracker()
990 self.ResetICP() 934 self.ResetICP()
  935 + self.tracker.UpdateUI(self.select_tracker_elem, self.numctrls_fiducial[3:6], self.txtctrl_fre)
991 936
992 def OnChooseTracker(self, evt, ctrl): 937 def OnChooseTracker(self, evt, ctrl):
993 Publisher.sendMessage('Update status text in GUI', 938 Publisher.sendMessage('Update status text in GUI',
@@ -995,11 +940,11 @@ class NeuronavigationPanel(wx.Panel): @@ -995,11 +940,11 @@ class NeuronavigationPanel(wx.Panel):
995 if hasattr(evt, 'GetSelection'): 940 if hasattr(evt, 'GetSelection'):
996 choice = evt.GetSelection() 941 choice = evt.GetSelection()
997 else: 942 else:
998 - choice = const.DISCTRACK 943 + choice = None
999 944
1000 self.tracker.SetTracker(choice) 945 self.tracker.SetTracker(choice)
1001 self.ResetICP() 946 self.ResetICP()
1002 - self.tracker.UpdateUI(ctrl, self.numctrls_coord[3:6], self.txtctrl_fre) 947 + self.tracker.UpdateUI(ctrl, self.numctrls_fiducial[3:6], self.txtctrl_fre)
1003 948
1004 Publisher.sendMessage('Update status text in GUI', label=_("Ready")) 949 Publisher.sendMessage('Update status text in GUI', label=_("Ready"))
1005 950
@@ -1015,16 +960,16 @@ class NeuronavigationPanel(wx.Panel): @@ -1015,16 +960,16 @@ class NeuronavigationPanel(wx.Panel):
1015 # XXX: This is still a bit hard to read, could be cleaned up. 960 # XXX: This is still a bit hard to read, could be cleaned up.
1016 marker_id = list(const.BTNS_IMG_MARKERS[evt.GetId()].values())[0] 961 marker_id = list(const.BTNS_IMG_MARKERS[evt.GetId()].values())[0]
1017 962
1018 - if self.btns_coord[n].GetValue():  
1019 - coord = self.numctrls_coord[n][0].GetValue(),\  
1020 - self.numctrls_coord[n][1].GetValue(),\  
1021 - self.numctrls_coord[n][2].GetValue(), 0, 0, 0 963 + if self.btns_set_fiducial[n].GetValue():
  964 + coord = self.numctrls_fiducial[n][0].GetValue(),\
  965 + self.numctrls_fiducial[n][1].GetValue(),\
  966 + self.numctrls_fiducial[n][2].GetValue(), 0, 0, 0
1022 967
1023 Publisher.sendMessage('Set image fiducial', fiducial_name=fiducial_name, coord=coord[0:3]) 968 Publisher.sendMessage('Set image fiducial', fiducial_name=fiducial_name, coord=coord[0:3])
1024 Publisher.sendMessage('Create marker', coord=coord, marker_id=marker_id) 969 Publisher.sendMessage('Create marker', coord=coord, marker_id=marker_id)
1025 else: 970 else:
1026 for m in [0, 1, 2]: 971 for m in [0, 1, 2]:
1027 - self.numctrls_coord[n][m].SetValue(float(self.current_coord[m])) 972 + self.numctrls_fiducial[n][m].SetValue(float(self.current_coord[m]))
1028 973
1029 Publisher.sendMessage('Set image fiducial', fiducial_name=fiducial_name, coord=np.nan) 974 Publisher.sendMessage('Set image fiducial', fiducial_name=fiducial_name, coord=np.nan)
1030 Publisher.sendMessage('Delete fiducial marker', marker_id=marker_id) 975 Publisher.sendMessage('Delete fiducial marker', marker_id=marker_id)
@@ -1043,7 +988,7 @@ class NeuronavigationPanel(wx.Panel): @@ -1043,7 +988,7 @@ class NeuronavigationPanel(wx.Panel):
1043 choice_ref.Enable(True) 988 choice_ref.Enable(True)
1044 select_tracker_elem.Enable(True) 989 select_tracker_elem.Enable(True)
1045 990
1046 - for btn_c in self.btns_coord: 991 + for btn_c in self.btns_set_fiducial:
1047 btn_c.Enable(True) 992 btn_c.Enable(True)
1048 993
1049 def UpdateFiducialRegistrationError(self): 994 def UpdateFiducialRegistrationError(self):
@@ -1078,7 +1023,7 @@ class NeuronavigationPanel(wx.Panel): @@ -1078,7 +1023,7 @@ class NeuronavigationPanel(wx.Panel):
1078 # Disable all navigation buttons. 1023 # Disable all navigation buttons.
1079 choice_ref.Enable(False) 1024 choice_ref.Enable(False)
1080 select_tracker_elem.Enable(False) 1025 select_tracker_elem.Enable(False)
1081 - for btn_c in self.btns_coord: 1026 + for btn_c in self.btns_set_fiducial:
1082 btn_c.Enable(False) 1027 btn_c.Enable(False)
1083 1028
1084 self.navigation.StartNavigation(self.tracker) 1029 self.navigation.StartNavigation(self.tracker)
@@ -1116,17 +1061,17 @@ class NeuronavigationPanel(wx.Panel): @@ -1116,17 +1061,17 @@ class NeuronavigationPanel(wx.Panel):
1116 1061
1117 def ResetUI(self): 1062 def ResetUI(self):
1118 for m in range(0, 3): 1063 for m in range(0, 3):
1119 - self.btns_coord[m].SetValue(False) 1064 + self.btns_set_fiducial[m].SetValue(False)
1120 for n in range(0, 3): 1065 for n in range(0, 3):
1121 - self.numctrls_coord[m][n].SetValue(0.0) 1066 + self.numctrls_fiducial[m][n].SetValue(0.0)
1122 1067
1123 def OnCheckboxICP(self, evt, ctrl): 1068 def OnCheckboxICP(self, evt, ctrl):
1124 self.icp.SetICP(self.navigation, ctrl.GetValue()) 1069 self.icp.SetICP(self.navigation, ctrl.GetValue())
1125 self.UpdateFiducialRegistrationError() 1070 self.UpdateFiducialRegistrationError()
1126 1071
1127 def OnCloseProject(self): 1072 def OnCloseProject(self):
1128 - self.OnChooseTracker(False, self.select_tracker_elem)  
1129 self.ResetUI() 1073 self.ResetUI()
  1074 + Publisher.sendMessage('Disconnect tracker')
1130 Publisher.sendMessage('Update object registration') 1075 Publisher.sendMessage('Update object registration')
1131 Publisher.sendMessage('Update track object state', flag=False, obj_name=False) 1076 Publisher.sendMessage('Update track object state', flag=False, obj_name=False)
1132 Publisher.sendMessage('Delete all markers') 1077 Publisher.sendMessage('Delete all markers')