1818
1919import numpy as np
2020import pyvista
21- from pyvista import Line , Plotter , PolyData , close_all # noqa: F401 # re-exported
21+ from pyvista import (
22+ Line ,
23+ PolyData , # noqa: F401 # re-exported
24+ close_all ,
25+ )
2226from pyvista .plotting .plotter import _ALL_PLOTTERS
2327from pyvistaqt import BackgroundPlotter
2428from vtkmodules .util .numpy_support import numpy_to_vtk
5054from ...fixes import _compare_version
5155from ...surface import _vtk_smooth
5256from ...transforms import _cart_to_sph , _sph_to_cart , apply_trans
53- from ...utils import (
54- _check_option ,
55- _require_version ,
56- _validate_type ,
57- warn ,
58- )
57+ from ...utils import _check_option , _require_version , _validate_type , warn
5958from ._abstract import Figure3D , _AbstractRenderer
6059from ._utils import (
6160 ALLOWED_QUIVER_MODES ,
@@ -156,7 +155,6 @@ def _build(self):
156155 if self .plotter .iren is not None :
157156 self .plotter .iren .initialize ()
158157 _process_events (self .plotter )
159- _process_events (self .plotter )
160158 return self .plotter
161159
162160 def _is_active (self ):
@@ -292,14 +290,10 @@ def _hide_axes(self):
292290 def _update (self ):
293291 for plotter in self ._all_plotters :
294292 # PyVistaQt resolves plotter.update() to QWidget.update(), which only
295- # schedules a repaint, and it makes Plotter.render() asynchronous (the
296- # synchronous one being _render()). So render synchronously to update the
297- # scene, schedule the repaint, then flush it: without the flush the paint
298- # is delivered whenever events happen to be processed next, which can be
299- # long after the scene has changed again.
300- getattr (plotter , "_render" , plotter .render )()
301- plotter .update ()
302- _process_events (plotter )
293+ # schedules a repaint, and it makes Plotter.render() asynchronous. This is
294+ # probably fine for most cases. If you want to synchronously, i.e. wait
295+ # until it has actually gone through, use Plotter._render().
296+ plotter .render ()
303297
304298 def _index_to_loc (self , idx ):
305299 _ncols = self .figure ._ncols
@@ -993,9 +987,9 @@ def _actor(self, mapper=None):
993987 _hide_testing_actor (actor )
994988 return actor
995989
996- def _process_events (self ):
990+ def _process_events (self , level = 0 ):
997991 for plotter in self ._all_plotters :
998- _process_events (plotter )
992+ _process_events (plotter , level = level + 1 )
999993
1000994 def _update_picking_callback (
1001995 self , on_mouse_move , on_button_press , on_button_release , on_pick
@@ -1400,7 +1394,6 @@ def _set_3d_view(
14001394
14011395 if update :
14021396 figure .plotter .update ()
1403- _process_events (figure .plotter )
14041397
14051398
14061399def _set_3d_title (figure , title , size = 16 , * , color = "white" , position = "upper_left" ):
@@ -1412,7 +1405,6 @@ def _set_3d_title(figure, title, size=16, *, color="white", position="upper_left
14121405 name = "title" ,
14131406 )
14141407 figure .plotter .update ()
1415- _process_events (figure .plotter )
14161408 return handle
14171409
14181410
@@ -1422,7 +1414,7 @@ def _check_3d_figure(figure):
14221414
14231415def _clear_3d_figure (figure ):
14241416 figure .plotter .clear () # remove all actors, lights are restored on the next plot
1425- _process_events ( figure .plotter )
1417+ figure .plotter . update ( )
14261418
14271419
14281420def _close_3d_figure (figure ):
@@ -1434,17 +1426,16 @@ def _close_3d_figure(figure):
14341426 # free memory and deregister from the scraper
14351427 plotter .deep_clean () # remove internal references
14361428 _ALL_PLOTTERS .pop (plotter ._id_name , None )
1437- _process_events (plotter )
14381429
14391430
14401431def _take_3d_screenshot (figure , mode = "rgb" , filename = None ):
1441- _process_events ( figure .plotter )
1432+ figure .plotter . _render () # force the render to happen right now
14421433 return figure .plotter .screenshot (
14431434 transparent_background = (mode == "rgba" ), filename = filename
14441435 )
14451436
14461437
1447- def _process_events (plotter ):
1438+ def _process_events (plotter , level = 0 ):
14481439 if hasattr (plotter , "app" ):
14491440 with warnings .catch_warnings (record = True ):
14501441 warnings .filterwarnings ("ignore" , "constrained_layout" )
0 commit comments