init
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
"""
|
||||
vtkImageImportFromArray: a NumPy front-end to vtkImageImport
|
||||
|
||||
Load a python array into a vtk image.
|
||||
To use this class, you must have NumPy installed (http://numpy.scipy.org/)
|
||||
|
||||
Methods:
|
||||
|
||||
SetArray() -- set the numpy array to load
|
||||
Update() -- generate the output
|
||||
GetOutput() -- get the image as vtkImageData
|
||||
GetOutputPort() -- connect to VTK pipeline
|
||||
|
||||
Methods from vtkImageImport:
|
||||
(if you don't set these, sensible defaults will be used)
|
||||
|
||||
SetDataExtent()
|
||||
SetDataSpacing()
|
||||
SetDataOrigin()
|
||||
"""
|
||||
|
||||
from vtkmodules.vtkIOImage import vtkImageImport
|
||||
from vtkmodules.vtkCommonCore import VTK_SIGNED_CHAR
|
||||
from vtkmodules.vtkCommonCore import VTK_UNSIGNED_CHAR
|
||||
from vtkmodules.vtkCommonCore import VTK_SHORT
|
||||
from vtkmodules.vtkCommonCore import VTK_UNSIGNED_SHORT
|
||||
from vtkmodules.vtkCommonCore import VTK_INT
|
||||
from vtkmodules.vtkCommonCore import VTK_UNSIGNED_INT
|
||||
from vtkmodules.vtkCommonCore import VTK_LONG
|
||||
from vtkmodules.vtkCommonCore import VTK_UNSIGNED_LONG
|
||||
from vtkmodules.vtkCommonCore import VTK_FLOAT
|
||||
from vtkmodules.vtkCommonCore import VTK_DOUBLE
|
||||
|
||||
class vtkImageImportFromArray:
|
||||
def __init__(self):
|
||||
self.__import = vtkImageImport()
|
||||
self.__ConvertIntToUnsignedShort = False
|
||||
self.__Array = None
|
||||
|
||||
# type dictionary: note that python doesn't support
|
||||
# unsigned integers properly!
|
||||
__typeDict = {'b':VTK_SIGNED_CHAR, # int8
|
||||
'B':VTK_UNSIGNED_CHAR, # uint8
|
||||
'h':VTK_SHORT, # int16
|
||||
'H':VTK_UNSIGNED_SHORT, # uint16
|
||||
'i':VTK_INT, # int32
|
||||
'I':VTK_UNSIGNED_INT, # uint32
|
||||
'f':VTK_FLOAT, # float32
|
||||
'd':VTK_DOUBLE, # float64
|
||||
'F':VTK_FLOAT, # float32
|
||||
'D':VTK_DOUBLE, # float64
|
||||
}
|
||||
|
||||
__sizeDict = { VTK_SIGNED_CHAR:1,
|
||||
VTK_UNSIGNED_CHAR:1,
|
||||
VTK_SHORT:2,
|
||||
VTK_UNSIGNED_SHORT:2,
|
||||
VTK_INT:4,
|
||||
VTK_UNSIGNED_INT:4,
|
||||
VTK_FLOAT:4,
|
||||
VTK_DOUBLE:8 }
|
||||
|
||||
# convert 'Int32' to 'unsigned short'
|
||||
def SetConvertIntToUnsignedShort(self,yesno):
|
||||
self.__ConvertIntToUnsignedShort = yesno
|
||||
|
||||
def GetConvertIntToUnsignedShort(self):
|
||||
return self.__ConvertIntToUnsignedShort
|
||||
|
||||
def ConvertIntToUnsignedShortOn(self):
|
||||
self.__ConvertIntToUnsignedShort = True
|
||||
|
||||
def ConvertIntToUnsignedShortOff(self):
|
||||
self.__ConvertIntToUnsignedShort = False
|
||||
|
||||
def Update(self):
|
||||
self.__import.Update()
|
||||
|
||||
# get the output
|
||||
def GetOutputPort(self):
|
||||
return self.__import.GetOutputPort()
|
||||
|
||||
# get the output
|
||||
def GetOutput(self):
|
||||
return self.__import.GetOutput()
|
||||
|
||||
# import an array
|
||||
def SetArray(self,imArray):
|
||||
self.__Array = imArray
|
||||
numComponents = 1
|
||||
dim = imArray.shape
|
||||
if len(dim) == 0:
|
||||
dim = (1,1,1)
|
||||
elif len(dim) == 1:
|
||||
dim = (1, 1, dim[0])
|
||||
elif len(dim) == 2:
|
||||
dim = (1, dim[0], dim[1])
|
||||
elif len(dim) == 4:
|
||||
numComponents = dim[3]
|
||||
dim = (dim[0],dim[1],dim[2])
|
||||
|
||||
typecode = imArray.dtype.char
|
||||
|
||||
ar_type = self.__typeDict[typecode]
|
||||
|
||||
complexComponents = 1
|
||||
if (typecode == 'F' or typecode == 'D'):
|
||||
numComponents = numComponents * 2
|
||||
complexComponents = 2
|
||||
|
||||
if (self.__ConvertIntToUnsignedShort and typecode == 'i'):
|
||||
imArray = imArray.astype('h')
|
||||
ar_type = VTK_UNSIGNED_SHORT
|
||||
|
||||
size = len(imArray.flat)*self.__sizeDict[ar_type]*complexComponents
|
||||
self.__import.CopyImportVoidPointer(imArray, size)
|
||||
self.__import.SetDataScalarType(ar_type)
|
||||
self.__import.SetNumberOfScalarComponents(numComponents)
|
||||
extent = self.__import.GetDataExtent()
|
||||
self.__import.SetDataExtent(extent[0],extent[0]+dim[2]-1,
|
||||
extent[2],extent[2]+dim[1]-1,
|
||||
extent[4],extent[4]+dim[0]-1)
|
||||
self.__import.SetWholeExtent(extent[0],extent[0]+dim[2]-1,
|
||||
extent[2],extent[2]+dim[1]-1,
|
||||
extent[4],extent[4]+dim[0]-1)
|
||||
|
||||
def GetArray(self):
|
||||
return self.__Array
|
||||
|
||||
# a whole bunch of methods copied from vtkImageImport
|
||||
|
||||
def SetDataExtent(self,extent):
|
||||
self.__import.SetDataExtent(extent)
|
||||
|
||||
def GetDataExtent(self):
|
||||
return self.__import.GetDataExtent()
|
||||
|
||||
def SetDataSpacing(self,spacing):
|
||||
self.__import.SetDataSpacing(spacing)
|
||||
|
||||
def GetDataSpacing(self):
|
||||
return self.__import.GetDataSpacing()
|
||||
|
||||
def SetDataOrigin(self,origin):
|
||||
self.__import.SetDataOrigin(origin)
|
||||
|
||||
def GetDataOrigin(self):
|
||||
return self.__import.GetDataOrigin()
|
||||
Reference in New Issue
Block a user