Commit af5e7366872af822374031de72ec54714439617b

Authored by Renan
Committed by Thiago Franco de Moraes
1 parent 811f7ad5
Exists in master

Navigator updates (#170)

* Remove set button from navigation tab

* Reduce panel size and cleaning

* More cleaning

* Updates to code standards

* Support to the fourth FTsensor
invesalius/constants.py
... ... @@ -708,6 +708,7 @@ STATIC_REF = 0
708 708 DYNAMIC_REF = 1
709 709 DEFAULT_REF_MODE = DYNAMIC_REF
710 710 REF_MODE = [_("Static ref."), _("Dynamic ref.")]
  711 +FT_SENSOR_MODE = [_("Sensor 3"), _("Sensor 4")]
711 712  
712 713 DEFAULT_COIL = SELECT
713 714 COIL = [_("Select coil:"), _("Neurosoft Figure-8"),
... ... @@ -735,13 +736,11 @@ TIPS_IMG = [_("Select left ear in image"),
735 736  
736 737 BTNS_TRK = {TR1: {3: _('LET')},
737 738 TR2: {4: _('RET')},
738   - TR3: {5: _('NAT')},
739   - SET: {6: _('SET')}}
  739 + TR3: {5: _('NAT')}}
740 740  
741 741 TIPS_TRK = [_("Select left ear with spatial tracker"),
742 742 _("Select right ear with spatial tracker"),
743   - _("Select nasion with spatial tracker"),
744   - _("Show set coordinates in image")]
  743 + _("Select nasion with spatial tracker")]
745 744  
746 745 OBJL = wx.NewId()
747 746 OBJR = wx.NewId()
... ...
invesalius/data/coordinates.py
... ... @@ -109,7 +109,10 @@ def PolhemusWrapperCoord(trck, trck_id, ref_mode):
109 109 coord3 = np.array([float(trck.PositionTooltipX3) * scale[0], float(trck.PositionTooltipY3) * scale[1],
110 110 float(trck.PositionTooltipZ3) * scale[2],
111 111 float(trck.AngleX3), float(trck.AngleY3), float(trck.AngleZ3)])
112   - coord = np.vstack([coord, coord3])
  112 + coord4 = np.array([float(trck.PositionTooltipX4) * scale[0], float(trck.PositionTooltipY4) * scale[1],
  113 + float(trck.PositionTooltipZ4) * scale[2],
  114 + float(trck.AngleX4), float(trck.AngleY4), float(trck.AngleZ4)])
  115 + coord = np.vstack([coord, coord3, coord4])
113 116  
114 117 if trck.StylusButton:
115 118 Publisher.sendMessage('PLH Stylus Button On')
... ... @@ -208,9 +211,12 @@ def DebugCoord(trk_init, trck_id, ref_mode):
208 211 coord3 = np.array([uniform(1, 200), uniform(1, 200), uniform(1, 200),
209 212 uniform(-180.0, 180.0), uniform(-180.0, 180.0), uniform(-180.0, 180.0)])
210 213  
  214 + coord4 = np.array([uniform(1, 200), uniform(1, 200), uniform(1, 200),
  215 + uniform(-180.0, 180.0), uniform(-180.0, 180.0), uniform(-180.0, 180.0)])
  216 +
211 217 Publisher.sendMessage('Sensors ID', probe_id=int(uniform(0, 5)), ref_id=int(uniform(0, 5)))
212 218  
213   - return np.vstack([coord1, coord2, coord3])
  219 + return np.vstack([coord1, coord2, coord3, coord4])
214 220  
215 221  
216 222 def dynamic_reference(probe, reference):
... ...
invesalius/gui/dialogs.py
... ... @@ -3487,8 +3487,19 @@ class ObjectCalibrationDialog(wx.Dialog):
3487 3487 choice_ref.SetSelection(self.obj_ref_id)
3488 3488 choice_ref.SetToolTip(tooltip)
3489 3489 choice_ref.Bind(wx.EVT_COMBOBOX, self.OnChoiceRefMode)
3490   - if self.tracker_id != const.MTC:
3491   - choice_ref.Enable(0)
  3490 + choice_ref.Enable(0)
  3491 + if self.tracker_id == const.MTC or self.tracker_id == const.FASTRAK or self.tracker_id == const.DEBUGTRACK:
  3492 + choice_ref.Enable(1)
  3493 +
  3494 + # ComboBox for sensor selection for FASTRAK
  3495 + tooltip = wx.ToolTip(_(u"Choose the FASTRAK sensor port"))
  3496 + choice_sensor = wx.ComboBox(self, -1, "", size=wx.Size(90, 23),
  3497 + choices=const.FT_SENSOR_MODE, style=wx.CB_DROPDOWN | wx.CB_READONLY)
  3498 + choice_sensor.SetSelection(0)
  3499 + choice_sensor.SetToolTip(tooltip)
  3500 + choice_sensor.Bind(wx.EVT_COMBOBOX, self.OnChoiceFTSensor)
  3501 + choice_sensor.Show(False)
  3502 + self.choice_sensor = choice_sensor
3492 3503  
3493 3504 # Buttons to finish or cancel object registration
3494 3505 tooltip = wx.ToolTip(_(u"Registration done"))
... ... @@ -3496,9 +3507,10 @@ class ObjectCalibrationDialog(wx.Dialog):
3496 3507 btn_ok = wx.Button(self, wx.ID_OK, _(u"Done"), size=wx.Size(90, 30))
3497 3508 btn_ok.SetToolTip(tooltip)
3498 3509  
3499   - extra_sizer = wx.FlexGridSizer(rows=2, cols=1, hgap=5, vgap=30)
  3510 + extra_sizer = wx.FlexGridSizer(rows=3, cols=1, hgap=5, vgap=30)
3500 3511 extra_sizer.AddMany([choice_ref,
3501   - btn_ok])
  3512 + btn_ok,
  3513 + choice_sensor])
3502 3514  
3503 3515 # Push buttons for object fiducials
3504 3516 btns_obj = const.BTNS_OBJ
... ... @@ -3651,7 +3663,7 @@ class ObjectCalibrationDialog(wx.Dialog):
3651 3663 if self.trk_init and self.tracker_id:
3652 3664 coord_raw = dco.GetCoordinates(self.trk_init, self.tracker_id, self.obj_ref_id)
3653 3665 if self.obj_ref_id and btn_id == 4:
3654   - coord = coord_raw[2, :]
  3666 + coord = coord_raw[self.obj_ref_id, :]
3655 3667 else:
3656 3668 coord = coord_raw[0, :]
3657 3669 else:
... ... @@ -3680,6 +3692,9 @@ class ObjectCalibrationDialog(wx.Dialog):
3680 3692  
3681 3693 if evt.GetSelection():
3682 3694 self.obj_ref_id = 2
  3695 + if self.tracker_id == const.FASTRAK or self.tracker_id == const.DEBUGTRACK:
  3696 + self.choice_sensor.Show(True)
  3697 + self.Layout()
3683 3698 else:
3684 3699 self.obj_ref_id = 0
3685 3700 for m in range(0, 5):
... ... @@ -3688,6 +3703,12 @@ class ObjectCalibrationDialog(wx.Dialog):
3688 3703 for n in range(0, 3):
3689 3704 self.txt_coord[m][n].SetLabel('-')
3690 3705  
  3706 + def OnChoiceFTSensor(self, evt):
  3707 + if evt.GetSelection():
  3708 + self.obj_ref_id = 3
  3709 + else:
  3710 + self.obj_ref_id = 0
  3711 +
3691 3712 def GetValue(self):
3692 3713 return self.obj_fiducials, self.obj_orients, self.obj_ref_id, self.obj_name
3693 3714  
... ...
invesalius/gui/task_navigator.py
... ... @@ -134,13 +134,9 @@ class InnerFoldPanel(wx.Panel):
134 134 # is not working properly in this panel. It might be on some child or
135 135 # parent panel. Perhaps we need to insert the item into the sizer also...
136 136 # Study this.
137   - displaySize = wx.DisplaySize()
138   - if displaySize[1] > 768:
139   - fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
140   - (10, 350), 0, fpb.FPB_SINGLE_FOLD)
141   - else:
142   - fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
143   - (10, 320), 0, fpb.FPB_SINGLE_FOLD)
  137 +
  138 + fold_panel = fpb.FoldPanelBar(self, -1, wx.DefaultPosition,
  139 + (10, 290), 0, fpb.FPB_SINGLE_FOLD)
144 140 # Fold panel style
145 141 style = fpb.CaptionBarStyle()
146 142 style.SetCaptionStyle(fpb.CAPTIONBAR_GRADIENT_V)
... ... @@ -305,8 +301,8 @@ class NeuronavigationPanel(wx.Panel):
305 301 self.ref_mode_id = const.DEFAULT_REF_MODE
306 302  
307 303 # Initialize list of buttons and numctrls for wx objects
308   - self.btns_coord = [None] * 7
309   - self.numctrls_coord = [list(), list(), list(), list(), list(), list(), list()]
  304 + self.btns_coord = [None, None, None, None, None, None]
  305 + self.numctrls_coord = [[], [], [], [], [], []]
310 306  
311 307 # ComboBox for spatial tracker device selection
312 308 tooltip = wx.ToolTip(_("Choose the tracking device"))
... ... @@ -345,11 +341,7 @@ class NeuronavigationPanel(wx.Panel):
345 341 lab = list(btns_trk[k].values())[0]
346 342 self.btns_coord[n] = wx.Button(self, k, label=lab, size=wx.Size(45, 23))
347 343 self.btns_coord[n].SetToolTip(wx.ToolTip(tips_trk[n-3]))
348   - # Exception for event of button that set image coordinates
349   - if n == 6:
350   - self.btns_coord[n].Bind(wx.EVT_BUTTON, self.OnSetImageCoordinates)
351   - else:
352   - self.btns_coord[n].Bind(wx.EVT_BUTTON, self.OnTrackerFiducials)
  344 + self.btns_coord[n].Bind(wx.EVT_BUTTON, self.OnTrackerFiducials)
353 345  
354 346 # TODO: Find a better allignment between FRE, text and navigate button
355 347 txt_fre = wx.StaticText(self, -1, _('FRE:'))
... ... @@ -370,8 +362,8 @@ class NeuronavigationPanel(wx.Panel):
370 362 btn_nav.Bind(wx.EVT_TOGGLEBUTTON, partial(self.OnNavigate, btn=(btn_nav, choice_trck, choice_ref)))
371 363  
372 364 # Image and tracker coordinates number controls
373   - for m in range(0, 7):
374   - for n in range(0, 3):
  365 + for m in range(len(self.btns_coord)):
  366 + for n in range(3):
375 367 self.numctrls_coord[m].append(
376 368 wx.lib.masked.numctrl.NumCtrl(parent=self, integerWidth=4, fractionWidth=1))
377 369  
... ... @@ -382,9 +374,9 @@ class NeuronavigationPanel(wx.Panel):
382 374  
383 375 coord_sizer = wx.GridBagSizer(hgap=5, vgap=5)
384 376  
385   - for m in range(0, 7):
  377 + for m in range(len(self.btns_coord)):
386 378 coord_sizer.Add(self.btns_coord[m], pos=wx.GBPosition(m, 0))
387   - for n in range(0, 3):
  379 + for n in range(3):
388 380 coord_sizer.Add(self.numctrls_coord[m][n], pos=wx.GBPosition(m, n+1))
389 381 if m in range(1, 6):
390 382 self.numctrls_coord[m][n].SetEditable(False)
... ... @@ -432,13 +424,8 @@ class NeuronavigationPanel(wx.Panel):
432 424 def UpdateImageCoordinates(self, position):
433 425 # TODO: Change from world coordinates to matrix coordinates. They are better for multi software communication.
434 426 self.current_coord = position
435   - for m in [0, 1, 2, 6]:
436   - if m == 6 and self.btns_coord[m].IsEnabled():
437   - for n in [0, 1, 2]:
438   - self.numctrls_coord[m][n].SetValue(float(self.current_coord[n]))
439   - elif m != 6 and not self.btns_coord[m].GetValue():
440   - # btn_state = self.btns_coord[m].GetValue()
441   - # if not btn_state:
  427 + for m in [0, 1, 2]:
  428 + if not self.btns_coord[m].GetValue():
442 429 for n in [0, 1, 2]:
443 430 self.numctrls_coord[m][n].SetValue(float(self.current_coord[n]))
444 431  
... ... @@ -544,19 +531,6 @@ class NeuronavigationPanel(wx.Panel):
544 531 nav_prop=(self.tracker_id, self.trk_init, self.ref_mode_id))
545 532 print("Reference mode changed!")
546 533  
547   - def OnSetImageCoordinates(self, evt):
548   - # FIXME: Cross does not update in last clicked slice, only on the other two
549   - btn_id = list(const.BTNS_TRK[evt.GetId()].keys())[0]
550   -
551   - ux, uy, uz = self.numctrls_coord[btn_id][0].GetValue(),\
552   - self.numctrls_coord[btn_id][1].GetValue(),\
553   - self.numctrls_coord[btn_id][2].GetValue()
554   -
555   - Publisher.sendMessage('Set ball reference position', position=(ux, uy, uz))
556   - # Publisher.sendMessage('Set camera in volume', (ux, uy, uz))
557   - Publisher.sendMessage('Co-registered points', arg=(ux, uy, uz), position=(0., 0., 0.))
558   - Publisher.sendMessage('Update cross position', position=(ux, uy, uz))
559   -
560 534 def OnImageFiducials(self, evt):
561 535 btn_id = list(const.BTNS_IMG_MKS[evt.GetId()].keys())[0]
562 536 marker_id = list(const.BTNS_IMG_MKS[evt.GetId()].values())[0]
... ... @@ -714,9 +688,6 @@ class NeuronavigationPanel(wx.Panel):
714 688 for n in range(0, 3):
715 689 self.numctrls_coord[m][n].SetValue(0.0)
716 690  
717   - for n in range(0, 3):
718   - self.numctrls_coord[6][n].SetValue(0.0)
719   -
720 691 def ResetTrackerFiducials(self):
721 692 for m in range(3, 6):
722 693 self.fiducials[m, :] = [np.nan, np.nan, np.nan]
... ...