ThinkGeo.com    |     Documentation    |     Premium Support

InteractiveOverlays. Some question

Hello, ThinkGeo team! I have a question about the EditInteractiveOverlay and TrackInteractiveOverlay.


In the wiki you have an example of snapping a point in EditInteractiveOverlay (wiki.thinkgeo.com/wiki/File:DesktopEditionSample_SnapToLayer_CS_091209.zip).


I need the same logic and TrackInteractiveOverlay. Of course, you can simply use the same functions, and they just put in the necessary event handlers in TrackInteractiveOverlay, but it would be a more general way. How can I make a snapping point logic in the simplest way to work for both layers at once? Do you have an example?



Your logic is radically separated on object creation and editing? What if I want to use any tool, and here and there? For example the same snapping point.

And I got another question. I created a layer, having inherited it from InteractiveOverlay. Added it to the InteractiveOverlays of WpfMap. It seems everything is fine, except one situation. For some reason the event does not occur, or KeyDownCore OnMapKeyDown, when I try to override it. Just nothing happens. In what may be the problem?


//*************************** my interactiveOverlay ******************


 internal class GeoInteractiveOverlay : InteractiveOverlay

 {


<some code=""> 

</some>


   protected override InteractiveResult KeyDownCore(KeyEventInteractionArguments interactionArguments)

        {

            return base.KeyDownCore(interactionArguments);

        }



        protected override void OnMapKeyDown(MapKeyDownInteractiveOverlayEventArgs e)

        {

            base.OnMapKeyDown(e);

        }


 }


//*************************** in the map code ******************


  GeoInteractiveOverlay geoInteractiveOverlay = new GeoInteractiveOverlay();


  Map.InteractiveOverlays.Add(geoInteractiveOverlay);


 


None of the events described above do not arise. :(


 



Alex,


 I see what you are trying to do. Basically, you have an EditInteractiveOverlay and you have a TrackInteractiveOverlay. When you track a polygon for example you want to have that TrackInteractiveOverlay snapping to the EditInteractiveOverlay if it is within the tolerance. Please, confirm this what you want and we will provide a little sample for you. When we have good understanding of the general situation you are in, it is easier to help. Thank you.



Until you answer, I learned the deeper question of organization editing your map. :)  
 And he came to the conclusion that I need to change too much in logic and easier to make a layer that will all perform. It seemed to me that what you give in and TrackInteractiveOverlay and EditInteractiveOverlay is just examples. We conclude that it is better to write your class. And the simple and all logic, we can lay ourselves. However I can’t find another place for our interactive ocerlay, except in the collection InteractiveOverlays, I have not found. It’s good solution for us to put our interactiveOverlay for edit and create feature in the InteractiveOverlays of map property? 
  
 And the second question is more interested on clicking on the keyboard. The problem is not solved yet.

Alex,


 We are having a hard time understanding exactely what you mean. Can you explain step by step what your scenario is? I think that one good approach would be for you to describe what kind of behavior of the map do you expect from the user's perspective. That way, this is going to give us a better overall understanding of the situation. Thank you.



I apologize if it is not clear to declare. :) Overall, I figured out, except for one thing. Let's forget all that is written above :) I will describe again the only problem that I think will help you easily solve. 



For some reason my class, which I inherited from InteractiveOverlay, does not respond to KeyDown. That is, when you press the button, we do not go in (both events):



        protected override InteractiveResult KeyDownCore(KeyEventInteractionArguments interactionArguments)

        {}



        protected override void OnMapKeyDown(MapKeyDownInteractiveOverlayEventArgs e)

        {}



My InteractiveOverlay class added to the collection of the WpfMap.InteractiveOverlays. But probably something above intercepts these events. In what may be the reason? Mouse click event is called good.


Solution in attach. Thank you.


 


P.S. please see my another question about interactive overlay:


gis.thinkgeo.com/Support/DiscussionForums/tabid/143/aff/39/aft/10231/afv/topic/Default.aspx


 


Thank you very much.



KeyDownInteractiveOverlayExample.zip (16.3 KB)

Alex,


 Thank you very much for the explanation and the sample. Now this is much clearer. Let us analyse your sample and why the event does not get raise as it should and we will get back to you with the solution.



Thanks, I’ll wait.

Alex, 
  
 I have reproduced your problem that the KeyDown event not raise in my machine as well, I think it’s a bug in our WpfDesktopEdition, I have added it to our working tracking system. 
  
 Our development team will work on it soon, and I will let you know when we fix it. 
  
 Thanks, 
 James

Hello, James! What about our problem about KeyDown and KeyUp events? Thank you :)



Hello Alex, 
  
 Sorry for long time waiting, our product team is still working on this issue, we will post the result here as soon as we finished it. 
  
 Regards, 
  
 Gary

Hi All, 



I would like to come back to the original Alex's questions before the keydown issue. I don't see the point on having the interactive overlays logic splitted in Track (for drawing) and Edit (for editing), wouldn't it be easier all in one single interactive layer, so whenever you start tracking it shows the control points right the way? Why to have them splitted? 


What's the relation between Edit/Track overlays and InteractiveOverlays collection?




This is what I'm trying to do: 



A single interactive overlay where I can start drawing a customLineStyle (with text on distance), after clicking for the first time in the map the start point gets fixed, then you can click again to finish first segment (and continue drawing) or push ESC key to cancel the last vertex. 

As soon as second vertex if fixed, a control point would appear, allowing you to move it at will while still in drawing (track) mode. 

Double click ends the polyline. Right click shows a context menu with options (cancel track, end track, remove last vertex, enter point by lat long...) 



Unfortunately, these layers do not fit me on the logic that is sewn into them. Property maps can not be changed, but I need a layer on the creation and editing (TrackOverlay and EditOverlay). It seems that these layers are made just for example.


By the way, the issue of team ThinkGeo: why can not I override Property for editing and creation Map? So I created my coat, slipped it instead EditOverlay property maps, and would have lived without a collection.



Alex, 
  
 We have fixed the issues, it’s proved to be the bug. Please get latest version 6.0.15.0 or later and have a try. 
  
 Thanks, 
 James

Hi James, 
  
   I don’t see the point on having the interactive overlays logic splitted in Track (for drawing) and Edit (for editing), wouldn’t it be easier all in one single interactive layer, so whenever you start tracking it shows the control points right the way? Why to have them splitted? 
  
 What’s the relation between Edit/Track overlays and InteractiveOverlays collection? 


Carlos, 
  
 I think either way(split or combine) is fine, the reason is that the API of WPF Desktop Edition is following the DesktopEdition, to keep our products consistance, so that one user when he get familiar with one product, and then he will easy to get familiar with others. I don’t know if the answer is what you want, if not, please let me know. 
  
 Thanks, 
 James 


Hi James, 
  
  But the interfaces are not always the same, for instance in wiki.thinkgeo.com/wiki/File:DesktopEditionSample_DraggedPointStyleWithLabel_CS_100120.zip the custom EditInteractiveOverlay has this method: protected override void DrawCore(GeoCanvas canvas) in desktop when the WPF counterpart does not receive the canvas object (so It’s not posible to port this code example) 
  
  So if I understand correctly, by using the interactive overlays collection I could use just one custom overlay integrating both the Edit and the Track functionalities, right? Do you have any already done code example of that?

In addition to my last questions, is it possible to get a notification on TrackMode change? I’m trying to change the mouse cursor when TrackOverlay is in TrackMode <> None, but  
  
 Protected Overrides Sub OnTrackStarted(ByVal e As TrackStartedTrackInteractiveOverlayEventArgs) 
  
  Only fires when tracking actually starts, not when track mode is set to line (before)

In addition to my accumulated questions on this, I’m now confused about the role of the InteractiveOverlays collection, as Edit and Track overlays are instanciated by default within the WpfMap component 
  I created a CustomInteractiveOverlay (inheriting from InteractiveOverlay)  containing both an Edit and Track overlays, being the later a custom one. Then I added it to WpfMap.InteractiveOverlays collection, and set the TrackMode of the TrackOverlay within my CustomInteractiveOverlay within WpfMap1.InteractiveOverlays collection to TrackMode.Line, but it don’t work