1

Im trying to show a 3d (obj) Model. This works, but when I trying to show it with a loaded UI file it does not work. It only chanch the color of the frame and it give no error back. can somebody help me pleas?

This Code is working bu is not loading an UI file


import sys

from PyQt5.QtCore import pyqtSlot, QObject, QSize, Qt, QUrl
from PyQt5.QtGui import QColor, QQuaternion, QVector3D
from PyQt5.QtWidgets import (QApplication, QCheckBox, QCommandLinkButton,
                             QHBoxLayout, QVBoxLayout, QWidget, QPushButton)
from PyQt5.Qt3DCore import QEntity, QTransform
from PyQt5.Qt3DExtras import (Qt3DWindow, QConeMesh, QCuboidMesh,
                              QCylinderMesh, QFirstPersonCameraController, QPhongMaterial,
                              QPlaneMesh, QSphereMesh, QTorusMesh, QDiffuseMapMaterial)
from PyQt5.Qt3DInput import QInputAspect
from PyQt5.Qt3DRender import QCamera, QTextureImage, QMesh


class RenderableEntity(QEntity):

    def __init__(self, parent=None):
        super(RenderableEntity, self).__init__(parent)

        self.m_mesh = QMesh()
        self.m_transform = QTransform()

        self.addComponent(self.m_mesh)
        self.addComponent(self.m_transform)

    def mesh(self):
        return self.m_mesh

    def transform(self):
        return self.m_transform

class SceneModifier(QObject):

    def __init__(self, rootEntity):
        super(SceneModifier, self).__init__()
        self.m_rootEntity = rootEntity
        sceneRoot = QEntity(self.m_rootEntity)

        chest = RenderableEntity(self.m_rootEntity)
        chest.transform().setScale(0.03)
        chest.mesh().setSource(QUrl.fromLocalFile('../../Documents/programmieren/py/LYX-Launcher-3.00/PlayerSkinny.obj'))
        diffuseMapMaterial = QDiffuseMapMaterial()
        diffuseMapMaterial.setSpecular(QColor.fromRgbF(0.2, 0.2, 0.2, 1.0))
        diffuseMapMaterial.setShininess(2.0)

        chestDiffuseImage = QTextureImage()
        chestDiffuseImage.setSource(QUrl.fromLocalFile('./alex.png'))
        diffuseMapMaterial.diffuse().addTextureImage(chestDiffuseImage)

        chest.addComponent(diffuseMapMaterial)




app = QApplication(sys.argv)

view = Qt3DWindow()
view.defaultFrameGraph().setClearColor(QColor(0x4d4d4f))
container = QWidget.createWindowContainer(view)
screenSize = view.screen().size()
container.setMinimumSize(QSize(200, 100))
container.setMaximumSize(screenSize)

widget = QWidget()
hLayout = QHBoxLayout(widget)
vLayout = QVBoxLayout()
vLayout.setAlignment(Qt.AlignTop)
hLayout.addWidget(container, 1)
hLayout.addLayout(vLayout)

widget.setWindowTitle("Basic shapes")

aspect = QInputAspect()
view.registerAspect(aspect)

# Root entity.
rootEntity = QEntity()

# Camera.
cameraEntity = view.camera()

cameraEntity.lens().setPerspectiveProjection(45.0, 16.0 / 9.0, 0.1, 1000.0)
cameraEntity.setPosition(QVector3D(0.0, 0.0, 100.0))
cameraEntity.setUpVector(QVector3D(0.0, 1.0, 0.0))
cameraEntity.setViewCenter(QVector3D(0.0, 0.0, 0.0))

# For camera controls.
camController = QFirstPersonCameraController(rootEntity)
camController.setCamera(cameraEntity)

# Scene modifier.
modifier = SceneModifier(rootEntity)

# Set root object of the scene.
view.setRootEntity(rootEntity)

# Create control widgets.
info = QCommandLinkButton(text="Qt3D ready-made meshes")
info.setDescription("Qt3D provides several ready-made meshes, like torus, "
                    "cylinder, cone, cube, plane and sphere.")
info.setIconSize(QSize(0,0))

torusCB = QCheckBox(checked=True, text="Torus")
coneCB = QCheckBox(checked=True, text="Cone")
cylinderCB = QCheckBox(checked=True, text="Cylinder")
cuboidCB = QCheckBox(checked=True, text="Cuboid")
planeCB = QCheckBox(checked=True, text="Plane")
sphereCB = QCheckBox(checked=True, text="Sphere")
button = QPushButton('PyQt5 button')
vLayout.addWidget(info)
vLayout.addWidget(torusCB)
vLayout.addWidget(coneCB)
vLayout.addWidget(cylinderCB)
vLayout.addWidget(cuboidCB)
vLayout.addWidget(planeCB)
vLayout.addWidget(sphereCB)
vLayout.addWidget(button)


# Show the window.
widget.show()
widget.resize(1200, 800)
sys.exit(app.exec_())

This code is not working and loading an UI file:



from PyQt5.Qt3DCore import QEntity, QTransform
from PyQt5.Qt3DExtras import QDiffuseMapMaterial, Qt3DWindow, QFirstPersonCameraController
from PyQt5.Qt3DInput import QInputAspect
from PyQt5.Qt3DRender import QMesh, QTextureImage
from PyQt5.QtCore import QTime, QTimer, QObject, QUrl, QSize, Qt
from PyQt5.QtGui import QColor, QVector3D
from PyQt5.QtWidgets import QMainWindow, QApplication, QPushButton, QProgressBar, QLabel, QCheckBox, QWidget, \
    QVBoxLayout, QHBoxLayout
from tqdm import tqdm





from qtpy import uic
import sys, os


#get ui type
from scripts.download_requyet_files import download_files
from scripts.unzipping import ZipFileCustom

uifile_1 = 'assets/UI/GUI_LYX_MAIN.ui'
form_1, base_1 = uic.loadUiType(uifile_1)

class RenderableEntity(QEntity):

    def __init__(self, parent=None):
        super(RenderableEntity, self).__init__(parent)

        self.m_mesh = QMesh()
        self.m_transform = QTransform()

        self.addComponent(self.m_mesh)
        self.addComponent(self.m_transform)

    def mesh(self):
        return self.m_mesh

    def transform(self):
        return self.m_transform

class SceneModifier(QObject):

    def __init__(self, rootEntity):
        super(SceneModifier, self).__init__()
        self.m_rootEntity = rootEntity
        sceneRoot = QEntity(self.m_rootEntity)

        chest = RenderableEntity(sceneRoot)
        chest.transform().setScale(0.03)
        chest.mesh().setSource(QUrl.fromLocalFile('PlayerSkinny.obj'))
        diffuseMapMaterial = QDiffuseMapMaterial()
        diffuseMapMaterial.setSpecular(QColor.fromRgbF(0.2, 0.2, 0.2, 1.0))
        diffuseMapMaterial.setShininess(2.0)

        chestDiffuseImage = QTextureImage()
        chestDiffuseImage.setSource(QUrl.fromLocalFile('alex.png'))
        diffuseMapMaterial.diffuse().addTextureImage(chestDiffuseImage)

        chest.addComponent(diffuseMapMaterial)
class UI(form_1, base_1):

    def __init__(self):
        super(UI, self).__init__()
        uic.loadUi("assets/UI/GUI_LYX_MAIN.ui", self)
        self.Launch_button = self.findChild(QPushButton, "launch_button")
        self.Login_button = self.findChild(QPushButton, "ChangeAccount")
        self.Launch_button.clicked.connect(self.run)
        self.Login_button.clicked.connect(self.show_login_screen)
        self.progressbar = self.findChild(QProgressBar, "Progressbar")

        self.offline_mode = self.findChild(QCheckBox, "offline_mod")
        self.d3wighet = self.findChild(QWidget, "d3wig")


        rootEntity = QEntity()







        view = Qt3DWindow()
        view.defaultFrameGraph().setClearColor(QColor(0x4d4d4f))
        container = self.d3wighet.createWindowContainer(view)
        screenSize = view.screen().size()
        container.setMinimumSize(QSize(10, 650))
        container.setMaximumSize(screenSize)
        hLayout = QHBoxLayout(self.d3wighet)
        vLayout = QVBoxLayout(self.d3wighet)
        vLayout.setAlignment(Qt.AlignTop)
        hLayout.addWidget(container, 1)
        hLayout.addLayout(vLayout)
        aspect = QInputAspect()
        view.registerAspect(aspect)

        # Root entity.


        # Camera.
        cameraEntity = view.camera()

        cameraEntity.lens().setPerspectiveProjection(45.0, 16.0 / 9.0, 0.1, 1000.0)
        cameraEntity.setPosition(QVector3D(0.0, 0.0, 20.0))
        cameraEntity.setUpVector(QVector3D(0.0, 1.0, 0.0))
        cameraEntity.setViewCenter(QVector3D(0.0, 0.0, 0.0))

        # For camera controls.
        camController = QFirstPersonCameraController(rootEntity)
        camController.setCamera(cameraEntity)

        # Set root object of the scene.
        view.setRootEntity(rootEntity)



if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = UI()
    ex.show()
    sys.exit(app.exec_())

It tryed it for month but in does not work Pleas help ME!!!

try try
  • 11
  • 2

0 Answers0