TimeControl to playback historical data on temporallayer

970
0
10-16-2016 02:03 AM
JhonChin1
New Contributor II


/// <summary>
/// Open a timecontrol and control a playback sequence without displaying the timecontrol GUI.
/// </summary>
/// <param name="application">An IApplication interface.</param>
/// <remarks></remarks>
public void TimeControlPlayback()
{

ESRI.ArcGIS.Carto.IMap map = axMapControl1.ActiveView.FocusMap;
ESRI.ArcGIS.Carto.IMapTimeDisplay timeMap = map as IMapTimeDisplay;
ESRI.ArcGIS.TrackingAnalyst.ITemporalLayer temporalLayer = null;

if (map.get_Layer(0) is ESRI.ArcGIS.TrackingAnalyst.ITemporalLayer)
{
temporalLayer = (ESRI.ArcGIS.TrackingAnalyst.ITemporalLayer)map.get_Layer(0); // Explicit Cast
}

if (temporalLayer == null)
{
timeMap.ShowTime = true;
return;
}


Type factoryType = Type.GetTypeFromProgID("esriTrackingAnalystUI.TimeControl");
ESRI.ArcGIS.TrackingAnalyst.ITimeControl timeControl = (ITimeControl)Activator.CreateInstance(factoryType);

System.Int32 int32_hWnd = axMapControl1.hWnd;

timeControl.CurrentMap = axMapControl1.ActiveView.FocusMap;
timeControl.SetTemporalReferencesFromMap();
timeControl.TemporalMode = ESRI.ArcGIS.TrackingAnalyst.enumPlaybackTemporalMode.enumTemporalHistoric;

if (!(timeControl.Status == ESRI.ArcGIS.TrackingAnalyst.enumTimeControlStatus.enumStopped)&&timeControl.Status<enumTimeControlStatus.enumInValidView)
{
timeControl.Stop();
}

timeControl.SetTimeSequenceInterval(ESRI.ArcGIS.TrackingAnalyst.enumTemporalUnits.enumDays, 1);
timeControl.CurrentTime = timeControl.StartTime;

timeControl.UpdateDisplay = true;
timeControl.WindowTitle = "test";

try
{
timeControl.Play(ESRI.ArcGIS.TrackingAnalyst.enumDirection.enumForward);

}
catch (COMException ex)
{
System.Windows.Forms.MessageBox.Show(ex.StackTrace);
}
}

everything is ok until Play, report an error like this:

System.Runtime.InteropServices.COMException (0x80040980): The Time control must be activated before it can be made visible.

0 Kudos
0 Replies