ThinkGeo.com    |     Documentation    |     Premium Support

Only allow one feature to be created

I'm using the TrackOverlay to allow users to draw features on the map.


The user should only be able to draw one feature.


If the user clicks the draw point button and I change to TrackMode.Point how do I stop the user creating more than one point?


I guess this will involve creating a custom version of TrackOverlay and overriding the MouseUp andMouseDown events but this will be difficult because the user could be in TrackMode.Polygon and I wont know if the user is continuing with the first polygon or creating a second.


Any ideas?


Cheers


Steve



 Figured it out:




using ThinkGeo.MapSuite.DesktopEdition;

namespace MapUserControl
{
    public class CustomTrackInteractiveOverlay : TrackInteractiveOverlay
    {
        protected override InteractiveResult MouseDownCore(InteractionArguments interactionArguments)
        {
            if (TrackShapeLayer.InternalFeatures.Count > 0)
            {
                TrackShapeLayer.InternalFeatures.Clear();
            }

            return base.MouseDownCore(interactionArguments);
        }

    }
}


 Steve,


There is a easier way to implement your requirement, please refer the following code:


 



winformsMap1.TrackOverlay.TrackEnded += new EventHandler<TrackEndedTrackInteractiveOverlayEventArgs>(TrackOverlay_TrackEnded);

 void TrackOverlay_TrackEnded(object sender, TrackEndedTrackInteractiveOverlayEventArgs e)
 {
    winformsMap1.TrackOverlay.TrackMode = TrackMode.None;
 }
  So when the user draws one point or any other graphs, the track mode would be set to none mode automatically.   Please add the code above to your application, if you encounter any more questions please let me know again,


Thanks,


Scott,



Hi Scott 
  
 Very interesting and solves one problem but the user can still click the draw point button and draw another feature. I need to stop the user drawing more than one feature no matter how he attempts to do it.  
  
 The method I presented should prevent more than one feature being created under any circumstances unless you can see any flaws? 
  
 Cheers 
  
 Steve

 Steve,


I'm sorry I misunderstood what you meant, now I understand it fully what you want, I think there is a easier way than your method below:


 



            winformsMap1.TrackOverlay.TrackStarting += new EventHandler<TrackStartingTrackInteractiveOverlayEventArgs>(TrackOverlay_TrackStarting);
 void TrackOverlay_TrackStarting(object sender, TrackStartingTrackInteractiveOverlayEventArgs e)
        {
            if (winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Count > 0)
            {
                winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Clear();
            }
        }
So it will prevent more than one graphs to be drawn on the map, it always one graphs to be tracked on the map. This is a optional for you, your method is also good, just more choices for you,


Thanks,


Scott,