[mapserver-commits] r10726 - in sandbox/mapserver6/mapscript/csharp: . examples

svn at osgeo.org svn at osgeo.org
Sun Nov 14 12:25:49 EST 2010


Author: tamas
Date: 2010-11-14 09:25:49 -0800 (Sun, 14 Nov 2010)
New Revision: 10726

Added:
   sandbox/mapserver6/mapscript/csharp/examples/drawmapDirectPrint.cs
Modified:
   sandbox/mapserver6/mapscript/csharp/Makefile.vc
   sandbox/mapserver6/mapscript/csharp/examples/drawmapDirect.cs
Log:
Add direct GDI printing support for the C# API

Modified: sandbox/mapserver6/mapscript/csharp/Makefile.vc
===================================================================
--- sandbox/mapserver6/mapscript/csharp/Makefile.vc	2010-11-14 17:24:10 UTC (rev 10725)
+++ sandbox/mapserver6/mapscript/csharp/Makefile.vc	2010-11-14 17:25:49 UTC (rev 10726)
@@ -94,7 +94,8 @@
 	$(CSC) $(CSFLAGS) /r:mapscript_csharp.dll /r:System.Drawing.dll /out:getbytes.exe examples\getbytes.cs
 	$(CSC) $(CSFLAGS) /r:mapscript_csharp.dll /out:HTMLtemplate.exe examples\HTMLtemplate.cs
 	$(CSC) $(CSFLAGS) /r:mapscript_csharp.dll /out:RFC24.exe examples\RFC24.cs
-	$(CSC) $(CSFLAGS) /r:mapscript_csharp.dll /r:System.Drawing.dll /out:drawmapDirect.exe examples\drawmapDirect.cs	
+	$(CSC) $(CSFLAGS) /r:mapscript_csharp.dll /r:System.Drawing.dll /out:drawmapDirect.exe examples\drawmapDirect.cs
+	$(CSC) $(CSFLAGS) /r:mapscript_csharp.dll /r:System.Drawing.dll /out:drawmapDirectPrint.exe examples\drawmapDirectPrint.cs	
 
 test:
 !IFDEF MONO

Modified: sandbox/mapserver6/mapscript/csharp/examples/drawmapDirect.cs
===================================================================
--- sandbox/mapserver6/mapscript/csharp/examples/drawmapDirect.cs	2010-11-14 17:24:10 UTC (rev 10725)
+++ sandbox/mapserver6/mapscript/csharp/examples/drawmapDirect.cs	2010-11-14 17:25:49 UTC (rev 10726)
@@ -40,7 +40,7 @@
 {
   public static void usage() 
   { 
-	Console.WriteLine("usage: DrawMap {mapfile} {outfile}");
+	Console.WriteLine("usage: DrawMapDirect {mapfile} {outfile}");
 	System.Environment.Exit(-1);
   }
 		  

Added: sandbox/mapserver6/mapscript/csharp/examples/drawmapDirectPrint.cs
===================================================================
--- sandbox/mapserver6/mapscript/csharp/examples/drawmapDirectPrint.cs	                        (rev 0)
+++ sandbox/mapserver6/mapscript/csharp/examples/drawmapDirectPrint.cs	2010-11-14 17:25:49 UTC (rev 10726)
@@ -0,0 +1,116 @@
+/******************************************************************************
+ * $Id: drawmap.cs 7418 2008-02-29 00:02:49Z nsavard $
+ *
+ * Project:  MapServer
+ * Purpose:  A C# based mapscript example to draw the map directly onto a GDI
+ *           printing device context.
+ * Author:   Tamas Szekeres, szekerest at gmail.com
+ *
+ ******************************************************************************
+ * Copyright (c) 1996-2008 Regents of the University of Minnesota.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in 
+ * all copies of this Software or works derived from this Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+ * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *****************************************************************************/
+
+using System;
+using System.Drawing;
+using System.Drawing.Printing;
+using OSGeo.MapServer;	
+
+/// <summary>
+/// A C# based mapscript example to draw the map directly onto a GDI printing device context.
+/// </summary>
+class DrawMap
+{
+  public static void usage() 
+  { 
+	Console.WriteLine("usage: DrawMapDirectPrint {mapfile} {printername}");
+	System.Environment.Exit(-1);
+  }
+
+  static mapObj map;
+		  
+  public static void Main(string[] args)
+  {
+    Console.WriteLine("");
+	if (args.Length < 2) usage();
+    
+	map = new mapObj(args[0]);
+
+    Console.WriteLine("# Map layers " + map.numlayers + "; Map name = " + map.name);
+    for (int i = 0; i < map.numlayers; i++) 
+    {
+        Console.WriteLine("Layer [" + i + "] name: " + map.getLayer(i).name);
+    }
+
+    try
+    {
+        PrintDocument doc = new PrintDocument();
+
+        doc.PrintPage += new PrintPageEventHandler(doc_PrintPage);
+
+        // Specify the printer to use.
+        doc.PrinterSettings.PrinterName = args[1];
+
+        doc.Print();
+    } 
+    catch (Exception ex) 
+    {
+                Console.WriteLine( "\nMessage ---\n{0}", ex.Message );
+                Console.WriteLine( 
+                    "\nHelpLink ---\n{0}", ex.HelpLink );
+                Console.WriteLine( "\nSource ---\n{0}", ex.Source );
+                Console.WriteLine( 
+                    "\nStackTrace ---\n{0}", ex.StackTrace );
+                Console.WriteLine( 
+                    "\nTargetSite ---\n{0}", ex.TargetSite );	}	
+    }
+
+    static void doc_PrintPage(object sender, PrintPageEventArgs e)
+    {
+        // Create the output format
+        outputFormatObj of = new outputFormatObj("CAIRO/WINGDIPRINT", "cairowinGDIPrint");
+        map.appendOutputFormat(of);
+        map.selectOutputFormat("cairowinGDIPrint");
+        map.resolution = e.Graphics.DpiX;
+        Console.WriteLine("map resolution = " + map.resolution.ToString() + "DPI  defresolution = " + map.defresolution.ToString() + " DPI");
+        // Calculating the desired image size to cover the entire area; 
+        map.width = Convert.ToInt32(e.PageBounds.Width * e.Graphics.DpiX / 100);
+        map.height = Convert.ToInt32(e.PageBounds.Height * e.Graphics.DpiY / 100);
+
+        Console.WriteLine("map size = " + map.width.ToString() + " * " + map.height.ToString() + " pixels");
+
+        IntPtr hdc = e.Graphics.GetHdc();
+        try
+        {
+            // Attach the device to the outputformat for drawing
+            of.attachDevice(hdc);
+            // Drawing directly to the GDI context
+            using (imageObj image = map.draw()) { };
+        }
+        finally
+        {
+            of.attachDevice(IntPtr.Zero);
+            e.Graphics.ReleaseHdc(hdc);
+        }
+
+        e.HasMorePages = false;
+    }
+}
+



More information about the mapserver-commits mailing list