An asynchronous method call which executes the specified delegate and begins an operation to create a new Polygon representing an arrow at the location of three mouse clicks on the display, using the specified line color and width while tracking.

Namespace:  ESRI.ArcGISExplorer.Mapping

Assembly:  ESRI.ArcGISExplorer (in ESRI.ArcGISExplorer.dll) Version: 2.0.0.1500 (2.0.0.1500)

Syntax

C#
public void BeginTrackArrow(
	TrackDelegate trackDelegate,
	Color color,
	double width
)
Visual Basic (Declaration)
Public Sub BeginTrackArrow ( _
	trackDelegate As TrackDelegate, _
	color As Color, _
	width As Double _
)

Parameters

trackDelegate
Type: ESRI.ArcGISExplorer.Mapping..::.TrackDelegate

A tracking delegate that contains a method to be called when the user interacts with the display.
color
Type: System.Drawing..::.Color

The color of the partially completed arrow during the tracking operation.
width
Type: System..::.Double

The width in pixels of the partially completed arrow shown during the tracking operation. Default is 1, maximum is 10.

Remarks

The BeginTrackArrow method calls a delegate which allows returning a user-clicked Polygon (representing an arrow) on the map. The TrackDelegate allows mouse moves and tracking cancellation to be identified. The tracked shape is available from the Geometry passed to the delegate.

This asynchronous method will return immediately, allowing the user interface (UI) thread to continue working. After this method is called, the trackDelegate method will be called when the user interacts with the display.

Version Information: This method is supported from version 2.0.0.1500.

Examples

Although the following code example relates to the BeginTrackPolygon method, it serves to illustrate how to also use the BeginTrackArrow method.
CopyC#
using System;
using System.IO;
using System.Drawing;
using ESRI.ArcGISExplorer;
using ESRI.ArcGISExplorer.Application;
using ESRI.ArcGISExplorer.Mapping;
using ESRI.ArcGISExplorer.Geometry;
using ESRI.ArcGISExplorer.Data;
using ESRI.ArcGISExplorer.Threading;

namespace TrackPolygonUsingDelegate
{
  public class AsyncTrackPoly : ESRI.ArcGISExplorer.Application.Button
  {
    Table _districtsTable;

    public override void OnClick()
    {
      //Open the district shapefile
      _districtsTable = Table.OpenShapefile(@"C:\Data\district.shp");

      //Get the MapDisplay
      ESRI.ArcGISExplorer.Mapping.MapDisplay disp = ESRI.ArcGISExplorer.Application.Application.ActiveMapDisplay;

      //Start tracking asynchronously
      disp.BeginTrackPolygon(TrackDelegate, Color.Red, 6);

      //The following code WILL be executed immediately while tracking
      //e.g list all files in a folder on disk
      DirectoryInfo di = new DirectoryInfo(@"C:\Data");
      FileInfo[] files = di.GetFiles("*.*");
      foreach (FileInfo fi in files)
      {
        System.Diagnostics.Debug.Print(fi.Name);
      }
    }

    /// <summary>
    /// The delegate used by the BeginTrackPolygon method
    /// </summary>
    public void TrackDelegate(TrackingInfo info)
    {
      switch (info.Status)
      {
        case TrackStatus.Cancelled:
          System.Diagnostics.Debug.Print("cancelled");
          break;
        case TrackStatus.Completed:
          break;
        case TrackStatus.MouseMoved:
          break;
        case TrackStatus.PointAdded:
          //Perform a spatial query
          ReportDistrictsIntersectingTheTrackPolygon(info.Geometry);
          break;
        case TrackStatus.PointRemoved:
          //Perform a spatial query
          ReportDistrictsIntersectingTheTrackPolygon(info.Geometry);
          break;
        default:
          break;
      }
    }

    /// <summary>
    /// Reports the districts which intersect the tracked polygon.
    /// </summary>
    private void ReportDistrictsIntersectingTheTrackPolygon(Geometry geom)
    {
      Polygon poly = geom as Polygon;

      if ((poly != null) && (poly.IsEmpty == false))
      {
        RowCollection resultRows = _districtsTable.Search(new Filter(poly, FilterSearchOptions.Intersects));

        System.Diagnostics.Debug.Print("*******");

        foreach (Row resultRow in resultRows)
        {
          System.Diagnostics.Debug.Print(resultRow.Values["District"].ToString());
        }
      }
    }
  }
}
CopyVB.NET
Imports System
Imports System.IO
Imports System.Drawing
Imports ESRI.ArcGISExplorer
Imports ESRI.ArcGISExplorer.Application
Imports ESRI.ArcGISExplorer.Mapping
Imports ESRI.ArcGISExplorer.Geometry
Imports ESRI.ArcGISExplorer.Data
Imports ESRI.ArcGISExplorer.Threading

Public Class AsyncTrackPolygon
  Inherits ESRI.ArcGISExplorer.Application.Button
  Private _districtsTable As Table

  Public Overloads Overrides Sub OnClick()
    'Open the district shapefile 
    _districtsTable = Table.OpenShapefile("C:\Data\district.shp")

    'Get the MapDisplay 
    Dim disp As ESRI.ArcGISExplorer.Mapping.MapDisplay = ESRI.ArcGISExplorer.Application.Application.ActiveMapDisplay

    'Start tracking asynchronously 
    disp.BeginTrackPolygon(AddressOf TrackDelegate, Color.Red, 6)

    'The following code WILL be executed immediately while tracking 
    'e.g list all files in a folder on disk 
    Dim di As New DirectoryInfo("C:\Data")
    Dim files As FileInfo() = di.GetFiles("*.*")
    For Each fi As FileInfo In files
      System.Diagnostics.Debug.Print(fi.Name)
    Next
  End Sub

  ''' <summary> 
  ''' The delegate used by the BeginTrackPolygon method 
  ''' </summary> 
  Public Sub TrackDelegate(ByVal info As TrackingInfo)
    Select Case info.Status
      Case TrackStatus.Cancelled
        System.Diagnostics.Debug.Print("cancelled")
        Exit Select
      Case TrackStatus.Completed
        Exit Select
      Case TrackStatus.MouseMoved
        Exit Select
      Case TrackStatus.PointAdded
        'Perform a spatial query 
        ReportDistrictsIntersectingTheTrackPolygon(info.Geometry)
        Exit Select
      Case TrackStatus.PointRemoved
        'Perform a spatial query 
        ReportDistrictsIntersectingTheTrackPolygon(info.Geometry)
        Exit Select
      Case Else
        Exit Select
    End Select
  End Sub

  ''' <summary> 
  ''' Reports the districts which intersect the tracked polygon. 
  ''' </summary> 
  Private Sub ReportDistrictsIntersectingTheTrackPolygon(ByVal geom As Geometry)
    Dim poly As Polygon = TryCast(geom, Polygon)

    If (poly IsNot Nothing) AndAlso (poly.IsEmpty = False) Then
      Dim resultRows As RowCollection = _districtsTable.Search(New Filter(poly, FilterSearchOptions.Intersects))

      System.Diagnostics.Debug.Print("*******")

      For Each resultRow As Row In resultRows

        System.Diagnostics.Debug.Print(resultRow.Values("District").ToString())
      Next
    End If
  End Sub
End Class

See Also