Source code for mphy0026.ui.mphy0026_manual_registration_demo

# -*- coding: utf-8 -*-

""" manual registration demo app. """

import sys
from PySide6 import QtWidgets, QtGui
from PySide6.QtWidgets import QSizePolicy
import cv2
import vtk
import numpy as np
import sksurgeryvtk.models.vtk_surface_model as sm
import sksurgeryvtk.widgets.vtk_overlay_window as ow


#pylint:disable=no-member
[docs] class ManualRegistrationMainWidget(QtWidgets.QWidget): """ ManualRegistrationMainWidget to just enable a VTK window and interactor. """ def __init__(self, background_file, model_file, camera_file ): super().__init__() if not background_file: raise ValueError("Background image must be specified") if not model_file: raise ValueError("VTK model must be specified") if not camera_file: raise ValueError("Camera matrix must be specified") self.setContentsMargins(0, 0, 0, 0) self.viewer = ow.VTKOverlayWindow() self.viewer_size_policy = \ QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) self.viewer.setSizePolicy(self.viewer_size_policy) self.interactor_style = vtk.vtkInteractorStyleTrackballActor() self.viewer.SetInteractorStyle(self.interactor_style) self.vertical_layout = QtWidgets.QVBoxLayout(self) self.vertical_layout.setContentsMargins(0, 0, 0, 0) self.vertical_layout.addWidget(self.viewer) background = cv2.imread(background_file) model = sm.VTKSurfaceModel(model_file, [1.0, 1.0, 1.0], opacity=0.5) camera_matrix = np.loadtxt(camera_file) self.viewer.set_video_image(background) self.viewer.set_camera_matrix(camera_matrix) self.viewer.add_vtk_models([model])
[docs] class ManualRegistrationMainWindow(QtWidgets.QMainWindow): """ ManualRegistrationMainWindow. """ def __init__(self, background, model, camera ): """ Constructor, puts ManualRegistrationMainWidget in window. """ super().__init__() self.main_widget = ManualRegistrationMainWidget(background, model, camera ) self.setCentralWidget(self.main_widget) self.setContentsMargins(0, 0, 0, 0)
[docs] def run_app(background, model, camera): """ Function that launches the manual_registration main window shown above. :return: application exit code """ # Need this for all the Qt magic. app = QtWidgets.QApplication([]) # This is a simple way of increasing the font size of all buttons globally. font = QtGui.QFont() font.setPointSize(20) app.setFont(font) # App is just one window, containing one widget, defined above. window = ManualRegistrationMainWindow(background, model, camera ) window.setContentsMargins(0, 0, 0, 0) window.show() # Start event loop. return sys.exit(app.exec_())