# Basic VTK pipeline

from pylab import *
from vtk import *


# ------- a boilerplate VTK pipeline ---------
#--- Create some LUTs
# (default) red -> blue (lo->hi)LUT
lutRedBlue = vtkLookupTable()
lutRedBlue.Build()

# blue -> red LUT
lutBlueRed = vtkLookupTable()
lutBlueRed.SetHueRange(0.667,0.0)
lutBlueRed.Build()


vtkRen=vtkRenderer()
vtkRenWin=vtkRenderWindow()

# TODO - allow changing window size
global winWidth, winHeight
winWidth = 256
winHeight = 256
vtkRenWin.SetSize(winWidth,winHeight)
im = zeros((winWidth,winHeight,3), typecode=Float)

vtkRenWin.OffScreenRenderingOn()
vtkRenWin.AddRenderer(vtkRen)

vtkRGB = vtkUnsignedCharArray()

"""
def copyVTKImage():
  vtkRenWin.Render()
  vtkRenWin.GetPixelData(0,0,winWidth-1,winHeight-1, 1,vtkRGB)
#  vtkRGB.Squeeze()
  idx=0
  for iy in range(winHeight-1,-1,-1):
    for ix in range(winWidth):
      im[iy,ix,0] = vtkRGB.GetValue(idx) / 255.
      im[iy,ix,1] = vtkRGB.GetValue(idx+1) / 255.
      im[iy,ix,2] = vtkRGB.GetValue(idx+2) / 255.
      idx += 3

def vtkRotX(degs):
  vtkRen.GetActiveCamera().Elevation(degs)

def vtkPerspective(flag):
  if flag > 0:
    vtkRen.GetActiveCamera().ParallelProjectionOff()
  else:
    vtkRen.GetActiveCamera().ParallelProjectionOn()

def vtkWinsize(w,h):
  winWidth = w
  winHeight = h
  im = zeros((winWidth,winHeight,3), typecode=Float)
  vtkRenWin.SetSize(winWidth,winHeight)
"""

