1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113
|
from vtkmodules.test import Testing as vtkTesting
import sys
class TestDynamic(vtkTesting.vtkTest):
def test(self):
from vtkmodules.vtkSerializationManager import vtkObjectManager
from vtkmodules.vtkFiltersHybrid import vtkPolyDataSilhouette
from vtkmodules.vtkFiltersSources import vtkConeSource
from vtkmodules.vtkRenderingCore import vtkActor, vtkPolyDataMapper, vtkRenderer, vtkRenderWindow, vtkRenderWindowInteractor
ser_om = vtkObjectManager()
ser_om.Initialize()
deser_om = vtkObjectManager()
deser_om.Initialize()
renderer = vtkRenderer()
renderWindow = vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
cone_source = vtkConeSource()
mapper = vtkPolyDataMapper()
actor = vtkActor()
mapper.SetInputConnection(cone_source.GetOutputPort())
actor.SetMapper(mapper)
renderer.AddActor(actor)
sil = vtkPolyDataSilhouette()
sil.SetInputConnection(cone_source.GetOutputPort())
sil.SetCamera(renderer.GetActiveCamera())
silmapper = vtkPolyDataMapper()
silmapper.SetInputConnection(sil.GetOutputPort())
silactor = vtkActor()
silactor.GetProperty().SetColor(1, 0, 0)
silactor.GetProperty().SetLineWidth(10)
silactor.SetMapper(silmapper)
renderer.AddActor(silactor)
renderer.ResetCamera()
renderWindow.Render()
rwi = vtkRenderWindowInteractor()
rwi.SetRenderWindow(renderWindow)
renderWindow.Render()
last_mtimes = dict()
fname = ""
def serialize(id_rwi):
ser_om.UpdateStatesFromObjects()
active_ids = ser_om.GetAllDependencies(0)
for vtk_id in active_ids:
vtk_obj = ser_om.GetObjectAtId(vtk_id)
status = dict(ids=[], mtimes=[], hashes=[])
status['ids'] = active_ids
status['mtimes'] = { object_id: ser_om.GetObjectAtId(object_id).GetMTime() for object_id in active_ids }
status['hashes'] = { blob_hash: ser_om.GetBlob(blob_hash) for blob_hash in ser_om.GetBlobHashes(active_ids) }
return status
def deserialize(status: dict):
if not len(status.get('ids')):
return
deser_om.PruneUnusedBlobs()
for object_id in status.get('ids'):
new_mtime = status.get('mtimes').get(object_id)
last_mtime = last_mtimes.get(object_id)
if last_mtime is not None and new_mtime is not None:
if last_mtime < new_mtime:
deser_om.UnRegisterState(object_id)
deser_om.RegisterState(ser_om.GetState(object_id))
elif last_mtime is None:
deser_om.RegisterState(ser_om.GetState(object_id))
last_mtimes.update({object_id: new_mtime})
for hash_text, blob in status.get('hashes').items():
deser_om.RegisterBlob(hash_text, blob)
deser_om.UpdateObjectsFromStates()
active_ids = deser_om.GetAllDependencies(0)
renderWindow = deser_om.GetObjectAtId(id_rwi).GetRenderWindow()
renderWindow.SetPosition(400, 1)
renderWindow.Render()
id_rwi = ser_om.RegisterObject(rwi)
maxRes = 100
for i in range(4, maxRes, 8):
cone_source.SetResolution(i)
renderWindow.Render()
fname = f"output-{i}.vtp"
deserialize(serialize(id_rwi))
for i in range(maxRes - 1, 3, -1):
cone_source.SetResolution(i)
renderWindow.Render()
deserialize(serialize(id_rwi))
if __name__ == "__main__":
vtkTesting.main([(TestDynamic, 'test')])
|