ThinkGeo.com    |     Documentation    |     Premium Support

WpfMap.InteractiveOverlays & DrawTileCore

Hello everybody!


Again I have a question. :)


I  created a class inheriting it from InteractiveOverlays. Then I override DrawTileCore there is a function (for example, drawing a polygon). Then I put my class in the property map InteractiveOverlays. When there is no other layers on the map, all excellent. But as soon as I add something (opaque), for example:


mainOverlay.Layers.Add(new BackgroundLayer(new GeoSolidBrush(GeoColor.GeographicColors.ShallowOcean)));


the problem starts. In particular, I do not see what I paint now, but without the added layer of everything in sight. How can I change this behavior? The problem is that I create my own class for creating and editing objects (I do not really fit the classes you have created), so I have a problem with what kind of place to insert my class. I thought that property InteractiveOverlays is good, but.....


Can you help me?


Or tell me where to insert the correct class (from InteractiveOverlay) for creation and editing ovjects (not associated with the properties EditOverlay and TrackOverlay on your map).






And after the first question will ask another question immediately, which complements the first. I made my own class, inheriting it from InteractiveOverlay. Implemented its own logic of object creation (with mouse events). Take, for example, a polygon. When I create it during the movement of the mouse (as in your TrackInteractiveOverlay) I need to paint it. How to make it better? Now, I override DrawTileCore and there just draw by calling GeoCanvas.DrawArea for each mouse movement range. But it is slightly slower than it is in your TrackOverlay. Obviously, there are some secrets of how to improve it :) you can tell how to make it more accurate? The same applies to, say, turning the landfill. The logic there is simple and I use your function Rotate (point, angle). 
  
 I understand you are also using this feature, but when you turn the landfill, I still a bit slower than it appears, than you have. For some reason I think that to call repaint the entire GeoCanvas not quite correct, may cause redraw only those tiles, which is the figure? In general, I need your advice (and it would just be nice if you gave an example), for example turning a rectangle on the movement of the mouse (just like in your TrackInteractiveOverlay). 
  
 Thank you very much!

Alex,


  I think that the expected improvments you are describing in this post may be related to what we are investigating following your other post 10153 gis.thinkgeo.com/Support/Discussion...fault.aspx. I think that all that might be related. So let us concentrate on solving the issue mentioned in that latter post and we will come back to this one if still needed. Thank you.


 



Ok, Thank you, Val!  
 Sorry for many questions, just night and day with the library work :) so many questions arise. 
 Thank you very much.

Alex,


 You don't have to apologize. I was just saying that we are organizing the support issue to better serve our users. Actually, I am thanking you for working so hard with MapSuite and helping us make it better.



Hello again, ThinkGeo Team!

In parallel with the main question about the memory consumption would love to get an answer for another important issue, but I think everything is a lot easier. :)



I'll try to describe the problem. So, I have a Overlay,which contains InMemoryFeatureLayer with Feature-s (green color in the image).

Then I have my own InteractiveOverlay, which I add to the WpfMap.InteractiveOverlays property. In my bed I realize the creation of the landfill. The function draw is as follows:



 protected override void DrawTileCore(GeoCanvas geoCanvas)

        {

                    geoCanvas.DrawArea(CurrentTracker.CurrentFeature,

                                    new GeoPen(GeoColor.SimpleColors.Red),

                                    new GeoSolidBrush(new GeoColor(50, 255, 0, 0),

                                     DrawingLevel.LevelOne);


        }


Everything seems to be right and good, the rectangle is drawn, but not in the order that I need. First, draw all the polygons, and have them draw what I draw now. If I inherit a layer of TrackInteractiveOverlay polygon, which I create, will be drawn at the top level. And when just from InteractiveOverlay, it is not at the top level (under the Overlay, which contains InMemoryFeatureLayer). How can I change it?


How do I make my InteractiveOverlay, which I put into the collection WpfMap.InteractiveOverlays (he is in a position that is WpfMap.InteractiveOverlays[0]), drawing at the top level? Thank you very much! I hope it is clear explained :)


P.S. Picture1 shows a situation in which I inherited from class InteractiveOverlay, as in picture 2 so that I inherited from class TrackInteractiveOverlay.


P.P.S. in the post 


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


You are offered the following items to be taken:


LayerOverlay layerOverlay = new LayerOverlay();

Canvas.SetZIndex(layerOverlay.OverlayCanvas, 0);




If I'm in my code, write it as a solution (I have only the inverse problem):


Map.InteractiveOverlays.Add("GeoInteractiveOverlay", geoInteractiveOverlay);

Canvas.SetZIndex(Map.InteractiveOverlays[0].OverlayCanvas, 1000);


That's all good. But you wrote there, that this solution is not very good. Can you explain in detail why it was not good and what I might face in the future, or offer any other solution to my problem? Thank you very much!


 



Alex, 
  
 Val meet some problem now I’m working on this now. 
  
 For your description, it seems that you upload two pictures but I don’t see them. 
  
 About the solution for SetZIndex, I think the reason that it’s not good is it throws the ordinary order of overlays into confusion, if your application need to adjust the order of overlays, it may have trouble. However, it’s only solution so far for your application, so at least you can try, if something incorrect please let us know. 
  
 Thanks, 
 James