ThinkGeo.com    |     Documentation    |     Premium Support

Triggering TrackShape TrackEnd via code

Way back in 2011 I asked this question, and it was answered.  However, that was, I believe, for an older version of MapSuite and now I am having the same problem with version 6.  In addition, the question I asked in 2011 was about cancelling the drawing of a shape using TrackOverlay.  I have a different situation now because the user drawing is not aborted but continues with a new shape.



Here’s the issue: when using touch displays (as on a tablet) the double-tap does not work well on some devices and thus I need to implement another approach to replace the double-click for ending certain track shape modes.  The application is presenting the user with an “end shape” menu option as an alternative.  This should trigger a TrackEnded event, after which the shape is stored, the current shape cleared, and then the user is allowed to start a new one by firing “TrackStarted”.  



Back in 2011 the answer was to use TrackOverlay.MouseDoubleClick to fire “TrackStarted” to clear out the shapes in the track layer’s internal features. However, under version 6 this doesn’t appear to do the trick, because as soon as I start to draw a new polygon the previous shape is still “stuck” somewhere and the track uses it, even after clearing the features (as shown in the code below.)  In addition, after clearing this stuff out and starting to draw again a new “TrackStarted” event does not fire so I can’t detect that the user is drawing a new shape.  In other words, the user will draw a polygon, click “End Shape” on a menu, cause the TrackEnded event to fire which stores the shape, then clear things out in the TrackOverlay so that as soon as the user starts again “TrackStarted” is fired for a second shape.



When I use the following logic in TrackOverlay_TrackEnded, things work as expected:



 if (winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Count == 1)
 
 {
 
 Feature mapNoteFeature = winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures[0];
 
 AddMapNote(mapNoteFeature.GetShape());
 
 }

winformsMap1.TrackOverlay.TrackShapeLayer.InternalFeatures.Clear();



However, when I use TrackOverlay_MouseDoubleClick to fire the event, the event fires but the shape is still stuck in there and subsequent drawing does not fire TrackStarted.



Any ideas?

Thanks,

Allen


 



Hi Allen, 
  
 I think our latest 8.0 have better support for track in tablet, and we can provide better support for that. 
  
 For 6.0 I think if you use TrackInteractiveOverlay.MouseDoubleClick function to fire release, it should works just like you double click by mouse. 
  
 Because this function will do some operations and call TrackEnded event. 
  
 So I think you can still put your logic in TrackEnded function, then directly call MouseDoubleClick API to release the shape. Do you think that will works for your scenario? 
  
 Any question please let me know. 
  
 Regards, 
  
 Don

Hi Don, 
  
 Yes, I understand MapSuite has gotten much better with tablets but unfortunately there is little chance of upgrading our application to a newer version.  One of the main reasons is newer versions of MapSuite require .NET 4.5 and we have many customers still running XP which does not support that version of the Framework. 
  
 I am using MouseDoubleClick to force TrackEnded but it does not appear to work.  It’s not clear to me which overlay’s method should be called, so I’ve tried all three that I could find: 
  
             winformsMap1.TrackOverlay.MouseDoubleClick(new InteractionArguments()); 
             winformsMap1.EditOverlay.MouseDoubleClick(new InteractionArguments()); 
             winformsMap1.InteractiveOverlays[0].MouseDoubleClick(new InteractionArguments()); 
  
 None of these cause the TrackEnded event to fire.  I don’t know if I am supposed to be calling a different MouseDoubleClick method I am not aware of or if I need to supply more information in the InteractionArguments. 
  
 Allen 


Hi Allen,



Thanks for let me know the situation.



My original test is for 8.0, the result is code “winformsMap1.InteractiveOverlays[0].MouseDoubleClick(new InteractionArguments());” fire TrackEnded event succeed, so I can release the track by click on button.



Today I did a quickly test for 6.0.0.233, and this code works for our map control. Please see my attached code.



Please review it and let me know whether that works for you.



In fact our map control only need the support of .net framework 4.0 but not 4.5, and XinXP should support install .net 4.0.



Regards,



Don

12221.zip (1.49 KB)

Don, 
  
 Yes, you are correct…I found this snippet elsewhere on ThinkGeo.com
  
 — 
 Yes, Map Suite 8.0 still has .NET Framework 4.0 as a minimum requirement, as was the case with Map Suite 7.0. 
 — 
  
 And Microsoft says 4.0 requires Windows XP ** SP3 **, so if customers have kept their systems updated it should work, but we would still have a nightmare in getting everyone (somewhere around 150 customers and 400 computers) to update to 4.0 of the Framework and probably a support nightmare with those who don’t.  And for other internal reasons, upgrading our MapSuite version won’t happen. 
  
 Back to the original problem…there are several other TrackOverlay event handlers active in our application.  I suppose it is possible one of them is grabbing the event earlier.  I will do a little more research. 
  
 Allen

Hi Allen, 
  
 I am glad to hear the sample works in your side. 
  
 Yes, I think maybe some other code grabbing the event, I think remove all event handler then add them back can make sure where is the problem. 
  
 Any question please let us know. 
  
 Regards, 
  
 Don