|
| 1 | +from vtkmodules.test import Testing as vtkTesting |
| 2 | + |
| 3 | +class TestFilteredUpdateStatesFromObjects(vtkTesting.vtkTest): |
| 4 | + def test(self): |
| 5 | + from vtkmodules.vtkSerializationManager import vtkObjectManager |
| 6 | + from vtkmodules.vtkRenderingCore import vtkRenderWindow, vtkRenderer, vtkRenderWindowInteractor, vtkPolyDataMapper, vtkActor |
| 7 | + from vtkmodules.vtkFiltersSources import vtkSphereSource, vtkConeSource |
| 8 | + # from vtkmodules.vtkCommonCore import vtkLogger |
| 9 | + import json |
| 10 | + |
| 11 | + sphereActor = vtkActor(mapper = (vtkSphereSource() >> vtkPolyDataMapper()).last) |
| 12 | + coneActor = vtkActor(mapper = (vtkConeSource() >> vtkPolyDataMapper()).last) |
| 13 | + |
| 14 | + sphereRenderWindow = vtkRenderWindow() |
| 15 | + sphereRenderer = vtkRenderer() |
| 16 | + sphereRenderWindow.AddRenderer(sphereRenderer) |
| 17 | + sphereRenderer.AddActor(sphereActor) |
| 18 | + |
| 19 | + coneRenderWindow = vtkRenderWindow() |
| 20 | + coneRenderer = vtkRenderer() |
| 21 | + coneRenderWindow.AddRenderer(coneRenderer) |
| 22 | + coneRenderer.AddActor(coneActor) |
| 23 | + |
| 24 | + sphereInteractor = vtkRenderWindowInteractor(render_window = sphereRenderWindow) |
| 25 | + coneInteractor = vtkRenderWindowInteractor(render_window = coneRenderWindow) |
| 26 | + |
| 27 | + sphereInteractor.Render() |
| 28 | + coneInteractor.Render() |
| 29 | + |
| 30 | + manager = vtkObjectManager() |
| 31 | + manager.Initialize() |
| 32 | + |
| 33 | + # manager.SetObjectManagerLogVerbosity(vtkLogger.VERBOSITY_WARNING) |
| 34 | + # manager.serializer.SetSerializerLogVerbosity(vtkLogger.VERBOSITY_WARNING) |
| 35 | + |
| 36 | + sphereRenderWindowId = manager.RegisterObject(sphereRenderWindow) |
| 37 | + coneRenderWindowId = manager.RegisterObject(coneRenderWindow) |
| 38 | + |
| 39 | + manager.UpdateStatesFromObjects() |
| 40 | + |
| 41 | + # Keep track of the property IDs for verification later |
| 42 | + spherePropertyId = manager.GetId(sphereActor.property) |
| 43 | + conePropertyId = manager.GetId(coneActor.property) |
| 44 | + |
| 45 | + sphereActor.property.opacity = 0.5 # Change sphere opacity to see if it gets updated correctly |
| 46 | + manager.UpdateStatesFromObjects([sphereRenderWindowId]) |
| 47 | + self.assertIn("vtk-object-manager-kept-alive", json.loads(manager.GetState(sphereRenderWindowId)), "vtk-object-manager-kept-alive key not found in sphere render window state") |
| 48 | + # verify that the sphere opacity change is reflected in the state |
| 49 | + self.assertEqual(json.loads(manager.GetState(spherePropertyId))['Opacity'], 0.5) |
| 50 | + sphereActor.property.opacity = 1.0 # Change sphere opacity back to original value |
| 51 | + |
| 52 | + coneActor.property.opacity = 0.3 # Change cone opacity to see if it gets updated correctly |
| 53 | + manager.UpdateStatesFromObjects([coneRenderWindowId]) |
| 54 | + self.assertIn("vtk-object-manager-kept-alive", json.loads(manager.GetState(coneRenderWindowId)), "vtk-object-manager-kept-alive key not found in cone render window state") |
| 55 | + # verify that the cone opacity change is reflected in the state |
| 56 | + self.assertEqual(json.loads(manager.GetState(conePropertyId))['Opacity'], 0.3) |
| 57 | + |
| 58 | + # Since we only updated the cone render window, the sphere's opacity should not have changed |
| 59 | + self.assertEqual(json.loads(manager.GetState(spherePropertyId))['Opacity'], 0.5) |
| 60 | + |
| 61 | +if __name__ == "__main__": |
| 62 | + vtkTesting.main([(TestFilteredUpdateStatesFromObjects, 'test')]) |
0 commit comments