#!/usr/bin/env python

import vtk

print vtk.vtkVersion().GetVTKVersion()

#--------------------------------
Ren1 = vtk.vtkRenderer()
Ren1.SetBackground(0.3, 0.3, 0.3)

RenWin1 = vtk.vtkRenderWindow()
RenWin1.SetSize(1600, 800)
RenWin1.AddRenderer(Ren1)
iren = vtk.vtkRenderWindowInteractor()
iren.SetRenderWindow(RenWin1)

imagestyle = vtk.vtkInteractorStyleImage()
iren.SetInteractorStyle(imagestyle)

#--------------------------------
pvTemp20 = vtk.vtkLookupTable()
pvTemp20.SetNumberOfTableValues(17)
pvTemp20.SetHueRange(0.5, 0)
pvTemp20.SetSaturationRange(1, 1)
pvTemp20.SetValueRange(0.5, 1)
pvTemp20.Build()

#--------------------------------
pvTemp50 = vtk.vtkDataSetReader()
pvTemp50.SetFileName("iso.vtk")

#--------------------------------
pvTemp51 = vtk.vtkCellDataToPointData()
pvTemp51.SetInputConnection(pvTemp50.GetOutputPort())
pvTemp51.SetPassCellData(0)

#--------------------------------
Triangulate = False
pvTemp52 = vtk.vtkTriangleFilter()
pvTemp52.SetInputConnection(pvTemp51.GetOutputPort())

#--------------------------------
pvTemp80 = vtk.vtkBandedPolyDataContourFilter()
pvTemp80.SetInputConnection(pvTemp51.GetOutputPort())
for i,value in enumerate(range(260, 296, 2)):
	pvTemp80.SetValue(i, value)
pvTemp80.SetScalarModeToValue()
pvTemp80.GenerateContourEdgesOn()

pvTemp81 = vtk.vtkPolyDataMapper()
pvTemp81.SetInputConnection(pvTemp80.GetOutputPort())
pvTemp81.SetScalarRange(260, 296)
pvTemp81.SetLookupTable(pvTemp20)
pvTemp81.SetScalarModeToUseCellData()

pvTemp82 = vtk.vtkActor()
pvTemp82.SetMapper(pvTemp81)
pvTemp82.GetProperty().SetRepresentationToSurface()
pvTemp82.GetProperty().EdgeVisibilityOn()
pvTemp82.GetProperty().SetEdgeColor(0.5, 0.5, 0.5)
Ren1.AddActor(pvTemp82)

#--------------------------------
pvTemp90 = vtk.vtkPolyDataMapper()
pvTemp90.SetInputData(pvTemp80.GetContourEdgesOutput())
pvTemp91 = vtk.vtkActor()
pvTemp91.SetMapper(pvTemp90)
pvTemp91.GetProperty().SetLineWidth(2)
pvTemp91.GetProperty().SetColor(0., 0., 0.)
Ren1.AddActor(pvTemp91)

#--------------------------------
def Keypress(obj, event):
	global Triangulate
	key=obj.GetKeyCode()
	if key == "u" or key == "U" :
		SavePNG()	
	if key == "t" or key == "T" :
		if not Triangulate: 
			pvTemp80.SetInputConnection(pvTemp52.GetOutputPort())
			Triangulate = True
		else:
			pvTemp80.SetInputConnection(pvTemp51.GetOutputPort())
			Triangulate = False 
		RenWin1.Render()

def SavePNG():
	global image_num
        w2i = vtk.vtkWindowToImageFilter()
	w2i.SetInput(RenWin1)
	w2i.Update()
	
        filepng='picture_%03d.png' %image_num
	print 'Start writing PNG file', filepng
	pngw = vtk.vtkPNGWriter()
	pngw.SetInputConnection(w2i.GetOutputPort())
	pngw.SetFileName(filepng)
	pngw.Write()
	print 'End writing PNG file'

	image_num=image_num+1

image_num=1
iren.AddObserver("KeyPressEvent", Keypress)
	
#--------------------------------
RenWin1.Render()
Ren1.GetActiveCamera().ParallelProjectionOn()
Ren1.GetActiveCamera().SetParallelScale(30)
RenWin1.Render()

iren.Initialize()
iren.Start()

