#!/usr/bin/python
# -*- coding:Utf-8 -*-

#----------------------------------------------------------------------------------------------------
#	Visualization Project : 2D Spatial Data
#
# Author : Arthur COSTE
# Creation Date : October 14th, 2012
# Update Date : October 16th, 2012
# Version : 1
# Status : WORKING
#
# Purpose : this code will process a set of input points to convert them into a VTK handleable points 
#
#----------------------------------------------------------------------------------------------------

# loading libraries
import argparse
import vtk
import sys

# read height map given as input 
reader = vtk.vtkPNMReader()
reader.SetFileName(sys.argv[1])
reader.Update()

# create 
geometry = vtk.vtkImageDataGeometryFilter()
geometry.SetInputConnection(reader.GetOutputPort())

warp = vtk.vtkWarpScalar()
warp.SetInputConnection(geometry.GetOutputPort())
warp.SetScaleFactor(0.3)

merge = vtk.vtkMergeFilter()
merge.SetGeometryConnection(warp.GetOutputPort())
merge.SetScalarsConnection(reader.GetOutputPort())

#create mapper
mapper = vtk.vtkDataSetMapper()
mapper.SetInputConnection(merge.GetOutputPort())
mapper.SetScalarRange(0, 255)
mapper.ImmediateModeRenderingOff()

#perform rendering
actor = vtk.vtkActor()
actor.SetMapper(mapper)
actor.GetProperty().SetPointSize(1)
renderer = vtk.vtkRenderer()
renderWindow = vtk.vtkRenderWindow()
renderWindow.AddRenderer(renderer)
renderWindowInteractor = vtk.vtkRenderWindowInteractor()
renderWindowInteractor.SetRenderWindow(renderWindow)
renderer.AddActor(actor)

# modify initial display parameters
renderer.ResetCamera()
renderer.GetActiveCamera().Azimuth(-70)
renderer.GetActiveCamera().Elevation(30)
renderer.GetActiveCamera().SetViewUp(0,0,1)
renderer.SetBackground(0.2, 0.4, 0.6)
renderer.ResetCameraClippingRange()
renderWindow.SetSize(400, 400)

renderWindow.Render()
renderWindowInteractor.Start()
