Source code for director.geometryencoder

from director import vtkAll as vtk
from director import vtkNumpy as vnp
from director.shallowCopy import shallowCopy
import numpy as np

[docs]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
[docs]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