[mapguide-commits] r9186 - sandbox/jng/utfgrid/Common/Renderers

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Tue May 2 04:46:23 PDT 2017


Author: jng
Date: 2017-05-02 04:46:23 -0700 (Tue, 02 May 2017)
New Revision: 9186

Modified:
   sandbox/jng/utfgrid/Common/Renderers/UTFGridRenderer.cpp
   sandbox/jng/utfgrid/Common/Renderers/UTFGridRenderer.h
   sandbox/jng/utfgrid/Common/Renderers/agg_utfgrid_context.h
Log:
UTFGrid rendering fixes:
 - I misread the UTFGrid spec, the grid is not 256x256. It's [256 / resolution] x [256 / resolution]. This resolution is generally 4.
 - agg_utfgrid_context changes:
   - Have agg_utfgrid_context fully own the back buffer. 
   - Remove redundant width/height members, interrogate this from the agg rendering_buffer
 - Reverse iterate the y-axis when encoding the back buffer, otherwise the result is flipped on the y-axis.

Modified: sandbox/jng/utfgrid/Common/Renderers/UTFGridRenderer.cpp
===================================================================
--- sandbox/jng/utfgrid/Common/Renderers/UTFGridRenderer.cpp	2017-05-01 23:56:15 UTC (rev 9185)
+++ sandbox/jng/utfgrid/Common/Renderers/UTFGridRenderer.cpp	2017-05-02 11:46:23 UTC (rev 9186)
@@ -46,7 +46,7 @@
 //
 // =================================================================================== //
 
-UTFGridRenderer::UTFGridRenderer(UTFGridContent* utfGrid)
+UTFGridRenderer::UTFGridRenderer(UTFGridContent* utfGrid, unsigned int resolution)
   : m_currentColor(0),
     m_content(utfGrid),
     m_dpi(0),
@@ -57,18 +57,13 @@
     m_layerInfo(NULL),
     m_fcInfo(NULL)
 {
-    // allocate back buffer
-    int len = UTF_GRID_WIDTH * UTF_GRID_HEIGHT;
-    m_rows = new utfgrid_band_type[len];
-
     // get the agg context going
-    m_context = new agg_utfgrid_context(m_rows, UTF_GRID_WIDTH, UTF_GRID_HEIGHT);
+    m_context = new agg_utfgrid_context(UTF_GRID_WIDTH, UTF_GRID_HEIGHT, resolution);
 }
 
 UTFGridRenderer::~UTFGridRenderer()
 {
     delete m_context;
-    delete[] m_rows;
 }
 
 void UTFGridRenderer::StartMap(RS_MapUIInfo * mapInfo, RS_Bounds & extents, double mapScale, double dpi, double metersPerUnit, CSysTransformer * /*xformToLL*/)
@@ -85,9 +80,9 @@
 
     double scale;
     if (arDisplay > arMap)
-        scale = (double)UTF_GRID_HEIGHT / m_extents.height();
+        scale = (double)m_context->rendering_buffer.height() / m_extents.height();
     else
-        scale = (double)UTF_GRID_WIDTH / m_extents.width();
+        scale = (double)m_context->rendering_buffer.width() / m_extents.width();
 
     m_xform.x0 = scale;
     m_xform.x1 = 0.0;
@@ -116,11 +111,12 @@
 void UTFGridRenderer::EndMap()
 {
     m_mapInfo = NULL;
-    for (int y = 0; y < UTF_GRID_HEIGHT; y++) 
+    //Y-axis is flipped, so reverse iterate the y-axis
+    for (int y = m_context->rendering_buffer.height() - 1; y >= 0; y--)
     {
         m_content->StartGridRow();
         auto row_ptr = m_context->rendering_buffer.row_ptr(y);
-        for (int x = 0; x < UTF_GRID_WIDTH; x++)
+        for (int x = 0; x < m_context->rendering_buffer.width(); x++)
         {
             m_content->AppendRowPixel(row_ptr[x]);
         }

Modified: sandbox/jng/utfgrid/Common/Renderers/UTFGridRenderer.h
===================================================================
--- sandbox/jng/utfgrid/Common/Renderers/UTFGridRenderer.h	2017-05-01 23:56:15 UTC (rev 9185)
+++ sandbox/jng/utfgrid/Common/Renderers/UTFGridRenderer.h	2017-05-02 11:46:23 UTC (rev 9186)
@@ -25,12 +25,14 @@
 #define UTF_GRID_WIDTH 256
 #define UTF_GRID_HEIGHT 256
 
+#define UTF_GRID_DEFAULT_RESOLUTION 4
+
 class agg_utfgrid_context;
 
 class UTFGridRenderer : public SE_Renderer
 {
 public:
-    RENDERERS_API UTFGridRenderer(UTFGridContent* utfGrid);
+    RENDERERS_API UTFGridRenderer(UTFGridContent* utfGrid, unsigned int resolution = UTF_GRID_DEFAULT_RESOLUTION);
     RENDERERS_API virtual ~UTFGridRenderer();
 
     // Inherited via SE_Renderer

Modified: sandbox/jng/utfgrid/Common/Renderers/agg_utfgrid_context.h
===================================================================
--- sandbox/jng/utfgrid/Common/Renderers/agg_utfgrid_context.h	2017-05-01 23:56:15 UTC (rev 9185)
+++ sandbox/jng/utfgrid/Common/Renderers/agg_utfgrid_context.h	2017-05-02 11:46:23 UTC (rev 9186)
@@ -48,21 +48,15 @@
 class agg_utfgrid_context
 {
 public:
-    agg_utfgrid_context(utfgrid_band_type* rows, int width, int height)
+    agg_utfgrid_context(int width, int height, unsigned int resolution)
     {
-        if (!rows)
-        {
-            ownrows = true;
-            m_rows = new utfgrid_band_type[width*height];
-        }
-        else
-        {
-            ownrows = false;
-            m_rows = rows;
-        }
+        int bufWidth = width / resolution;
+        int bufHeight = height / resolution;
 
-        int stride = width; // *sizeof(utfgrid_band_type);
-        rendering_buffer.attach(m_rows, width, height, stride);
+        size_t len = bufWidth * bufHeight * sizeof(utfgrid_band_type);
+        m_rows = new utfgrid_band_type[len];
+        int stride = bufWidth;
+        rendering_buffer.attach(m_rows, bufWidth, bufHeight, stride);
         pixel_format.attach(rendering_buffer);
         renderer_base.attach(pixel_format);
         renderer_scanline.attach(renderer_base);
@@ -72,12 +66,11 @@
 
     ~agg_utfgrid_context()
     {
-        if (ownrows)
-            delete[] m_rows;
+        delete[] m_rows;
     }
 
     // rendering buffer
-    unsigned int*               m_rows;
+    utfgrid_band_type*          m_rows; //Not owned by this
     bool                        ownrows;
     utfgrid_rendering_buffer    rendering_buffer;
     pixfmt_utf32                pixel_format;



More information about the mapguide-commits mailing list