LoginSignup
1
1

PythonでUIをつくる【3Dモデルを表示する】

Posted at

Feb-03-2024 15-07-25.gif

必要なライブラリをインストール

pip3 install pyqt5
pip3 install pyqtgraph

PythonでGUIをつくるライブラリや3Dを表示するライブラリはいろいろありますが、今回は
pyqt5(GUI)
pyqtgraph(3D表示)
を使います。

3Dを表示できるウィジェットを表示

画面を出す。

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QLabel
from PyQt5.QtGui import QPixmap
import pyqtgraph.opengl as gl
import numpy as np
from stl import mesh  # numpy-stlを使用
import cv2

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.setWindowTitle("PyQt with 3D Model")
        self.setGeometry(100, 100, 800, 600)

        self.widget = gl.GLViewWidget(self)
        self.widget.setCameraPosition(distance=500)  # カメラの距離を調整
        self.widget.setGeometry(0, 0, 800, 600)
        self.widget.show()

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

スクリーンショット 2024-02-03 15.17.42.png

黒い画面が表示される。

3Dモデルを作ってウィジェットに与える

今回はstlファイルを表示する。

def createModel(self,model_path):
    # STLファイルの読み込みと3Dモデルの作成
    your_mesh = mesh.Mesh.from_file(model_path)  # STLファイルパス
    vertices = np.array(your_mesh.vectors, dtype=np.float32)
    faces = np.arange(vertices.shape[0] * 3, dtype=np.uint32).reshape(vertices.shape[0], 3)
    model = gl.GLMeshItem(vertexes=vertices.reshape(-1, 3), faces=faces, smooth=False, color=(1, 1, 1, 1), shader="shaded")
    
    return model
self.model = self.createModel("cola.stl")
self.widget.addItem(self.model)

これで3Dモデルが表示され、マウスドラッグで回転させられる。

Feb-03-2024 15-07-25.gif

🐣


フリーランスエンジニアです。
AIについて色々記事を書いていますのでよかったらプロフィールを見てみてください。

もし以下のようなご要望をお持ちでしたらお気軽にご相談ください。
AIサービスを開発したい、ビジネスにAIを組み込んで効率化したい、AIを使ったスマホアプリを開発したい、
ARを使ったアプリケーションを作りたい、スマホアプリを作りたいけどどこに相談したらいいかわからない…

いずれも中間コストを省いたリーズナブルな価格でお請けできます。

お仕事のご相談はこちらまで
rockyshikoku@gmail.com

機械学習やAR技術を使ったアプリケーションを作っています。
機械学習/AR関連の情報を発信しています。

X
Medium
GitHub

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1