[mapguide-commits] r4700 - in sandbox/rfc90: .
MgDev/Common/MapGuideCommon/Services
MgDev/Common/MapGuideCommon/System MgDev/Common/Renderers
MgDev/Server MgDev/Server/src/Core MgDev/Server/src/PostBuild
MgDev/Server/src/Services/Rendering MgDev/Server/src/Services/Tile
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Thu Mar 25 23:01:24 EDT 2010
Author: uvlite
Date: 2010-03-25 23:01:23 -0400 (Thu, 25 Mar 2010)
New Revision: 4700
Added:
sandbox/rfc90/MgDev/
Modified:
sandbox/rfc90/MgDev/Common/MapGuideCommon/Services/ProxyRenderingService.h
sandbox/rfc90/MgDev/Common/MapGuideCommon/Services/RenderingService.h
sandbox/rfc90/MgDev/Common/MapGuideCommon/Services/TileService.h
sandbox/rfc90/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp
sandbox/rfc90/MgDev/Common/MapGuideCommon/System/ConfigProperties.h
sandbox/rfc90/MgDev/Common/Renderers/AGGImageIO.cpp
sandbox/rfc90/MgDev/Common/Renderers/AGGRenderer.cpp
sandbox/rfc90/MgDev/Common/Renderers/AGGRenderer.h
sandbox/rfc90/MgDev/Server/Server.sln
sandbox/rfc90/MgDev/Server/src/Core/serverconfig.ini
sandbox/rfc90/MgDev/Server/src/PostBuild/PostBuild.mak
sandbox/rfc90/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp
sandbox/rfc90/MgDev/Server/src/Services/Rendering/ServerRenderingService.h
sandbox/rfc90/MgDev/Server/src/Services/Rendering/ServerRenderingService.vcproj
sandbox/rfc90/MgDev/Server/src/Services/Tile/ServerTileService.cpp
sandbox/rfc90/MgDev/Server/src/Services/Tile/ServerTileService.h
sandbox/rfc90/MgDev/Server/src/Services/Tile/ServerTileService.vcproj
Log:
Branch Rev 4697 to rfc90 sandbox
Modified: sandbox/rfc90/MgDev/Common/MapGuideCommon/Services/ProxyRenderingService.h
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/Services/ProxyRenderingService.h 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Common/MapGuideCommon/Services/ProxyRenderingService.h 2010-03-26 03:01:23 UTC (rev 4700)
@@ -576,6 +576,8 @@
///
MgProxyRenderingService();
+// virtual MgByteReader* RenderFromMetaTile(MgMap* map, MgByteReader* metaTile, INT32 x, INT32 y, INT32 tileSize);
+
DECLARE_CREATE_SERVICE()
//////////////////////////////////////////////////////////////////
Modified: sandbox/rfc90/MgDev/Common/MapGuideCommon/Services/RenderingService.h
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/Services/RenderingService.h 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Common/MapGuideCommon/Services/RenderingService.h 2010-03-26 03:01:23 UTC (rev 4700)
@@ -582,6 +582,8 @@
///
MgRenderingService();
+// virtual MgByteReader* RenderFromMetaTile(MgMap* map, MgByteReader* metaTile, INT32 x, INT32 y, INT32 tileSize) = 0;
+
protected:
/////////////////////////////////////////////////////////////////
Modified: sandbox/rfc90/MgDev/Common/MapGuideCommon/Services/TileService.h
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/Services/TileService.h 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Common/MapGuideCommon/Services/TileService.h 2010-03-26 03:01:23 UTC (rev 4700)
@@ -154,7 +154,7 @@
INT32 tileColumn,
INT32 tileRow) = 0;
- //////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////
/// \brief
/// Construct an MgTileService object.
///
Modified: sandbox/rfc90/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Common/MapGuideCommon/System/ConfigProperties.cpp 2010-03-26 03:01:23 UTC (rev 4700)
@@ -375,6 +375,8 @@
const INT32 MgConfigProperties::DefaultTileServicePropertyTileSizeY = 300;
const STRING MgConfigProperties::TileServicePropertyImageFormat = L"ImageFormat";
const STRING MgConfigProperties::DefaultTileServicePropertyImageFormat = L"PNG";
+const STRING MgConfigProperties::TileServicePropertyUseMetaTiles = L"UseMetaTiles";
+const INT32 MgConfigProperties::DefaultTileServicePropertyUseMetaTiles = 0;
// ******************************************************************
// Access Log Properties
Modified: sandbox/rfc90/MgDev/Common/MapGuideCommon/System/ConfigProperties.h
===================================================================
--- trunk/MgDev/Common/MapGuideCommon/System/ConfigProperties.h 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Common/MapGuideCommon/System/ConfigProperties.h 2010-03-26 03:01:23 UTC (rev 4700)
@@ -510,6 +510,10 @@
static const STRING TileServicePropertyTiledMapCacheSize; /// value("TiledMapCacheSize")
static const INT32 DefaultTileServicePropertyTiledMapCacheSize; /// value(10)
+ /// Sets the number of metatiles used for tile generation
+ static const STRING TileServicePropertyUseMetaTiles; /// value("UseMetaTiles")
+ static const INT32 DefaultTileServicePropertyUseMetaTiles; /// value(0)
+
EXTERNAL_API:
//////////////////////////////////////////////////////////////////
Modified: sandbox/rfc90/MgDev/Common/Renderers/AGGImageIO.cpp
===================================================================
--- trunk/MgDev/Common/Renderers/AGGImageIO.cpp 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Common/Renderers/AGGImageIO.cpp 2010-03-26 03:01:23 UTC (rev 4700)
@@ -968,15 +968,25 @@
//NOTE: We do not use gd for reading or writing PNG since internally gd drops a bit
//from the alpha channel, which is not desirable for high quality output
+ //if (format == L"META") // return bitmap only if rendering metatiles
+ //{
+ // return new RS_ByteData((unsigned char*) src, src_width * src_height * 4); // 32 bit pixels
+ //}
+ //else
if (format == L"PNG")
{
png_write_context cxt;
memset(&cxt, 0, sizeof(cxt));
write_png(&cxt, src, dst_width, dst_height, gamma, drop_alpha);
- RS_ByteData* byteData = (cxt.used > 0)? new RS_ByteData(cxt.buf, (unsigned int)cxt.used) : NULL;
- delete [] cxt.buf;
- return byteData;
+ if (cxt.used > 0)
+ {
+ std::auto_ptr<RS_ByteData> byteData;
+ byteData.reset(new RS_ByteData(cxt.buf, (unsigned int)cxt.used));
+ delete [] cxt.buf;
+ return byteData.release();
+ } else
+ return NULL;
}
else if (format == L"JPG" || format == L"GIF" || format == L"PNG8")
{
@@ -1053,7 +1063,9 @@
int size = 0;
unsigned char* data = NULL;
- if (format == L"GIF") // MgImageFormats::Gif
+ if (format == L"META") // meta tiling.... keep the raster for now
+ data = (unsigned char*)gdImgPalette;
+ else if (format == L"GIF") // MgImageFormats::Gif
data = (unsigned char*)gdImageGifPtr(gdImgPalette, &size);
else if (format == L"PNG8") // MgImageFormats::Png8
data = (unsigned char*)gdImagePngPtr(gdImgPalette, &size);
Modified: sandbox/rfc90/MgDev/Common/Renderers/AGGRenderer.cpp
===================================================================
--- trunk/MgDev/Common/Renderers/AGGRenderer.cpp 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Common/Renderers/AGGRenderer.cpp 2010-03-26 03:01:23 UTC (rev 4700)
@@ -16,7 +16,7 @@
//
#include "stdafx.h"
-
+#include "assert.h"
#include "AGGRenderer.h"
#include "LineStyle.h"
#include "SLDSymbols.h"
@@ -254,12 +254,37 @@
// a bytestream in the given image format using the provided colorPalette
// if given.
RS_ByteData* AGGRenderer::Save(const RS_String& format, int width, int height,
- RS_ColorVector* baseColorPalette)
+ RS_ColorVector* baseColorPalette, unsigned int* imagebuffer)
{
+ if (format == L"META")
+ {
+ assert (imagebuffer == NULL); // this musnt happen
+ int imagebufferByteSize = width*height*4; // multiply 32 bit pixel by 4 bytes
+ // m_bownbuffer = false; // take ownership of rendered imagebuffer for to create subtiles later
+ //auto_ptr<RS_ByteData> retVal;
+ //retVal.reset(new RS_ByteData((unsigned char*) m_rows, imagebufferByteSize));
+ //return retVal.release();
+ // the RS_ByteData CTOR memcopies the source
+ return new RS_ByteData((unsigned char*) m_rows, imagebufferByteSize);
+ } else {
+ if (imagebuffer) // use imagebuffer from previous meta tiling pass
+ return AGGImageIO::Save(format, imagebuffer, m_width, m_height, width, height, m_bgcolor, baseColorPalette);
+ else
+ return AGGImageIO::Save(format, m_rows, m_width, m_height, width, height, m_bgcolor, baseColorPalette);
+ }
+}
+
+/*
+//////////////////////////////////////////////////////////////////////////////
+// Return the rendered image passed in via the imagebuffer (m_rows) as
+// a bytestream in the given image format using the provided colorPalette
+// if given.
+RS_ByteData* AGGRenderer::Save(const RS_String& format, int width, int height)
+{
return AGGImageIO::Save(format, m_rows, m_width, m_height, width, height, m_bgcolor, baseColorPalette);
}
-
+*/
//////////////////////////////////////////////////////////////////////////////
void AGGRenderer::Combine(const RS_String& fileIn1, const RS_String& fileIn2, const RS_String& fileOut)
{
Modified: sandbox/rfc90/MgDev/Common/Renderers/AGGRenderer.h
===================================================================
--- trunk/MgDev/Common/Renderers/AGGRenderer.h 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Common/Renderers/AGGRenderer.h 2010-03-26 03:01:23 UTC (rev 4700)
@@ -152,7 +152,7 @@
RENDERERS_API void Save(const RS_String& filename, const RS_String& format);
RENDERERS_API void Save(const RS_String& filename, const RS_String& format, int width, int height);
RENDERERS_API RS_ByteData* Save(const RS_String& format, int width, int height,
- RS_ColorVector* baseColorPalette = NULL);
+ RS_ColorVector* baseColorPalette = NULL, unsigned int * framebuf = NULL);
RENDERERS_API void Combine(const RS_String& fileIn1, const RS_String& fileIn2, const RS_String& fileOut);
RENDERERS_API void SetWorldToScreenTransform(SE_Matrix& xform);
Modified: sandbox/rfc90/MgDev/Server/Server.sln
===================================================================
--- trunk/MgDev/Server/Server.sln 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Server/Server.sln 2010-03-26 03:01:23 UTC (rev 4700)
@@ -296,240 +296,418 @@
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug Static|Win32 = Debug Static|Win32
+ Debug Static|x64 = Debug Static|x64
Debug|Win32 = Debug|Win32
Debug|x64 = Debug|x64
+ Release Static|Win32 = Release Static|Win32
+ Release Static|x64 = Release Static|x64
Release|Win32 = Release|Win32
Release|x64 = Release|x64
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Debug Static|x64.ActiveCfg = Debug|x64
+ {FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Debug Static|x64.Build.0 = Debug|x64
{FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Debug|Win32.ActiveCfg = Debug|Win32
{FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Debug|Win32.Build.0 = Debug|Win32
{FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Debug|x64.ActiveCfg = Debug|x64
{FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Debug|x64.Build.0 = Debug|x64
+ {FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Release Static|Win32.ActiveCfg = Release|x64
+ {FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Release Static|x64.ActiveCfg = Release|x64
+ {FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Release Static|x64.Build.0 = Release|x64
{FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Release|Win32.ActiveCfg = Release|Win32
{FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Release|Win32.Build.0 = Release|Win32
{FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Release|x64.ActiveCfg = Release|x64
{FDF553DE-0D30-4456-8A84-5009C9EAAED2}.Release|x64.Build.0 = Release|x64
+ {A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Debug Static|x64.ActiveCfg = Debug|x64
+ {A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Debug Static|x64.Build.0 = Debug|x64
{A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Debug|Win32.ActiveCfg = Debug|Win32
{A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Debug|Win32.Build.0 = Debug|Win32
{A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Debug|x64.ActiveCfg = Debug|x64
{A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Debug|x64.Build.0 = Debug|x64
+ {A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Release Static|Win32.ActiveCfg = Release|x64
+ {A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Release Static|x64.ActiveCfg = Release|x64
+ {A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Release Static|x64.Build.0 = Release|x64
{A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Release|Win32.ActiveCfg = Release|Win32
{A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Release|Win32.Build.0 = Release|Win32
{A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Release|x64.ActiveCfg = Release|x64
{A82ADC7D-4DA4-42F2-9BF6-DF5DCFB44425}.Release|x64.Build.0 = Release|x64
+ {D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Debug Static|x64.ActiveCfg = Debug|x64
+ {D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Debug Static|x64.Build.0 = Debug|x64
{D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Debug|Win32.ActiveCfg = Debug|Win32
{D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Debug|Win32.Build.0 = Debug|Win32
{D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Debug|x64.ActiveCfg = Debug|x64
{D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Debug|x64.Build.0 = Debug|x64
+ {D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Release Static|Win32.ActiveCfg = Release|x64
+ {D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Release Static|x64.ActiveCfg = Release|x64
+ {D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Release Static|x64.Build.0 = Release|x64
{D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Release|Win32.ActiveCfg = Release|Win32
{D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Release|Win32.Build.0 = Release|Win32
{D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Release|x64.ActiveCfg = Release|x64
{D954DAAC-E305-40CE-B3F3-C229A0BEF4F0}.Release|x64.Build.0 = Release|x64
+ {5287A594-4D4F-43FE-A281-E279AB708CF1}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {5287A594-4D4F-43FE-A281-E279AB708CF1}.Debug Static|x64.ActiveCfg = Debug|x64
+ {5287A594-4D4F-43FE-A281-E279AB708CF1}.Debug Static|x64.Build.0 = Debug|x64
{5287A594-4D4F-43FE-A281-E279AB708CF1}.Debug|Win32.ActiveCfg = Debug|Win32
{5287A594-4D4F-43FE-A281-E279AB708CF1}.Debug|Win32.Build.0 = Debug|Win32
{5287A594-4D4F-43FE-A281-E279AB708CF1}.Debug|x64.ActiveCfg = Debug|x64
{5287A594-4D4F-43FE-A281-E279AB708CF1}.Debug|x64.Build.0 = Debug|x64
+ {5287A594-4D4F-43FE-A281-E279AB708CF1}.Release Static|Win32.ActiveCfg = Release|x64
+ {5287A594-4D4F-43FE-A281-E279AB708CF1}.Release Static|x64.ActiveCfg = Release|x64
+ {5287A594-4D4F-43FE-A281-E279AB708CF1}.Release Static|x64.Build.0 = Release|x64
{5287A594-4D4F-43FE-A281-E279AB708CF1}.Release|Win32.ActiveCfg = Release|Win32
{5287A594-4D4F-43FE-A281-E279AB708CF1}.Release|Win32.Build.0 = Release|Win32
{5287A594-4D4F-43FE-A281-E279AB708CF1}.Release|x64.ActiveCfg = Release|x64
{5287A594-4D4F-43FE-A281-E279AB708CF1}.Release|x64.Build.0 = Release|x64
+ {C50254F2-654A-48DE-AF5B-20605AEF8D10}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {C50254F2-654A-48DE-AF5B-20605AEF8D10}.Debug Static|x64.ActiveCfg = Debug|x64
+ {C50254F2-654A-48DE-AF5B-20605AEF8D10}.Debug Static|x64.Build.0 = Debug|x64
{C50254F2-654A-48DE-AF5B-20605AEF8D10}.Debug|Win32.ActiveCfg = Debug|Win32
{C50254F2-654A-48DE-AF5B-20605AEF8D10}.Debug|Win32.Build.0 = Debug|Win32
{C50254F2-654A-48DE-AF5B-20605AEF8D10}.Debug|x64.ActiveCfg = Debug|x64
{C50254F2-654A-48DE-AF5B-20605AEF8D10}.Debug|x64.Build.0 = Debug|x64
+ {C50254F2-654A-48DE-AF5B-20605AEF8D10}.Release Static|Win32.ActiveCfg = Release|x64
+ {C50254F2-654A-48DE-AF5B-20605AEF8D10}.Release Static|x64.ActiveCfg = Release|x64
+ {C50254F2-654A-48DE-AF5B-20605AEF8D10}.Release Static|x64.Build.0 = Release|x64
{C50254F2-654A-48DE-AF5B-20605AEF8D10}.Release|Win32.ActiveCfg = Release|Win32
{C50254F2-654A-48DE-AF5B-20605AEF8D10}.Release|Win32.Build.0 = Release|Win32
{C50254F2-654A-48DE-AF5B-20605AEF8D10}.Release|x64.ActiveCfg = Release|x64
{C50254F2-654A-48DE-AF5B-20605AEF8D10}.Release|x64.Build.0 = Release|x64
+ {85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Debug Static|x64.ActiveCfg = Debug|x64
+ {85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Debug Static|x64.Build.0 = Debug|x64
{85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Debug|Win32.ActiveCfg = Debug|Win32
{85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Debug|Win32.Build.0 = Debug|Win32
{85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Debug|x64.ActiveCfg = Debug|x64
{85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Debug|x64.Build.0 = Debug|x64
+ {85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Release Static|Win32.ActiveCfg = Release|x64
+ {85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Release Static|x64.ActiveCfg = Release|x64
+ {85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Release Static|x64.Build.0 = Release|x64
{85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Release|Win32.ActiveCfg = Release|Win32
{85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Release|Win32.Build.0 = Release|Win32
{85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Release|x64.ActiveCfg = Release|x64
{85882748-DD71-4D2B-9E5A-03AF8C8D91B7}.Release|x64.Build.0 = Release|x64
+ {F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Debug Static|x64.ActiveCfg = Debug|x64
+ {F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Debug Static|x64.Build.0 = Debug|x64
{F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Debug|Win32.ActiveCfg = Debug|Win32
{F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Debug|Win32.Build.0 = Debug|Win32
{F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Debug|x64.ActiveCfg = Debug|x64
{F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Debug|x64.Build.0 = Debug|x64
+ {F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Release Static|Win32.ActiveCfg = Release|x64
+ {F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Release Static|x64.ActiveCfg = Release|x64
+ {F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Release Static|x64.Build.0 = Release|x64
{F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Release|Win32.ActiveCfg = Release|Win32
{F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Release|Win32.Build.0 = Release|Win32
{F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Release|x64.ActiveCfg = Release|x64
{F7334B1B-0EFA-47E3-8E66-DF158E61B7E4}.Release|x64.Build.0 = Release|x64
+ {38161685-88ED-415E-A545-CCC17BE069AE}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {38161685-88ED-415E-A545-CCC17BE069AE}.Debug Static|x64.ActiveCfg = Debug|x64
+ {38161685-88ED-415E-A545-CCC17BE069AE}.Debug Static|x64.Build.0 = Debug|x64
{38161685-88ED-415E-A545-CCC17BE069AE}.Debug|Win32.ActiveCfg = Debug|Win32
{38161685-88ED-415E-A545-CCC17BE069AE}.Debug|Win32.Build.0 = Debug|Win32
{38161685-88ED-415E-A545-CCC17BE069AE}.Debug|x64.ActiveCfg = Debug|x64
{38161685-88ED-415E-A545-CCC17BE069AE}.Debug|x64.Build.0 = Debug|x64
+ {38161685-88ED-415E-A545-CCC17BE069AE}.Release Static|Win32.ActiveCfg = Release|x64
+ {38161685-88ED-415E-A545-CCC17BE069AE}.Release Static|x64.ActiveCfg = Release|x64
+ {38161685-88ED-415E-A545-CCC17BE069AE}.Release Static|x64.Build.0 = Release|x64
{38161685-88ED-415E-A545-CCC17BE069AE}.Release|Win32.ActiveCfg = Release|Win32
{38161685-88ED-415E-A545-CCC17BE069AE}.Release|Win32.Build.0 = Release|Win32
{38161685-88ED-415E-A545-CCC17BE069AE}.Release|x64.ActiveCfg = Release|x64
{38161685-88ED-415E-A545-CCC17BE069AE}.Release|x64.Build.0 = Release|x64
+ {7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Debug Static|x64.ActiveCfg = Debug|x64
+ {7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Debug Static|x64.Build.0 = Debug|x64
{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Debug|Win32.ActiveCfg = Debug|Win32
{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Debug|Win32.Build.0 = Debug|Win32
{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Debug|x64.ActiveCfg = Debug|x64
{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Debug|x64.Build.0 = Debug|x64
+ {7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Release Static|Win32.ActiveCfg = Release|x64
+ {7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Release Static|x64.ActiveCfg = Release|x64
+ {7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Release Static|x64.Build.0 = Release|x64
{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Release|Win32.ActiveCfg = Release|Win32
{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Release|Win32.Build.0 = Release|Win32
{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Release|x64.ActiveCfg = Release|x64
{7C1C5695-C51C-4017-ABEF-BC3032CBAF3B}.Release|x64.Build.0 = Release|x64
+ {341D5463-186E-49BA-B942-3D3BE28D65C0}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {341D5463-186E-49BA-B942-3D3BE28D65C0}.Debug Static|x64.ActiveCfg = Debug|x64
+ {341D5463-186E-49BA-B942-3D3BE28D65C0}.Debug Static|x64.Build.0 = Debug|x64
{341D5463-186E-49BA-B942-3D3BE28D65C0}.Debug|Win32.ActiveCfg = Debug|Win32
{341D5463-186E-49BA-B942-3D3BE28D65C0}.Debug|Win32.Build.0 = Debug|Win32
{341D5463-186E-49BA-B942-3D3BE28D65C0}.Debug|x64.ActiveCfg = Debug|x64
{341D5463-186E-49BA-B942-3D3BE28D65C0}.Debug|x64.Build.0 = Debug|x64
+ {341D5463-186E-49BA-B942-3D3BE28D65C0}.Release Static|Win32.ActiveCfg = Release|x64
+ {341D5463-186E-49BA-B942-3D3BE28D65C0}.Release Static|x64.ActiveCfg = Release|x64
+ {341D5463-186E-49BA-B942-3D3BE28D65C0}.Release Static|x64.Build.0 = Release|x64
{341D5463-186E-49BA-B942-3D3BE28D65C0}.Release|Win32.ActiveCfg = Release|Win32
{341D5463-186E-49BA-B942-3D3BE28D65C0}.Release|Win32.Build.0 = Release|Win32
{341D5463-186E-49BA-B942-3D3BE28D65C0}.Release|x64.ActiveCfg = Release|x64
{341D5463-186E-49BA-B942-3D3BE28D65C0}.Release|x64.Build.0 = Release|x64
+ {DB2CC2E3-4754-4932-B865-424A44E58FD0}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {DB2CC2E3-4754-4932-B865-424A44E58FD0}.Debug Static|x64.ActiveCfg = Debug|x64
+ {DB2CC2E3-4754-4932-B865-424A44E58FD0}.Debug Static|x64.Build.0 = Debug|x64
{DB2CC2E3-4754-4932-B865-424A44E58FD0}.Debug|Win32.ActiveCfg = Debug|Win32
{DB2CC2E3-4754-4932-B865-424A44E58FD0}.Debug|Win32.Build.0 = Debug|Win32
{DB2CC2E3-4754-4932-B865-424A44E58FD0}.Debug|x64.ActiveCfg = Debug|x64
{DB2CC2E3-4754-4932-B865-424A44E58FD0}.Debug|x64.Build.0 = Debug|x64
+ {DB2CC2E3-4754-4932-B865-424A44E58FD0}.Release Static|Win32.ActiveCfg = Release|x64
+ {DB2CC2E3-4754-4932-B865-424A44E58FD0}.Release Static|x64.ActiveCfg = Release|x64
+ {DB2CC2E3-4754-4932-B865-424A44E58FD0}.Release Static|x64.Build.0 = Release|x64
{DB2CC2E3-4754-4932-B865-424A44E58FD0}.Release|Win32.ActiveCfg = Release|Win32
{DB2CC2E3-4754-4932-B865-424A44E58FD0}.Release|Win32.Build.0 = Release|Win32
{DB2CC2E3-4754-4932-B865-424A44E58FD0}.Release|x64.ActiveCfg = Release|x64
{DB2CC2E3-4754-4932-B865-424A44E58FD0}.Release|x64.Build.0 = Release|x64
+ {E6B0012F-58F6-42F4-8F02-065C35829569}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {E6B0012F-58F6-42F4-8F02-065C35829569}.Debug Static|x64.ActiveCfg = Debug|x64
+ {E6B0012F-58F6-42F4-8F02-065C35829569}.Debug Static|x64.Build.0 = Debug|x64
{E6B0012F-58F6-42F4-8F02-065C35829569}.Debug|Win32.ActiveCfg = Debug|Win32
{E6B0012F-58F6-42F4-8F02-065C35829569}.Debug|Win32.Build.0 = Debug|Win32
{E6B0012F-58F6-42F4-8F02-065C35829569}.Debug|x64.ActiveCfg = Debug|x64
{E6B0012F-58F6-42F4-8F02-065C35829569}.Debug|x64.Build.0 = Debug|x64
+ {E6B0012F-58F6-42F4-8F02-065C35829569}.Release Static|Win32.ActiveCfg = Release|x64
+ {E6B0012F-58F6-42F4-8F02-065C35829569}.Release Static|x64.ActiveCfg = Release|x64
+ {E6B0012F-58F6-42F4-8F02-065C35829569}.Release Static|x64.Build.0 = Release|x64
{E6B0012F-58F6-42F4-8F02-065C35829569}.Release|Win32.ActiveCfg = Release|Win32
{E6B0012F-58F6-42F4-8F02-065C35829569}.Release|Win32.Build.0 = Release|Win32
{E6B0012F-58F6-42F4-8F02-065C35829569}.Release|x64.ActiveCfg = Release|x64
{E6B0012F-58F6-42F4-8F02-065C35829569}.Release|x64.Build.0 = Release|x64
+ {8D947123-A12C-45DA-BD00-8B62DD5A0459}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {8D947123-A12C-45DA-BD00-8B62DD5A0459}.Debug Static|x64.ActiveCfg = Debug|x64
+ {8D947123-A12C-45DA-BD00-8B62DD5A0459}.Debug Static|x64.Build.0 = Debug|x64
{8D947123-A12C-45DA-BD00-8B62DD5A0459}.Debug|Win32.ActiveCfg = Debug|Win32
{8D947123-A12C-45DA-BD00-8B62DD5A0459}.Debug|Win32.Build.0 = Debug|Win32
{8D947123-A12C-45DA-BD00-8B62DD5A0459}.Debug|x64.ActiveCfg = Debug|x64
{8D947123-A12C-45DA-BD00-8B62DD5A0459}.Debug|x64.Build.0 = Debug|x64
+ {8D947123-A12C-45DA-BD00-8B62DD5A0459}.Release Static|Win32.ActiveCfg = Release|x64
+ {8D947123-A12C-45DA-BD00-8B62DD5A0459}.Release Static|x64.ActiveCfg = Release|x64
+ {8D947123-A12C-45DA-BD00-8B62DD5A0459}.Release Static|x64.Build.0 = Release|x64
{8D947123-A12C-45DA-BD00-8B62DD5A0459}.Release|Win32.ActiveCfg = Release|Win32
{8D947123-A12C-45DA-BD00-8B62DD5A0459}.Release|Win32.Build.0 = Release|Win32
{8D947123-A12C-45DA-BD00-8B62DD5A0459}.Release|x64.ActiveCfg = Release|x64
{8D947123-A12C-45DA-BD00-8B62DD5A0459}.Release|x64.Build.0 = Release|x64
+ {8F654896-85DC-4F32-99B2-670D66B0FBF1}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {8F654896-85DC-4F32-99B2-670D66B0FBF1}.Debug Static|x64.ActiveCfg = Debug|x64
+ {8F654896-85DC-4F32-99B2-670D66B0FBF1}.Debug Static|x64.Build.0 = Debug|x64
{8F654896-85DC-4F32-99B2-670D66B0FBF1}.Debug|Win32.ActiveCfg = Debug|Win32
{8F654896-85DC-4F32-99B2-670D66B0FBF1}.Debug|Win32.Build.0 = Debug|Win32
{8F654896-85DC-4F32-99B2-670D66B0FBF1}.Debug|x64.ActiveCfg = Debug|x64
{8F654896-85DC-4F32-99B2-670D66B0FBF1}.Debug|x64.Build.0 = Debug|x64
+ {8F654896-85DC-4F32-99B2-670D66B0FBF1}.Release Static|Win32.ActiveCfg = Release|x64
+ {8F654896-85DC-4F32-99B2-670D66B0FBF1}.Release Static|x64.ActiveCfg = Release|x64
+ {8F654896-85DC-4F32-99B2-670D66B0FBF1}.Release Static|x64.Build.0 = Release|x64
{8F654896-85DC-4F32-99B2-670D66B0FBF1}.Release|Win32.ActiveCfg = Release|Win32
{8F654896-85DC-4F32-99B2-670D66B0FBF1}.Release|Win32.Build.0 = Release|Win32
{8F654896-85DC-4F32-99B2-670D66B0FBF1}.Release|x64.ActiveCfg = Release|x64
{8F654896-85DC-4F32-99B2-670D66B0FBF1}.Release|x64.Build.0 = Release|x64
+ {A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Debug Static|x64.ActiveCfg = Debug|x64
+ {A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Debug Static|x64.Build.0 = Debug|x64
{A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Debug|Win32.ActiveCfg = Debug|Win32
{A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Debug|Win32.Build.0 = Debug|Win32
{A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Debug|x64.ActiveCfg = Debug|x64
{A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Debug|x64.Build.0 = Debug|x64
+ {A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Release Static|Win32.ActiveCfg = Release|x64
+ {A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Release Static|x64.ActiveCfg = Release|x64
+ {A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Release Static|x64.Build.0 = Release|x64
{A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Release|Win32.ActiveCfg = Release|Win32
{A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Release|Win32.Build.0 = Release|Win32
{A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Release|x64.ActiveCfg = Release|x64
{A4F7F6B2-0E74-4DFD-B283-C7E380BD6F58}.Release|x64.Build.0 = Release|x64
+ {ADBF25E2-C629-4832-B315-F12ABDE05632}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {ADBF25E2-C629-4832-B315-F12ABDE05632}.Debug Static|x64.ActiveCfg = Debug|x64
+ {ADBF25E2-C629-4832-B315-F12ABDE05632}.Debug Static|x64.Build.0 = Debug|x64
{ADBF25E2-C629-4832-B315-F12ABDE05632}.Debug|Win32.ActiveCfg = Debug|Win32
{ADBF25E2-C629-4832-B315-F12ABDE05632}.Debug|Win32.Build.0 = Debug|Win32
{ADBF25E2-C629-4832-B315-F12ABDE05632}.Debug|x64.ActiveCfg = Debug|x64
{ADBF25E2-C629-4832-B315-F12ABDE05632}.Debug|x64.Build.0 = Debug|x64
+ {ADBF25E2-C629-4832-B315-F12ABDE05632}.Release Static|Win32.ActiveCfg = Release|x64
+ {ADBF25E2-C629-4832-B315-F12ABDE05632}.Release Static|x64.ActiveCfg = Release|x64
+ {ADBF25E2-C629-4832-B315-F12ABDE05632}.Release Static|x64.Build.0 = Release|x64
{ADBF25E2-C629-4832-B315-F12ABDE05632}.Release|Win32.ActiveCfg = Release|Win32
{ADBF25E2-C629-4832-B315-F12ABDE05632}.Release|Win32.Build.0 = Release|Win32
{ADBF25E2-C629-4832-B315-F12ABDE05632}.Release|x64.ActiveCfg = Release|x64
{ADBF25E2-C629-4832-B315-F12ABDE05632}.Release|x64.Build.0 = Release|x64
+ {B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Debug Static|x64.ActiveCfg = Debug|x64
+ {B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Debug Static|x64.Build.0 = Debug|x64
{B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Debug|Win32.ActiveCfg = Debug|Win32
{B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Debug|Win32.Build.0 = Debug|Win32
{B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Debug|x64.ActiveCfg = Debug|x64
{B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Debug|x64.Build.0 = Debug|x64
+ {B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Release Static|Win32.ActiveCfg = Release|x64
+ {B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Release Static|x64.ActiveCfg = Release|x64
+ {B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Release Static|x64.Build.0 = Release|x64
{B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Release|Win32.ActiveCfg = Release|Win32
{B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Release|Win32.Build.0 = Release|Win32
{B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Release|x64.ActiveCfg = Release|x64
{B50806B2-0E74-4DFD-B283-C7E380BD6F58}.Release|x64.Build.0 = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Debug Static|x64.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Debug Static|x64.Build.0 = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Debug|Win32.ActiveCfg = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Debug|Win32.Build.0 = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Debug|x64.ActiveCfg = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Debug|x64.Build.0 = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Release Static|Win32.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Release Static|x64.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Release Static|x64.Build.0 = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Release|Win32.ActiveCfg = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Release|Win32.Build.0 = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Release|x64.ActiveCfg = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C22}.Release|x64.Build.0 = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Debug Static|x64.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Debug Static|x64.Build.0 = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Debug|Win32.ActiveCfg = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Debug|Win32.Build.0 = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Debug|x64.ActiveCfg = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Debug|x64.Build.0 = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Release Static|Win32.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Release Static|x64.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Release Static|x64.Build.0 = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Release|Win32.ActiveCfg = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Release|Win32.Build.0 = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Release|x64.ActiveCfg = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1D}.Release|x64.Build.0 = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Debug Static|x64.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Debug Static|x64.Build.0 = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Debug|Win32.ActiveCfg = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Debug|Win32.Build.0 = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Debug|x64.ActiveCfg = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Debug|x64.Build.0 = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Release Static|Win32.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Release Static|x64.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Release Static|x64.Build.0 = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Release|Win32.ActiveCfg = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Release|Win32.Build.0 = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Release|x64.ActiveCfg = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1E}.Release|x64.Build.0 = Release|x64
+ {FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Debug Static|x64.ActiveCfg = Debug|x64
+ {FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Debug Static|x64.Build.0 = Debug|x64
{FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Debug|Win32.ActiveCfg = Debug|Win32
{FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Debug|Win32.Build.0 = Debug|Win32
{FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Debug|x64.ActiveCfg = Debug|x64
{FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Debug|x64.Build.0 = Debug|x64
+ {FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Release Static|Win32.ActiveCfg = Release|x64
+ {FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Release Static|x64.ActiveCfg = Release|x64
+ {FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Release Static|x64.Build.0 = Release|x64
{FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Release|Win32.ActiveCfg = Release|Win32
{FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Release|Win32.Build.0 = Release|Win32
{FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Release|x64.ActiveCfg = Release|x64
{FBC27460-155E-4C13-AFDF-BA8B7BE28F7F}.Release|x64.Build.0 = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Debug Static|x64.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Debug Static|x64.Build.0 = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Debug|Win32.ActiveCfg = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Debug|Win32.Build.0 = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Debug|x64.ActiveCfg = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Debug|x64.Build.0 = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Release Static|Win32.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Release Static|x64.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Release Static|x64.Build.0 = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Release|Win32.ActiveCfg = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Release|Win32.Build.0 = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Release|x64.ActiveCfg = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C1F}.Release|x64.Build.0 = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Debug Static|x64.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Debug Static|x64.Build.0 = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Debug|Win32.ActiveCfg = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Debug|Win32.Build.0 = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Debug|x64.ActiveCfg = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Debug|x64.Build.0 = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Release Static|Win32.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Release Static|x64.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Release Static|x64.Build.0 = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Release|Win32.ActiveCfg = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Release|Win32.Build.0 = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Release|x64.ActiveCfg = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C20}.Release|x64.Build.0 = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Debug Static|x64.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Debug Static|x64.Build.0 = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Debug|Win32.ActiveCfg = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Debug|Win32.Build.0 = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Debug|x64.ActiveCfg = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Debug|x64.Build.0 = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Release Static|Win32.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Release Static|x64.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Release Static|x64.Build.0 = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Release|Win32.ActiveCfg = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Release|Win32.Build.0 = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Release|x64.ActiveCfg = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C21}.Release|x64.Build.0 = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Debug Static|x64.ActiveCfg = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Debug Static|x64.Build.0 = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Debug|Win32.ActiveCfg = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Debug|Win32.Build.0 = Debug|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Debug|x64.ActiveCfg = Debug|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Debug|x64.Build.0 = Debug|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Release Static|Win32.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Release Static|x64.ActiveCfg = Release|x64
+ {561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Release Static|x64.Build.0 = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Release|Win32.ActiveCfg = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Release|Win32.Build.0 = Release|Win32
{561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Release|x64.ActiveCfg = Release|x64
{561F38EE-E22F-481A-8EFB-DC0AA25B4C23}.Release|x64.Build.0 = Release|x64
+ {42491401-B624-440D-91D7-1F2633EFB4E3}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {42491401-B624-440D-91D7-1F2633EFB4E3}.Debug Static|x64.ActiveCfg = Debug|x64
+ {42491401-B624-440D-91D7-1F2633EFB4E3}.Debug Static|x64.Build.0 = Debug|x64
{42491401-B624-440D-91D7-1F2633EFB4E3}.Debug|Win32.ActiveCfg = Debug|Win32
{42491401-B624-440D-91D7-1F2633EFB4E3}.Debug|Win32.Build.0 = Debug|Win32
{42491401-B624-440D-91D7-1F2633EFB4E3}.Debug|x64.ActiveCfg = Debug|x64
{42491401-B624-440D-91D7-1F2633EFB4E3}.Debug|x64.Build.0 = Debug|x64
+ {42491401-B624-440D-91D7-1F2633EFB4E3}.Release Static|Win32.ActiveCfg = Release|x64
+ {42491401-B624-440D-91D7-1F2633EFB4E3}.Release Static|x64.ActiveCfg = Release|x64
+ {42491401-B624-440D-91D7-1F2633EFB4E3}.Release Static|x64.Build.0 = Release|x64
{42491401-B624-440D-91D7-1F2633EFB4E3}.Release|Win32.ActiveCfg = Release|Win32
{42491401-B624-440D-91D7-1F2633EFB4E3}.Release|Win32.Build.0 = Release|Win32
{42491401-B624-440D-91D7-1F2633EFB4E3}.Release|x64.ActiveCfg = Release|x64
{42491401-B624-440D-91D7-1F2633EFB4E3}.Release|x64.Build.0 = Release|x64
+ {DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Debug Static|x64.ActiveCfg = Debug|x64
+ {DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Debug Static|x64.Build.0 = Debug|x64
{DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Debug|Win32.ActiveCfg = Debug|Win32
{DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Debug|Win32.Build.0 = Debug|Win32
{DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Debug|x64.ActiveCfg = Debug|x64
{DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Debug|x64.Build.0 = Debug|x64
+ {DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Release Static|Win32.ActiveCfg = Release|x64
+ {DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Release Static|x64.ActiveCfg = Release|x64
+ {DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Release Static|x64.Build.0 = Release|x64
{DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Release|Win32.ActiveCfg = Release|Win32
{DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Release|Win32.Build.0 = Release|Win32
{DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Release|x64.ActiveCfg = Release|x64
{DD0284A0-1ECE-4387-AED3-E9BF5EE74FF8}.Release|x64.Build.0 = Release|x64
+ {F486B768-640A-445D-8C09-437C896EFFAD}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {F486B768-640A-445D-8C09-437C896EFFAD}.Debug Static|x64.ActiveCfg = Debug|x64
+ {F486B768-640A-445D-8C09-437C896EFFAD}.Debug Static|x64.Build.0 = Debug|x64
{F486B768-640A-445D-8C09-437C896EFFAD}.Debug|Win32.ActiveCfg = Debug|Win32
{F486B768-640A-445D-8C09-437C896EFFAD}.Debug|Win32.Build.0 = Debug|Win32
{F486B768-640A-445D-8C09-437C896EFFAD}.Debug|x64.ActiveCfg = Debug|x64
{F486B768-640A-445D-8C09-437C896EFFAD}.Debug|x64.Build.0 = Debug|x64
+ {F486B768-640A-445D-8C09-437C896EFFAD}.Release Static|Win32.ActiveCfg = Release|x64
+ {F486B768-640A-445D-8C09-437C896EFFAD}.Release Static|x64.ActiveCfg = Release|x64
+ {F486B768-640A-445D-8C09-437C896EFFAD}.Release Static|x64.Build.0 = Release|x64
{F486B768-640A-445D-8C09-437C896EFFAD}.Release|Win32.ActiveCfg = Release|Win32
{F486B768-640A-445D-8C09-437C896EFFAD}.Release|Win32.Build.0 = Release|Win32
{F486B768-640A-445D-8C09-437C896EFFAD}.Release|x64.ActiveCfg = Release|x64
{F486B768-640A-445D-8C09-437C896EFFAD}.Release|x64.Build.0 = Release|x64
+ {531778C6-C340-40F2-B403-9B58B8121AAB}.Debug Static|Win32.ActiveCfg = Debug|x64
+ {531778C6-C340-40F2-B403-9B58B8121AAB}.Debug Static|x64.ActiveCfg = Debug|x64
+ {531778C6-C340-40F2-B403-9B58B8121AAB}.Debug Static|x64.Build.0 = Debug|x64
{531778C6-C340-40F2-B403-9B58B8121AAB}.Debug|Win32.ActiveCfg = Debug|Win32
{531778C6-C340-40F2-B403-9B58B8121AAB}.Debug|Win32.Build.0 = Debug|Win32
{531778C6-C340-40F2-B403-9B58B8121AAB}.Debug|x64.ActiveCfg = Debug|x64
{531778C6-C340-40F2-B403-9B58B8121AAB}.Debug|x64.Build.0 = Debug|x64
+ {531778C6-C340-40F2-B403-9B58B8121AAB}.Release Static|Win32.ActiveCfg = Release|x64
+ {531778C6-C340-40F2-B403-9B58B8121AAB}.Release Static|x64.ActiveCfg = Release|x64
+ {531778C6-C340-40F2-B403-9B58B8121AAB}.Release Static|x64.Build.0 = Release|x64
{531778C6-C340-40F2-B403-9B58B8121AAB}.Release|Win32.ActiveCfg = Release|Win32
{531778C6-C340-40F2-B403-9B58B8121AAB}.Release|Win32.Build.0 = Release|Win32
{531778C6-C340-40F2-B403-9B58B8121AAB}.Release|x64.ActiveCfg = Release|x64
Modified: sandbox/rfc90/MgDev/Server/src/Core/serverconfig.ini
===================================================================
--- trunk/MgDev/Server/src/Core/serverconfig.ini 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Server/src/Core/serverconfig.ini 2010-03-26 03:01:23 UTC (rev 4700)
@@ -365,8 +365,10 @@
# are stored
# SiteRepositoryPath Path where the Site repository is stored
# *****************************************************************************
-LibraryRepositoryPath = Repositories/Library/
-LibraryResourceDataFilePath = Repositories/Library/DataFiles/
+#LibraryRepositoryPath = Repositories/Library/
+#LibraryResourceDataFilePath = Repositories/Library/DataFiles/
+LibraryRepositoryPath = C:\Program Files\MapGuideOpenSource2.0\Server\Repositories\BigLibrary\
+LibraryResourceDataFilePath = C:\Program Files\MapGuideOpenSource2.0\Server\Repositories\BigLibrary\DataFiles\
PackagesPath = Packages/
RepositoryCheckpointsTimerInterval = 600
ResourceChangeTimerInterval = 5
@@ -412,8 +414,13 @@
# 50 < value <= 10000
# ImageFormat Image format for generated tiles
# PNG, PNG8, GIF or JPG
+# PollingInterval sleep in milliseconds before rechecking the lockfile
+# CreationCutoffTime seconds after which abort the lockfile test
# *****************************************************************************
-RenderOnly = 0
+RenderOnly = 1
+PollingInterval = 500
+CreationCutoffTime = 120
+UseMetaTiles = 0
TileCachePath = Repositories/TileCache/
TileColumnsPerFolder = 30
TileRowsPerFolder = 30
Modified: sandbox/rfc90/MgDev/Server/src/PostBuild/PostBuild.mak
===================================================================
--- trunk/MgDev/Server/src/PostBuild/PostBuild.mak 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Server/src/PostBuild/PostBuild.mak 2010-03-26 03:01:23 UTC (rev 4700)
@@ -93,7 +93,7 @@
CopyFdoComponentsDebug : ..\..\..\Oem\FDO\*.*
if NOT EXIST ..\..\bin\debug\FDO\nul mkdir ..\..\bin\debug\FDO
- xcopy /r /d /y /s ..\..\..\Oem\FDO\bin\Release ..\..\bin\debug\FDO\
+ xcopy /r /d /y /s ..\..\..\Oem\FDO\bin ..\..\bin\debug\FDO\
CopyFdoProvidersDebug : ..\..\..\Oem\FDO\ProviderList\ServerCommunity\providers.xml
xcopy /r /d /y "..\..\..\Oem\FDO\ProviderList\ServerCommunity\providers.xml" ..\..\bin\debug\FDO\
Modified: sandbox/rfc90/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Server/src/Services/Rendering/ServerRenderingService.cpp 2010-03-26 03:01:23 UTC (rev 4700)
@@ -36,6 +36,8 @@
static const INT32 FILTER_SELECTABLE = 2;
static const INT32 FILTER_HASTOOLTIPS = 4;
+INT32 MgServerRenderingService::sm_useMetaTiles = 0; // 0 = no metatiling
+
inline bool hasColorMap (STRING format)
{
return format == L"PNG8" || format == L"GIF";
@@ -116,6 +118,13 @@
MgConfigProperties::DefaultRenderingServicePropertyGeneralizeData);
AGGRenderer::s_bGeneralizeData = bGeneralizeData;
GDRenderer::s_bGeneralizeData = bGeneralizeData;
+
+ pConf->GetIntValue(
+ MgConfigProperties::TileServicePropertiesSection,
+ MgConfigProperties::TileServicePropertyUseMetaTiles,
+ sm_useMetaTiles,
+ MgConfigProperties::DefaultTileServicePropertyUseMetaTiles);
+
}
@@ -124,7 +133,30 @@
{
}
+///////////////////////////////////////////////////////////////////////////////
+void MgServerRenderingService::GetTileCoords(MgMap* map, int tileColOffset, int tileColumn, int tileRow,
+ double &tileMinX, double &tileMaxX , double &tileMinY ,double & tileMaxY)
+{
+ Ptr<MgEnvelope> mapExtent = map->GetMapExtent();
+ Ptr<MgCoordinate> pt00 = mapExtent->GetLowerLeftCoordinate();
+ Ptr<MgCoordinate> pt11 = mapExtent->GetUpperRightCoordinate();
+ double mapMinX = rs_min(pt00->GetX(), pt11->GetX());
+ double mapMaxX = rs_max(pt00->GetX(), pt11->GetX());
+ double mapMinY = rs_min(pt00->GetY(), pt11->GetY());
+ double mapMaxY = rs_max(pt00->GetY(), pt11->GetY());
+ double scale = map->GetViewScale();
+ double metersPerUnit = map->GetMetersPerUnit();
+ double metersPerPixel = METERS_PER_INCH / MgTileParameters::tileDPI;
+ double tileWidthMCS = (double)MgTileParameters::tileWidth * metersPerPixel * scale / metersPerUnit;
+ double tileHeightMCS = (double)MgTileParameters::tileHeight * metersPerPixel * scale / metersPerUnit;
+
+ tileMinX = mapMinX + (double)(tileColumn ) * tileWidthMCS; // left edge
+ tileMaxX = mapMinX + (double)(tileColumn+ tileColOffset) * tileWidthMCS; // right edge
+ tileMinY = mapMaxY - (double)(tileRow + tileColOffset) * tileHeightMCS; // bottom edge
+ tileMaxY = mapMaxY - (double)(tileRow ) * tileHeightMCS; // top edge
+}
+
///////////////////////////////////////////////////////////////////////////////
MgByteReader* MgServerRenderingService::RenderTile(MgMap* map,
CREFSTRING baseMapLayerGroupName,
@@ -170,27 +202,19 @@
// upper left corner of the map extent
// ------------------------------------------------------
- Ptr<MgEnvelope> mapExtent = map->GetMapExtent();
- Ptr<MgCoordinate> pt00 = mapExtent->GetLowerLeftCoordinate();
- Ptr<MgCoordinate> pt11 = mapExtent->GetUpperRightCoordinate();
- double mapMinX = rs_min(pt00->GetX(), pt11->GetX());
- double mapMaxX = rs_max(pt00->GetX(), pt11->GetX());
- double mapMinY = rs_min(pt00->GetY(), pt11->GetY());
- double mapMaxY = rs_max(pt00->GetY(), pt11->GetY());
+ double tileMinX,tileMaxX ,tileMinY ,tileMaxY;
+ if (sm_useMetaTiles)
+ GetTileCoords(map, sm_useMetaTiles, tileColumn, tileRow, tileMinX,tileMaxX ,tileMinY ,tileMaxY);
+ else
+ GetTileCoords(map, 1, tileColumn, tileRow, tileMinX,tileMaxX ,tileMinY ,tileMaxY); // zero and 1 is the same logically
- double metersPerUnit = map->GetMetersPerUnit();
- double metersPerPixel = METERS_PER_INCH / MgTileParameters::tileDPI;
- double tileWidthMCS = (double)MgTileParameters::tileWidth * metersPerPixel * scale / metersPerUnit;
- double tileHeightMCS = (double)MgTileParameters::tileHeight * metersPerPixel * scale / metersPerUnit;
-
- double tileMinX = mapMinX + (double)(tileColumn ) * tileWidthMCS; // left edge
- double tileMaxX = mapMinX + (double)(tileColumn+1) * tileWidthMCS; // right edge
- double tileMinY = mapMaxY - (double)(tileRow +1) * tileHeightMCS; // bottom edge
- double tileMaxY = mapMaxY - (double)(tileRow ) * tileHeightMCS; // top edge
-
+ // METATILING dont forget to increase the bitmap for the larger tile and set the format
+ int metaFactor = sm_useMetaTiles?sm_useMetaTiles:1;
// make the call to render the tile
- ret = RenderTile(map, baseGroup, scaleIndex, MgTileParameters::tileWidth, MgTileParameters::tileHeight, scale,
- tileMinX, tileMaxX, tileMinY, tileMaxY, MgTileParameters::tileFormat);
+ ret = RenderTile(map, baseGroup, scaleIndex, MgTileParameters::tileWidth * metaFactor,
+ MgTileParameters::tileHeight * metaFactor,
+ scale, tileMinX, tileMaxX, tileMinY, tileMaxY,
+ sm_useMetaTiles?L"META":MgTileParameters::tileFormat);
MG_CATCH_AND_THROW(L"MgServerRenderingService.RenderTile")
@@ -266,8 +290,67 @@
return ret.Detach();
}
+///////////////////////////////////////////////////////////////////////////////
+// gets called with a bitmap in the bytereader to be plit up into 4 images
+MgByteReader* MgServerRenderingService::RenderTileFromMetaTile(MgMap* map, MgByteReader* metaTile,
+ int subTileX, int subTileY)
+{
+ MgByteSource* bs = metaTile->GetByteSource();
+ ByteSourceImpl* bsimp = bs->GetSourceImpl();
+ assert (bs->GetMimeType() == L"META");
+ int size = (int) bsimp->GetLength();
+ class MyByteSource {
+ public:
+ virtual ~MyByteSource() {} ; // needed to get the correct sizeof for object
+ MgByte* Bytes() { return m_data; }
+ Ptr<MgByte> m_data;
+ INT32 m_pos;
+ } *source = (MyByteSource *) bsimp;
+ // some checking: the complete meta tile should be in the framebuffer handed over
+ int expectedSize = 4 * (sm_useMetaTiles * MgTileParameters::tileWidth) * (sm_useMetaTiles * MgTileParameters::tileHeight);
+ assert(size == expectedSize);
+ MgByte* byteBuffer = source->Bytes();
+ unsigned char* byteBuf = byteBuffer->Bytes();
+ assert(size == byteBuffer->GetLength()); // double check the buffers
+
+ // use the map's background color, but always make it fully transparent
+ RS_Color bgColor;
+ StylizationUtil::ParseColor(map->GetBackgroundColor(), bgColor);
+ bgColor.alpha() = 0;
+ auto_ptr<SE_Renderer> dr(CreateRenderer(MgTileParameters::tileWidth,MgTileParameters::tileHeight, bgColor, true));
+ RS_ColorVector tileColorPalette;
+ if (m_rendererName == L"AGG" && hasColorMap(MgTileParameters::tileFormat))
+ {
+ MgMappingUtil::ParseColorStrings(&tileColorPalette, map);
+ }
+
+ // copy tile from meta framebuffer to new one...
+ // use unsigned int pointer arithmetic for pixels!
+
+ // get pointer to metatile framebuf
+ unsigned int *framebuf = (unsigned int*) byteBuf;
+
+ // allocate subtile buffer to copy new framebuf with changed dimensions
+ // place buffer in None allocated MgByte auto_ptr object for later destruction
+ auto_ptr<MgByte> subTileBytes (new MgByte((unsigned char*)new unsigned int[MgTileParameters::tileWidth * MgTileParameters::tileHeight],
+ MgTileParameters::tileWidth * MgTileParameters::tileHeight * sizeof(int) , MgByte::New));
+ // get the pointer to the internal target buffer
+ unsigned int* subTileBuf = (unsigned int*) subTileBytes->Bytes();
+ for (int y=0; y < MgTileParameters::tileHeight; y++) // rows
+ for (int x=0; x < MgTileParameters::tileWidth; x++) // columns innerloop
+ {
+ *(subTileBuf + x
+ + y * MgTileParameters::tileWidth) // target address in small tile
+ = *(framebuf + (x + (subTileX * MgTileParameters::tileWidth)) // X address in meta tile
+ + (y + (subTileY * MgTileParameters::tileHeight))
+ * MgTileParameters::tileWidth * sm_useMetaTiles); // use width of metaTile here
+ }
+ // we need to pass the optional colortable param to satisfy the overloaded call
+ return SaveBitmap(map, dr.get(), MgTileParameters::tileWidth,MgTileParameters::tileHeight,MgTileParameters::tileFormat, subTileBuf);
+}
+
///////////////////////////////////////////////////////////////////////////////
// default arg bKeepSelection = true
MgByteReader* MgServerRenderingService::RenderDynamicOverlay(MgMap* map,
@@ -951,6 +1034,18 @@
dr->ProcessPolyline(&lb, ls);
//-------------------------------------------------------
*/
+ return SaveBitmap(map, dr, saveWidth, saveHeight, format);
+}
+///////////////////////////////////////////////////////////////////////////////
+/// take the framebuffer/bitmap after rendering - another method extraction
+/// and turn it into the image of given format
+MgByteReader* MgServerRenderingService::SaveBitmap(MgMap* map,
+ SE_Renderer* dr,
+ INT32 saveWidth,
+ INT32 saveHeight,
+ CREFSTRING format,
+ unsigned int* framebuf)
+{
Ptr<MgByteReader> ret;
// get a byte representation of the image
@@ -958,38 +1053,44 @@
try
{
- // call the image renderer to create the image
- if (wcscmp(m_rendererName.c_str(), L"AGG") == 0)
+ // call the image renderer to create the image from the bitmap
+ if (m_rendererName == L"AGG") // AGG or GD (obsolete?)
{
- //-------------------------------------------------------
- /// RFC60 code to correct colormaps by UV
- //-------------------------------------------------------
- // We examine the expressions collected from xml definitions of all layers.
- // The map object has a list from all color entries found in the most recent
- // layer stylization.
- // * TODO - currently they are interpreted as ffffffff 32-bit RGBA string values
- // * adding expresssions and other interpretations should be done in ParseColorStrings
- // * the color Palette for the renderer is a vector<RS_Color>
- if (hasColorMap(format))
+ if (format == L"META") // we dont use the colorPalette here for meta tiling
+ { // as this call only returns the framebuffer
+ data.reset(((AGGRenderer*)dr)->Save(format, saveWidth, saveHeight, NULL, NULL));
+ // copy the framebuffer into the reader TODO: find a way to pass the pointer
+ } else
{
- RS_ColorVector tileColorPalette;
- MgMappingUtil::ParseColorStrings(&tileColorPalette, map);
-// printf("<<<<<<<<<<<<<<<<<<<<< MgServerRenderingService::ColorPalette->size(): %d\n", tileColorPalette.size());
- data.reset(((AGGRenderer*)dr)->Save(format, saveWidth, saveHeight, &tileColorPalette));
+ //-------------------------------------------------------
+ /// RFC60 code to correct colormaps by UV
+ //-------------------------------------------------------
+ // We examine the expressions collected from xml definitions of all layers.
+ // The map object has a list from all color entries found in the most recent
+ // layer stylization.
+ // * TODO - currently they are interpreted as ffffffff 32-bit RGBA string values
+ // * adding expresssions and other interpretations should be done in ParseColorStrings
+ // * the color Palette for the renderer is a vector<RS_Color>
+ if (hasColorMap(format))
+ {
+ RS_ColorVector tileColorPalette;
+ MgMappingUtil::ParseColorStrings(&tileColorPalette, map);
+ data.reset(((AGGRenderer*)dr)->Save(format, saveWidth, saveHeight, &tileColorPalette, framebuf));
+ }
+ else
+ data.reset(((AGGRenderer*)dr)->Save(format, saveWidth, saveHeight, NULL, framebuf));
}
- else
- data.reset(((AGGRenderer*)dr)->Save(format, saveWidth, saveHeight, NULL));
}
else
- data.reset(((GDRenderer*)dr)->Save(format, saveWidth, saveHeight));
+ data.reset(((GDRenderer*)dr)->Save(format, saveWidth, saveHeight)); // dont care with metatiling
}
catch (exception e)
{
- ACE_DEBUG((LM_DEBUG, L"(%t) %w caught in RenderingService ColorPaletteGeneration\n", e.what()));
+ ACE_DEBUG((LM_DEBUG, L"(%t) %w caught in RenderingService::SaveBitmap\n", e.what()));
throw e;
}
- if (NULL != data.get())
+ if (NULL != data.get()) // leave it as a bitmap if metatiling
{
// put this into a byte source
Ptr<MgByteSource> bs = new MgByteSource(data->GetBytes(), data->GetNumBytes());
@@ -1002,6 +1103,8 @@
bs->SetMimeType(MgMimeType::Png);
else if (format == MgImageFormats::Tiff)
bs->SetMimeType(MgMimeType::Tiff);
+ else if (format == L"META") // add a mimetype for our metatile
+ bs->SetMimeType(format);
ret = bs->GetReader();
}
@@ -1069,7 +1172,7 @@
// get a byte representation of the image
auto_ptr<RS_ByteData> data;
-
+
if (wcscmp(m_rendererName.c_str(), L"AGG") == 0)
data.reset(((AGGRenderer*)dr.get())->Save(format, width, height));
else
@@ -1097,7 +1200,6 @@
return ret.Detach();
}
-
///////////////////////////////////////////////////////////////////////////////
// A helper function that does most of the work for QueryFeatures
// and QueryFeatureProperties. Basically runs a rendering loop with
Modified: sandbox/rfc90/MgDev/Server/src/Services/Rendering/ServerRenderingService.h
===================================================================
--- trunk/MgDev/Server/src/Services/Rendering/ServerRenderingService.h 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Server/src/Services/Rendering/ServerRenderingService.h 2010-03-26 03:01:23 UTC (rev 4700)
@@ -41,6 +41,12 @@
INT32 tileColumn,
INT32 tileRow);
+ virtual MgByteReader* RenderTileFromMetaTile(MgMap* map,
+ MgByteReader* metaTile,
+ INT32 subTileX,
+ INT32 subTileY);
+
+
virtual MgByteReader* RenderDynamicOverlay(MgMap* map,
MgSelection* selection,
CREFSTRING format);
@@ -149,7 +155,9 @@
CREFSTRING featureFilter,
INT32 maxFeatures,
INT32 layerAttributeFilter);
-
+ void GetTileCoords(MgMap* map, int tileColOffset, int tileColumn, int tileRow,
+ double &tileMinX, double &tileMaxX , double &tileMinY ,double & tileMaxY);
+
private:
// used for tile generation
MgByteReader* RenderTile(MgMap* map,
@@ -163,6 +171,13 @@
double mcsMinY,
double mcsMaxY,
CREFSTRING format);
+ // extracted method to save bitmap into image for reuse
+ MgByteReader* SaveBitmap(MgMap* map,
+ SE_Renderer* dr,
+ INT32 saveWidth,
+ INT32 saveHeight,
+ CREFSTRING format,
+ unsigned int* framebuf = 0);
// helper used by other methods
MgByteReader* RenderMapInternal(MgMap* map,
@@ -217,6 +232,8 @@
INT32 m_minRasterGridSize;
double m_rasterGridSizeOverrideRatio;
INT32 m_renderSelectionBatchSize;
+ static INT32 sm_useMetaTiles;
+
};
#endif
Modified: sandbox/rfc90/MgDev/Server/src/Services/Rendering/ServerRenderingService.vcproj
===================================================================
--- trunk/MgDev/Server/src/Services/Rendering/ServerRenderingService.vcproj 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Server/src/Services/Rendering/ServerRenderingService.vcproj 2010-03-26 03:01:23 UTC (rev 4700)
@@ -44,7 +44,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\Common;..\..\Common\Base;..\..\Common\Manager;..\Feature;..\Mapping;..\..\..\..\Common\Foundation;..\..\..\..\Common\Geometry;..\..\..\..\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;..\..\..\..\Common\MdfModel;..\..\..\..\Common\Renderers;..\..\..\..\Common\Stylization;..\..\..\..\Oem\ACE\ACE_wrappers;..\..\..\..\Oem\dbxml-2.3.10\xerces-c-src\src;..\..\..\..\Oem\FDO\inc;..\..\..\..\Oem\FDO\inc\ExpressionEngine"
+ AdditionalIncludeDirectories="..\..\Common;..\..\Common\Base;..\..\Common\Manager;..\Feature;..\Mapping;..\Tile;..\..\..\..\Common\Foundation;..\..\..\..\Common\Geometry;..\..\..\..\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;..\..\..\..\Common\MdfModel;..\..\..\..\Common\Renderers;..\..\..\..\Common\Stylization;..\..\..\..\Oem\ACE\ACE_wrappers;"..\..\..\..\Oem\dbxml-2.3.10\xerces-c-src\src";..\..\..\..\Oem\FDO\inc;..\..\..\..\Oem\FDO\inc\ExpressionEngine"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MG_SERVER_RENDERING_EXPORTS"
MinimalRebuild="true"
ExceptionHandling="2"
Modified: sandbox/rfc90/MgDev/Server/src/Services/Tile/ServerTileService.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Tile/ServerTileService.cpp 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Server/src/Services/Tile/ServerTileService.cpp 2010-03-26 03:01:23 UTC (rev 4700)
@@ -17,7 +17,8 @@
#include "MapGuideCommon.h"
#include "ServerTileService.h"
-
+#include "ServerRenderingService.h"
+#include <sstream>
IMPLEMENT_CREATE_SERVICE(MgServerTileService)
ACE_Recursive_Thread_Mutex MgServerTileService::sm_mutex;
@@ -27,6 +28,7 @@
INT32 MgServerTileService::sm_creationCutoffTime = 120; // in seconds
INT32 MgServerTileService::sm_pollingInterval = 1; // in seconds
INT32 MgServerTileService::sm_mapCacheSize = 10;
+INT32 MgServerTileService::sm_useMetaTiles = 0;
MgServerTileService::MgServerTileService() : MgTileService()
{
@@ -63,11 +65,17 @@
sm_mapCacheSize,
MgConfigProperties::DefaultTileServicePropertyTiledMapCacheSize);
+ configuration->GetIntValue(
+ MgConfigProperties::TileServicePropertiesSection,
+ MgConfigProperties::TileServicePropertyUseMetaTiles,
+ sm_useMetaTiles,
+ MgConfigProperties::DefaultTileServicePropertyUseMetaTiles);
+
MgTileCache::Initialize();
sm_initialized = true;
}
}
-
+ m_resourceService = NULL;
m_tileCache = new MgTileCache();
}
@@ -105,7 +113,10 @@
if (diffTime < sm_creationCutoffTime)
{
- ACE_OS::sleep(sm_pollingInterval);
+ // sm_pollingInterval om milliseconds
+ int sec = sm_pollingInterval/1000;
+ ACE_Time_Value polInt (sec, (sm_pollingInterval - (sec*1000))*1000);
+ ACE_OS::sleep(polInt);
}
else
{
@@ -121,7 +132,7 @@
///////////////////////////////////////////////////////////////////////////////
// Create tilename from mapDefinition, scaleIndex, row, and column.
// Remove lockfile, look for the tile in the cache, if not in cache create
-// lockfile and look for map in mapcache.
+// lockfile and look for map in mapcache. APIVERSION 1.2
MgByteReader* MgServerTileService::GetTile(MgResourceIdentifier* mapDefinition,
CREFSTRING baseMapLayerGroupName,
INT32 tileColumn,
@@ -131,8 +142,14 @@
Ptr<MgByteReader> ret;
FILE* lockFile = NULL;
STRING tilePathname, lockPathname;
+ // metatiling vars
+ FILE* subTileLockFile[METAMAXDIM][METAMAXDIM];
+ STRING subTileLockPathname[METAMAXDIM][METAMAXDIM], subTilePathname[METAMAXDIM][METAMAXDIM];
+ STRING metaTileLockPathname, metaTilePathname;
+ int maxX,maxY, subTileX,subTileY, metaTileColumn, metaTileRow;
+ int cacheHit = 0;
- MG_TRY()
+ MG_TRY()
if (NULL == mapDefinition || baseMapLayerGroupName.empty())
{
@@ -153,30 +170,75 @@
__LINE__, __WFILE__, &arguments, L"MgInvalidScaleIndex", NULL);
}
- // get the service from our helper method
- Ptr<MgResourceService> resourceService = GetResourceServiceForMapDef(mapDefinition,
- L"MgServerTileService.GetTile");
+ if (sm_useMetaTiles) // additional names and control variables for meta tiles
+ {
+ // which subTile from sm_useMetaTiles^2 larger tile
+ subTileX = abs(tileColumn % sm_useMetaTiles);
+ subTileY = abs(tileRow % sm_useMetaTiles);
+ // determine left top corner of metaTile having sm_useMetaTiles**2 subtiles
+ metaTileColumn = tileColumn - subTileX;
+ metaTileRow = tileRow - subTileY;
+ // Generate tile and lock pathnames for meta tile in the mod xx grid
+ m_tileCache->GeneratePathnames(mapDefinition, scaleIndex, baseMapLayerGroupName,
+ metaTileColumn, metaTileRow, metaTilePathname, metaTileLockPathname, false);
+ // init control vars
+ maxX = maxY = sm_useMetaTiles;
+ for (int y=0; y < maxY; y++) // rows
+ for (int x=0; x < maxX; x++) // columns
+ {
+ subTileLockFile[x][y] = NULL;
+ // Generate tile and lock pathnames.
+ m_tileCache->GeneratePathnames(mapDefinition, scaleIndex, baseMapLayerGroupName,
+ metaTileColumn + x, metaTileRow + y, subTilePathname[x][y], subTileLockPathname[x][y], false);
+ }
+
+ }
// Generate tile and lock pathnames.
m_tileCache->GeneratePathnames(mapDefinition, scaleIndex, baseMapLayerGroupName,
tileColumn, tileRow, tilePathname, lockPathname, false);
- // If there is a dangling lock file, then attempt to remove it.
- if (DetectTileLockFile(lockPathname))
+ if (sm_useMetaTiles)
{
- // TODO: Handle the exception by displaying a tile with an error message?
- MgFileUtil::DeleteFile(lockPathname, true);
- }
+ if (DetectTileLockFile(metaTileLockPathname))
+ {
+ // TODO: Handle the exception by displaying a tile with an error message?
+ MgFileUtil::DeleteFile(metaTileLockPathname, true);
+ std::wstringstream text;
+ text << L"METATILE: DeletedDanglingLockfile(" << metaTileRow << L", " << metaTileColumn << L") "
+ << metaTileLockPathname << L")\n" ;
+ ACE_DEBUG ((LM_DEBUG, text.str().c_str()));
+ }
+ } else
+ // If there is a dangling lock file, then attempt to remove it.
+ if (DetectTileLockFile(lockPathname))
+ {
+ // TODO: Handle the exception by displaying a tile with an error message?
+ MgFileUtil::DeleteFile(lockPathname, true);
+ std::wstringstream text;
+ text << L"METATILE: DeletedDanglingLockfile(" << tileRow << L", " << tileColumn << L") "
+ << lockPathname << L")\n" ;
+ ACE_DEBUG ((LM_DEBUG, text.str().c_str()));
+ }
// try getting the tile from the cache
ret = m_tileCache->Get(tilePathname);
+ if (ret)
+ {
+ cacheHit = 1;
+ std::wstringstream text;
+ text << L"CACHEHIT: GetTile(" << tileRow << L", " << tileColumn << L") " << tilePathname << L"\n";
+ ACE_DEBUG ((LM_DEBUG, text.str().c_str()));
+ } else {
+ std::wstringstream text;
+ text << L"CACHEMISS: GetTile(" << tileRow << L", " << tileColumn << L") " << tilePathname << L"\n";
+ ACE_DEBUG ((LM_DEBUG, text.str().c_str()));
+ }
+
// if the reader is NULL then the tile wasn't in the cache and we
// need to generate it
- while (NULL == ret)
+ while (NULL == ret) //=======================================================================
{
- // Attempt use a cached & serialized MgMap object
- Ptr<MgMemoryStreamHelper> cachedMap;
- STRING mapString = mapDefinition->ToString();
Ptr<MgMap> map;
// Protect the serialized MgMap cache with a mutex. Stream reading is not
@@ -184,93 +246,186 @@
// that a Rewind() is not called in the middle of a Deserialize().
// Lockfile test and creation is in same protected scope.
{
- // Attempt to lock the tile file.
+ // Attempt to get the mapcache mutex .
ACE_MT(ACE_GUARD_RETURN(ACE_Recursive_Thread_Mutex, ace_mon, sm_mutex, NULL));
// Bail out if the tile file has been locked for so long.
- if (DetectTileLockFile(lockPathname))
+ if (sm_useMetaTiles)
{
- MgStringCollection arguments;
- arguments.Add(lockPathname);
+ if (DetectTileLockFile(metaTileLockPathname))
+ {
+ MgStringCollection arguments;
+ arguments.Add(metaTileLockPathname);
- throw new MgFileIoException(L"MgServerTileService.GetTile",
- __LINE__, __WFILE__, &arguments, L"MgUnableToLockTileFile", NULL);
- }
+ throw new MgFileIoException(L"MgServerTileService.GetTile",
+ __LINE__, __WFILE__, &arguments, L"MgUnableToLockMetaTileFile", NULL);
+ }
+ } else
+ if (DetectTileLockFile(lockPathname))
+ {
+ MgStringCollection arguments;
+ arguments.Add(lockPathname);
+ throw new MgFileIoException(L"MgServerTileService.GetTile",
+ __LINE__, __WFILE__, &arguments, L"MgUnableToLockTileFile", NULL);
+ }
+
// try getting the tile from the cache
ret = m_tileCache->Get(tilePathname);
if (NULL != ret)
{
+ std::wstringstream text;
+ text << L"CACHEHIT2: GetTile(" << tileRow << L", " << tileColumn << L") " << tilePathname << L"\n";
+ ACE_DEBUG ((LM_DEBUG, text.str().c_str()));
break; // tile was in tileCache .. done.
+ } else {
+ std::wstringstream text;
+ text << L"CACHEMISS2: GetTile(" << tileRow << L", " << tileColumn << L") " << tilePathname << L"\n";
+ ACE_DEBUG ((LM_DEBUG, text.str().c_str()));
}
- // Create the lock file and close it right away.
- m_tileCache->CreateFullPath(mapDefinition, scaleIndex, baseMapLayerGroupName, tileColumn, tileRow);
- lockFile = ACE_OS::fopen(MG_WCHAR_TO_TCHAR(lockPathname), ACE_TEXT("wb"));
+ //=========================================================================
+ if (!sm_useMetaTiles) // create sm_useMetaTiles lockfiles
+ {
+ // Create the lock file and close it right away.
+ m_tileCache->CreateFullPath(mapDefinition, scaleIndex, baseMapLayerGroupName, tileColumn, tileRow);
+ lockFile = ACE_OS::fopen(MG_WCHAR_TO_TCHAR(lockPathname), ACE_TEXT("wb"));
- if (NULL == lockFile)
+ if (NULL == lockFile)
+ {
+ MgStringCollection arguments;
+ arguments.Add(lockPathname);
+
+ throw new MgFileIoException(L"MgServerTileService.GetTile",
+ __LINE__, __WFILE__, &arguments, L"MgUnableToOpenLockFile", NULL);
+ }
+ else
+ {
+ ACE_OS::fclose(lockFile);
+ }
+ } else
+ //=========================================================================
{
- MgStringCollection arguments;
- arguments.Add(lockPathname);
+ for (int y=0; y < 1; y++) // rows ---- JUST ONCE THE LOCKFILE
+ for (int x=0; x < 1; x++) // columns
+ {
+ // per array element Create the lock file and close it right away.
+ m_tileCache->CreateFullPath(mapDefinition, scaleIndex, baseMapLayerGroupName,
+ metaTileColumn + x, metaTileRow + y);
+ subTileLockFile[x][y] = ACE_OS::fopen(MG_WCHAR_TO_TCHAR(subTileLockPathname[x][y]), ACE_TEXT("wb"));
- throw new MgFileIoException(L"MgServerTileService.GetTile",
- __LINE__, __WFILE__, &arguments, L"MgUnableToOpenLockFile", NULL);
- }
- else
+ if (NULL == subTileLockFile[x][y])
+ {
+ MgStringCollection arguments;
+ arguments.Add(subTilePathname[x][y]);
+
+ throw new MgFileIoException(L"MgServerTileService.GetTile",
+ __LINE__, __WFILE__, &arguments, L"MgUnableToOpenLockFile", NULL);
+ }
+ else
+ {
+ ACE_OS::fclose(subTileLockFile[x][y]);
+ std::wstringstream text;
+ text << L"METATILE: CreatedLockfile(" << metaTileRow + y << L", " << metaTileColumn + x << L") "
+ << L" S(" << x << L", " << y << L") " << subTileLockPathname[x][y] << L")\n";
+ ACE_DEBUG ((LM_DEBUG, text.str().c_str()));
+ }
+ } // end meta tiling loop for lockfiles
+ } // if sm_useMetatiles
+ //=========================================================================
+ GetMapFromDefinition(mapDefinition, scaleIndex, map);
+ } // end of mutex scope
+
+ // Get the tile
+ if (sm_useMetaTiles)
+ {
+ // Render the larger meta tile but do not cache it yet! (sm_useMetaTiles [prohibits caching in GetTile)
+ STRING metaTileName = L"META" + metaTilePathname;
{
- ACE_OS::fclose(lockFile);
+ std::wstringstream text;
+ text << L"METATILE: RenderMetaTile(" << metaTileRow << L", " << metaTileColumn << L") " << metaTileName << L"\n";
+ ACE_DEBUG ((LM_DEBUG, text.str().c_str()));
}
+ Ptr<MgByteReader> metaTile = GetTile(metaTileName, map, scaleIndex, baseMapLayerGroupName, metaTileColumn, metaTileRow);
- MapCache::const_iterator iter = sm_mapCache.find(mapString);
- if (sm_mapCache.end() != iter)
+ // Get a ServerSide rendering Service only...
+ MgServiceManager* serviceMan = MgServiceManager::GetInstance();
+ assert(NULL != serviceMan);
+ Ptr<MgServerRenderingService> svcRendering = dynamic_cast<MgServerRenderingService*>(
+ serviceMan->RequestService(MgServiceType::RenderingService));
+ assert(NULL != svcRendering);
+
+ // splitup the meta tiles up
+ for (int y=0; y < maxY; y++) // rows
+ for (int x=0; x < maxX; x++) // columns
{
- cachedMap = SAFE_ADDREF((*iter).second);
- cachedMap->Rewind();
- Ptr<MgStream> stream = new MgStream(cachedMap);
- map = new MgMap();
- map->Deserialize(stream);
- }
- else
- {
- Ptr<MgSiteConnection> siteConn = new MgSiteConnection();
- siteConn->Open(MgUserInformation::GetCurrentUserInfo());
- map = new MgMap(siteConn);
- map->Create(resourceService, mapDefinition, mapString);
- cachedMap = new MgMemoryStreamHelper();
- Ptr<MgStream> stream = new MgStream(cachedMap);
- map->Serialize(stream);
- if ((INT32)sm_mapCache.size() >= sm_mapCacheSize)
+ // generate the tile
+ Ptr<MgByteReader> img = svcRendering->RenderTileFromMetaTile(map, metaTile, x,y);
+ if ((subTileX == x) && (subTileY == y))
+ ret = img; // keep pointer for requested subtile
+ m_tileCache->Set(img, subTilePathname[x][y]); // store all of them intile cache
+
+ if (img)
{
- ClearMapCache(L"");
+ std::wstringstream text;
+ text << L"METATILE: SetTileFromMetaTile(" << tileRow << L", " << tileColumn << L") " << subTilePathname[x][y]
+ << L" S(" << x << L", " << y << L")\n";
+ ACE_DEBUG ((LM_DEBUG, text.str().c_str()));
}
- sm_mapCache[mapString] = SAFE_ADDREF((MgMemoryStreamHelper*)cachedMap);
+ // rewind the reader since setting the tile advances it to the end
+ if (img)
+ {
+ img->Rewind();
+ }
}
- } // end of mutex scope
-
- double scale = map->GetFiniteDisplayScaleAt(scaleIndex);
- map->SetViewScale(scale);
-
- // Render the tile and cache it.
- ret = GetTile(tilePathname, map, scaleIndex, baseMapLayerGroupName, tileColumn, tileRow);
+ } else
+ {
+ // Render the tile and cache it.
+ ret = GetTile(tilePathname, map, scaleIndex, baseMapLayerGroupName, tileColumn, tileRow);
+ }
break;
- }
+ } // end of gettile loop end MgMap scope
- MG_CATCH(L"MgServerTileService.GetTile")
+ MG_CATCH(L"MgServerTileService.GetTile")
- if (NULL != lockFile)
+ if (sm_useMetaTiles) // remove sm_useMetaTiles lockfiles
{
- MgFileUtil::DeleteFile(lockPathname, false);
+ for (int y=0; y < 1; y++) // rows -- JUST ONE LOCKFILE
+ for (int x=0; x < 1; x++) // columns
+ {
+ if (NULL != subTileLockFile[x][y])
+ {
+ MgFileUtil::DeleteFile(subTileLockPathname[x][y], false);
+ {
+ std::wstringstream text;
+ text << L"METATILE: DeletedLockfile(" << tileRow << L", " << tileColumn << L") "
+ << L" S(" << x << L", " << y << subTileLockPathname[x][y] << L")\n";
+ ACE_DEBUG ((LM_DEBUG, text.str().c_str()));
+ }
+ }
+ }
+ } else {
+ if (NULL != lockFile)
+ {
+ MgFileUtil::DeleteFile(lockPathname, false);
+ }
}
-
MG_THROW()
+ if (!cacheHit)
+ {
+ std::wstringstream text;
+ text << L"Rendered: GetTILE(" << tileRow << L", " << tileColumn << L") "
+ << L" S(" << subTileX << L", " << subTileY << tilePathname << L")\n";
+ ACE_DEBUG ((LM_DEBUG, text.str().c_str()));
+ }
return ret.Detach();
}
///////////////////////////////////////////////////////////////////////////////
-// look for the tile in the tilecache first
+/// APIVERSION 1.0
MgByteReader* MgServerTileService::GetTile(MgMap* map,
CREFSTRING baseMapLayerGroupName,
INT32 tileColumn,
@@ -394,8 +549,8 @@
// generate the tile
img = svcRendering->RenderTile(map, baseMapLayerGroupName, tileColumn, tileRow);
- // cache the tile
- if (!sm_renderOnly)
+ // cache the tile only when not metatiling
+ if (!sm_renderOnly && !sm_useMetaTiles)
{
m_tileCache->Set(img, tilePathname);
@@ -488,36 +643,7 @@
MG_THROW()
}
-
///////////////////////////////////////////////////////////////////////////////
-// accessor method for resource service
-MgResourceService* MgServerTileService::GetResourceServiceForMapDef(MgResourceIdentifier* mapDefinition,
- CREFSTRING funcName)
-{
- // get service manager
- MgServiceManager* serviceMan = MgServiceManager::GetInstance();
- assert(NULL != serviceMan);
-
- // Get the service from service manager
- Ptr<MgResourceService> resourceService = dynamic_cast<MgResourceService*>(
- serviceMan->RequestService(MgServiceType::ResourceService));
- assert(NULL != resourceService);
-
- if (!resourceService->HasPermission(mapDefinition, MgResourcePermission::ReadOnly))
- {
- MG_LOG_AUTHENTICATION_ENTRY(MgResources::PermissionDenied.c_str());
-
- MgStringCollection arguments;
- arguments.Add(mapDefinition->ToString());
-
- throw new MgPermissionDeniedException(
- funcName, __LINE__, __WFILE__, &arguments, L"", NULL);
- }
- return resourceService.Detach();
-}
-
-
-///////////////////////////////////////////////////////////////////////////////
void MgServerTileService::ClearCache(MgMap* map)
{
MG_TRY()
@@ -650,3 +776,72 @@
{
return MgTileParameters::tileHeight;
}
+///////////////////////////////////////////////////////////////////////////////
+/// helper to retrieve map
+///////////////////////////////////////////////////////////////////////////////
+void MgServerTileService::GetMapFromDefinition (MgResourceIdentifier* mapDefinition, INT32 scaleIndex, Ptr<MgMap> &map)
+{
+ // Attempt use a cached & serialized MgMap object
+ Ptr<MgMemoryStreamHelper> cachedMap;
+ STRING mapString = mapDefinition->ToString();
+
+ MapCache::const_iterator iter = sm_mapCache.find(mapString);
+ if (sm_mapCache.end() != iter)
+ {
+ cachedMap = SAFE_ADDREF((*iter).second);
+ cachedMap->Rewind();
+ Ptr<MgStream> stream = new MgStream(cachedMap);
+ map = new MgMap();
+ map->Deserialize(stream);
+ }
+ else
+ {
+ // get the service from our helper method
+ Ptr<MgResourceService> resourceService = GetResourceServiceForMapDef(mapDefinition,
+ L"MgServerTileService.GetTile");
+ Ptr<MgSiteConnection> siteConn = new MgSiteConnection();
+ siteConn->Open(MgUserInformation::GetCurrentUserInfo());
+ map = new MgMap(siteConn);
+ map->Create(resourceService, mapDefinition, mapString);
+ cachedMap = new MgMemoryStreamHelper();
+ Ptr<MgStream> stream = new MgStream(cachedMap);
+ map->Serialize(stream);
+ if ((INT32)sm_mapCache.size() >= sm_mapCacheSize)
+ {
+ ClearMapCache(L"");
+ }
+ sm_mapCache[mapString] = SAFE_ADDREF((MgMemoryStreamHelper*)cachedMap);
+ }
+
+ double scale = map->GetFiniteDisplayScaleAt(scaleIndex);
+ map->SetViewScale(scale);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+// accessor method for resource service
+MgResourceService* MgServerTileService::GetResourceServiceForMapDef(MgResourceIdentifier* mapDefinition,
+ CREFSTRING funcName)
+{
+ if (m_resourceService) return m_resourceService;
+ // get service manager
+ MgServiceManager* serviceMan = MgServiceManager::GetInstance();
+ assert(NULL != serviceMan);
+
+ // Get the service from service manager
+ Ptr<MgResourceService> resourceService = m_resourceService = dynamic_cast<MgResourceService*>(
+ serviceMan->RequestService(MgServiceType::ResourceService));
+ assert(NULL != resourceService);
+
+ if (!resourceService->HasPermission(mapDefinition, MgResourcePermission::ReadOnly))
+ {
+ MG_LOG_AUTHENTICATION_ENTRY(MgResources::PermissionDenied.c_str());
+
+ MgStringCollection arguments;
+ arguments.Add(mapDefinition->ToString());
+
+ throw new MgPermissionDeniedException(
+ funcName, __LINE__, __WFILE__, &arguments, L"", NULL);
+ }
+ return resourceService.Detach();
+}
+
Modified: sandbox/rfc90/MgDev/Server/src/Services/Tile/ServerTileService.h
===================================================================
--- trunk/MgDev/Server/src/Services/Tile/ServerTileService.h 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Server/src/Services/Tile/ServerTileService.h 2010-03-26 03:01:23 UTC (rev 4700)
@@ -21,6 +21,12 @@
#include "ServerTileDllExport.h"
#include "TileCache.h"
+#define METATILES
+#define METAMAXDIM 8
+/// forward decl
+class MgServerRenderingService;
+class RS_Bounds;
+class RS_Color;
class MG_SERVER_TILE_API MgServerTileService : public MgTileService
{
DECLARE_CLASSNAME(MgServerTileService)
@@ -67,9 +73,12 @@
MgByteReader* GetTile(CREFSTRING tilePathname, MgMap* map, INT32 scaleIndex,
CREFSTRING baseMapLayerGroupName, INT32 tileColumn, INT32 tileRow);
+ void GetMapFromDefinition (MgResourceIdentifier* mapDefinition, INT32 scaleIndex, Ptr<MgMap> &map);
+
void ClearMapCache(CREFSTRING mapName);
MgResourceService* GetResourceServiceForMapDef(MgResourceIdentifier* mapDefinition, CREFSTRING funcName);
+ MgResourceService* m_resourceService;
// member data
Ptr<MgTileCache> m_tileCache;
@@ -83,6 +92,7 @@
static INT32 sm_creationCutoffTime;
static INT32 sm_pollingInterval;
static INT32 sm_mapCacheSize;
+ static INT32 sm_useMetaTiles;
};
#endif
Modified: sandbox/rfc90/MgDev/Server/src/Services/Tile/ServerTileService.vcproj
===================================================================
--- trunk/MgDev/Server/src/Services/Tile/ServerTileService.vcproj 2010-03-26 01:59:59 UTC (rev 4697)
+++ sandbox/rfc90/MgDev/Server/src/Services/Tile/ServerTileService.vcproj 2010-03-26 03:01:23 UTC (rev 4700)
@@ -44,7 +44,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\Common\Foundation;..\..\..\..\Common\Geometry;..\..\..\..\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;..\..\..\..\Common\MdfModel;..\..\Common;..\..\Common\Base;..\..\Common\Manager;..\Mapping;..\..\..\..\Oem\ACE\ACE_wrappers;..\..\..\..\Oem\FDO\inc"
+ AdditionalIncludeDirectories="..\..\..\..\Common\Foundation;..\..\..\..\Common\Geometry;..\..\..\..\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;..\..\..\..\Common\MdfModel;..\..\Common;..\..\Common\Base;..\..\Common\Manager;..\Mapping;..\Rendering;..\..\..\..\Oem\ACE\ACE_wrappers;..\..\..\..\Oem\FDO\inc"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MG_SERVER_TILE_EXPORTS"
MinimalRebuild="true"
ExceptionHandling="2"
@@ -123,7 +123,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="0"
- AdditionalIncludeDirectories="..\..\..\..\Common\Foundation;..\..\..\..\Common\Geometry;..\..\..\..\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;..\..\..\..\Common\MdfModel;..\..\Common;..\..\Common\Base;..\..\Common\Manager;..\Mapping;..\..\..\..\Oem\ACE\ACE_wrappers;..\..\..\..\Oem\FDO\inc"
+ AdditionalIncludeDirectories="..\..\..\..\Common\Foundation;..\..\..\..\Common\Geometry;..\..\..\..\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;..\..\..\..\Common\MdfModel;..\..\Common;..\..\Common\Base;..\..\Common\Manager;..\Mapping;..\Rendering;..\..\..\..\Oem\ACE\ACE_wrappers;..\..\..\..\Oem\FDO\inc"
PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;_USRDLL;MG_SERVER_TILE_EXPORTS"
MinimalRebuild="true"
ExceptionHandling="2"
@@ -202,7 +202,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="2"
- AdditionalIncludeDirectories="..\..\..\..\Common\Foundation;..\..\..\..\Common\Geometry;..\..\..\..\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;..\..\..\..\Common\MdfModel;..\..\Common;..\..\Common\Base;..\..\Common\Manager;..\Mapping;..\..\..\..\Oem\ACE\ACE_wrappers;..\..\..\..\Oem\FDO\inc"
+ AdditionalIncludeDirectories="..\..\..\..\Common\Foundation;..\..\..\..\Common\Geometry;..\..\..\..\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;..\..\..\..\Common\MdfModel;..\..\Common;..\..\Common\Base;..\..\Common\Manager;..\Mapping;..\Rendering;..\..\..\..\Oem\ACE\ACE_wrappers;..\..\..\..\Oem\FDO\inc"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MG_SERVER_TILE_EXPORTS"
ExceptionHandling="2"
RuntimeLibrary="2"
@@ -281,7 +281,7 @@
<Tool
Name="VCCLCompilerTool"
Optimization="2"
- AdditionalIncludeDirectories="..\..\..\..\Common\Foundation;..\..\..\..\Common\Geometry;..\..\..\..\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;..\..\..\..\Common\MdfModel;..\..\Common;..\..\Common\Base;..\..\Common\Manager;..\Mapping;..\..\..\..\Oem\ACE\ACE_wrappers;..\..\..\..\Oem\FDO\inc"
+ AdditionalIncludeDirectories="..\..\..\..\Common\Foundation;..\..\..\..\Common\Geometry;..\..\..\..\Common\PlatformBase;..\..\..\..\Common\MapGuideCommon;..\..\..\..\Common\MdfModel;..\..\Common;..\..\Common\Base;..\..\Common\Manager;..\Rendering;..\Mapping;..\..\..\..\Oem\ACE\ACE_wrappers;..\..\..\..\Oem\FDO\inc"
PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;_USRDLL;MG_SERVER_TILE_EXPORTS"
ExceptionHandling="2"
RuntimeLibrary="2"
More information about the mapguide-commits
mailing list