Commit af5e7366872af822374031de72ec54714439617b
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
Showing
4 changed files
with
49 additions
and
52 deletions
Show diff stats
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] | ... | ... |