[mapguide-commits] r5162 - in trunk/MgDev/Server/src:
Services/Mapping UnitTesting
svn_mapguide at osgeo.org
svn_mapguide at osgeo.org
Mon Sep 20 15:44:42 EDT 2010
Author: brucedechant
Date: 2010-09-20 19:44:42 +0000 (Mon, 20 Sep 2010)
New Revision: 5162
Modified:
trunk/MgDev/Server/src/Services/Mapping/LegendPlotUtil.cpp
trunk/MgDev/Server/src/UnitTesting/TestRenderingService.cpp
Log:
Fix for trac ticket 1428 - GETMAPLEGENDIMAGE should omit empty layer groups from being rendered
http://trac.osgeo.org/mapguide/ticket/1428
Notes:
- Change to only render visible layers
Modified: trunk/MgDev/Server/src/Services/Mapping/LegendPlotUtil.cpp
===================================================================
--- trunk/MgDev/Server/src/Services/Mapping/LegendPlotUtil.cpp 2010-09-20 16:53:36 UTC (rev 5161)
+++ trunk/MgDev/Server/src/Services/Mapping/LegendPlotUtil.cpp 2010-09-20 19:44:42 UTC (rev 5162)
@@ -182,11 +182,27 @@
// do layer groups
Ptr<MgLayerGroupCollection> mggroups = map->GetLayerGroups();
+ Ptr<MgLayerCollection> layers = map->GetLayers();
// iterate over groups and draw each group's layers
for (int k = 0; k < mggroups->GetCount(); k++)
{
Ptr<MgLayerGroup> mggroup = mggroups->GetItem(k);
+
+ // Count number of visible layers in this group.
+ int visibleLayerCount = 0;
+ for (int l = 0; l < layers->GetCount(); l++)
+ {
+ Ptr<MgLayerBase> layer = layers->GetItem(l);
+ Ptr<MgLayerGroup> layerGroup = layer->GetGroup();
+ if ((layer->IsVisible()) && (layerGroup.p == mggroup.p))
+ {
+ visibleLayerCount++;
+ }
+ }
+ if (visibleLayerCount == 0)
+ continue;
+
if (mggroup == NULL)
{
throw new MgNullReferenceException(L"MgLegendPlotUtil.AddLegendElement", __LINE__, __WFILE__, NULL, L"", NULL);
Modified: trunk/MgDev/Server/src/UnitTesting/TestRenderingService.cpp
===================================================================
--- trunk/MgDev/Server/src/UnitTesting/TestRenderingService.cpp 2010-09-20 16:53:36 UTC (rev 5161)
+++ trunk/MgDev/Server/src/UnitTesting/TestRenderingService.cpp 2010-09-20 19:44:42 UTC (rev 5162)
@@ -539,6 +539,40 @@
map->SetViewScale(12000.0);
Ptr<MgByteReader> rdr2 = m_svcRendering->RenderMapLegend(map, 200, 400, bgc, L"PNG");
rdr2->ToFile(L"../UnitTestFiles/RenderLegend12k.png");
+
+ // add a layer group
+ Ptr<MgLayerGroupCollection> layerGroups = map->GetLayerGroups();
+ Ptr<MgLayerCollection> layers = map->GetLayers();
+
+ Ptr<MgResourceIdentifier> resId = new MgResourceIdentifier(L"Library://UnitTests/Layers/Parcels.LayerDefinition");
+
+ Ptr<MgLayerGroup> group = new MgLayerGroup(L"Can't see me");
+ group->SetLegendLabel(L"Can't see me");
+ group->SetDisplayInLegend(true);
+ layerGroups->Add(group);
+
+ Ptr<MgLayer> layer = new MgLayer(resId, m_svcResource);
+ layer->SetName(L"MyParcels");
+ layer->SetLegendLabel(L"Parcels");
+ layer->SetGroup(group);
+ layer->SetDisplayInLegend(true);
+
+ layers->Add(layer);
+
+ //Re-draw at 75k. Layer group should not be there because it has no visible layers
+ map->SetViewScale(75000.0);
+ Ptr<MgByteReader> rdr3 = m_svcRendering->RenderMapLegend(map, 200, 400, bgc, L"PNG");
+ rdr3->ToFile(L"../UnitTestFiles/RenderLegend75kWithEmptyLayerGroup.png");
+
+ //Re-draw at 14000. Layer group should still not be there because it has no visible layers
+ map->SetViewScale(14000.0);
+ Ptr<MgByteReader> rdr4 = m_svcRendering->RenderMapLegend(map, 200, 400, bgc, L"PNG");
+ rdr4->ToFile(L"../UnitTestFiles/RenderLegend14kWithEmptyLayerGroup.png");
+
+ //Re-draw at 12000. Layer group should now be there because its child layer (Parcels) should be visible
+ map->SetViewScale(12000.0);
+ Ptr<MgByteReader> rdr5 = m_svcRendering->RenderMapLegend(map, 200, 400, bgc, L"PNG");
+ rdr5->ToFile(L"../UnitTestFiles/RenderLegend12kWithLayerGroup.png");
}
catch (MgException* e)
{
More information about the mapguide-commits
mailing list