Variogram Object Script

This script demonstrates all the methods and properties in the Variogram object. If you wish to run the script, open Scripter and then open VariogramObject.bas from the Surfer Samples folder.

 

' VariogramObject.bas demonstrates the properties and methods

' of the VariogramObject.

Sub Main

Debug.Print "----- VariogramObject.bas - ";Time;" -----"

 

'Get existing Surfer instance, or create a new one If none exists.

On Error Resume Next 'Turn off error reporting.

Set SurferApp = GetObject(,"Surfer.Application")

If Err.Number<>0 Then

Set SurferApp = CreateObject("Surfer.Application")

SurferApp.Documents.Add(srfDocPlot)

End If

On Error GoTo 0 'Turn on error reporting.

 

SurferApp.Visible = True

SurferApp.WindowState = srfWindowStateNormal

SurferApp.Width = 600

SurferApp.Height = 400

 

Debug.Print "Surfer ";SurferApp.Version

 

Set plotdoc1 = SurferApp.Documents(1)

If plotdoc1.Type <> srfDocPlot Then _

Set plotdoc1 = SurferApp.Documents.Add

 

'Caption changes when add new doc.

SurferApp.Caption = "Surfer "+SurferApp.Version

AppActivate "Surfer "+SurferApp.Version

 

With plotdoc1.PageSetup

.Orientation = srfLandscape

.Height = 8.5

.Width = 11

End With

SurferApp.Windows(1).Zoom(srfZoomPage)

 

Set plotwin1 = SurferApp.Windows(1)

Set shapes1 = plotdoc1.Shapes

 

path1 = SurferApp.Path+"\samples\"

 

shapes1.SelectAll

plotdoc1.Selection.Delete

 

'=======================

'Create a new variogram.

'=======================

Debug.Print "AddVariogram"

shapes1.AddText(1,0.75,"AddVariogram").Font.Size = 40

Set vario1 = shapes1.AddVariogram(path1+"demogrid.dat")

Wait 1

 

'==========================

'VariogramObject Properties

'==========================

'----------------------------------------------

'The Axes Property returns the Axes Collection.

'----------------------------------------------

Debug.Print " Variogram Axes"

shapes1("Text").Text = "Variogram Axes"

For Each axs In vario1.Axes

axs.AxisLine.ForeColorRGBA.Color = srfColorBabyBlue

Wait 1

Next axs

 

'----------------------------------------------

'The EstimatorType Property returns or sets the

' variogram estimatin method. It returns a

' srfVarioEstimator enumeration value.

'-----------------------------------------------

For i = srfVarioVariogram To srfVarioAutocorrelation

vario1.EstimatorType = i

'See varioestimatorname() function at end of script.

Debug.Print " EstimatorType:";i;":";varioestimatorname(i)

shapes1("Text").Text = "Estimatortype:"+Str(i)+":"+ _

Str(varioestimatorname(i))

Wait 1

Next i

 

vario1.EstimatorType = srfVarioVariogram

'See varioestimatorname() function at end of script.

Debug.Print " EstimatorType:"; "srfVarioVariogram"

shapes1("Text").Text = "Estimatortype: srfVarioVariogram"

Wait 1

 

'-----------------------------------------------------------

'The ExperimentalLine Property returns the properties of the

' line connecting the points in the experimental variogram.

' It returns a LineFormat Object.

'-----------------------------------------------------------

Debug.Print "ExperimentalLine"

shapes1("Text").Text = "ExperimentalLine Color"

vario1.ExperimentalLine.ForeColorRGBA.Color = srfColorRed

Wait 1

 

'-----------------------------------------------------------------

'The LagDirection Property returns or sets the variogram lag

' direction angle in degrees. It returns a double.

' 0 degrees = +X direction, 90 degrees = +Y direction.

' It is only meaningful with a LagTolerance less than 90 degrees.

' Refer to the Experimental Tab of the Variogram Properties

' help topic for more information.

'-----------------------------------------------------------------

Debug.Print "LagDirection:";vario1.LagDirection

shapes1("Text").Text = "LagDirection:"+Str(vario1.LagDirection)

Wait 1

vario1.LagDirection = 60

Debug.Print "LagDirection:";vario1.LagDirection

shapes1("Text").Text = "LagDirection:"+Str(vario1.LagDirection)

Wait 1

 

'---------------------------------------------------------------

'The LagTolerance Property returns or sets the variogram lag

' tolerance in degrees. It returns a double.

'---------------------------------------------------------------

Debug.Print "LagTolerance:"; vario1.LagTolerance

shapes1("Text").Text = "LagTolerance:"+Str(vario1.LagTolerance)

Wait 1

vario1.LagTolerance = 30

Debug.Print "LagTolerance:";vario1.LagTolerance

shapes1("Text").Text = "LagTolerance:"+Str(vario1.LagTolerance)

Wait 1

 

'---------------------------------------------------------------

'The LagWidth Property returns or sets the variogram lag

' width in XY data units. It returns a double.

'---------------------------------------------------------------

Debug.Print "LagWidth:"; vario1.LagWidth

shapes1("Text").Text = "LagWidth:"+Str(vario1.LagWidth)

Wait 1

vario1.LagWidth = 0.1

Debug.Print "LagWidth:";vario1.LagWidth

shapes1("Text").Text = "LagWidth:"+Str(vario1.LagWidth)

Wait 1

 

'---------------------------------------------------------------

'The MaxLagDistance Property returns or sets the variogram

' maximum lag distance in XY data units. It returns a double.

'---------------------------------------------------------------

Debug.Print "MaxLagDistance:"; vario1.MaxLagDistance

shapes1("Text").Text = "MaxLagDistance:"+Str(vario1.MaxLagDistance)

Wait 1

vario1.MaxLagDistance = 4.0

Debug.Print "MaxLagDistance:";vario1.MaxLagDistance

shapes1("Text").Text = "MaxLagDistance:"+Str(vario1.MaxLagDistance)

Wait 1

 

'----------------------------------------------------------

'The Model Property returns or sets the array of variogram

' component objects. It returns a variant array.

'----------------------------------------------------------

Debug.Print "Variogram Model"

shapes1("Text").Text = "Variogram Model"

Dim variocomponents() As Object

variocomponents = vario1.Model

'List current model components.

For i = LBound(variocomponents) To UBound(variocomponents)

Debug.Print " Component";i;" Type:"; variocomponents(i).Type; " "; _

variocomponentname(variocomponents(i).Type) 'See functions below.

Debug.Print " Scale or Nugget Error Variance:"; _

variocomponents(i).Param1

Debug.Print " Slope, Length, or Nugget Micro Variance:"; _

variocomponents(i).Param2

Debug.Print " Anisotropy Ratio & Angle:"; _

variocomponents(i).AnisotropyRatio; _

variocomponents(i).AnisotropyAngle

Next i

 

'Change model components.

Debug.Print "Change Variogram Model Components"

shapes1("Text").Text = "Change Variogram Model Components"

 

Set variocomponents(0) = SurferApp.NewVarioComponent(srfVarNugget,10,0)

Set variocomponents(1) = SurferApp.NewVarioComponent(srfVarGaussian,250,1.5)

vario1.Model = variocomponents

 

Wait 1

 

'---------------------------------------------------------

'The ModelLine Property returns the properties of the line

' in the variogram model. It returns a LineFormat Object.

'---------------------------------------------------------

Debug.Print "ModelLine"

shapes1("Text").Text = "ModelLine"

vario1.ModelLine.ForeColorRGBA.Color = srfColorGreen

Wait 1

 

'-----------------------------------------------------------

'The NumLags Property returns or sets the number of lags in

' the experimental variogram. It returns an integer.

'-----------------------------------------------------------

Debug.Print "NumLags:"; vario1.NumLags

shapes1("Text").Text = "NumLags"+Str(vario1.NumLags)

Wait 1

vario1.NumLags = 30

Debug.Print "NumLags:"; vario1.NumLags

shapes1("Text").Text = "NumLags"+Str(vario1.NumLags)

Wait 1

 

'----------------------------------------------------------

'The ShowPairs Property returns or sets the display of the

' number of pairs used for each point in the experimental

' variogram. It returns a Boolean.

'----------------------------------------------------------

Debug.Print "ShowPairs"

shapes1("Text").Text = "Show Number of Pairs?"+vario1.ShowPairs

Wait 1

vario1.ShowPairs = True

shapes1("Text").Text = "Show Number of Pairs?"+vario1.ShowPairs

Wait 1

 

'----------------------------------------------------------

'The PairsFont Property returns the font properties for the

' number of pairs displayed by each point in the

' experimental variogram. It returns a FontFormat Object.

'----------------------------------------------------------

Debug.Print "PairsFont";vario1.PairsFont.Face

shapes1("Text").Text = "PairsFont:"+ vario1.PairsFont.Face

Wait 1

vario1.PairsFont.Face = "Times New Roman"

Debug.Print "PairsFont";vario1.PairsFont.Face

shapes1("Text").Text = "PairsFont:"+ vario1.PairsFont.Face

 

'-----------------------------------------------------------------

'The ShowExperimental Property returns or sets the display of the

' line in the experimental variogram. It returns a Boolean.

'-----------------------------------------------------------------

Debug.Print "ShowExperimental? ";vario1.ShowExperimental

shapes1("Text").Text = "ShowExperimental? "+ vario1.ShowExperimental

Wait 1

vario1.ShowExperimental = False 'Turn off line.

Debug.Print "ShowExperimental? ";vario1.ShowExperimental

shapes1("Text").Text = "ShowExperimental? "+ vario1.ShowExperimental

Wait 1

vario1.ShowExperimental = True 'Turn line on.

 

'---------------------------------------------------------------

'The ShowModel Property returns or sets the display of the model

' line in the variogram. It returns a Boolean.

'---------------------------------------------------------------

Debug.Print "ShowModel? ";vario1.ShowModel

shapes1("Text").Text = "ShowModel? "+ vario1.ShowModel

Wait 1

vario1.ShowModel = False 'Turn off line.

Debug.Print "ShowModel? ";vario1.ShowModel

shapes1("Text").Text = "ShowModel? "+ vario1.ShowModel

Wait 1

vario1.ShowModel = True 'Turn line on.

 

'--------------------------------------------------------------

'The TitleFont returns the font properties of the variogram

' subtitle, which displays the angle and tolerance. It

' returns a FontFormat Object.

'--------------------------------------------------------------

Debug.Print "TitleFont Face: ";vario1.TitleFont.Face

shapes1("Text").Text = "TitleFont Face: "+vario1.TitleFont.Face

Wait 1

vario1.TitleFont.Size = 25

Debug.Print "TitleFont Size: ";vario1.TitleFont.Size

shapes1("Text").Text = "TitleFont Size: "+vario1.TitleFont.Size

Wait 1

 

'--------------------------------------------------------------

'The SubTitleFont returns the font properties of the variogram

' subtitle, which displays the angle and tolerance. It

' returns a FontFormat Object.

'--------------------------------------------------------------

Debug.Print "SubTitleFont Face: ";vario1.SubTitleFont.Face

shapes1("Text").Text = "SubTitleFont Face: "+vario1.SubTitleFont.Face

Wait 1

vario1.SubTitleFont.Size = 25

Debug.Print "SubTitleFont Size: ";vario1.SubTitleFont.Size

shapes1("Text").Text = "SubTitleFont Size: "+vario1.SubTitleFont.Size

Wait 1

 

'----------------------------------------------------------------

'The ShowSubTitle Property returns or sets the display of the

' variogram subtitle, which displays the direction and tolerance.

' It returns a Boolean.

'----------------------------------------------------------------

Debug.Print "ShowSubtitle? ";vario1.ShowSubTitle

shapes1("Text").Text = "ShowSubtitle? "+ vario1.ShowSubTitle

Wait 1

vario1.ShowSubTitle = False 'Turn off subtitle.

Debug.Print "ShowSubtitle? ";vario1.ShowSubTitle

shapes1("Text").Text = "ShowSubtitle? "+ vario1.ShowSubTitle

Wait 1

vario1.ShowSubTitle = True 'Turn subtitle on.

 

'--------------------------------------------------------------

'The ShowSymbols Property returns or sets the display of the

' symbols in the experimental variogram. It returns a Boolean.

' If ShowPairs is True, they remain visible even when

' ShowSymbols is False.

'--------------------------------------------------------------

Debug.Print "ShowSymbols? ";vario1.ShowSymbols

shapes1("Text").Text = "ShowSymbols? "+vario1.ShowSymbols

Wait 1

vario1.ShowSymbols = False 'Turn symbols off

Debug.Print "ShowSymbols? ";vario1.ShowSymbols

shapes1("Text").Text = "ShowSymbols? "+vario1.ShowSymbols

Wait 1

vario1.ShowSymbols = True 'Turn symbols on.

 

'-------------------------------------------------------------

'The Symbol Property returns a MarkerFormat Object containing

' the properties of the symbols on the experiemental

' variogram.

'-------------------------------------------------------------

Debug.Print "Symbol Index: ";vario1.Symbol.Index

shapes1("Text").Text = "Symbol Index: "+vario1.Symbol.Index

Wait 1

vario1.Symbol.Index = 0

Debug.Print "Symbol Index: ";vario1.Symbol.Index

shapes1("Text").Text = "Symbol Index: "+vario1.Symbol.Index

Wait 1

 

'-------------------------------------------------------------

'The ShowVariance Property returns or sets the display of the

' variance line, a dashed horizontal line by default. It

' returns a Boolean.

'-------------------------------------------------------------

Debug.Print "ShowVariance? ";vario1.ShowVariance

shapes1("Text").Text = "ShowSymbols? "+vario1.ShowVariance

Wait 1

vario1.ShowVariance = True 'Turn variance line on.

Debug.Print "ShowVariance? ";vario1.ShowVariance

shapes1("Text").Text = "ShowVariance? "+vario1.ShowVariance

Wait 1

 

'-----------------------------------------------------------

'The VarianceLine Property returns a LineFormat Object with

' the properties of the variance line.

'-----------------------------------------------------------

Debug.Print "VarianceLine Style: ";vario1.VarianceLine.Style

shapes1("Text").Text = "VarianceLine Style: " + _

vario1.VarianceLine.Style

Wait 1

vario1.VarianceLine.Style = "Solid"

Debug.Print "VarianceLine Style: ";vario1.VarianceLine.Style

shapes1("Text").Text = "VarianceLine Style: " + _

vario1.VarianceLine.Style

Wait 1

 

'--------------------------------------------------------------

'The VerticalScale Property returns or sets the vertical scale

' of the variogram. It returns a double. Experimental tab of

' Variogram Properties dialog.

'--------------------------------------------------------------

Debug.Print "VerticalScale:"; vario1.VerticalScale

shapes1("Text").Text = "VerticalScale:"+Str(vario1.VerticalScale)

Wait 1

vario1.VerticalScale = vario1.VerticalScale*2

Debug.Print "VerticalScale:"; vario1.VerticalScale

shapes1("Text").Text = "VerticalScale:"+Str(vario1.VerticalScale)

Wait 1

vario1.VerticalScale = vario1.VerticalScale/2

 

'========================

'VariogramObject Methods

'========================

'The AutoFit Method fits the variogram parameters

' to the current model.

'------------------------------------------------

Debug.Print "AutoFit"

shapes1("Text").Text = "AutoFit"

variocomponents = vario1.Model

'List current model components.

For i = LBound(variocomponents) To UBound(variocomponents)

Debug.Print " Component";i;" Type:"; variocomponents(i).Type; " "; _

variocomponentname(variocomponents(i).Type) 'See functions below.

Debug.Print " Scale or Nugget Error Variance:"; _

variocomponents(i).Param1

Debug.Print " Slope, Length, or Nugget Micro Variance:"; _

variocomponents(i).Param2

Debug.Print " Anisotropy Ratio & Angle:"; _

variocomponents(i).AnisotropyRatio; _

variocomponents(i).AnisotropyAngle

Next i

Wait 1

vario1.AutoFit

variocomponents = vario1.Model

Debug.Print "AutoFit values"

For i = LBound(variocomponents) To UBound(variocomponents)

Debug.Print " Component";i;" Type:"; variocomponents(i).Type; " "; _

variocomponentname(variocomponents(i).Type) 'See functions below.

Debug.Print " Scale or Nugget Error Variance:"; _

variocomponents(i).Param1

Debug.Print " Slope, Length, or Nugget Micro Variance:"; _

variocomponents(i).Param2

Debug.Print " Anisotropy Ratio & Angle:"; _

variocomponents(i).AnisotropyRatio; _

variocomponents(i).AnisotropyAngle

Next i

 

'-----------------------------------------------------------------

'The Export Method exports the experimental variogram data points

' to an ASCII DAT file.

' The X coordinates (spearation distance) are in column A,

' the Y coordinates (variogram g(h) are in column B,

' the number of pairs are in column C.

' This method returns a Boolean.

'-----------------------------------------------------------------

Debug.Print "Export to vario.dat"

shapes1("Text").Text = "Export to vario.dat"

vario1.Export(path1+"vario.dat")

End Sub

 

Function varioestimatorname(x)

ven = Array("0", _

"srfVarioVariogram", _

"srfVarioStdVariogram", _

"srfVarioAutocovariance", _

"srfVarioAutocorrelation")

varioestimatorname = ven(x)

End Function

 

Function variocomponentname(x)

vcn = Array("0", _

"srfVarExponential", _

"srfVarGaussian", _

"srfVarLinear", _

"srfVarLogarithmic", _

"srfVarNugget", _

"srfVarPower", _

"srfVarQuadratic", _

"srfVarRationalQuadratic", _

"srfVarSpherical", _

"srfVarWave")

variocomponentname = vcn(x)

End Function