From 96989be92f00bcf52490d63b6316dd88d4c89176 Mon Sep 17 00:00:00 2001 From: okahilak Date: Thu, 23 Sep 2021 17:44:45 +0300 Subject: [PATCH] CLP: Move ICP class to its own file (icp.py) (#356) --- invesalius/gui/task_navigator.py | 68 +------------------------------------------------------------------- invesalius/navigation/icp.py | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 81 insertions(+), 67 deletions(-) create mode 100644 invesalius/navigation/icp.py diff --git a/invesalius/gui/task_navigator.py b/invesalius/gui/task_navigator.py index 446c2b5..45b5f79 100644 --- a/invesalius/gui/task_navigator.py +++ b/invesalius/gui/task_navigator.py @@ -19,11 +19,7 @@ from functools import partial import csv -import os -import queue -import sys import time -import threading import nibabel as nb import numpy as np @@ -35,10 +31,8 @@ except ImportError: import wx try: - import wx.lib.agw.hyperlink as hl import wx.lib.agw.foldpanelbar as fpb except ImportError: - import wx.lib.hyperlink as hl import wx.lib.foldpanelbar as fpb import wx.lib.colourselect as csel @@ -47,24 +41,19 @@ from invesalius.pubsub import pub as Publisher from time import sleep import invesalius.constants as const -import invesalius.data.bases as db if has_trekker: import invesalius.data.brainmesh_handler as brain -import invesalius.data.coordinates as dco -import invesalius.data.coregistration as dcr -import invesalius.data.serial_port_connection as spc import invesalius.data.slice_ as sl -import invesalius.data.trackers as dt import invesalius.data.tractography as dti -import invesalius.data.transformations as tr import invesalius.data.record_coords as rec import invesalius.data.vtk_utils as vtk_utils import invesalius.gui.dialogs as dlg import invesalius.project as prj from invesalius import utils from invesalius.gui import utils as gui_utils +from invesalius.navigation.icp import ICP from invesalius.navigation.navigation import Navigation from invesalius.navigation.tracker import Tracker @@ -317,61 +306,6 @@ class InnerFoldPanel(wx.Panel): Publisher.sendMessage('Update volume camera state', camera_state=self.checkcamera.GetValue()) -class ICP(): - def __init__(self): - self.use_icp = False - self.m_icp = None - self.icp_fre = None - - def StartICP(self, navigation, tracker): - ref_mode_id = navigation.GetReferenceMode() - - if not self.use_icp: - if dlg.ICPcorregistration(navigation.fre): - Publisher.sendMessage('Stop navigation') - use_icp, self.m_icp = self.OnICP(navigation, tracker, navigation.m_change) - if use_icp: - self.icp_fre = db.calculate_fre(tracker.tracker_fiducials_raw, navigation.all_fiducials, - ref_mode_id, navigation.m_change, self.m_icp) - self.SetICP(navigation, use_icp) - else: - print("ICP canceled") - Publisher.sendMessage('Start navigation') - - def OnICP(self, navigation, tracker, m_change): - ref_mode_id = navigation.GetReferenceMode() - - dialog = dlg.ICPCorregistrationDialog(nav_prop=(m_change, tracker.tracker_id, tracker.trk_init, ref_mode_id)) - - if dialog.ShowModal() == wx.ID_OK: - m_icp, point_coord, transformed_points, prev_error, final_error = dialog.GetValue() - # TODO: checkbox in the dialog to transfer the icp points to 3D viewer - #create markers - # for i in range(len(point_coord)): - # img_coord = point_coord[i][0],-point_coord[i][1],point_coord[i][2], 0, 0, 0 - # transf_coord = transformed_points[i][0],-transformed_points[i][1],transformed_points[i][2], 0, 0, 0 - # Publisher.sendMessage('Create marker', coord=img_coord, marker_id=None, colour=(1,0,0)) - # Publisher.sendMessage('Create marker', coord=transf_coord, marker_id=None, colour=(0,0,1)) - if m_icp is not None: - dlg.ReportICPerror(prev_error, final_error) - use_icp = True - else: - use_icp = False - - return use_icp, m_icp - - else: - return self.use_icp, self.m_icp - - def SetICP(self, navigation, use_icp): - self.use_icp = use_icp - navigation.icp_queue.put_nowait([self.use_icp, self.m_icp]) - - def ResetICP(self): - self.use_icp = False - self.m_icp = None - self.icp_fre = None - class NeuronavigationPanel(wx.Panel): def __init__(self, parent, tracker, pedal_connection): wx.Panel.__init__(self, parent) diff --git a/invesalius/navigation/icp.py b/invesalius/navigation/icp.py new file mode 100644 index 0000000..5e273bb --- /dev/null +++ b/invesalius/navigation/icp.py @@ -0,0 +1,80 @@ +#-------------------------------------------------------------------------- +# Software: InVesalius - Software de Reconstrucao 3D de Imagens Medicas +# Copyright: (C) 2001 Centro de Pesquisas Renato Archer +# Homepage: http://www.softwarepublico.gov.br +# Contact: invesalius@cti.gov.br +# License: GNU - GPL 2 (LICENSE.txt/LICENCA.txt) +#-------------------------------------------------------------------------- +# Este programa e software livre; voce pode redistribui-lo e/ou +# modifica-lo sob os termos da Licenca Publica Geral GNU, conforme +# publicada pela Free Software Foundation; de acordo com a versao 2 +# da Licenca. +# +# Este programa eh distribuido na expectativa de ser util, mas SEM +# QUALQUER GARANTIA; sem mesmo a garantia implicita de +# COMERCIALIZACAO ou de ADEQUACAO A QUALQUER PROPOSITO EM +# PARTICULAR. Consulte a Licenca Publica Geral GNU para obter mais +# detalhes. +#-------------------------------------------------------------------------- + +import wx + +import invesalius.data.bases as db +import invesalius.gui.dialogs as dlg +from invesalius.pubsub import pub as Publisher + + +class ICP(): + def __init__(self): + self.use_icp = False + self.m_icp = None + self.icp_fre = None + + def StartICP(self, navigation, tracker): + ref_mode_id = navigation.GetReferenceMode() + + if not self.use_icp: + if dlg.ICPcorregistration(navigation.fre): + Publisher.sendMessage('Stop navigation') + use_icp, self.m_icp = self.OnICP(navigation, tracker, navigation.m_change) + if use_icp: + self.icp_fre = db.calculate_fre(tracker.tracker_fiducials_raw, navigation.all_fiducials, + ref_mode_id, navigation.m_change, self.m_icp) + self.SetICP(navigation, use_icp) + else: + print("ICP canceled") + Publisher.sendMessage('Start navigation') + + def OnICP(self, navigation, tracker, m_change): + ref_mode_id = navigation.GetReferenceMode() + + dialog = dlg.ICPCorregistrationDialog(nav_prop=(m_change, tracker.tracker_id, tracker.trk_init, ref_mode_id)) + + if dialog.ShowModal() == wx.ID_OK: + m_icp, point_coord, transformed_points, prev_error, final_error = dialog.GetValue() + # TODO: checkbox in the dialog to transfer the icp points to 3D viewer + #create markers + # for i in range(len(point_coord)): + # img_coord = point_coord[i][0],-point_coord[i][1],point_coord[i][2], 0, 0, 0 + # transf_coord = transformed_points[i][0],-transformed_points[i][1],transformed_points[i][2], 0, 0, 0 + # Publisher.sendMessage('Create marker', coord=img_coord, marker_id=None, colour=(1,0,0)) + # Publisher.sendMessage('Create marker', coord=transf_coord, marker_id=None, colour=(0,0,1)) + if m_icp is not None: + dlg.ReportICPerror(prev_error, final_error) + use_icp = True + else: + use_icp = False + + return use_icp, m_icp + + else: + return self.use_icp, self.m_icp + + def SetICP(self, navigation, use_icp): + self.use_icp = use_icp + navigation.icp_queue.put_nowait([self.use_icp, self.m_icp]) + + def ResetICP(self): + self.use_icp = False + self.m_icp = None + self.icp_fre = None -- libgit2 0.21.2