ArcGIS Explorer Component Help |
MapDisplay..::.BeginTrackCircle Method (TrackDelegate) |
MapDisplay Class Example See Also |
Assembly: ESRI.ArcGISExplorer (in ESRI.ArcGISExplorer.dll) Version: 2.0.0.1500 (2.0.0.1500)
Syntax
C# |
---|
public void BeginTrackCircle( TrackDelegate trackDelegate ) |
Visual Basic (Declaration) |
---|
Public Sub BeginTrackCircle ( _ trackDelegate As TrackDelegate _ ) |
Parameters
- trackDelegate
- Type: ESRI.ArcGISExplorer.Mapping..::.TrackDelegate
A tracking delegate that contains a method to be called when the user interacts with the display.
Remarks
The BeginTrackCircle method calls a delegate which allows returning a user-clicked Polygon (representing a circle) 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.
The tracked shape is a Polygon with vertices and straight lines around the edge. In 3D the edge of the circle is at an equal geodesic (ground) distance from the center so it looks round in both northerly or southerly latitudes. However, it is also possible to create an oval by tracking a circle in the 2D display with a geographic coordinate system (e.g. WGS84) specified. For example, track a large circle from Norway to the equator, then change to 3D and the shape will appear squashed at the higher latitudes.
Version Information: This method is supported from version 2.0.0.1500.
Examples
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()); } } } } }
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