[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