Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

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

from director import vtkAll as vtk 

from director import vtkNumpy as vnp 

from director.shallowCopy import shallowCopy 

import numpy as np 

 

def encodePolyData(polyData): 

    '''Given a vtkPolyData, returns a numpy int8 array that contains 

    the serialization of the data.  This array can be passed to the 

    decodePolyData function to construct a new vtkPolyData object from 

    the serialized data.''' 

 

    if not hasattr(vtk, 'vtkCommunicator'): 

        w = vtk.vtkPolyDataWriter() 

        w.WriteToOutputStringOn() 

        w.SetInput(polyData) 

        w.Write() 

        return np.frombuffer(w.GetOutputStdString(), dtype=np.int8) 

 

    charArray = vtk.vtkCharArray() 

    vtk.vtkCommunicator.MarshalDataObject(polyData, charArray) 

    numpyArray = vnp.numpy_support.vtk_to_numpy(charArray) 

    assert numpyArray.dtype == np.int8 

    return numpyArray 

 

def decodePolyData(data): 

    '''Given a numpy int8 array, deserializes the data to construct a new 

    vtkPolyData object and returns the result.''' 

 

    if not hasattr(vtk, 'vtkCommunicator'): 

        r = vtk.vtkPolyDataReader() 

        r.ReadFromInputStringOn() 

        r.SetInputString(str(data.data)) 

        r.Update() 

        return shallowCopy(r.GetOutput()) 

 

    charArray = vnp.getVtkFromNumpy(data) 

    assert isinstance(charArray, vtk.vtkCharArray) 

    polyData = vtk.vtkPolyData() 

    vtk.vtkCommunicator.UnMarshalDataObject(charArray, polyData) 

    return polyData