ThinkGeo Cloud
ThinkGeo UI Controls
ThinkGeo Open Source
Help and Support
External Resources
ThinkGeo Cloud
ThinkGeo UI Controls
ThinkGeo Open Source
Help and Support
External Resources
using System; using System.Collections.Generic; using System.Linq; using System.Windows.Forms; namespace TrackOverlayWithEsc { static class Program { /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new TestForm()); } } }
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.IO; using System.Collections.ObjectModel; using System.Windows.Forms; using ThinkGeo.MapSuite.Core; using ThinkGeo.MapSuite.DesktopEdition; namespace TrackOverlayWithEsc { public partial class TestForm : Form { private bool cancel; public TestForm() { InitializeComponent(); } private void TestForm_Load(object sender, EventArgs e) { winformsMap1.TrackOverlay.TrackMode = TrackMode.Polygon; winformsMap1.MapUnit = GeographyUnit.DecimalDegree; LoadBackgroundLayer(); winformsMap1.CurrentExtent = new RectangleShape(-90, 30, -40, -20); winformsMap1.Refresh(); } //Get the KeyDown event of the map to abort tracking according to the key pressed. private void winformsMap1_KeyDown(object sender, KeyEventArgs e) { if (e.KeyCode == Keys.Escape) { cancel = true; TrackOverlayTrackEnding(); } } private void TrackOverlayTrackEnding() { if (cancel) { //Set TrackOverlay to write. winformsMap1.TrackOverlay.Lock.EnterWriteLock(); try { int count = winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Count; if (count > 0) { //Remove the feature being currently tracked. The currently tracked feature has the key "InTrackingFeature". winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Remove("InTrackingFeature"); } } finally { //Commit the changes. winformsMap1.TrackOverlay.Lock.ExitWriteLock(); } //Call the function to exit from the tracking mode. cancel = false; if (winformsMap1.TrackOverlay.TrackMode == TrackMode.Polygon ) { //Polygon needs to call MouseDoubleClick. Event that marks finishing tracking a Polygon. //Same thing for Line. winformsMap1.TrackOverlay.MouseDoubleClick(new InteractionArguments()); } else { //All other shapes have their tracking finalized at MouseUp event. winformsMap1.TrackOverlay.MouseUp(new InteractionArguments()); } winformsMap1.Refresh(); } } private void btnTrackPolygon_Click(object sender, EventArgs e) { winformsMap1.TrackOverlay.TrackMode = TrackMode.Polygon; } private void btnTrackCircle_Click(object sender, EventArgs e) { winformsMap1.TrackOverlay.TrackMode = TrackMode.Circle; } private void LoadBackgroundLayer() { winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean); ShapeFileFeatureLayer worldLayer = new ShapeFileFeatureLayer(@"..\..\Data\Countries02.shp"); worldLayer.ZoomLevelSet.ZoomLevel01.DefaultAreaStyle = AreaStyles.Country1; worldLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; LayerOverlay staticOverlay = new LayerOverlay(); staticOverlay.Layers.Add("WorldLayer", worldLayer); winformsMap1.Overlays.Add(staticOverlay); } } }