ThinkGeo.com    |     Documentation    |     Premium Support

Missing overlays in InteractiveOverlays-Collection

Hello ThinkGeo-Support,


I currently examine WPFMap-Control. I noticed that the InteractiveOverlays collection is empty. In Desktop-Edition there are at least three overlays (Edit/Track/Extent-Overlay) in the collection. In my current Desktop-Edition application I have additional Interactive-Overlays and by adding them to the corresponding position I can control their drawing order.

Is this a bug in version 5.5.0.14 ?


Thomas



Hi Thomas,  



Thanks for reporting this issue.


I just double checked this and you are correct! The count for the contents of the InteractiveOverlays collection in the DesktopEdition returns 3 where it returns 0 in the WPFEdition.


I will need to check with our dev team to see if perhaps we 'hide' the default InteractiveOverlays in the WPFEdition or if they are indeed missing.



Hello Thomas, 
  
 Thanks for your post, it’s not a bug in WPFEdition, we design it working on this way, because we want to avoid user use InteractiveOverlays.Clear() cause error. 
  
 But in Wpf, we still have wpfMap1.ExtentOverlay, wpfMap1.TrackOverlay, wpfMap1.EditOverlay, only in the time of drawing the map, we will add this three overlay into InteractiveOverlays. 
  
 The drawing order of this three is TrackOverlay first, EditOverlay second, ExtentOverlay third, but both of them will draw after any user’s overlay. 
  
 If you want to change this three Overlays , you can set the wpfMap1.ExtentOverlay = null, then assign a new ExtentOverlay to it. But you can’t change their drawing order. 
  
 Any more questions please feel free to let us know. 
  
 Regards, 
  
 Gary

Hello Gary, 
  
 thanks for information. I dont’t want to change the drawing order of Track/Edit/Extent-Overlay. But I want to add my own custom InteractiveOverlay to the collection. In DesktopEdition I added my custom Overlay at the end of the collection. This means I was able to draw information on top of the information that was drawn by EditiOverlay. 
  
 With your current implementation the data drawn by my custom layer draws is always behind the information in EditOverlay. 
  
 Thomas 


Hello Thomas,


You misunderstanding something about drawing order, only in the layers, the drawing order will effect the z-axis(which layer cover which layer), but in Overlays, it draws with the default z-axis not the drawing order.


We don't recommend customer change this, but if you really want to do, there is a way:



            LayerOverlay layerOverlay = new LayerOverlay();
            Canvas.SetZIndex(layerOverlay.OverlayCanvas, 0);

Please feel free to let us know your questions.


Regards,


Gary



Hi Gary, 
  
  But this is only for Interactive Overlays, right? If I change the order I add other overlays to WpfMap it changes the drawing order as well. 
  
  By the way, what is ExtentOverlay for? Could you please summarize what are each Interactive overlay for? I would really appreciate it. 
  
 Carlos

Hello Carlos, 
  
 For the Interactive Overlays, it will show in the top of other overlay in default. 
 For some other overlay like LayerOverlay, the drawing order is the sooner the first draw, and the zindex is the sooner the bottom. So maybe this make you think there is a connection between drawing order and zindex, but actuality it doesn’t. 
  
 ExtentOverlay is an overlay that work for receive most of the mouse event, like pan, zoom in, zoom out, wheel etc. 
 TrackOverlay is an overlay that work for receive other mouse event like mouse down, to draw a new shape etc. 
 EditInteractiveOverlay is an overlay that work for edit the exist feature, like resize, drag the border etc. 
  
 You can find how to use them in HowDoISamples both. 
  
 Regards, 
  
 Gary

Hello Gary, 
  
 after I while I continue with my problem. 
  
 Sorry but I don’t understand how to set the Z Index of my custom InteractiveOverlay. Your sample deals with LayerOverlay but I want to create my own InteractiveOverlay and add it to InteractiveOverlays collection. My InteractiveOverlay should be drawn on top of EditInteractive-Overlay. 
  
 Thomas 


Thomas, 
  
   Here is how the InteractiveOverlay system works.  At the core of it is the InteractiveOverlays collection which controls the order of which the InteractiveOverlays are called.  When a mouse or keypress event happens we go into the collection and loop through it.  The first InteractiveOverlay is called and sent the event.  As part of that calls API there is a return value that allows the InteractiveOverlay to tell us if he was able to handle the event and if it should be passed on to other InteractiveOverlays.  If it returns that it did not handle it then we pass it to the next item in the collection, if it reports it did handle it then we break out of our collection loop. 
  
   This means that you need to consider where you put your custom InteractiveOverlay in the collection.  We typically suggest that you put more custom ones before more general ones.  For example we have the EditInteractiveOverlay before the ExtentInteractiveOverlay.  Actually I think the ExtentInteractiveOverlay is the last one in the collection.  The reason is that when we are editing and a user clicks and drags then we want the EditInteractiveOverlay to get the first shot at processing that event.  If the EditInteractiveOverlay doesn’t see a editable vertex at the location then it returns that it was not able to handle the event and to pass it further down the line.  The ExtentInteractiveOverlay would then pick it up and interpret it as a pan action.  As you can see it is very important where you place your InteractiveOverlays and if you add them to the end of the collection then chances are they will never be processed as the ExtentInteractiveOverlay usually always processes click and drag and double click moves. 
  
   As to the properties you see like the Map.EditIntreactiveOverlay they simply index into the collection using they string key.  If you remove them from the collection they properties will return null I believe.  They are useful for the situation where you are not customizing InteractiveOverlays and just need a quick and easy way to find the one you are looking for.  I would suggest that if you create your own InteractiveOverlay that you just use the collection directly. 
  
 David 


Hello David, 
  
 thanks for your detailed explanation. But I allready mentioned that I can’t see any of your Default InteractiveOverlays (Track, Edit, Extent) in the interactiveOverlays-Collection. So I can’t control the order of the InteractiveObverlays. 
  
 Any Idea? 
  
 Thomas

Thomas, 
  
   Sorry that I missed that.  I was checking this out and it seems to be a bug in the design.  I can see that in the WPF edition there are separate overlays in the property however the property should just index into the collection.  This was overlooked in the creation of the WPF edition.  I will find out more about it and let you know what we will do. 
  
 David

Thomas, 
  
   We have corrected the problem where the InteractiveOverlayCollection was empty.  Now all of the InteractiveOverlays are in there and the properties simple index into the collection by a key name.  The key names should be the class name like TrackInteractiveOverlay but you can check the keys collection.  If you do not use the properties then the key names don’t matter.  In fact if you remove one of them from the collection then accessing the property related to the overlay should result in you getting a null.  The change should go in with build 6.0.58 however if you do not see the changes then it will be in build 6.0.59.  The build process takes time to run and I believe the changes went in around the cut off.  Please let me know who this works.  Thanks for pointing this out as we really want the same functionality between our Desktop and WPF product but as they are spate teams sometimes they seek their own separation ‘optimizations’. 
  
 David 


David, 
  
 at the moment we use ThinkGeo’s 5.5 components. I will update to version 6.0 on next week to test the feature. 
  
 Thanks Thomas

Hello Thomas, 
  
 Feel free to let us know if you meet problem after upgrade to 6.0 
  
 Regards, 
  
 Gary