[QGIS Commit] r13421 - trunk/qgis/src/core/symbology-ng

svn_qgis at osgeo.org svn_qgis at osgeo.org
Tue May 4 05:08:57 EDT 2010


Author: wonder
Date: 2010-05-04 05:08:56 -0400 (Tue, 04 May 2010)
New Revision: 13421

Modified:
   trunk/qgis/src/core/symbology-ng/qgslinesymbollayerv2.cpp
   trunk/qgis/src/core/symbology-ng/qgslinesymbollayerv2.h
   trunk/qgis/src/core/symbology-ng/qgssymbollayerv2.h
Log:
MarkerLine symbol layer: fixed usage with map units, set minimal interval to avoid infinite loop, simpler markerline symbol handling.

Developed for Faunalia (http://www.faunalia.it) with funding from Regione Toscana - Sistema Informativo per la Gestione del Territorio e dell' Ambiente [RT-SIGTA]".
For the project: "Sviluppo di prodotti software GIS open-source basati sui prodotti QuantumGIS e Postgis (CIG 037728516E)"


Modified: trunk/qgis/src/core/symbology-ng/qgslinesymbollayerv2.cpp
===================================================================
--- trunk/qgis/src/core/symbology-ng/qgslinesymbollayerv2.cpp	2010-05-04 09:04:36 UTC (rev 13420)
+++ trunk/qgis/src/core/symbology-ng/qgslinesymbollayerv2.cpp	2010-05-04 09:08:56 UTC (rev 13421)
@@ -246,20 +246,19 @@
 
 void QgsMarkerLineSymbolLayerV2::startRender( QgsSymbolV2RenderContext& context )
 {
+  mMarker->setAlpha( context.alpha() );
+  mMarker->setOutputUnit( context.outputUnit() );
+
   // if being rotated, it gets initialized with every line segment
-  if ( !mRotateMarker )
-  {
-    mMarker->setAlpha( context.alpha() );
-    mMarker->startRender( context.renderContext() );
-  }
+  if ( mRotateMarker )
+    mMarker->setRenderHints( QgsSymbolV2::DataDefinedRotation );
+
+  mMarker->startRender( context.renderContext() );
 }
 
 void QgsMarkerLineSymbolLayerV2::stopRender( QgsSymbolV2RenderContext& context )
 {
-  if ( !mRotateMarker )
-  {
-    mMarker->stopRender( context.renderContext() );
-  }
+  mMarker->stopRender( context.renderContext() );
 }
 
 void QgsMarkerLineSymbolLayerV2::renderPolyline( const QPolygonF& points, QgsSymbolV2RenderContext& context )
@@ -282,7 +281,7 @@
   bool first = true;
   double origAngle = mMarker->angle();
 
-  double painterUnitInterval = context.outputLineWidth( mInterval );
+  double painterUnitInterval = context.outputLineWidth( mInterval > 0 ? mInterval : 0.1 );
 
   QgsRenderContext& rc = context.renderContext();
 
@@ -306,9 +305,7 @@
     // rotate marker (if desired)
     if ( mRotateMarker )
     {
-      mMarker->setAlpha( context.alpha() );
       mMarker->setAngle( origAngle + ( l.angle() * 180 / M_PI ) );
-      mMarker->startRender( rc );
     }
 
     // draw first marker
@@ -329,9 +326,6 @@
     }
 
     lastPt = pt;
-
-    if ( mRotateMarker )
-      mMarker->stopRender( rc );
   }
 
   // restore original rotation
@@ -375,6 +369,16 @@
   return x;
 }
 
+void QgsMarkerLineSymbolLayerV2::setWidth( double width )
+{
+  mMarker->setSize( width );
+}
+
+double QgsMarkerLineSymbolLayerV2::width() const
+{
+  return mMarker->size();
+}
+
 /////////////
 
 QgsLineDecorationSymbolLayerV2::QgsLineDecorationSymbolLayerV2( QColor color )

Modified: trunk/qgis/src/core/symbology-ng/qgslinesymbollayerv2.h
===================================================================
--- trunk/qgis/src/core/symbology-ng/qgslinesymbollayerv2.h	2010-05-04 09:04:36 UTC (rev 13420)
+++ trunk/qgis/src/core/symbology-ng/qgslinesymbollayerv2.h	2010-05-04 09:08:56 UTC (rev 13421)
@@ -108,6 +108,9 @@
     QgsSymbolV2* subSymbol();
     bool setSubSymbol( QgsSymbolV2* symbol );
 
+    virtual void setWidth( double width );
+    virtual double width() const;
+
     // new stuff
 
     bool rotateMarker() const { return mRotateMarker; }

Modified: trunk/qgis/src/core/symbology-ng/qgssymbollayerv2.h
===================================================================
--- trunk/qgis/src/core/symbology-ng/qgssymbollayerv2.h	2010-05-04 09:04:36 UTC (rev 13420)
+++ trunk/qgis/src/core/symbology-ng/qgssymbollayerv2.h	2010-05-04 09:08:56 UTC (rev 13421)
@@ -99,8 +99,8 @@
   public:
     virtual void renderPolyline( const QPolygonF& points, QgsSymbolV2RenderContext& context ) = 0;
 
-    void setWidth( double width ) { mWidth = width; }
-    double width() const { return mWidth; }
+    virtual void setWidth( double width ) { mWidth = width; }
+    virtual double width() const { return mWidth; }
 
     void drawPreviewIcon( QgsSymbolV2RenderContext& context, QSize size );
 



More information about the QGIS-commit mailing list