ThinkGeo.com    |     Documentation    |     Premium Support

Change order of print layers

Hi ,



I am trying to implement Send to back and bring to forward facility in printing.



I tried to change order of printing layers and refresh the map 




var printerInteractiveOverlay = (PrinterInteractiveOverlay) Map1.InteractiveOverlays[“PrintPreviewOverlay”];
           PrinterLayer printerLayer = printerInteractiveOverlay.PrinterLayers[2];
           printerInteractiveOverlay.PrinterLayers.MoveToBottom(printerLayer);
           Map1.Refresh();

But it doesn’t work as expected. 

This is the screen shot before send to back



This is after send to back . I expect after sending the layer to back , half of it shouldn’t be displayed.



003_002_001_HelloWorld.zip (44.9 KB)

Hi Shaahin, 
  
 You’re right, we set to draw label always on the top of all layers. Because for some reasons, we need make map layer under all other printer layers when print to PDF. 
  
 So the MoveToBottom should only works between all printer layers exception page layer and map layer. 
  
 Regards, 
  
 Don

Thanks for your response.
So there is no way to send an image under the map ? because I saw this feature before. 















Hi Shaahin,  
  
 If you want to implement that, you should want to create a customImagePrinterLayer and override drawcore function. The Map is in LevelOne of DrawingLevel, so you can put new printerLayer back to map Layer by MoveToBottom. 
  
 This code should works for you, and you can adjust DrawingLevel from one to four when necessary. 
  
  

  protected override void DrawCore(GeoCanvas canvas, Collection<SimpleCandidate> labelsInAllLayers)
        {

            double scale = PrinterHelper.GetPointsPerGeographyUnit(canvas.MapUnit);

            float widthInScreen = (float)(GetBoundingBox().Width * scale / canvas.CurrentScale);
            float heightInScreen = (float)(GetBoundingBox().Height * scale / canvas.CurrentScale);

            canvas.DrawWorldImage(Image, GetBoundingBox().GetCenterPoint().X, GetBoundingBox().GetCenterPoint().Y, widthInScreen, heightInScreen, DrawingLevel.LevelOne, 0, 0, 0);
        }


Hi Shaahin,  
  
 If you want to implement that, you should want to create a customImagePrinterLayer and override drawcore function. The Map is in LevelOne of DrawingLevel, so you can put new printerLayer back to map Layer by MoveToBottom.  
  
 This code should works for you, and you can adjust DrawingLevel from one to four when necessary.  
  
   
  
  protected override void DrawCore(GeoCanvas canvas, Collection<SimpleCandidate> labelsInAllLayers)
        {

            double scale = PrinterHelper.GetPointsPerGeographyUnit(canvas.MapUnit);

            float widthInScreen = (float)(GetBoundingBox().Width * scale / canvas.CurrentScale);
            float heightInScreen = (float)(GetBoundingBox().Height * scale / canvas.CurrentScale);

            canvas.DrawWorldImage(Image, GetBoundingBox().GetCenterPoint().X, GetBoundingBox().GetCenterPoint().Y, widthInScreen, heightInScreen, DrawingLevel.LevelOne, 0, 0, 0);
        }
 
  
 Regards, 
  
 Don

Thank you so much. 
  
 Your code works fine .

Hi Shaahin,  
  
 You’re welcome. 
  
 Regards, 
  
 Don