init
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
"""This module generates support for pickling vtkDataObjects from python.
|
||||
It needs to be imported specifically in order to work:
|
||||
|
||||
>>> import vtkmodules.util.pickle_support
|
||||
|
||||
Once imported however, the pickling of data objects is very straightforward. Here is an
|
||||
example using poly data:
|
||||
|
||||
>>> sphereSrc = vtkSphereSource()
|
||||
>>> sphereSrc.Update()
|
||||
>>> pickled = pickle.dumps(sphereSrc.GetOutput())
|
||||
>>> unpickled = pickle.loads(pickled)
|
||||
>>> print(unpickled)
|
||||
*description of sphere data set*
|
||||
|
||||
The underlying serialization of the vtkDatObjects is based on the marshaling capabilities
|
||||
found in vtkCommunicator. Importing this module adds entries for the most common data
|
||||
objects in the global dispatch table used by pickle. NumPy is required as well since the
|
||||
-serialized data object gets pickled as a numpy array.
|
||||
"""
|
||||
|
||||
try:
|
||||
import copyreg, pickle, numpy
|
||||
except ImportError:
|
||||
raise ImportError("This module depends on the pickle, copyreg, and numpy modules.\
|
||||
Please make sure that it is installed properly.")
|
||||
|
||||
from ..vtkParallelCore import vtkCommunicator
|
||||
from ..vtkCommonCore import vtkCharArray
|
||||
from .. import vtkCommonDataModel
|
||||
|
||||
def unserialize_VTK_data_object(state):
|
||||
"""Takes a state dictionary with entries:
|
||||
- Type : a string with the class name for the data object
|
||||
- Serialized : a numpy array with the serialized data object
|
||||
|
||||
and transforms it into a data object.
|
||||
"""
|
||||
|
||||
if ("Type" not in state.keys()) or ("Serialized" not in state.keys()):
|
||||
raise RuntimeError("State dictionary passed to unpickle does not have Type and/or\
|
||||
Serialized keys.")
|
||||
|
||||
new_data_object = None
|
||||
DataSetClass = None
|
||||
try:
|
||||
DataSetClass = getattr(vtkCommonDataModel, state["Type"])
|
||||
except:
|
||||
raise TypeError("Could not find type " + type_string + " in vtkCommonDataModel module")
|
||||
serialized_data = state["Serialized"]
|
||||
new_data_object = DataSetClass()
|
||||
char_array = vtkCharArray()
|
||||
char_array.SetVoidArray(serialized_data, memoryview(serialized_data).nbytes, 1)
|
||||
if vtkCommunicator.UnMarshalDataObject(char_array, new_data_object) == 0:
|
||||
raise RuntimeError("Marshaling data object failed")
|
||||
return new_data_object
|
||||
|
||||
def serialize_VTK_data_object(data_object):
|
||||
"""Returns a tuple with a reference to the unpickling function and a state dictionary
|
||||
with entries:
|
||||
- Type : a string with the class name for the data object
|
||||
- Serialized : a numpy array with the serialized data object
|
||||
|
||||
This is exactly the state dictionary that unserialize_VTK_data_object expects.
|
||||
"""
|
||||
|
||||
if not data_object.IsA("vtkDataObject"):
|
||||
raise TypeError("Object passed to pickling should be a vtkDataObject")
|
||||
data_object_type = data_object.GetClassName()
|
||||
char_array = vtkCharArray()
|
||||
if vtkCommunicator.MarshalDataObject(data_object, char_array) == 0:
|
||||
raise RuntimeError("UnMarshaling data object failed")
|
||||
return unserialize_VTK_data_object, (
|
||||
{ "Type" : data_object_type,
|
||||
"Serialized" : numpy.frombuffer(char_array, numpy.int8, char_array.GetNumberOfValues()) },)
|
||||
|
||||
|
||||
# Fill in global dispatch table for most vtkDataObject types
|
||||
copyreg.pickle(vtkCommonDataModel.vtkDataSet, serialize_VTK_data_object)
|
||||
|
||||
copyreg.pickle(vtkCommonDataModel.vtkPolyData, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkUnstructuredGrid, serialize_VTK_data_object)
|
||||
|
||||
copyreg.pickle(vtkCommonDataModel.vtkImageData, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkRectilinearGrid, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkStructuredGrid, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkExplicitStructuredGrid, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkStructuredPoints, serialize_VTK_data_object)
|
||||
|
||||
copyreg.pickle(vtkCommonDataModel.vtkUniformGridAMR, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkOverlappingAMR, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkHierarchicalBoxDataSet, serialize_VTK_data_object) # VTK_DEPRECATED_IN_9_5_0
|
||||
copyreg.pickle(vtkCommonDataModel.vtkNonOverlappingAMR, serialize_VTK_data_object)
|
||||
|
||||
copyreg.pickle(vtkCommonDataModel.vtkTable, serialize_VTK_data_object)
|
||||
|
||||
copyreg.pickle(vtkCommonDataModel.vtkTree, serialize_VTK_data_object)
|
||||
|
||||
copyreg.pickle(vtkCommonDataModel.vtkCompositeDataSet, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkDataObjectTree, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkMultiBlockDataSet, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkPartitionedDataSet, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkPartitionedDataSetCollection, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkMultiPieceDataSet, serialize_VTK_data_object)
|
||||
|
||||
copyreg.pickle(vtkCommonDataModel.vtkDirectedGraph, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkUndirectedGraph, serialize_VTK_data_object)
|
||||
copyreg.pickle(vtkCommonDataModel.vtkMolecule, serialize_VTK_data_object)
|
||||
Reference in New Issue
Block a user