Commit 2fbc32ff63d55ea592c51602d78883a6fc287409

Authored by okahilak
Committed by GitHub
1 parent 30ae50b1
Exists in master

FIX: Loading image fiducials from disk (#295)

- It had broken due to a mix-up between fiducial name ("LE") and
  label ("LEI"). Fix by doing the mapping from label (which is
  stored on disk) to name before triggering 'Set image fiducial'
  event.

Co-authored-by: Olli-Pekka Kahilakoski <olli-pekka.kahilakoski@aalto.fi>
Showing 1 changed file with 25 additions and 14 deletions   Show diff stats
invesalius/gui/task_navigator.py
... ... @@ -482,27 +482,38 @@ class NeuronavigationPanel(wx.Panel):
482 482 Publisher.subscribe(self.UpdateTarget, 'Update target')
483 483  
484 484 def LoadImageFiducials(self, marker_id, coord):
485   - for n in const.BTNS_IMG_MARKERS:
486   - btn_id = list(const.BTNS_IMG_MARKERS[n].keys())[0]
487   - fiducial_name = list(const.BTNS_IMG_MARKERS[n].values())[0]
488   - if marker_id == fiducial_name and not self.btns_coord[btn_id].GetValue():
489   - self.btns_coord[btn_id].SetValue(True)
490   - Publisher.sendMessage('Set image fiducial', fiducial_name=fiducial_name, coord=coord[0:3])
491   - for m in [0, 1, 2]:
492   - self.numctrls_coord[btn_id][m].SetValue(coord[m])
493   -
494   - def FiducialNameToIndex(self, fiducials, fiducial_name):
495   - fiducial = [fiducial for fiducial in fiducials if fiducial['fiducial_name'] == fiducial_name][0]
496   - return fiducial['fiducial_index']
  485 + fiducial = self.GetFiducialByAttribute(const.IMAGE_FIDUCIALS, 'label', marker_id)
  486 +
  487 + fiducial_index = fiducial['fiducial_index']
  488 + fiducial_name = fiducial['fiducial_name']
  489 +
  490 + if self.btns_coord[fiducial_index].GetValue():
  491 + print("Fiducial {} already set, not resetting".format(marker_id))
  492 + return
  493 +
  494 + Publisher.sendMessage('Set image fiducial', fiducial_name=fiducial_name, coord=coord[0:3])
  495 +
  496 + self.btns_coord[fiducial_index].SetValue(True)
  497 + for m in [0, 1, 2]:
  498 + self.numctrls_coord[fiducial_index][m].SetValue(coord[m])
  499 +
  500 + def GetFiducialByAttribute(self, fiducials, attribute_name, attribute_value):
  501 + found = [fiducial for fiducial in fiducials if fiducial[attribute_name] == attribute_value]
  502 +
  503 + assert len(found) != 0, "No fiducial found for which {} = {}".format(attribute_name, attribute_value)
  504 + return found[0]
497 505  
498 506 def SetImageFiducial(self, fiducial_name, coord):
499   - fiducial_index = self.FiducialNameToIndex(const.IMAGE_FIDUCIALS, fiducial_name)
  507 + fiducial = self.GetFiducialByAttribute(const.IMAGE_FIDUCIALS, 'fiducial_name', fiducial_name)
  508 + fiducial_index = fiducial['fiducial_index']
500 509 self.fiducials[fiducial_index, :] = coord
501 510  
502 511 print("Set image fiducial {} to coordinates {}".format(fiducial_name, coord))
503 512  
504 513 def SetTrackerFiducial(self, fiducial_name):
505   - fiducial_index = self.FiducialNameToIndex(const.TRACKER_FIDUCIALS, fiducial_name)
  514 + fiducial = self.GetFiducialByAttribute(const.TRACKER_FIDUCIALS, 'fiducial_name', fiducial_name)
  515 + fiducial_index = fiducial['fiducial_index']
  516 +
506 517 coord = None
507 518  
508 519 if not(self.trk_init and self.tracker_id):
... ...