Source code for director.vtkNumpy

import vtkAll as vtk
from shallowCopy import shallowCopy
import numpy as np

try:
    from vtk.util import numpy_support
except ImportError:
    from paraview import numpy_support

[docs]def numpyToPolyData(pts, pointData=None, createVertexCells=False): pd = vtk.vtkPolyData() pd.SetPoints(vtk.vtkPoints()) # Makes a deep copy pd.GetPoints().SetData(getVtkFromNumpy(pts.copy())) if pointData is not None: for key, value in pointData.iteritems(): addNumpyToVtk(pd, value.copy(), key) if createVertexCells: cellIds = vtk.vtkIdList() cellIds.SetNumberOfIds(pd.GetNumberOfPoints()) for i in range(pd.GetNumberOfPoints()): cellIds.SetId(i, i) cells = vtk.vtkCellArray() cells.InsertNextCell(cellIds) pd.SetVerts(cells) return pd
[docs]def getNumpyFromVtk(dataObj, arrayName='Points'): if arrayName == 'Points': vtkArray = dataObj.GetPoints().GetData() else: vtkArray = dataObj.GetPointData().GetArray(arrayName) if not vtkArray: raise KeyError('Array not found') return numpy_support.vtk_to_numpy(vtkArray)
[docs]def getVtkPointsFromNumpy(numpyArray): points = vtk.vtkPoints() points.SetData(getVtkFromNumpy(numpyArray)) return points
[docs]def getVtkPolyDataFromNumpyPoints(points): ''' Given an Nx3 array of xyz points Return a new vtkPolyData containing points and vertex cells. If the input points is not float64 it will be converted first. ''' if points.dtype != np.float64: points = points.astype(np.float64) polyData = vtk.vtkPolyData() polyData.SetPoints(getVtkPointsFromNumpy(points)) vtk.vtkPCLConversions.AddVertexCells(polyData) return polyData
[docs]def getVtkFromNumpy(numpyArray): def MakeCallback(numpyArray): def Closure(caller, event): closureArray = numpyArray return Closure vtkArray = numpy_support.numpy_to_vtk(numpyArray) vtkArray.AddObserver('DeleteEvent', MakeCallback(numpyArray)) return vtkArray
[docs]def addNumpyToVtk(dataObj, numpyArray, arrayName): assert dataObj.GetNumberOfPoints() == numpyArray.shape[0] vtkArray = getVtkFromNumpy(numpyArray) vtkArray.SetName(arrayName) dataObj.GetPointData().AddArray(vtkArray)