'displacer v0.1
'adrian@mill.co.uk

'-----------------------------------------------------
' open an image
'-----------------------------------------------------
	
dim oFileBrowser  
set oFileBrowser = XSIUIToolkit.FileBrowser  

oFileBrowser.DialogTitle = "Select an image for displacement"  
oFileBrowser.InitialDirectory = ActiveProject.Path
oFileBrowser.Filter = "Image Files(*.bmp;*.pic;*.jpg;*.tiff;*.map)|*.bmp;*.pic;*.jpg;*.tiff;*.map||"  
 
oFileBrowser.ShowOpen  
 
If oFileBrowser.FilePathName <> "" Then  
	logmessage "User selected " & oFileBrowser.FilePathName  
Else  
	logmessage "User pressed cancel"
End If  
      
AddImageSource oFileBrowser.FilePathName , "DispSource"
SelectObj "Sources.DispSource"  
set oImageSource = selection(0)  
 
'-----------------------------------------------------
' find resolution of the clip 
'-----------------------------------------------------

oXres = GetValue(oImageSource &".XRes") 
oYres = GetValue(oImageSource &".YRes") 

AddImageClip "Sources.DispSource" , "DispClip"

SelectObj "Clips.DispClip"  
Set oImageClip = selection(0)  

Set oImage = oImageClip.GetImage 

'-----------------------------------------------------
' create grid
'-----------------------------------------------------


Dim oSubdivisions
oDiv = InputBox("How many divisions for the grid?" , "TELL ME!!!!!" ) 



set oRoot = application.activeproject.activescene.root  
set oObj = oRoot.addgeometry( "grid", "NurbsSurface" , "Dispgrid" )  
set oGeometry = oObj.activeprimitive.geometry  

SetValue "Dispgrid.grid.ulength", 100
SetValue "Dispgrid.grid.vlength", 100
SetValue "Dispgrid.surfmsh.geom.subdivv", oDiv
SetValue "Dispgrid.surfmsh.geom.subdivu", oDiv
FreezeObj


oXdiv = oXres/oDiv
oYdiv = oYres/oDiv


SelectObj "Dispgrid"
set oObj = selection (0)
set oGeometry = oObj.activeprimitive.geometry  
			
'-----------------------------------------------------
' displace the grid...		
'-----------------------------------------------------
			
for x=0 to oDiv-1
		a = x * oXdiv

		for y=0 to oDiv-1
					b = y * oYdiv
			
					set oPixelColor = oImage.GetPixel (a , b)
	
					H = oPixelColor.Blue 
   		
					Translate  "Dispgrid.pnt[(" & x & "," & y & ")]", 0, H , 0, siRelative, siView, siObj, siXYZ

			If (y mod 50 = 1) Then
				FreezeObj ("Dispgrid")
			End If
		next
		
	Refresh
	
next	

DeleteObj "Sources.DispSource"

'-----------------------------------------------------
Logmessage "Bye...."