[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