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

svn at osgeo.org svn at osgeo.org
Sun Nov 14 10:36:55 EST 2010


Author: tamas
Date: 2010-11-14 07:36:55 -0800 (Sun, 14 Nov 2010)
New Revision: 10724

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

Modified: sandbox/mapserver6/mapscript/csharp/Makefile.vc
===================================================================
--- sandbox/mapserver6/mapscript/csharp/Makefile.vc	2010-11-14 15:35:06 UTC (rev 10723)
+++ sandbox/mapserver6/mapscript/csharp/Makefile.vc	2010-11-14 15:36:55 UTC (rev 10724)
@@ -94,6 +94,7 @@
 	$(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	
 
 test:
 !IFDEF MONO

Modified: sandbox/mapserver6/mapscript/csharp/csmodule.i
===================================================================
--- sandbox/mapserver6/mapscript/csharp/csmodule.i	2010-11-14 15:35:06 UTC (rev 10723)
+++ sandbox/mapserver6/mapscript/csharp/csmodule.i	2010-11-14 15:36:55 UTC (rev 10724)
@@ -352,6 +352,12 @@
 #endif
 %}
 
+/* Typemaps for device handle */
+%typemap(imtype) (void* device)  %{IntPtr%}
+%typemap(cstype) (void* device) %{IntPtr%}
+%typemap(in) (void* device) %{ $1 = ($1_ltype)$input; %}
+%typemap(csin) (void* device)  "$csinput"
+
 /******************************************************************************
  * Preventing to take ownership of the memory when constructing objects 
  * with parent objects (causing nullreference exception, Bug 1743)

Added: sandbox/mapserver6/mapscript/csharp/examples/drawmapDirect.cs
===================================================================
--- sandbox/mapserver6/mapscript/csharp/examples/drawmapDirect.cs	                        (rev 0)
+++ sandbox/mapserver6/mapscript/csharp/examples/drawmapDirect.cs	2010-11-14 15:36:55 UTC (rev 10724)
@@ -0,0 +1,100 @@
+/******************************************************************************
+ * $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
+ *           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.Imaging;
+using OSGeo.MapServer;	
+
+/// <summary>
+/// A C# based mapscript example to draw the map directly onto a GDI device context.
+/// </summary>
+class DrawMap
+{
+  public static void usage() 
+  { 
+	Console.WriteLine("usage: DrawMap {mapfile} {outfile}");
+	System.Environment.Exit(-1);
+  }
+		  
+  public static void Main(string[] args)
+  {
+    Console.WriteLine("");
+	if (args.Length < 2) usage();
+    
+	mapObj 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
+    {
+        // Create the output format
+        outputFormatObj of = new outputFormatObj("CAIRO/WINGDI", "cairowinGDI");
+        map.appendOutputFormat(of);
+        map.selectOutputFormat("cairowinGDI");
+
+        Bitmap mapImage = new Bitmap(map.width, map.height, PixelFormat.Format32bppRgb);
+
+        using (Graphics g = Graphics.FromImage(mapImage))
+        {
+            IntPtr hdc = g.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);
+                g.ReleaseHdc(hdc);
+            }
+        }
+
+        mapImage.Save(args[1]);
+    } 
+	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 );	}	
+  }
+}
+



More information about the mapserver-commits mailing list