def testBufferShared(self): """Test the special buffer_shared() check that VTK provides.""" a = bytearray(b'hello') self.assertEqual(vtk.buffer_shared(a, a), True) b = bytearray(b'hello') self.assertEqual(vtk.buffer_shared(a, b), False) a = vtk.vtkFloatArray() a.SetNumberOfComponents(3) a.InsertNextTuple((10, 7, 4)) a.InsertNextTuple((85, 8, 2)) b = vtk.vtkFloatArray() b.SetVoidArray(a, 6, True) self.assertEqual(vtk.buffer_shared(a, b), True) c = vtk.vtkFloatArray() c.DeepCopy(a) self.assertEqual(vtk.buffer_shared(a, c), False) if sys.hexversion >= 0x02070000: m = memoryview(a) self.assertEqual(vtk.buffer_shared(a, m), True) if sys.hexversion < 0x03000000: m = buffer(a) self.assertEqual(vtk.buffer_shared(a, m), True)
def __array_finalize__(self, obj): # Copy the VTK array only if the two share data slf = _make_tensor_array_contiguous(self) obj2 = _make_tensor_array_contiguous(obj) self.VTKObject = None try: # This line tells us that they are referring to the same buffer. # Much like two pointers referring to same memory location in C/C++. if buffer_shared(slf, obj2): self.VTKObject = getattr(obj, 'VTKObject', None) except TypeError: pass self.Association = getattr(obj, 'Association', None) self.DataSet = getattr(obj, 'DataSet', None)
def __array_finalize__(self,obj): # Copy the VTK array only if the two share data slf = _make_tensor_array_contiguous(self) obj2 = _make_tensor_array_contiguous(obj) self.VTKObject = None try: # This line tells us that they are referring to the same buffer. # Much like two pointers referring to same memory location in C/C++. if buffer_shared(slf, obj2): self.VTKObject = getattr(obj, 'VTKObject', None) except TypeError: pass self.Association = getattr(obj, 'Association', None) self.DataSet = getattr(obj, 'DataSet', None)