def __cloneMouseEvent(self, e: QMouseEvent):
     event_type = e.type()
     local_pos = e.localPos()
     button = e.button()
     buttons = e.buttons()
     modifiers = e.modifiers()
     clone = QMouseEvent(event_type, local_pos, button, buttons, modifiers)
     clone.ignore()
     return clone
Exemplo n.º 2
0
 def mouseMoveEvent(self, event: QtGui.QMouseEvent):
     if event.buttons() != QtCore.Qt.LeftButton:
         event.ignore()
         return
     if (sub(event.pos(), self.dragStartPos)
         ).manhattanLength() < QtWidgets.QApplication.startDragDistance():
         event.ignore()
         return
     self.move_me.emit(self)
     mime_data = QtCore.QMimeData()
     mime_data.setObjectName('frame')
     drag = QtGui.QDrag(self)
     drag.setMimeData(mime_data)
     drop_action = drag.exec_(QtCore.Qt.MoveAction)
class FboItem(QQuickFramebufferObject):
    rendererInitialized = Signal()

    def __init__(self):
        logging.debug('FboItem::__init__')
        super().__init__()
        self.__m_vtkFboRenderer = None

        self.__m_lastMouseLeftButton: QMouseEvent = QMouseEvent(
            QEvent.Type.None_, QPointF(0, 0), Qt.NoButton, Qt.NoButton,
            Qt.NoModifier)
        self.__m_lastMouseButton: QMouseEvent = QMouseEvent(
            QEvent.Type.None_, QPointF(0, 0), Qt.NoButton, Qt.NoButton,
            Qt.NoModifier)

        self.__m_lastMouseMove: QMouseEvent = QMouseEvent(
            QEvent.Type.None_, QPointF(0, 0), Qt.NoButton, Qt.NoButton,
            Qt.NoModifier)
        self.__m_lastMouseWheel: QWheelEvent = None

        self.setMirrorVertically(
            True)  # QtQuick and OpenGL have opposite Y-Axis directions
        self.setAcceptedMouseButtons(Qt.RightButton | Qt.LeftButton)

    def createRenderer(self):
        logging.debug('FboItem::createRenderer')
        self.setVtkFboRenderer(FboRenderer())
        return self.__m_vtkFboRenderer

    def setVtkFboRenderer(self, renderer):
        logging.debug('FboItem::setVtkFboRenderer')

        self.__m_vtkFboRenderer = renderer
        self.__m_vtkFboRenderer.renderer.setVtkFboItem(self)

        self.rendererInitialized.emit()

    def isInitialized(self) -> bool:
        return (self.__m_vtkFboRenderer != None)

    # #* Camera related functions

    def wheelEvent(self, e: QWheelEvent):
        print("myMouseWheel in Item...")
        self.__m_lastMouseWheel = self.__cloneMouseWheelEvent(e)
        self.__m_lastMouseWheel.ignore()
        e.accept()
        self.update()

    def mousePressEvent(self, e: QMouseEvent):
        if e.buttons() & (Qt.RightButton | Qt.LeftButton):
            print("mousePressEvent in Item...")
            self.__m_lastMouseButton = self.__cloneMouseEvent(e)
            self.__m_lastMouseButton.ignore()
            e.accept()
            self.update()

    def mouseReleaseEvent(self, e: QMouseEvent):
        print("mouseReleaseEvent in Item...")
        self.__m_lastMouseButton = self.__cloneMouseEvent(e)
        self.__m_lastMouseButton.ignore()
        e.accept()
        self.update()

    def mouseMoveEvent(self, e: QMouseEvent):
        if e.buttons() & (Qt.RightButton | Qt.LeftButton):
            print("mouseMoveEvent in Item...")
            self.__m_lastMouseMove = self.__cloneMouseEvent(e)
            self.__m_lastMouseMove.ignore()
            e.accept()
            self.update()

    def getLastMouseButton(self) -> QMouseEvent:
        return self.__m_lastMouseButton

    def getLastMoveEvent(self) -> QMouseEvent:
        return self.__m_lastMouseMove

    def getLastWheelEvent(self) -> QWheelEvent:
        return self.__m_lastMouseWheel

    def getLastMouseLeftButton(self):
        return self.__m_lastMouseLeftButton

    def resetCamera(self):
        self.__m_vtkFboRenderer.renderer.resetCamera()
        self.update()

    def __cloneMouseEvent(self, e: QMouseEvent):
        event_type = e.type()
        local_pos = e.localPos()
        button = e.button()
        buttons = e.buttons()
        modifiers = e.modifiers()
        clone = QMouseEvent(event_type, local_pos, button, buttons, modifiers)
        clone.ignore()
        return clone

    def __cloneMouseWheelEvent(self, e: QWheelEvent):
        pos = e.pos()
        globalPos = e.globalPos()
        pixelDelta = e.pixelDelta()
        angleDelta = e.angleDelta()
        buttons = e.buttons()
        modifiers = e.modifiers()
        phase = e.phase()
        inverted = e.inverted()
        clone = QWheelEvent(pos, globalPos, pixelDelta, angleDelta, buttons,
                            modifiers, phase, inverted)
        clone.ignore()
        clone.accepted = False
        return clone

    def selectModel(self, x, y):
        self.__m_lastMouseLeftButton = QMouseEvent(QEvent.Type.None_,
                                                   QPointF(x,
                                                           y), Qt.LeftButton,
                                                   Qt.LeftButton,
                                                   Qt.NoModifier)
        self.__m_lastMouseLeftButton.ignore()
        self.update()

    def resetModelSelection(self):
        self.__m_lastMouseLeftButton = QMouseEvent(QEvent.Type.None_,
                                                   QPointF(-1,
                                                           -1), Qt.LeftButton,
                                                   Qt.LeftButton,
                                                   Qt.NoModifier)
        self.__m_lastMouseLeftButton.ignore()
        self.update()

    def addModel(self, fileName):
        self.__m_vtkFboRenderer.addModel(fileName)
        self.update()