File: TestSilhouette.py

package info (click to toggle)
paraview 5.13.2%2Bdfsg-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 544,220 kB
  • sloc: cpp: 3,374,605; ansic: 1,332,409; python: 150,381; xml: 122,166; sql: 65,887; sh: 7,317; javascript: 5,262; yacc: 4,417; java: 3,977; perl: 2,363; lex: 1,929; f90: 1,397; makefile: 170; objc: 153; tcl: 59; pascal: 50; fortran: 29
file content (113 lines) | stat: -rw-r--r-- 3,946 bytes parent folder | download
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')])