[mapguide-commits] r1266 - trunk/MgDev/Common/Stylization

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Fri Mar 16 18:27:30 EDT 2007


Author: waltweltonlair
Date: 2007-03-16 18:27:30 -0400 (Fri, 16 Mar 2007)
New Revision: 1266

Modified:
   trunk/MgDev/Common/Stylization/StylizationEngine.cpp
   trunk/MgDev/Common/Stylization/StylizationEngine.h
Log:
Just a small optimization: build the list of composite type styles once in
StylizationEngine::StylizeVectorLayer, rather than determining the type of
each one once per pass and per feature.


Modified: trunk/MgDev/Common/Stylization/StylizationEngine.cpp
===================================================================
--- trunk/MgDev/Common/Stylization/StylizationEngine.cpp	2007-03-16 21:45:44 UTC (rev 1265)
+++ trunk/MgDev/Common/Stylization/StylizationEngine.cpp	2007-03-16 22:27:30 UTC (rev 1266)
@@ -38,6 +38,7 @@
 
 StylizationEngine::StylizationEngine(SE_SymbolManager* resources) :
     m_resources(resources),
+    m_renderer(NULL),
     m_serenderer(NULL)
 {
     m_pool = new SE_LineBufferPool;
@@ -83,6 +84,7 @@
         return;
 
     m_serenderer->SetLineBufferPool(m_pool);
+    bool bClip = m_renderer->RequiresClipping();
 
     // get tooltip and url for the layer
     SE_String seTip;
@@ -90,9 +92,20 @@
     m_visitor->ParseStringExpression(layer->GetToolTip(), seTip);
     m_visitor->ParseStringExpression(layer->GetUrl(), seUrl);
 
+    // extract all the composite styles once
     MdfModel::FeatureTypeStyleCollection* ftsc = range->GetFeatureTypeStyles();
+    std::vector<CompositeTypeStyle*> compTypeStyles;
+    for (int i=0; i<ftsc->GetCount(); i++)
+    {
+        MdfModel::FeatureTypeStyle* fts = ftsc->GetAt(i);
+        if (FeatureTypeStyleVisitor::DetermineFeatureTypeStyle(fts) == FeatureTypeStyleVisitor::ftsComposite)
+            compTypeStyles.push_back((CompositeTypeStyle*)fts);
+    }
 
-    bool bClip = renderer->RequiresClipping();
+    size_t numTypeStyles = compTypeStyles.size();
+    _ASSERT(numTypeStyles > 0);
+    if (numTypeStyles == 0)
+        return;
 
     // we always start with rendering pass 0
     int renderingPass = 0;
@@ -145,15 +158,9 @@
             //expressions and this call flushes that
             executor->Reset();
 
-            // we need to stylize once for each FeatureTypeStyle that matches
-            // the geometry type (Note: this may have to change to match
-            // feature classes)
-            for (int i=0; i<ftsc->GetCount(); i++)
-            {
-                MdfModel::FeatureTypeStyle* fts = ftsc->GetAt(i);
-                if (FeatureTypeStyleVisitor::DetermineFeatureTypeStyle(fts) == FeatureTypeStyleVisitor::ftsComposite)
-                    Stylize(reader, executor, lb, (CompositeTypeStyle*)fts, &seTip, &seUrl, NULL, renderingPass, nextRenderingPass);
-            }
+            // stylize once for each composite type style
+            for (size_t i=0; i<numTypeStyles; i++)
+                Stylize(reader, executor, lb, compTypeStyles[i], &seTip, &seUrl, NULL, renderingPass, nextRenderingPass);
 
             if (lb)
                 m_lbPool->FreeLineBuffer(lb); // free geometry when done stylizing

Modified: trunk/MgDev/Common/Stylization/StylizationEngine.h
===================================================================
--- trunk/MgDev/Common/Stylization/StylizationEngine.h	2007-03-16 21:45:44 UTC (rev 1265)
+++ trunk/MgDev/Common/Stylization/StylizationEngine.h	2007-03-16 22:27:30 UTC (rev 1266)
@@ -85,8 +85,8 @@
     void LayoutCustomLabel(const std::wstring& positioningAlgo, LineBuffer* geometry, SE_Matrix& xform, SE_Style* style, SE_RenderStyle* rstyle, double mm2px);
 
 private:
+    Renderer* m_renderer;
     SE_Renderer* m_serenderer;
-    Renderer* m_renderer;
     SE_SymbolManager* m_resources;
     SE_LineBufferPool* m_pool;
     SE_StyleVisitor* m_visitor;



More information about the mapguide-commits mailing list