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

svn_mapguide at osgeo.org svn_mapguide at osgeo.org
Thu Sep 23 23:35:43 EDT 2010


Author: waltweltonlair
Date: 2010-09-24 03:35:43 +0000 (Fri, 24 Sep 2010)
New Revision: 5185

Modified:
   trunk/MgDev/Common/Stylization/StylizationEngine.cpp
Log:
Cleanup StylizationEngine::StylizeWatermark
* fix warnings
* fix lousy formatting


Modified: trunk/MgDev/Common/Stylization/StylizationEngine.cpp
===================================================================
--- trunk/MgDev/Common/Stylization/StylizationEngine.cpp	2010-09-23 23:28:17 UTC (rev 5184)
+++ trunk/MgDev/Common/Stylization/StylizationEngine.cpp	2010-09-24 03:35:43 UTC (rev 5185)
@@ -236,15 +236,10 @@
 }
 
 
-// THIS METHOD NEEDS TO BE CLEANED UP
-// ** unnecessary object creation using new (allocated n the stack instead)
-// ** compiler warnings being generated
 void StylizationEngine::StylizeWatermark(SE_Renderer* se_renderer,
                                          WatermarkDefinition* watermark,
-                                         int drawWidth,
-                                         int drawHeight,
-                                         int saveWidth,
-                                         int saveHeight)
+                                         int drawWidth, int drawHeight,
+                                         int saveWidth, int saveHeight)
 {
     m_serenderer = se_renderer;
     m_reader = NULL;
@@ -262,7 +257,8 @@
     SE_Rule rule;
 
     // Translate watermark source into SE_SymbolInstance list.
-    // As the source is adopted into symbol, we need to detach them after the rendering is done.
+    // As the source is adopted into symbol, we need to detach them after
+    // the rendering is done.
     CompositeSymbolization symbols;
 
     std::auto_ptr<SymbolInstance> instance(new SymbolInstance());
@@ -273,13 +269,12 @@
     m_visitor->Convert(rule.symbolInstances, &symbols);
     _ASSERT(rule.symbolInstances.size() == 1u);
     
-    // Translate appearance (transparency / rotation) into symbol instance
-    // Prepare values
+    // translate appearance (transparency / rotation) into symbol instance
     double transparency = watermark->GetAppearance()->GetTransparency();
-    transparency = (transparency < 0) ? 0 : ((transparency > 100) ? 100 : transparency);
-    double opacity = 1 - transparency / 100;
+    transparency = (transparency < 0.0)? 0.0 : ((transparency > 100.0)? 100.0 : transparency);
+    double opacity = 1.0 - 0.01*transparency;
     double rotation = watermark->GetAppearance()->GetRotation();
-    rotation = (rotation < 0) ? 0 : ((rotation > 360) ? 360 : rotation);
+    rotation = (rotation < 0.0)? 0.0 : ((rotation > 360.0)? 360.0 : rotation);
 
     SE_SymbolInstance* sym = rule.symbolInstances[0];
     size_t nStyles = sym->styles.size();
@@ -287,9 +282,12 @@
     {
         SE_PointStyle* style = (SE_PointStyle*)(sym->styles[styleIx]);
         style->angleDeg.value = style->angleDeg.defValue = style->angleDeg.defValue + rotation;
-        if(style->symbol.size() == 0) continue;
+        if (style->symbol.size() == 0)
+            continue;
         
-        if(1 - opacity < 0.0001) continue;    //The opaque is 1.
+        if (opacity > 0.9999)   // opaque is 1
+            continue;
+
         size_t nPrimitives = style->symbol.size();
         for (size_t primitiveIx=0; primitiveIx<nPrimitives; ++primitiveIx)
         {
@@ -298,36 +296,28 @@
             SE_Polygon* polygonPri = dynamic_cast<SE_Polygon*>(primitive);
             SE_Polyline* linePri = dynamic_cast<SE_Polyline*>(primitive);
             SE_Raster* rasterPri = dynamic_cast<SE_Raster*>(primitive);
-            if(textPri)
+            if (textPri)
             {
-                //Text need to change color
-                textPri->textColor.value.argb = textPri->textColor.defValue.argb
-                    = TransparentColor(textPri->textColor.defValue.argb, opacity);
-                textPri->ghostColor.value.argb = textPri->ghostColor.defValue.argb
-                    = TransparentColor(textPri->ghostColor.defValue.argb, opacity);
-                textPri->frameLineColor.value.argb = textPri->frameLineColor.defValue.argb
-                    = TransparentColor(textPri->frameLineColor.defValue.argb, opacity);
-                textPri->frameFillColor.value.argb = textPri->frameFillColor.defValue.argb
-                    = TransparentColor(textPri->frameFillColor.defValue.argb, opacity);
+                // text needs to change color
+                textPri->textColor.value.argb      = textPri->textColor.defValue.argb      = TransparentColor(textPri->textColor.defValue.argb, opacity);
+                textPri->ghostColor.value.argb     = textPri->ghostColor.defValue.argb     = TransparentColor(textPri->ghostColor.defValue.argb, opacity);
+                textPri->frameLineColor.value.argb = textPri->frameLineColor.defValue.argb = TransparentColor(textPri->frameLineColor.defValue.argb, opacity);
+                textPri->frameFillColor.value.argb = textPri->frameFillColor.defValue.argb = TransparentColor(textPri->frameFillColor.defValue.argb, opacity);
             }
-            else if(linePri)
+            else if (linePri)
             {
-                linePri->color.value.argb = linePri->color.defValue.argb
-                    = TransparentColor(linePri->color.defValue.argb, opacity);
-                if(polygonPri)
-                {
-                    polygonPri->fill.value.argb = polygonPri->fill.defValue.argb
-                        = TransparentColor(polygonPri->fill.defValue.argb, opacity);
-                }
+                linePri->color.value.argb = linePri->color.defValue.argb = TransparentColor(linePri->color.defValue.argb, opacity);
+                if (polygonPri)
+                    polygonPri->fill.value.argb = polygonPri->fill.defValue.argb = TransparentColor(polygonPri->fill.defValue.argb, opacity);
             }
-            else if(rasterPri)
+            else if (rasterPri)
             {
                 rasterPri->opacity = opacity;
             }
         }
     }
     
-    //Prepare some rendering context variable
+    // prepare some rendering context variable
     double mm2sud = m_serenderer->GetScreenUnitsPerMillimeterDevice();
     double mm2suw = m_serenderer->GetScreenUnitsPerMillimeterWorld();
     double px2su  = m_serenderer->GetScreenUnitsPerPixel();
@@ -336,46 +326,43 @@
     // the factor to convert screen units to mapping units
     double su2wu = 0.001 / (mm2suw * m_serenderer->GetMetersPerUnit());
 
-    //Prepare the position list
+    // prepare the position list
     XYWatermarkPosition* xyPosition = dynamic_cast<XYWatermarkPosition*>(watermark->GetPosition());
     TileWatermarkPosition* tilePosition = dynamic_cast<TileWatermarkPosition*>(watermark->GetPosition());
     WatermarkXOffset::HorizontalAlignment hAlignment = WatermarkXOffset::Center;
     WatermarkYOffset::VerticalAlignment vAlignment = WatermarkYOffset::Center;
-    WatermarkOffset::WatermarkOffsetUnit hUnit, vUnit;
-    double suPerhUnit, suPervUnit, xOffset, yOffset;
-    if(xyPosition)
+    WatermarkOffset::WatermarkOffsetUnit hUnit = WatermarkOffset::Pixels;
+    WatermarkOffset::WatermarkOffsetUnit vUnit = WatermarkOffset::Pixels;
+    double xOffset = 0.0;
+    double yOffset = 0.0;
+    if (xyPosition)
     {
         hAlignment = xyPosition->GetXPosition()->GetAlignment();
         vAlignment = xyPosition->GetYPosition()->GetAlignment();
         hUnit = xyPosition->GetXPosition()->GetUnit();
         vUnit = xyPosition->GetYPosition()->GetUnit();
-        xOffset = xyPosition->GetXPosition()->GetOffset();      //In watermark unit
-        yOffset = xyPosition->GetYPosition()->GetOffset();      //In watermark unit
+        xOffset = xyPosition->GetXPosition()->GetOffset();              // in watermark units
+        yOffset = xyPosition->GetYPosition()->GetOffset();              // in watermark units
     }
-    else if(tilePosition)
+    else if (tilePosition)
     {
         hAlignment = tilePosition->GetHorizontalPosition()->GetAlignment();
         vAlignment = tilePosition->GetVerticalPosition()->GetAlignment();
         hUnit = tilePosition->GetHorizontalPosition()->GetUnit();
         vUnit = tilePosition->GetVerticalPosition()->GetUnit();
-        xOffset = tilePosition->GetHorizontalPosition()->GetOffset();      //In watermark unit
-        yOffset = tilePosition->GetVerticalPosition()->GetOffset();        //In watermark unit
+        xOffset = tilePosition->GetHorizontalPosition()->GetOffset();   // in watermark units
+        yOffset = tilePosition->GetVerticalPosition()->GetOffset();     // in watermark units
     }
-    double pixelPerMeterDevice = 1000*mm2sud/px2su;
-    suPerhUnit = ((hUnit == WatermarkOffset::Pixels) 
-                    ? 1
-                    : pixelPerMeterDevice / GetUnitPerMeter(hUnit)) * px2su;
-    suPervUnit = ((vUnit == WatermarkOffset::Pixels) 
-                    ? 1
-                    : pixelPerMeterDevice / GetUnitPerMeter(vUnit)) * px2su;
-    xOffset *= suPerhUnit;      //In screen unit
-    yOffset *= suPervUnit;      //In screen unit
+    double pixelPerMeterDevice = 1000.0 * mm2sud / px2su;
+    double suPerhUnit = ((hUnit == WatermarkOffset::Pixels)? 1.0 : pixelPerMeterDevice / GetUnitPerMeter(hUnit)) * px2su;
+    double suPervUnit = ((vUnit == WatermarkOffset::Pixels)? 1.0 : pixelPerMeterDevice / GetUnitPerMeter(vUnit)) * px2su;
+    xOffset *= suPerhUnit;      // in screen units
+    yOffset *= suPervUnit;      // in screen units
 
-
     std::vector<double> watermarkPosList;
-    if(xyPosition)
+    if (xyPosition)
     {
-        switch(hAlignment)
+        switch (hAlignment)
         {
         case WatermarkXOffset::Right:
             xOffset = saveWidth - xOffset;
@@ -383,21 +370,23 @@
         case WatermarkXOffset::Left:
             break;
         default:
-            xOffset += saveWidth/2;
+            xOffset += 0.5*saveWidth;
             break;
         }
-        switch(vAlignment)
+
+        switch (vAlignment)
         {
         case WatermarkYOffset::Bottom:
-            yOffset = yUp ? yOffset : saveHeight - yOffset;
+            yOffset = yUp? yOffset : saveHeight - yOffset;
             break;
         case WatermarkYOffset::Top:
-            yOffset = yUp ? saveHeight - yOffset : yOffset;
+            yOffset = yUp? saveHeight - yOffset : yOffset;
             break;
         default:
-            yOffset = saveHeight/2 + (yUp ? yOffset : (-yOffset));
+            yOffset = 0.5*saveHeight + (yUp? yOffset : -yOffset);
             break;
         }
+
         xOffset *= drawWidth / saveWidth;
         yOffset *= drawHeight / saveHeight;
         double mapPosX, mapPosY;
@@ -405,11 +394,12 @@
         watermarkPosList.push_back(mapPosX);
         watermarkPosList.push_back(mapPosY);
     }
-    else if(tilePosition)
+    else if (tilePosition)
     {
-        double tileWidth = tilePosition->GetTileWidth()*px2su, 
-            tileHeight = tilePosition->GetTileHeight()*px2su;
-        switch(hAlignment)
+        double tileWidth  = tilePosition->GetTileWidth()*px2su;
+        double tileHeight = tilePosition->GetTileHeight()*px2su;
+
+        switch (hAlignment)
         {
         case WatermarkXOffset::Right:
             xOffset = tileWidth - xOffset;
@@ -417,28 +407,30 @@
         case WatermarkXOffset::Left:
             break;
         default:
-            xOffset += tileWidth/2;
+            xOffset += 0.5*tileWidth;
             break;
         }
-        switch(vAlignment)
+
+        switch (vAlignment)
         {
         case WatermarkYOffset::Bottom:
-            yOffset = yUp ? yOffset : tileHeight - yOffset;
+            yOffset = yUp? yOffset : tileHeight - yOffset;
             break;
         case WatermarkYOffset::Top:
-            yOffset = yUp ? tileHeight - yOffset : yOffset;
+            yOffset = yUp? tileHeight - yOffset : yOffset;
             break;
         default:
-            yOffset = tileHeight/2 + (yUp ? yOffset : (-yOffset));
+            yOffset = 0.5*tileHeight + (yUp? yOffset : -yOffset);
             break;
         }
+
         double drawPosX, drawPosY, mapPosX, mapPosY;
-        for(int i = 0; i<= (int)(saveWidth/tileWidth); i++)
+        for (int i=0; i<=(int)(saveWidth/tileWidth); ++i)
         {
-            for(int j = 0; j <= (int)(saveHeight/tileHeight); j++)
+            for (int j=0; j<=(int)(saveHeight/tileHeight); ++j)
             {
                 drawPosX = i*tileWidth+xOffset;
-                drawPosY = yUp ? (saveHeight-(j+1)*tileHeight+yOffset) : j*tileHeight+yOffset;
+                drawPosY = yUp? (saveHeight-(j+1)*tileHeight+yOffset) : j*tileHeight+yOffset;
                 xOffset *= drawWidth / saveWidth;
                 yOffset *= drawHeight / saveHeight;
                 m_serenderer->ScreenToWorldPoint(drawPosX, drawPosY, mapPosX, mapPosY);
@@ -470,8 +462,7 @@
         for (size_t posIx=0; posIx<nPos; posIx+=2)
         {
             //Get geometry
-            LineBuffer* lb = LineBufferPool::NewLineBuffer(
-                m_pool, 8, FdoDimensionality_Z);
+            LineBuffer* lb = LineBufferPool::NewLineBuffer(m_pool, 8, FdoDimensionality_Z);
             spLB.reset(lb);
             lb->MoveTo(watermarkPosList[posIx], watermarkPosList[posIx+1]);
             // tell line buffer the current drawing scale (used for arc tessellation)
@@ -604,41 +595,36 @@
                     bounds[2].y = bounds[3].y = rs_max(bounds[2].y, pt.y);
                 }
             }
+
             // bounds[0].x is left, bounds[1].x is right
-            switch(hAlignment)
+            switch (hAlignment)
             {
             case WatermarkXOffset::Right:
-                sym->absOffset[0].value = sym->absOffset[0].defValue 
-                                        = -bounds[1].x / mm2suX;
+                sym->absOffset[0].value = sym->absOffset[0].defValue = -bounds[1].x / mm2suX;
                 break;
             case WatermarkXOffset::Left:
-                sym->absOffset[0].value = sym->absOffset[0].defValue 
-                                        = -bounds[0].x / mm2suX;
+                sym->absOffset[0].value = sym->absOffset[0].defValue = -bounds[0].x / mm2suX;
                 break;
             default:
-                sym->absOffset[0].value = sym->absOffset[0].defValue 
-                                        = -(bounds[0].x + bounds[1].x) / 2 / mm2suX;
+                sym->absOffset[0].value = sym->absOffset[0].defValue = -0.5*(bounds[0].x + bounds[1].x) / mm2suX;
                 break;
             }
+
             // bounds[1].y is bottom, bounds[2].y is top
-            switch(vAlignment)
+            switch (vAlignment)
             {
             case WatermarkYOffset::Bottom:
-                sym->absOffset[1].value = sym->absOffset[1].defValue 
-                                        = (yUp ? (-bounds[1].y) : bounds[1].y) / mm2suY;
+                sym->absOffset[1].value = sym->absOffset[1].defValue = (yUp? -1.0: 1.0) * bounds[1].y / mm2suY;
                 break;
             case WatermarkYOffset::Top:
-                sym->absOffset[1].value = sym->absOffset[1].defValue 
-                                        = (yUp ? (-bounds[2].y) : bounds[2].y) / mm2suY;
+                sym->absOffset[1].value = sym->absOffset[1].defValue = (yUp? -1.0: 1.0) * bounds[2].y / mm2suY;
                 break;
             default:
-                sym->absOffset[1].value = sym->absOffset[1].defValue 
-                    = (yUp ? -1: 1)*((bounds[1].y + bounds[2].y) / 2 / mm2suY);
+                sym->absOffset[1].value = sym->absOffset[1].defValue = (yUp? -1.0: 1.0) * 0.5*(bounds[1].y + bounds[2].y) / mm2suY;
                 break;
             }
 
             // prepare the geometry on which we will apply the styles
-
             if (bClip)
             {
                 // compute offset to apply to the clipping bounds
@@ -742,6 +728,7 @@
             if(spLB.get())
                 LineBufferPool::FreeLineBuffer(m_pool, spLB.release());
         }
+
         // switch to the next symbol rendering pass
         symbolRenderingPass = nextSymbolRenderingPass;
         nextSymbolRenderingPass = -1;



More information about the mapguide-commits mailing list