Last active
July 11, 2024 08:29
-
-
Save notaTeapot/5feea53dccc921ea6af88a4d222e1e2b to your computer and use it in GitHub Desktop.
Open 3d Widget with editing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Partially Working Error on Exit | |
from PySide2 import QtWidgets, QtGui,QtCore | |
import open3d as o3d | |
import win32gui | |
import sys | |
import threading | |
import time | |
class Worker(QtCore.QObject): | |
def run(self,vis): | |
vis.run() | |
class MainWindow(QtWidgets.QMainWindow): | |
def __init__(self): | |
super(MainWindow, self).__init__() | |
widget = QtWidgets.QWidget() | |
layout = QtWidgets.QGridLayout(widget) | |
self.setCentralWidget(widget) | |
file_path = "C:\\test\test.pcd" | |
self.pcd = o3d.io.read_point_cloud(file_path) | |
self.vis = o3d.visualization.VisualizerWithEditing() | |
self.vis.create_window() | |
self.vis.add_geometry(self.pcd) | |
hwnd = win32gui.FindWindowEx(0, 0, None, "Open3D - free view") | |
self.window = QtGui.QWindow.fromWinId(hwnd) | |
self.windowcontainer = self.createWindowContainer(self.window, widget) | |
layout.addWidget(self.windowcontainer, 0, 0) | |
self.thread = QtCore.QThread() | |
self.worker = Worker() | |
self.thread.started.connect(lambda: self.worker.run(self.vis)) | |
self.thread.start() | |
timer = QtCore.QTimer(self) | |
timer.timeout.connect(self.blub) | |
timer.start(100) | |
#print("starting vis") | |
btn = QtWidgets.QPushButton(text="test") | |
btn.clicked.connect(lambda: print("Button pressed!")) | |
layout.addWidget(btn) | |
def blub(self): | |
#Function to keep PySide eventloop running | |
pass | |
def start_vis(self): | |
print("thread start") | |
self.vis.run() | |
print("thread end") | |
def update_vis(self): | |
#self.vis.update_geometry() | |
self.vis.poll_events() | |
self.vis.update_renderer() | |
if __name__ == '__main__': | |
app = QtWidgets.QApplication(sys.argv) | |
form = MainWindow() | |
form.setWindowTitle('o3d Embed') | |
form.setGeometry(100, 100, 600, 500) | |
form.show() | |
sys.exit(app.exec_()) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
I solved it by using open3d.visualization.Visualizer() instead of self.vis = o3d.visualization.VisualizerWithEditing()
VisualizerWithEditing() can only render one geometry at a time even though you succeeded in adding it whereas Visualizer can only render more than one geometry.