ThinkGeo.com    |     Documentation    |     Premium Support

PrinterGeoCanvas and PdfGeoCanvas - layers drawing order problem

Hi,



I am working on the printing of my Map Suite 4.0.40.0 desktop application.

I am using PrinterGeoCanvas, PdfGeoCanvas and GdiPlusGeoCanvas.

The last one works fine but i have problems with PrinterGeoCanvas and PdfGeoCanvas.



1. When I draw a layers on PrinterGeoCanvas or PdfGeoCanvas they appear in the wrong order on the printed document.

    Layer drawn as the last is covered by another layers that were drawn before.



    Calling of GeoCanvas.Flush() method (after drawing each layer) does not work.



    For PdfGeoCanvas after drawing each layer I am calling EndDrawing() method which solves that problem.



    But for PrinterGeoCanvas calling EndDrawing() method begins the process of printing, therefore such a solution is not possible.



    The layers are to be printed in the following order:

    - City_contour

    - City_water_regions

    - City_green_regions

    - City_streets

    - Routing_Layer



    On the printed document layers are in the following order:

    - City_contour

    - City_water_regions

    - City_green_regions

    - Routing_Layer    !!!

    - City_streets




2. The second problem is that the icons of routing layer (start point, end point, stop points) are drawn at the wrong scale,

    and a labels on stop points icons are displaced with respect to the icons.




Is there any way to solve these problems ? Thank you.


Chris



Krzysztof,


Thanks for your post and welcome you to thinkgeo desktop discussion forum.
 
Just make sure you are using the RoutingLayer from our routing extension, following code sample shows how to use it. I will try to recreate this problem with this sample provided in the code gallery.
code.thinkgeo.com/projects/routingstyles
 
Any more questions please feel free to let me know.
 
Thanks.
 
Yale

Yale,



Thanks for your reply.



Yes I am using RoutingLayer included in MapSuiteRouting extension.



Here is link to sample application which shows my problem:



rapidshare.com/files/422275986/LayersPrintingDemo.zip





Thanks.



Chris



Krzysztof, 
  
 I am sorry to say that I could not download the sample from the link you provided. Could you send it to our support(support@thinkgeo.com) and ask him to forward it to Yale? 
  
 Any more questions please feel free to let me know. 
  
 Thanks. 
  
 Yale 


Yale, 
  
 I sent the Layers Printing Demo to the address support@thinkgeo.com and I received information that the message was passed on. 
  
 Do you have any information about the causes of improper order of layers printing? 
  
 Thanks. 
  
 Chris

Krzysztof. 
  
 I will contact with our Support to get the demo, and let you know if we find anything. 
  
 Thanks 
 James

James, 
  
 Project on which I work is coming to an end and the problem with incorrect print order of layers is still blocking me. 
 Do you have any information about the solution ? 
  
 Thanks. 
  
 Chris

Krzysztof,


Sorry for the delay and thanks for your reminder.
Yes, we have this problem and I think this problem is caused from our structure design. Now, I can show you some way to go around this problem, hope it helps:
1) Set the CenterPen for the RouteStyle instead of using the OutPen to fix the RouteLine behind problem.

// Initialize routing
vectorOverlay.Layers.Add(this.routingLayer);
this.routingLayer.RouteStyle.CenterPen = this.routingLayer.RouteStyle.OuterPen;
this.routingLayer.StartPoint = this.routingStartPoint;
this.routingLayer.EndPoint = this.routingEndPoint;
this.routingFeatureSource = shapeLayer.FeatureSource;
this.routingEngine = new RoutingEngine(this.routingSource, this.routingFeatureSource);
this.routingEngine.GeographyUnit = GeographyUnit.Meter;
this.routingEngine.DistanceUnit = DistanceUnit.Meter;
this.CreateRoute();

2) We probably need to create a new PrinterGeoCanvas to fix the StartPoint and EndPoint behind problem, following is the code snippet and use. We need to use the customized PrinterGeoCanvas instead of the PrinterGeoCanvas attached in our extension.

MyPrinterGeoCanvas geoCanvas = new MyPrinterGeoCanvas();
public class MyPrinterGeoCanvas : PrinterGeoCanvas
{
        protected override void DrawScreenImageWithoutScalingCore(GeoImage image, float centerXInScreen, float centerYInScreen, DrawingLevel drawingLevel, float xOffset, float yOffset, float rotateAngle)
        {
            drawingLevel = DrawingLevel.LevelFour;
            base.DrawScreenImageWithoutScalingCore(image, centerXInScreen, centerYInScreen, drawingLevel, xOffset, yOffset, rotateAngle);
        }
}

Any more questions please feel free to let me know.
Thanks.
Yale