File: TestLabelMapper.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 (120 lines) | stat: -rw-r--r-- 4,130 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
114
115
116
117
118
119
120
import math

from vtkmodules.test import Testing as vtkPyTesting
from vtkmodules.vtkSerializationManager import vtkObjectManager
from vtkmodules.vtkCommonDataModel import vtkPolyData
from vtkmodules.vtkCommonCore import vtkFloatArray, vtkLogger, vtkStringArray
from vtkmodules.vtkFiltersSources import vtkPolyLineSource
from vtkmodules.vtkFiltersCore import vtkElevationFilter
from vtkmodules.vtkRenderingCore import vtkActor, vtkActor2D, vtkPolyDataMapper, vtkRenderer, vtkRenderWindow, vtkRenderWindowInteractor
from vtkmodules.vtkRenderingLabel import vtkLabelPlacementMapper, vtkPointSetToLabelHierarchy

# Required for vtk factory
import vtkmodules.vtkRenderingContextOpenGL2  # noqa
import vtkmodules.vtkRenderingOpenGL2  # noqa
from vtkmodules.vtkInteractionStyle import vtkInteractorStyleSwitch  # noqa

try:
    import numpy as np
except ImportError:
    print("This test requires numpy!")
    vtkPyTesting.skip()


class TestLabelMapper(vtkPyTesting.vtkTest):

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

    def setUp(self):
        self.id_window = None
        self.client_window = None

        theta = np.linspace(-1 * np.pi, 1 * np.pi, 100)
        z = np.linspace(2, -2, 100)
        r = z**2 + 1
        x = r * np.sin(theta)
        y = r * np.cos(theta)
        points = np.column_stack((x, y, z))

        lineSource = vtkPolyLineSource()
        lineSource.SetNumberOfPoints(len(points))
        labels = vtkStringArray()
        for i, point in enumerate(points):
            lineSource.SetPoint(i, point[0], point[1], point[2])
            labels.InsertNextValue(f"x:{point[0]:.2f} y:{point[1]:.2f} z:{point[2]:.2f}")

        lineSource.Update()
        line = lineSource.GetOutput()
        labels.SetName('labels')
        line.GetPointData().AddArray(labels)

        elev = vtkElevationFilter()
        elev.SetInputData(line)
        mapper = vtkPolyDataMapper()
        mapper.SetInputConnection(elev.GetOutputPort())
        actor = vtkActor()
        actor.GetProperty().SetLineWidth(10)
        actor.GetProperty().SetRenderLinesAsTubes(True)
        actor.SetMapper(mapper)
        renderer = vtkRenderer()
        renderer.AddActor(actor)
        # renderer.SetBackground(1.0, 1.0, 1.0)

        hier = vtkPointSetToLabelHierarchy()
        hier.SetInputData(line)
        hier.SetLabelArrayName('labels')
        hier.Update()

        labelMapper = vtkLabelPlacementMapper()
        labelMapper.SetInputConnection(hier.GetOutputPort())
        labelActor = vtkActor2D()
        labelActor.SetMapper(labelMapper)

        renderer.AddActor(labelActor)

        self.server_window = vtkRenderWindow()
        iren = vtkRenderWindowInteractor()
        self.server_window.SetInteractor(iren)
        self.server_window.AddRenderer(renderer)

        self.server_window.SetMultiSamples(0)
        self.server_window.Render()

    def serialize(self):

        manager = vtkObjectManager()
        manager.Initialize()
        self.id_window = manager.RegisterObject(self.server_window)

        manager.UpdateStatesFromObjects()
        active_ids = manager.GetAllDependencies(0)
        manager.Export("state")

        states = map(manager.GetState, active_ids)
        hash_to_blob_map = {blob_hash: manager.GetBlob(
            blob_hash) for blob_hash in manager.GetBlobHashes(active_ids)}
        return states, hash_to_blob_map

    def deserialize(self, states, hash_to_blob_map):

        manager = vtkObjectManager()
        manager.Initialize()
        for state in states:
            manager.RegisterState(state)
        for hash_text, blob in hash_to_blob_map.items():
            manager.RegisterBlob(hash_text, blob)

        manager.UpdateObjectsFromStates()
        active_ids = manager.GetAllDependencies(0)
        self.client_window = manager.GetObjectAtId(self.id_window)
        self.client_window.Render()

    def test(self):
        self.deserialize(*self.serialize())


if __name__ == "__main__":
    vtkLogger.Init()
    # vtkLogger.SetStderrVerbosity(vtkLogger.VERBOSITY_MAX)
    vtkPyTesting.main([(TestLabelMapper, 'test')])