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."""
|
"""Initialize pygfx with Qt widget."""
|
||||||
try:
|
try:
|
||||||
import pygfx as gfx
|
import pygfx as gfx
|
||||||
from rendercanvas.qt import RenderCanvas
|
from rendercanvas.qt import RenderWidget
|
||||||
from PySide6.QtWidgets import QVBoxLayout
|
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._renderer = gfx.renderers.WgpuRenderer(self._canvas)
|
||||||
self._scene = gfx.Scene()
|
self._scene = gfx.Scene()
|
||||||
|
|
||||||
@@ -112,6 +112,8 @@ class PygfxRenderer(Renderer):
|
|||||||
layout.setContentsMargins(0, 0, 0, 0)
|
layout.setContentsMargins(0, 0, 0, 0)
|
||||||
layout.addWidget(self._canvas)
|
layout.addWidget(self._canvas)
|
||||||
|
|
||||||
|
self._canvas.request_draw(self._animate)
|
||||||
|
|
||||||
self._setup_picking()
|
self._setup_picking()
|
||||||
self._initialized = True
|
self._initialized = True
|
||||||
|
|
||||||
@@ -124,6 +126,11 @@ class PygfxRenderer(Renderer):
|
|||||||
traceback.print_exc()
|
traceback.print_exc()
|
||||||
return False
|
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:
|
def _setup_lighting(self) -> None:
|
||||||
"""Setup scene lighting."""
|
"""Setup scene lighting."""
|
||||||
import pygfx as gfx
|
import pygfx as gfx
|
||||||
@@ -394,7 +401,6 @@ class PygfxRenderer(Renderer):
|
|||||||
def render(self) -> None:
|
def render(self) -> None:
|
||||||
"""Trigger a render."""
|
"""Trigger a render."""
|
||||||
if self._initialized:
|
if self._initialized:
|
||||||
self._renderer.render(self._scene, self._camera)
|
|
||||||
self._canvas.request_draw()
|
self._canvas.request_draw()
|
||||||
|
|
||||||
def on_pick(self, callback: Callable[[Any], None]) -> None:
|
def on_pick(self, callback: Callable[[Any], None]) -> None:
|
||||||
|
|||||||
Reference in New Issue
Block a user