Animation in the GlobeControl
Animation.vb
' Copyright 2006 ESRI
'
' All rights reserved under the copyright laws of the United States
' and applicable international laws, treaties, and conventions.
'
' You may freely redistribute and use this sample code, with or
' without modification, provided you include the original copyright
' notice and use restrictions.
'
' See the use restrictions.
'
Option Strict Off
Option Explicit On
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS.Analyst3D
Imports ESRI.ArcGIS.GlobeCore
Imports System.Security.Permissions
Friend Class frmGlbCntrl
Inherits System.Windows.Forms.Form
#Region "Windows Form Designer generated code "
Public Sub New()
MyBase.New()
'This call is required by the Windows Form Designer.
InitializeComponent()
End Sub
'Form overrides dispose to clean up the component list.
Protected Overloads Overrides Sub Dispose(ByVal Disposing As Boolean)
'Release COM objects
ESRI.ArcGIS.ADF.COMSupport.AOUninitialize.Shutdown()
If Disposing Then
If Not components Is Nothing Then
components.Dispose()
End If
End If
MyBase.Dispose(Disposing)
End Sub
'Required by the Windows Form Designer
Private components As System.ComponentModel.IContainer
Public WithEvents CmdPlay As System.Windows.Forms.Button
Public WithEvents txtDuration As System.Windows.Forms.TextBox
Public WithEvents TxtFrequency As System.Windows.Forms.TextBox
Public WithEvents OptDuration As System.Windows.Forms.RadioButton
Public WithEvents OptIteration As System.Windows.Forms.RadioButton
Public WithEvents CmdLoad As System.Windows.Forms.Button
Public WithEvents Label1 As System.Windows.Forms.Label
Public WithEvents FrmAnim As System.Windows.Forms.GroupBox
Public WithEvents lblStatus As System.Windows.Forms.Label
'NOTE: The following procedure is required by the Windows Form Designer
'It can be modified using the Windows Form Designer.
'Do not modify it using the code editor.
Friend WithEvents OpenFileDialog1 As System.Windows.Forms.OpenFileDialog
Friend WithEvents AxLicenseControl2 As ESRI.ArcGIS.Controls.AxLicenseControl
Friend WithEvents AxToolbarControl1 As ESRI.ArcGIS.Controls.AxToolbarControl
Friend WithEvents AxGlobeControl1 As ESRI.ArcGIS.Controls.AxGlobeControl
Friend WithEvents AxTOCControl1 As ESRI.ArcGIS.Controls.AxTOCControl
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
Dim resources As System.Resources.ResourceManager = New System.Resources.ResourceManager(GetType(frmGlbCntrl))
Me.FrmAnim = New System.Windows.Forms.GroupBox
Me.CmdPlay = New System.Windows.Forms.Button
Me.txtDuration = New System.Windows.Forms.TextBox
Me.TxtFrequency = New System.Windows.Forms.TextBox
Me.OptDuration = New System.Windows.Forms.RadioButton
Me.OptIteration = New System.Windows.Forms.RadioButton
Me.CmdLoad = New System.Windows.Forms.Button
Me.Label1 = New System.Windows.Forms.Label
Me.lblStatus = New System.Windows.Forms.Label
Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog
Me.AxGlobeControl1 = New ESRI.ArcGIS.Controls.AxGlobeControl
Me.AxLicenseControl2 = New ESRI.ArcGIS.Controls.AxLicenseControl
Me.AxTOCControl1 = New ESRI.ArcGIS.Controls.AxTOCControl
Me.AxToolbarControl1 = New ESRI.ArcGIS.Controls.AxToolbarControl
Me.FrmAnim.SuspendLayout()
CType(Me.AxGlobeControl1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.AxLicenseControl2, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.AxTOCControl1, System.ComponentModel.ISupportInitialize).BeginInit()
CType(Me.AxToolbarControl1, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'FrmAnim
'
Me.FrmAnim.BackColor = System.Drawing.SystemColors.Control
Me.FrmAnim.Controls.Add(Me.CmdPlay)
Me.FrmAnim.Controls.Add(Me.txtDuration)
Me.FrmAnim.Controls.Add(Me.TxtFrequency)
Me.FrmAnim.Controls.Add(Me.OptDuration)
Me.FrmAnim.Controls.Add(Me.OptIteration)
Me.FrmAnim.Controls.Add(Me.CmdLoad)
Me.FrmAnim.Controls.Add(Me.Label1)
Me.FrmAnim.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.FrmAnim.ForeColor = System.Drawing.SystemColors.ControlText
Me.FrmAnim.Location = New System.Drawing.Point(143, 433)
Me.FrmAnim.Name = "FrmAnim"
Me.FrmAnim.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.FrmAnim.Size = New System.Drawing.Size(461, 55)
Me.FrmAnim.TabIndex = 3
Me.FrmAnim.TabStop = False
'
'CmdPlay
'
Me.CmdPlay.BackColor = System.Drawing.SystemColors.Control
Me.CmdPlay.Cursor = System.Windows.Forms.Cursors.Default
Me.CmdPlay.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.CmdPlay.ForeColor = System.Drawing.SystemColors.ControlText
Me.CmdPlay.Location = New System.Drawing.Point(266, 10)
Me.CmdPlay.Name = "CmdPlay"
Me.CmdPlay.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.CmdPlay.Size = New System.Drawing.Size(81, 38)
Me.CmdPlay.TabIndex = 9
Me.CmdPlay.Text = "Play Animation"
'
'txtDuration
'
Me.txtDuration.AcceptsReturn = True
Me.txtDuration.AutoSize = False
Me.txtDuration.BackColor = System.Drawing.SystemColors.Window
Me.txtDuration.Cursor = System.Windows.Forms.Cursors.IBeam
Me.txtDuration.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.txtDuration.ForeColor = System.Drawing.SystemColors.WindowText
Me.txtDuration.Location = New System.Drawing.Point(220, 13)
Me.txtDuration.MaxLength = 0
Me.txtDuration.Name = "txtDuration"
Me.txtDuration.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.txtDuration.Size = New System.Drawing.Size(40, 19)
Me.txtDuration.TabIndex = 8
Me.txtDuration.Text = "10"
'
'TxtFrequency
'
Me.TxtFrequency.AcceptsReturn = True
Me.TxtFrequency.AutoSize = False
Me.TxtFrequency.BackColor = System.Drawing.SystemColors.Window
Me.TxtFrequency.Cursor = System.Windows.Forms.Cursors.IBeam
Me.TxtFrequency.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.TxtFrequency.ForeColor = System.Drawing.SystemColors.WindowText
Me.TxtFrequency.Location = New System.Drawing.Point(400, 13)
Me.TxtFrequency.MaxLength = 0
Me.TxtFrequency.Name = "TxtFrequency"
Me.TxtFrequency.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.TxtFrequency.Size = New System.Drawing.Size(40, 19)
Me.TxtFrequency.TabIndex = 7
Me.TxtFrequency.Text = "2"
'
'OptDuration
'
Me.OptDuration.BackColor = System.Drawing.SystemColors.Control
Me.OptDuration.Checked = True
Me.OptDuration.Cursor = System.Windows.Forms.Cursors.Default
Me.OptDuration.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.OptDuration.ForeColor = System.Drawing.SystemColors.ControlText
Me.OptDuration.Location = New System.Drawing.Point(122, 8)
Me.OptDuration.Name = "OptDuration"
Me.OptDuration.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.OptDuration.Size = New System.Drawing.Size(98, 17)
Me.OptDuration.TabIndex = 6
Me.OptDuration.TabStop = True
Me.OptDuration.Text = "Duration (secs)"
'
'OptIteration
'
Me.OptIteration.BackColor = System.Drawing.SystemColors.Control
Me.OptIteration.Cursor = System.Windows.Forms.Cursors.Default
Me.OptIteration.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.OptIteration.ForeColor = System.Drawing.SystemColors.ControlText
Me.OptIteration.Location = New System.Drawing.Point(122, 22)
Me.OptIteration.Name = "OptIteration"
Me.OptIteration.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.OptIteration.Size = New System.Drawing.Size(94, 19)
Me.OptIteration.TabIndex = 5
Me.OptIteration.TabStop = True
Me.OptIteration.Text = "No. Iterations"
'
'CmdLoad
'
Me.CmdLoad.BackColor = System.Drawing.SystemColors.Control
Me.CmdLoad.Cursor = System.Windows.Forms.Cursors.Default
Me.CmdLoad.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.CmdLoad.ForeColor = System.Drawing.SystemColors.ControlText
Me.CmdLoad.Location = New System.Drawing.Point(9, 10)
Me.CmdLoad.Name = "CmdLoad"
Me.CmdLoad.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.CmdLoad.Size = New System.Drawing.Size(94, 38)
Me.CmdLoad.TabIndex = 4
Me.CmdLoad.Text = "Load Animation File (*.aga)"
'
'Label1
'
Me.Label1.BackColor = System.Drawing.SystemColors.Control
Me.Label1.Cursor = System.Windows.Forms.Cursors.Default
Me.Label1.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Label1.ForeColor = System.Drawing.SystemColors.ControlText
Me.Label1.Location = New System.Drawing.Point(354, 14)
Me.Label1.Name = "Label1"
Me.Label1.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Label1.Size = New System.Drawing.Size(36, 17)
Me.Label1.TabIndex = 10
Me.Label1.Text = "Cycles:"
'
'lblStatus
'
Me.lblStatus.BackColor = System.Drawing.SystemColors.Control
Me.lblStatus.Cursor = System.Windows.Forms.Cursors.Default
Me.lblStatus.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.lblStatus.ForeColor = System.Drawing.SystemColors.ControlText
Me.lblStatus.Location = New System.Drawing.Point(6, 439)
Me.lblStatus.Name = "lblStatus"
Me.lblStatus.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.lblStatus.Size = New System.Drawing.Size(129, 54)
Me.lblStatus.TabIndex = 11
'
'AxGlobeControl1
'
Me.AxGlobeControl1.Location = New System.Drawing.Point(144, 40)
Me.AxGlobeControl1.Name = "AxGlobeControl1"
Me.AxGlobeControl1.OcxState = CType(resources.GetObject("AxGlobeControl1.OcxState"), System.Windows.Forms.AxHost.State)
Me.AxGlobeControl1.Size = New System.Drawing.Size(456, 392)
Me.AxGlobeControl1.TabIndex = 12
'
'AxLicenseControl2
'
Me.AxLicenseControl2.Enabled = True
Me.AxLicenseControl2.Location = New System.Drawing.Point(152, 368)
Me.AxLicenseControl2.Name = "AxLicenseControl2"
Me.AxLicenseControl2.OcxState = CType(resources.GetObject("AxLicenseControl2.OcxState"), System.Windows.Forms.AxHost.State)
Me.AxLicenseControl2.Size = New System.Drawing.Size(200, 50)
Me.AxLicenseControl2.TabIndex = 13
'
'AxTOCControl1
'
Me.AxTOCControl1.Location = New System.Drawing.Point(8, 40)
Me.AxTOCControl1.Name = "AxTOCControl1"
Me.AxTOCControl1.OcxState = CType(resources.GetObject("AxTOCControl1.OcxState"), System.Windows.Forms.AxHost.State)
Me.AxTOCControl1.Size = New System.Drawing.Size(136, 392)
Me.AxTOCControl1.TabIndex = 14
'
'AxToolbarControl1
'
Me.AxToolbarControl1.Location = New System.Drawing.Point(8, 8)
Me.AxToolbarControl1.Name = "AxToolbarControl1"
Me.AxToolbarControl1.OcxState = CType(resources.GetObject("AxToolbarControl1.OcxState"), System.Windows.Forms.AxHost.State)
Me.AxToolbarControl1.Size = New System.Drawing.Size(592, 28)
Me.AxToolbarControl1.TabIndex = 15
'
'frmGlbCntrl
'
Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
Me.BackColor = System.Drawing.SystemColors.Control
Me.ClientSize = New System.Drawing.Size(609, 494)
Me.Controls.Add(Me.AxToolbarControl1)
Me.Controls.Add(Me.AxTOCControl1)
Me.Controls.Add(Me.AxLicenseControl2)
Me.Controls.Add(Me.AxGlobeControl1)
Me.Controls.Add(Me.FrmAnim)
Me.Controls.Add(Me.lblStatus)
Me.Cursor = System.Windows.Forms.Cursors.Default
Me.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte))
Me.Location = New System.Drawing.Point(4, 23)
Me.MaximizeBox = False
Me.Name = "frmGlbCntrl"
Me.RightToLeft = System.Windows.Forms.RightToLeft.No
Me.Text = "GlobeControlAnimation"
Me.FrmAnim.ResumeLayout(False)
CType(Me.AxGlobeControl1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.AxLicenseControl2, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.AxTOCControl1, System.ComponentModel.ISupportInitialize).EndInit()
CType(Me.AxToolbarControl1, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
#End Region
Private m_sAnimFilePath As String
Private Sub CmdLoad_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdLoad.Click
OpenFileDialog1.Title = "Open ArcGlobe Animation File"
OpenFileDialog1.Filter = "ArcGlobe Animation Files (*.aga)|*.aga"
'set ArcGlobeAnimaton path folder as defaultpath...
If Not m_sAnimFilePath = "" Then
OpenFileDialog1.InitialDirectory = m_sAnimFilePath
Else
OpenFileDialog1.InitialDirectory = Application.StartupPath
End If
OpenFileDialog1.ShowDialog()
'if the user selected an animation file
Dim sAnimFilePath As String
sAnimFilePath = OpenFileDialog1.FileName
If sAnimFilePath = "" Then Exit Sub
'sAnimFilePath
Dim pBasicScene As IBasicScene
Dim pGlobe As IGlobe
pGlobe = AxGlobeControl1.Globe
pBasicScene = pglobe
pBasicScene.LoadAnimation(sAnimFilePath)
'if loading of the animation suceeded, enable player controls...
'Enable Animation Player controls...
OptDuration.Enabled = True
OptIteration.Enabled = True
txtDuration.Enabled = True
TxtFrequency.Enabled = True
TxtFrequency.Enabled = True
CmdPlay.Enabled = True
End Sub
Private Sub frmGlbCntrl_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load
' if default Desktop's document exists use as default
Dim sGlbData As String
Dim sRegkeyDesktop As String
Dim sRegkeyEngine As String
'if default Desktop's document exists use as default
sRegkeyDesktop = "SOFTWARE\ESRI\ArcGIS"
sGlbData = routin_ReadRegistry(sRegkeyDesktop)
'if that fails check to see if the coreRntime exists registry...
If sGlbData = "" Then
sRegkeyEngine = "SOFTWARE\ESRI\CoreRuntime"
sGlbData = routin_ReadRegistry(sRegkeyEngine)
End If
If sGlbData <> "" Then
sGlbData = sGlbData & "ArcGlobeData\Default_Document.3dd"
If AxGlobeControl1.Check3dFile(sGlbData) Then AxGlobeControl1.Load3dFile(sGlbData)
End If
Dim pBasicScene As IBasicScene
Dim pGlobe As IGlobe
'check and load if the animation file is present...
m_sAnimFilePath = "..\..\..\..\..\Data\ArcGlobeAnimation\AnimationSample.aga"
If System.IO.File.Exists(m_sAnimFilePath) Then
'Load the sample animation file into the animation file into the doc...
pGlobe = AxGlobeControl1.Globe
pBasicScene = pGlobe
pBasicScene.LoadAnimation(m_sAnimFilePath)
Else
'Disable Animation Player controls...
OptDuration.Enabled = False
OptIteration.Enabled = False
txtDuration.Enabled = False
TxtFrequency.Enabled = False
TxtFrequency.Enabled = False
CmdPlay.Enabled = False
End If
Icon = Nothing
End Sub
Private Sub CmdPlay_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles CmdPlay.Click
Dim duration As Double, numCycle As Integer
Dim iteration As Integer, cycles As Integer
'allows to handle when non integer character is entered in txtDuration.Text or TxtFrequency.Text
On Error Resume Next
If OptDuration.Checked Then
duration = CInt(txtDuration.Text)
numCycle = CInt(TxtFrequency.Text)
'play the animation via duration
PlayAnimation(duration, numCycle)
Else
iteration = CInt(txtDuration.Text)
cycles = CInt(TxtFrequency.Text)
'playanimation via iteration...
PlayAnimationFast(cycles, iteration)
End If
End Sub
Private Sub PlayAnimation(ByRef duration As Double, ByRef numCycles As Integer)
Dim pGlobe As IGlobe
Dim pTracks As IAnimationTracks
Dim viewers3D As IViewers3D
pGlobe = AxGlobeControl1.Globe
pTracks = pGlobe
viewers3D = pGlobe.GlobeDisplay
'exit if document doesnt contain animation..
Dim sError As String
If pTracks.TrackCount = 0 Then
sError = m_sAnimFilePath
If sError = "" Then
sError = "To get a Sample animation file, DeveloperKit Samples need to be installed!"
System.Windows.Forms.MessageBox.Show("The current document doesnt contain animation file." & Chr(13) & sError)
Else
System.Windows.Forms.MessageBox.Show("The current document doesnt contain animation file." & Chr(13) & "Load " & m_sAnimFilePath & "\AnimationSample.aga for sample.")
End If
Exit Sub
End If
Dim startTime As DateTime, timeSpan As TimeSpan
Dim elapsedTime As Integer, i As Integer, j As Integer
For i = 1 To numCycles Step 1
startTime = DateTime.Now
j = 0
Do
timeSpan = DateTime.Now().Subtract(startTime)
elapsedTime = timeSpan.TotalSeconds
If (elapsedTime > duration) Then
elapsedTime = duration
End If
pTracks.ApplyTracks(Nothing, elapsedTime, duration)
viewers3D.RefreshViewers()
j = j + 1
Loop While elapsedTime < duration
Next i
End Sub
Private Sub PlayAnimationFast(Optional ByVal cycles As Integer = 0, Optional ByVal iteration As Integer = 0)
Dim pGlobe As IGlobe
Dim pGlobeDisplay As IGlobeDisplay
Dim pScene As Scene
Dim pSceneTracks As IAnimationTracks
pGlobe = AxGlobeControl1.Globe
pGlobeDisplay = pGlobe.GlobeDisplay
pScene = pGlobeDisplay.Scene
pSceneTracks = pScene
Dim pCollection As Collection
Dim pTrackCamArray As IArray
Dim pTrackGlbArray As IArray
Dim pTrackLyrArray As IArray
pCollection = New Collection
pTrackCamArray = New Array
pTrackGlbArray = New Array
pTrackLyrArray = New Array
Dim sError As String
If pSceneTracks.TrackCount = 0 Then
sError = m_sAnimFilePath
If sError = "" Then
sError = "To get a Sample animation file, DeveloperKit Samples need to be installed!"
System.Windows.Forms.MessageBox.Show("The current document doesnt contain animation file." & Chr(13) & sError)
Else
System.Windows.Forms.MessageBox.Show("The current document doesnt contain animation file." & Chr(13) & "Load " & m_sAnimFilePath & "\AnimationSample.aga for sample.")
End If
Exit Sub
End If
Dim i As Integer, count() As Integer, k As Object
Dim pTrack As IAnimationTrack
Dim pTrackLayer As IAnimationTrack
Dim pTrackGlobe As IAnimationTrack = Nothing
Dim pAnimType As IAnimationType
Dim pAnimLayer As IAnimationType
Dim pAnimGlobeCam As IAnimationType = Nothing
Dim pKFGlbCam As IKeyframe
Dim pKFGlbLayer As IKeyframe
'get each track from the scene and store traks of the same kind in in an Array
For i = 0 To pSceneTracks.TrackCount - 1
pTrack = pSceneTracks.Tracks.Element(i)
ReDim Preserve count(i)
k = i
pAnimType = pTrack.AnimationType
If pAnimType.CLSID.Value = "{7CCBA704-3933-4D7A-8E89-4DFEE88AA937}" Then
'GlobeLayer
pTrackLayer = New AnimationTrackClass
pTrackLayer = pTrack
pTrackLayer.AnimationType = pAnimType
pKFGlbLayer = New GlobeLayerKeyframeClass
pAnimLayer = pAnimType
'Store the keyframe count of each track in an array
count(i) = pTrackLayer.KeyframeCount
pTrackLyrArray.Add(pTrackLayer)
ElseIf pAnimType.CLSID.Value = "{D4565495-E2F9-4D89-A8A7-D0B69FD7A424}" Then
'Globe Camera type
pTrackGlobe = New AnimationTrackClass
pTrackGlobe = pTrack
pTrackGlobe.AnimationType = pAnimType
pKFGlbCam = New GlobeCameraKeyframeClass
pAnimGlobeCam = pAnimType
'Store the keyframe count of each track in an array
count(i) = pTrackGlobe.KeyframeCount
pTrackGlbArray.Add(pTrackGlobe)
Else
System.Windows.Forms.MessageBox.Show("Animation Type " & pAnimType.Name & " Not Supported. Check if the animation File is Valid!")
Exit Sub
End If
Next
Dim larger As Integer
larger = Greatest(count)
' if nothing gets passed by the argument it takes the max no of keyframes
If IsNothing(iteration) Then iteration = larger
Dim start As Integer, j As Integer, t As Integer
Dim keyFrameCount As Integer, keyFrameCameraCount As Integer, keyFrameLayerCount As Integer
Dim time As Double
Dim pTrackCamera As IAnimationTrack
Dim pAnimCam As IAnimationType = Nothing
Dim pKFBkmark As IKeyframe
For i = 1 To cycles 'Total number of cycles
For start = 0 To iteration ' no of iterations...
For j = 0 To pTrackCamArray.Count - 1
pTrackCamera = pTrackCamArray.Element(j)
If Not pTrackCamera Is Nothing Then
If time >= pTrackCamera.BeginTime Then
keyFrameCameraCount = pTrackGlobe.KeyframeCount
pKFBkmark = pTrackCamera.Keyframe(keyFrameCameraCount - keyFrameCameraCount)
'reset object
pAnimCam.ResetObject(pScene, pKFBkmark)
' interpolate by using track
pTrackCamera.InterpolateObjectProperties(pScene, time)
keyFrameCameraCount = keyFrameCameraCount - 1
End If
End If
Next
For k = 0 To pTrackGlbArray.Count - 1
pTrackGlobe = pTrackGlbArray.Element(k)
If Not pTrackGlobe Is Nothing Then
If time >= pTrackGlobe.BeginTime Then
keyFrameCount = pTrackGlobe.KeyframeCount
pKFGlbCam = pTrackGlobe.Keyframe(pTrackGlobe.KeyframeCount - keyFrameCount)
'reset object
pAnimGlobeCam.ResetObject(pScene, pKFGlbCam)
' interpolate by using track
pTrackGlobe.InterpolateObjectProperties(pScene, time)
keyFrameCount = keyFrameCount - 1
End If
End If
Next
For t = 0 To pTrackLyrArray.Count - 1
pTrackLayer = pTrackLyrArray.Element(t)
If Not pTrackLayer Is Nothing Then
If time >= pTrackLayer.BeginTime Then
keyFrameLayerCount = pTrackLayer.KeyframeCount
pKFGlbLayer = pTrackLayer.Keyframe(pTrackLayer.KeyframeCount - keyFrameLayerCount)
'interpolate by using track
pTrackLayer.InterpolateObjectProperties(pScene, time)
keyFrameLayerCount = keyFrameLayerCount - 1
End If
End If
Next
'reset interpolation Point
time = start / iteration
'refresh the globeviewer(s)
pGlobeDisplay.RefreshViewers()
Next start
Next
End Sub
Private Function Greatest(ByRef pArray() As Integer) As Integer
' Function to find the largest count of keyframes (in any one of the Animation tracks)
Dim iLength As Integer, i As Integer, iMax As Integer
iLength = UBound(pArray)
ReDim Preserve pArray(iLength)
For i = 0 To iLength - 1
If IsNothing(iMax) Then
iMax = pArray(i)
ElseIf pArray(i) > iMax Then
iMax = pArray(i)
End If
Next
Greatest = iMax
End Function
Private Sub OptDuration_CheckedChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles OptDuration.CheckedChanged
If eventSender.Checked Then
txtDuration.Text = CStr(10) 'set default values
TxtFrequency.Text = CStr(2) 'set Default values
End If
End Sub
Private Sub OptIteration_CheckedChanged(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles OptIteration.CheckedChanged
If eventSender.Checked Then
'Set Default cycle and iteration..
txtDuration.Text = CStr(500)
TxtFrequency.Text = CStr(2)
End If
End Sub
Private Function routin_ReadRegistry(ByRef sKey As String) As String
'Open the subkey for reading
Dim rk As Microsoft.Win32.RegistryKey
rk = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(sKey, True)
If rk Is Nothing Then routin_ReadRegistry = ""
'Get the data from a specified item in the key.
routin_ReadRegistry = rk.GetValue("InstallDir")
End Function
Private Sub AxToolbarControl1_OnItemClick(ByVal sender As Object, ByVal e As ESRI.ArcGIS.Controls.IToolbarControlEvents_OnItemClickEvent) Handles AxToolbarControl1.OnItemClick
'Display help when fly tool and walk tools are selected...
'check if key intercept is enabled,if not enable it.
If Not AxGlobeControl1.KeyIntercept = 1 Then AxGlobeControl1.KeyIntercept = 1
Dim puid As UID
puid = AxToolbarControl1.GetItem(e.index).UID
'uid for fly tool={2C327C42-8CA9-4FC3-8C7B-F6290680FABB}
'uid for walk tool={56C3BDD4-C51A-4574-8954-D3E1F5F54E57}
If puid.Value = "{2C327C42-8CA9-4FC3-8C7B-F6290680FABB}" Then
'fly...
lblStatus.Text = "Use arrow up or arrow left keys to decelerate and arrow up or arrow left keys to accelerate."
'Fly tool
ElseIf puid.Value = "{56C3BDD4-C51A-4574-8954-D3E1F5F54E57}" Then
'walk...
lblStatus.Text = "Use arrow up or down keys to change elevation and the arrow left or right keys to fine-tune travel speed."
Else
lblStatus.Text = ""
End If
End Sub
End Class