Create a time-animated model in Surfer from x, y, z1, z2, ... data via automation

To create a time animated model in Surfer each time point will need to be modeled separately and then exported to GIF for use with an online animated GIF creator.  This can be done fairly quickly using a script like the one below which creates a grid, contour map, and GIF for each column in a data file.


If you would find a built in time-animation feature in Surfer helpful with your work, please let us know.

To run this script:

  1. Copy the script below, or download the attached BAS file: GridZCols_ExportGIF_Loop.bas.
  2. In a Windows Explorer window, navigate to C:\Program Files\Golden Software\Surfer.
  3. Double click on Scripter.exe to launch Scripter.
  4. Press Ctrl+A to select all of the existing lines then press DELETE.
  5. If you copied this script, press Ctrl+V to paste it into Scripter. If you downloaded it, click File | Open, select the BAS file from your downloads directory, and click Open.
  6. Update the values in the User-Defined Variables section near the top of the script.
  7. Click Script | Run to run the script. 

' This script loops through z columns in a single data file, gridding each one
' and creating a contour map from the grid, then exporting the grid as a GIF
' to be animated by a third-party program
Sub Main

'Initializes Surfer
	Dim SurferApp, Plot, MapFrame, ContourLayer, Wks, WksRange As Object
	Set SurferApp = CreateObject("Surfer.Application")
	SurferApp.Visible = True

	data_dir = "C:\program files\golden software\surfer 16\samples\"		'directory where the data file is located
	data_file = "Sample1.dat"	'data file name
	grid_dir = "C:\users\leslie-vm\desktop\"		'directory where grids will be saved
	gif_dir = "C:\users\leslie-vm\desktop\"		'directory where gifs will be saved

	numrows = 200		'number of rows in the grid file
	numcols = 200		'number of columns in the grid file
	x = 1		'x column from the data file
	y = 2		'y column from the data file
	z = 3		'z column from the data file

	colormap_min = 40		'minimum data value for the colormap
	colormap_max = 100		'maximum data value for the colormap
	grad = "Rainbow"		'color gradient preset for the colormap
'Opens the data file in Surfer's worksheet and sets the worksheet range to row 1
	Set Wks = SurferApp.Documents.Open(data_dir+data_file)
	Set WksRange = Wks.Rows(1, 1)

'Loops through all of the z columns in the data file
'This assumes columns A and B are x and y, and columns C through the end of the file are z's
	For i=3 To WksRange.ColumnCount

		'Creates a plot window
		Set Plot = SurferApp.Documents.Add

		'Defines output grid file directory & name
		grid_file	= grid_dir + Left(data_file, Len(data_file)-(Len(data_file)-InStrRev(data_file,".")+1) ) + "_zcol"+Str(i)+".grd"

		'Grids the data file
		SurferApp.GridData2(DataFile:= data_dir + data_file, xCol:=1, yCol:=2, zCol:=i, Algorithm:=srfKriging, ShowReport:=False, OutGrid:=grid_file, OutFmt:=srfGridFmtS7)
		Debug.Print "zCol = "+Str(i)

		'Creates a contour map
		Set MapFrame = Plot.Shapes.AddContourMap(GridFileName:=grid_file)
		Set ContourLayer = MapFrame.Overlays(1)

		'Fills contours
		ContourLayer.FillContours = True

		'Assigns a preset to the colormap

		'Sets colormap data limits so all exports use the same color scale
		ContourLayer.FillForegroundColorMap.SetDataLimits (DataMin:=colormap_min, DataMax:=colormap_max)

		'Defines the name of the output GIF file as the data file name with a GIF extension
		export_file	= gif_dir + Left(data_file, Len(data_file)-(Len(data_file)-InStrRev(data_file,".")+1) ) + "_zcol"+Str(i)+ ".gif"

		'Exports to a GIF
		Plot.Export2(FileName:=export_file, FilterID:=gif)
	Next i

'Closes Surfer
End Sub

Related Articles:

Updated November 2021

Was this article helpful?
3 out of 3 found this helpful



Please sign in to leave a comment.