清除PythonOCC或其他库中的屏幕

2024-07-02 12:35:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发应用软件,在这个软件中我可以渲染三维图形,然后操纵它们,例如,我画了一个立方体,然后我想通过在三维世界中拖动它的顶点来改变立方体的形状。在

{a1}

在进入PythonOCC之前,我试图在OpenGL中做同样的事情,但在OpenGL中,我做不到。在

在OpenGL中,我无法通过屏幕视口的2D坐标精确地获得3D世界的3D坐标。在

后来我发现了一个PythonOCC库,在这个库中很容易通过鼠标光标的二维坐标来获得三维坐标。所以在PythonOCC中,我要做的就是改变立方体的形状,我在跟踪鼠标光标,在mouseMoveEvent上,我把鼠标坐标转换成三维坐标,改变立方体一个顶点的坐标,然后用一组新的顶点坐标来绘制这个立方体。在

但是我不能删除以前的立方体,或者你可以说我不能同时清除屏幕。 我在pythonOCC中尝试过一种方法_display.eraseAll(),但这对我不起作用。在

我怎么才能做到呢?但是你可以在我的qti库中显示任何一个目标。在

下面是我在pythonOCC中实现目标的代码

from __future__ import print_function
import random
import sys
from OCC.Display.backend import load_any_qt_backend, get_qt_modules
load_any_qt_backend()
QtCore, QtGui, QtWidgets, QtOpenGL = get_qt_modules()
from OCC.Core.BRepPrimAPI import BRepPrimAPI_MakeBox

# Code this Below
from QtDisplay import qtViewer3d

class AppFrame(QtWidgets.QMainWindow):
    def __init__(self, *args):
        QtWidgets.QMainWindow.__init__(self, *args)
        self.setWindowTitle(self.tr("qtDisplay3d overpainting example"))
        self.canva = qtViewer3d(self)
        self.canva.InitDriver()
        self.resize(600, 500)
        self.setCentralWidget(self.canva)
        if sys.platform != 'darwin':
            self.menu_bar = self.menuBar()
        else:
            self.menu_bar = QtWidgets.QMenuBar()
        self._menus = {}
        self._menu_methods = {}

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    frame = AppFrame()
    frame.show()
    frame.canva.InitDriver()
    display = frame.canva._display
    frame.canva.InitDriver()
    frame.canva.qApp = app
    frame.raise_()
    app.exec_()

在QtDisplay.pymouse-novic的mouse-novic被稍微修改了一下。在

^{pr2}$

https://www.khanacademy.org/computer-programming/interactive-3d-cube/6436122472742912


Tags: fromimportselfbackenddisplaysys鼠标qt