fix: use RenderWidget and add animation callback for camera controls
- Change from RenderCanvas to RenderWidget for embedded Qt widget - Add _animate() callback for canvas.request_draw() - Update render() to use request_draw() for continuous rendering - This enables OrbitController to work properly with mouse events
This commit is contained in:
@@ -92,10 +92,10 @@ class PygfxRenderer(Renderer):
|
||||
"""Initialize pygfx with Qt widget."""
|
||||
try:
|
||||
import pygfx as gfx
|
||||
from rendercanvas.qt import RenderCanvas
|
||||
from rendercanvas.qt import RenderWidget
|
||||
from PySide6.QtWidgets import QVBoxLayout
|
||||
|
||||
self._canvas = RenderCanvas(parent=parent_widget)
|
||||
self._canvas = RenderWidget(parent=parent_widget)
|
||||
self._renderer = gfx.renderers.WgpuRenderer(self._canvas)
|
||||
self._scene = gfx.Scene()
|
||||
|
||||
@@ -112,6 +112,8 @@ class PygfxRenderer(Renderer):
|
||||
layout.setContentsMargins(0, 0, 0, 0)
|
||||
layout.addWidget(self._canvas)
|
||||
|
||||
self._canvas.request_draw(self._animate)
|
||||
|
||||
self._setup_picking()
|
||||
self._initialized = True
|
||||
|
||||
@@ -124,6 +126,11 @@ class PygfxRenderer(Renderer):
|
||||
traceback.print_exc()
|
||||
return False
|
||||
|
||||
def _animate(self):
|
||||
"""Animation callback for the canvas."""
|
||||
if self._initialized:
|
||||
self._renderer.render(self._scene, self._camera)
|
||||
|
||||
def _setup_lighting(self) -> None:
|
||||
"""Setup scene lighting."""
|
||||
import pygfx as gfx
|
||||
@@ -394,7 +401,6 @@ class PygfxRenderer(Renderer):
|
||||
def render(self) -> None:
|
||||
"""Trigger a render."""
|
||||
if self._initialized:
|
||||
self._renderer.render(self._scene, self._camera)
|
||||
self._canvas.request_draw()
|
||||
|
||||
def on_pick(self, callback: Callable[[Any], None]) -> None:
|
||||
|
||||
Reference in New Issue
Block a user