# Amjidanutpan Ramanujam
# CS 6630 
# Project 4 - IsoSurface Rendering 
# amjith.r@gmail.com


############################# Standard VTK stuff #####################

catch {load vtktcl}
set VTK_TCL ".."
set VTK_DATA "../vtkdata"


############################## Read the Head Data######################### 

vtkStructuredPointsReader reader1
	reader1 SetFileName $VTK_DATA/mummy.128.vtk


############################## Look up Table Bone ##############################

vtkLookupTable lut_bone
	lut_bone SetNumberOfColors 256
	lut_bone SetTableRange 0 255

lut_bone SetHueRange 0.0 1.0
lut_bone SetSaturationRange 0.0  0.0
lut_bone SetValueRange 0.0 1.0
lut_bone SetAlphaRange 1.0 1.0
lut_bone Build


############################## Look up Table Skin ##############################

vtkLookupTable lut_skin
	lut_skin SetNumberOfColors 256
	lut_skin SetTableRange 0 255

lut_skin SetHueRange 0.0 0.0
lut_skin SetSaturationRange 0.0  1.0
lut_skin SetValueRange 0.0 1.0
lut_skin SetAlphaRange 0.6 0.6
lut_skin Build

############################### ImageMapToColors Module Bone #################### 

 vtkImageMapToColors iMtC_bone
 	iMtC_bone SetLookupTable lut_bone
 	iMtC_bone SetInput [reader1 GetOutput]


############################## ImageMapToColors Module Skin #################### 

 vtkImageMapToColors iMtC_skin
 	iMtC_skin SetLookupTable lut_skin
 	iMtC_skin SetInput [reader1 GetOutput]


########################### Contour Filter for Head Bone #######################
  
vtkContourFilter contour_bone
	contour_bone SetInput [reader1 GetOutput]
	contour_bone SetNumberOfContours 1
 	contour_bone SetValue 0 110.0


########################### Contour Filter for Head Skin #######################
  
vtkContourFilter contour_skin
	contour_skin SetInput [reader1 GetOutput]
	contour_skin SetNumberOfContours 1
        contour_skin SetValue 0 95.0 
 
############################## Probe Filter for Bone ######################### 

vtkProbeFilter probe_bone
probe_bone SetInput [contour_bone GetOutput]
	probe_bone SetSource [iMtC_bone GetOutput]

############################## Probe Filter for Skin ######################### 

vtkProbeFilter probe_skin
	probe_skin SetInput [contour_skin GetOutput]
	probe_skin SetSource [iMtC_skin GetOutput]
		
############################## PolyData Mapper Bone ############################## 

vtkPolyDataMapper mapper_bone
	mapper_bone SetInput [probe_bone GetOutput]	
        mapper_bone SetLookupTable lut_bone
        mapper_bone SetColorModeToMapScalars



############################## PolyData Mapper Skin ############################## 

vtkPolyDataMapper mapper_skin
	mapper_skin SetInput [probe_skin GetOutput]	
        mapper_skin SetLookupTable lut_skin
        mapper_skin SetColorModeToMapScalars




############################## ColorModeToMap Scalar######################## 

vtkActor actor_bone
	actor_bone SetMapper mapper_bone

vtkActor actor_skin
	actor_skin SetMapper mapper_skin

########################### Actor and Graphics Stuff ###########################

vtkInteractorStyleTrackballCamera style
vtkRenderer ren1
vtkRenderWindow renWin
renWin AddRenderer ren1
renWin SetSize 512 512



# taken from camframe.tcl ####################################################
#
set frame 0

vtkWindowToImageFilter w2if

vtkPNGWriter writer



proc saveFrame {} {
  global frame
  set name [format "frame%03d.png" $frame]
  w2if SetInput renWin
  writer SetInput [w2if GetOutput]
  writer SetFileName $name
  writer Write
  incr frame
  set name [format "frame%03d.png" $frame]
  .save configure -text [format "save %s" $name]
}

proc saveView {} {
  set chan [open "saveView.tcl" w]
  set cam [ren1 GetActiveCamera]
  puts $chan "set cam \[ren1 GetActiveCamera\]"
  puts $chan [format "\$cam SetPosition %s" [$cam GetPosition]]
  puts $chan [format "\$cam SetViewUp %s" [$cam GetViewUp]]
  puts $chan [format "\$cam SetFocalPoint %s" [$cam GetFocalPoint]]
  puts $chan [format "\$cam SetViewAngle %s" [$cam GetViewAngle]]
  puts $chan [format "renWin SetSize %s" [renWin GetSize]]
  puts $chan "ren1 ResetCameraClippingRange"
  close $chan
}

# if a previous run of this program generated the camera information file,
# then read it in now, before the first rendering
if {[file exists "saveView.tcl"]} {
    source "saveView.tcl"
}

button .save -text "Save 'frame000.ppm'" -command saveFrame
button .view -text "Save View" -command saveView
button .quit -text "Quit" -command {exit}

# pack GUI objects ############################################################
#
pack .save .view .quit -side bottom



vtkRenderWindowInteractor iren
iren SetRenderWindow renWin
iren SetInteractorStyle style

ren1 SetBackground 1 1 1
ren1 AddActor actor_bone
ren1 AddActor actor_skin
ren1 ResetCamera
renWin Render

