ThinkGeo.com    |     Documentation    |     Premium Support

MapPrinterLayer appears to cache styles of Layers

Hi Guys.


I have attached a sample project that demonstrates some unexpected behavior in the MapPrinterPage. When the MapPrinterPage is loaded with a single layer it's display style is set. Then you can change it to a different symbol, but each time the PagePrinterLayer is zoomed or panned the style reverts to the original. I believe the image is being cached but don't see how to clear it. Take a look at the sample and see what you think.


Thanks!


Steve



ChangePageLayoutStyle.zip (35.4 KB)

Hello Steven, 
  
 Thanks for your post and sample, yes I think it’s a bug because in our MapPrintLayer, we have the internal cacheImage to improve the performance, and for now, the logic is if user didn’t change the extent of MapPrintLayer, it will always use the cache image to render faster. That’s why the styles change back. 
  
 We are consider to add a method maybe named refresh in the MapPrintLayer, then when you think you need the MapPrintLayer force refresh without using cache, call the method. 
  
 I will let you know as soon as we did this change. 
  
 Regards, 
  
 Gary

Hi Steve, 
  
 We have fixed this issue, please get the latest version of dll and try it again. 
  
 Thanks, 
 James

Hi James, 
  
 When will this fix be in a Production build? Will it be in the new 6.0 release that’s about to come out? 
  
 Thanks! 
  
 Steve

Hello Steven, 
  
 Sorry James missed a part, for this issue, now we have added a new method called MapPrinterLayer.ClearCache(), please call it when you think you need the MapPrinterLayer force refresh, this will provide most time the MapPritnerLayer has the best performance but still can working on other scenario. 
  
 Also for the synchronize to the production build, I will contact the build team and let you know the date. 
  
 Regards, 
  
 Gary

Gary,


The original problem seems to be fixed, but now the layers in the MapPrinterLayer always appear to be rendered as a bitmap, even when printing.  The workaround I was using to do a refresh no longer works. 

mapPrinterLayer.IsDrawing = True
mapPrinterLayer.Refresh()
mapPrinterLayer.IsDrawing = False

The layers are not drawing as vectors anymore. What can we do to fix this?


Thanks,


Steve



Hello Steven, 
  
 I don’t think it caused by add a method ClearCache, could you please provide a sample? 
  
 Regards, 
  
 Gary

Hi Gary, 
  
 The sample attached in my original post on this thread (above) demonstrates the problem. The original problem of the styles changing appears to be fixed. However, then MapPrinterLayer layers are not rendered as vector. My sample is not using the ClearCache method at all. If you cannot clearly see what I’m talking about in the original sample project let me know and I will make another one. 
  
 Thanks! 
  
 Steve

Hello Steven, 
  
 Our product team is working on this now, once the bug has been resolved I will update here so that you will be aware of the resolution.  If you ever need a status update, please feel free to let me know. 
  
 Regards, 
  
 Gary

 Steven, 


 
We fixed some issues so please first get the latest version (6.0.73.0 or 6.0.0.73 or later). Besides that you need to override MapPrinterLayer.DrawCore() method and add ClearCach() in it, otherwise it will keep using the cached bitmap. Of course there will have some performance penalty for not using the cache.  
 

Public Class MyPrinterLayer
Inherits MapPrinterLayer
Protected Overrides Sub DrawCore()
ClearCache()
MyBase.DrawCore()
End Sub
End Class

 
Ben

Ben,


Thanks for your reply. We are about to do a demo for a client and would love to show them the print capabilities but we cannot because we are still getting poor results when printing. I am using production build 6.0.0.86 of MapSuite. The scaleline and scalebar print fine, but the legend and the map features do not print well. They don't seem to be rendered as vector. At one time, when the new print function was first introduced, the map features printed very well. But not any more. I have attached another sample project that I hope will help you to see the issue.


Thanks!


Steve


 


 



PageLayoutPrintTest.zip (147 KB)

Steven, 
  
   I will get to the bottom of this. 
  
 David

Steve, 
  
 Please get the latest version (6.0.88.0 or 6.0.0.88) with the following changes: 
  
 1, LegendPrinterLayer is now rendered as vector when both displaying on the screen and printing.  
 2, MapPrinterLayer is rendered as vector when printing 
 3, MapPrinterLayer is rendered as raster when displaying on the map for performance benefits.  
  
 The printerLayer doesn’t support  LinearGradient brush so please change the LinearGradientStyle to SimpleAreaStyle in your sample, otherwise an exception will be thrown when printing the map.  We are working on it and hopefully we can add this feature in the near future.  
  
 As now the legend is rendered directly on the canvas as vector, it will not be clipped by the legend background. So please make proper values for the legend and its items.  
  
 Ben 
  
  


David, Ben, 
  
 Thanks for all of your help with this issue. The legend and the MapPrinterLayer are printing as vector. 
  
 Steve

Steve, 
  
   Sorry for all of the confusion.  Sometimes it’s like a tug of war when working with various customer request.  One bug or feature enhancement changes something and the developer working on it doesn’t completely understand the underpinnings of the rest of the system.  I think we have it nailed down now however we will be making some changes for the better to speed it up and handle some corner cases but when we get to this I will be heavily involved to ensure we keep the overarching architecture consistent. 
  
 David

David, 
  
 I very much appreciate all the effort you and your team have put into putting the page layout system into the framework. I know there are still a few kinks but I have not doubt you guys will continue to make improvements. 
  
 Thanks again, 
  
 Steve

Hi Steve, 
  
 Sorry for all the inconveniences, as you said, we’ll continue making the improvements on our products to make them better and better. 
  
 Best Regards, 
  
 Edgar