예제 #1
0
 def buildUI(self):
     self.ui = Ui_MainView()
     self.ui.setupUi(self)
     # connect signals to methods
     self.ui.actionMasking.changed.connect(self.onMasking)
     self.ui.actionAutoCamera.changed.connect(self.onSetCameraParams)
     self.ui.actionFineRegistration.triggered.connect(self.onFineRegistration)
     # Replace vertical layout placeholder with a QVTKRenderWindowInteractor
     self.ui.qvtkWidget = QVTKRenderWindowInteractor(self.ui.centralwidget)
     self.ui.qvtkWidget.setObjectName(_fromUtf8("qvtkWidget"))
     imgDims = self.model.bgImage.GetDimensions()
     self.ui.qvtkWidget.setMinimumWidth(imgDims[0])
     self.ui.qvtkWidget.setMaximumWidth(imgDims[0])
     self.ui.qvtkWidget.setMinimumHeight(imgDims[1])
     self.ui.qvtkWidget.setMaximumHeight(imgDims[1])
     self.ui.horizontalLayout.addWidget(self.ui.qvtkWidget)
     # Add this render window to the model
     self.model.setRenWin(self.ui.qvtkWidget.GetRenderWindow())
     self.model.renWin = self.ui.qvtkWidget.GetRenderWindow()
     # Replace default interactor style to send messages to controller
     self.iren = self.ui.qvtkWidget.GetRenderWindow().GetInteractor()
     self.iren.SetInteractorStyle(MainViewInteractorStyle(self.mainCtrl))
예제 #2
0
class MainView(QtGui.QMainWindow):

    # properties to read/write widget values
    @property
    def masking(self):
        return self.ui.actionMasking.isChecked()

    @masking.setter
    def masking(self, value):
        self.ui.actionMasking.setChecked(value)

    @property
    def autoCamera(self):
        return self.ui.actionAutoCamera.isChecked()

    @autoCamera.setter
    def autoCamera(self, value):
        self.ui.actionAutoCamera.setChecked(value)

    def __init__(self, model, mainCtrl):
        self.model = model
        self.mainCtrl = mainCtrl
        super(MainView, self).__init__()
        self.buildUI()
        # Set up controller update thread
        self.mainCtrl.bgUpdater.VTK_updated.connect(self.renderVTK)
        # register func with model for future model update announcements
        self.model.subscribe_update_func(self.updateUiFromModel)

    def buildUI(self):
        self.ui = Ui_MainView()
        self.ui.setupUi(self)
        # connect signals to methods
        self.ui.actionMasking.changed.connect(self.onMasking)
        self.ui.actionAutoCamera.changed.connect(self.onSetCameraParams)
        self.ui.actionFineRegistration.triggered.connect(self.onFineRegistration)
        # Replace vertical layout placeholder with a QVTKRenderWindowInteractor
        self.ui.qvtkWidget = QVTKRenderWindowInteractor(self.ui.centralwidget)
        self.ui.qvtkWidget.setObjectName(_fromUtf8("qvtkWidget"))
        imgDims = self.model.bgImage.GetDimensions()
        self.ui.qvtkWidget.setMinimumWidth(imgDims[0])
        self.ui.qvtkWidget.setMaximumWidth(imgDims[0])
        self.ui.qvtkWidget.setMinimumHeight(imgDims[1])
        self.ui.qvtkWidget.setMaximumHeight(imgDims[1])
        self.ui.horizontalLayout.addWidget(self.ui.qvtkWidget)
        # Add this render window to the model
        self.model.setRenWin(self.ui.qvtkWidget.GetRenderWindow())
        self.model.renWin = self.ui.qvtkWidget.GetRenderWindow()
        # Replace default interactor style to send messages to controller
        self.iren = self.ui.qvtkWidget.GetRenderWindow().GetInteractor()
        self.iren.SetInteractorStyle(MainViewInteractorStyle(self.mainCtrl))

    def onMasking(self):
        self.mainCtrl.changeMasking(self.masking)

    def onSetCameraParams(self):
        self.mainCtrl.changeAutoCamera(self.autoCamera)

    def onFineRegistration(self):
        self.mainCtrl.register()

    def updateUiFromModel(self):
        self.masking = self.model.masking

    def renderVTK(self):
        self.ui.qvtkWidget.GetRenderWindow().Render()

    def closeEvent(self, event):
        self.mainCtrl.bgUpdater.running = False
        self.mainCtrl.bgUpdater.wait()
        self.mainCtrl.bgUpdater.terminate()
        self.mainCtrl.bgUpdater.wait()
        self.iren.TerminateApp()
        QtGui.qApp.processEvents()
        super(MainView, self).closeEvent(event)

    def show(self):
        """ This adds to the default show function to initialize the interactor
            after MainView is shown to avoid a segfault caused if qvtkWidget's
            interactor is initialied before the window is shown.
        """
        super(MainView, self).show()
        self.iren.Initialize()