37 : mType( type ), mLayers( layers ), mAlpha( 1.0 ), mRenderHints( 0 ), mLayer( NULL )
41 for (
int i = 0; i <
mLayers.count(); i++ )
59 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
67 QgsSymbolLayerV2List::const_iterator it =
mLayers.constBegin();
68 for ( ; it !=
mLayers.constEnd(); ++it )
70 if ( it ==
mLayers.constBegin() )
72 unit = ( *it )->outputUnit();
76 if (( *it )->outputUnit() != unit )
88 QgsSymbolLayerV2List::iterator it =
mLayers.begin();
89 for ( ; it !=
mLayers.end(); ++it )
91 ( *it )->setOutputUnit( u );
112 default: defaultSymbol =
"";
break;
114 if ( defaultSymbol !=
"" )
125 default:
QgsDebugMsg(
"unknown layer's geometry type" );
return NULL;
133 if ( defaultSymbol ==
"" ||
136 s->
setColor( QColor::fromHsv( rand() % 360, 64 + rand() % 192, 128 + rand() % 128 ) );
144 if ( layer < 0 || layer >=
mLayers.count() )
163 if ( index < 0 || index >
mLayers.count() )
168 mLayers.insert( index, layer );
185 if ( index < 0 || index >=
mLayers.count() )
196 if ( index < 0 || index >=
mLayers.count() )
199 return mLayers.takeAt( index );
205 if ( index < 0 || index >=
mLayers.count() )
223 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
224 ( *it )->startRender( symbolContext );
232 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
233 ( *it )->stopRender( symbolContext );
240 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
242 if ( !( *it )->isLocked() )
243 ( *it )->setColor( color );
249 for ( QgsSymbolLayerV2List::const_iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
252 if ( !( *it )->isLocked() )
253 return ( *it )->color();
255 return QColor( 0, 0, 0 );
264 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
273 QPolygonF poly = QRectF( QPointF( 0, 0 ), QPointF( size.width() - 1, size.height() - 1 ) );
279 ( *it )->drawPreviewIcon( symbolContext, size );
286 QImage preview( QSize( 100, 100 ), QImage::Format_ARGB32_Premultiplied );
289 QPainter p( &preview );
290 p.setRenderHint( QPainter::Antialiasing );
291 p.translate( 0.5, 0.5 );
295 p.setPen( QPen( Qt::gray ) );
296 p.drawLine( 0, 50, 100, 50 );
297 p.drawLine( 50, 0, 50, 100 );
306 poly << QPointF( 0, 50 ) << QPointF( 99, 50 );
307 static_cast<QgsLineSymbolV2*
>( this )->renderPolyline( poly, 0, context );
312 polygon << QPointF( 20, 20 ) << QPointF( 80, 20 ) << QPointF( 80, 80 ) << QPointF( 20, 80 ) << QPointF( 20, 20 );
313 static_cast<QgsFillSymbolV2*
>( this )->renderPolygon( polygon, NULL, 0, context );
317 static_cast<QgsMarkerSymbolV2*
>( this )->renderPoint( QPointF( 50, 50 ), 0, context );
333 default: Q_ASSERT( 0 &&
"unknown symbol type" );
337 for ( QgsSymbolLayerV2List::const_iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
346 props[
"alpha" ] = QString::number(
alpha() );
347 double scaleFactor = 1.0;
349 props[
"uomScale" ] = scaleFactor != 1 ? QString::number( scaleFactor ) :
"";
351 for ( QgsSymbolLayerV2List::const_iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
353 ( *it )->toSld( doc, element, props );
360 for ( QgsSymbolLayerV2List::const_iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
372 QSet<QString> attributes;
373 QgsSymbolLayerV2List::const_iterator sIt =
mLayers.constBegin();
374 for ( ; sIt !=
mLayers.constEnd(); ++sIt )
378 attributes.unite(( *sIt )->usedAttributes() );
388 : mRenderContext( c ), mOutputUnit( u ), mAlpha( alpha ), mSelected( selected ), mRenderHints( renderHints ), mFeature( f ), mLayer( 0 )
466 double origAngle =
angle();
467 double angleDiff = ang - origAngle;
468 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
477 QgsSymbolLayerV2List::const_iterator it =
mLayers.begin();
484 return layer->
angle();
489 double origSize =
size();
491 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
494 if ( layer->
size() == origSize )
509 for ( QgsSymbolLayerV2List::const_iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
512 double lsize = layer->
size();
513 if ( lsize > maxSize )
522 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
531 QgsSymbolLayerV2List::const_iterator it =
mLayers.begin();
548 if ( layer >= 0 && layer <
mLayers.count() )
553 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
580 double origWidth =
width();
582 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
585 if ( layer->
width() == origWidth )
592 if ( origWidth != 0 )
601 for ( QgsSymbolLayerV2List::const_iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
605 if ( width > maxWidth )
618 if ( layer >= 0 && layer <
mLayers.count() )
623 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
655 if ( layer >= 0 && layer <
mLayers.count() )
666 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
692 for ( QgsSymbolLayerV2List::iterator it =
mLayers.begin(); it !=
mLayers.end(); ++it )
void setLocked(bool locked)
bool deleteSymbolLayer(int index)
delete symbol layer at specified index
void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, const QgsFeature *f, QgsRenderContext &context, int layer=-1, bool selected=false)
static QgsMarkerSymbolV2 * createSimple(const QgsStringMap &properties)
Create a marker symbol with one symbol layer: SimpleMarker with specified properties.
QgsSymbolV2(SymbolType type, QgsSymbolLayerV2List layers)
virtual double width() const
const QgsVectorLayer * mLayer
QSet< QString > usedAttributes() const
void drawPreviewIcon(QPainter *painter, QSize size)
static QString encodeSldUom(QgsSymbolV2::OutputUnit unit, double *scaleFactor)
void setScaleMethod(QgsSymbolV2::ScaleMethod scaleMethod)
QgsFillSymbolV2(QgsSymbolLayerV2List layers=QgsSymbolLayerV2List())
static QgsFillSymbolV2 * createSimple(const QgsStringMap &properties)
Create a fill symbol with one symbol layer: SimpleFill with specified properties. ...
bool changeSymbolLayer(int index, QgsSymbolLayerV2 *layer)
delete layer at specified index and set a new one
ScaleMethod scaleMethod()
virtual void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context)=0
QgsSymbolV2 * symbol(QString name)
return a NEW copy of symbol
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
QMap< QString, QString > QgsStringMap
void setWidth(double width)
void setAngle(double angle)
const QgsVectorLayer * layer() const
virtual void startRender(QgsSymbolV2RenderContext &context)=0
static QString encodeColor(QColor color)
void setColor(const QColor &color)
static QgsRenderContext createRenderContext(QPainter *p)
Creates a render context for a pixel based device.
QgsSymbolLayerV2List mLayers
QgsSymbolLayerV2List cloneLayers() const
bool appendSymbolLayer(QgsSymbolLayerV2 *layer)
append symbol layer at the end of the list
virtual void renderPoint(const QPointF &point, QgsSymbolV2RenderContext &context)=0
QgsLineSymbolV2(QgsSymbolLayerV2List layers=QgsSymbolLayerV2List())
qreal alpha() const
Get alpha transparency 1 for opaque, 0 for invisible.
static QgsLineSymbolV2 * createSimple(const QgsStringMap &properties)
Create a line symbol with one symbol layer: SimpleLine with specified properties. ...
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
void toSld(QDomDocument &doc, QDomElement &element, QgsStringMap props) const
void setRenderingPass(int renderingPass)
#define DEFAULT_SCALE_METHOD
virtual void setWidth(double width)
static QgsStyleV2 * defaultStyle()
return default application-wide style
void renderPolyline(const QPolygonF &points, const QgsFeature *f, QgsRenderContext &context, int layer=-1, bool selected=false)
void setAngle(double angle)
void setAngle(double angle)
void setSize(double size)
static double pixelSizeScaleFactor(const QgsRenderContext &c, QgsSymbolV2::OutputUnit u)
Returns scale factor painter units -> pixel dimensions.
qreal mAlpha
Symbol opacity (in the range 0 - 1)
QgsSymbolV2RenderContext & operator=(const QgsSymbolV2RenderContext &)
QgsSymbolV2RenderContext(QgsRenderContext &c, QgsSymbolV2::OutputUnit u, qreal alpha=1.0, bool selected=false, int renderHints=0, const QgsFeature *f=0)
virtual void renderPolygonOutline(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context)
void renderPoint(const QPointF &point, const QgsFeature *f, QgsRenderContext &context, int layer=-1, bool selected=false)
QgsSymbolV2::ScaleMethod scaleMethod() const
QgsSymbolV2::SymbolType type() const
double ANALYSIS_EXPORT angle(Point3D *p1, Point3D *p2, Point3D *p3, Point3D *p4)
Calculates the angle between two segments (in 2 dimension, z-values are ignored)
virtual void renderPolyline(const QPolygonF &points, QgsSymbolV2RenderContext &context)=0
virtual QgsSymbolV2 * clone() const
~QgsSymbolV2RenderContext()
bool isSymbolLayerCompatible(SymbolType t)
check whether a symbol layer type can be used within the symbol (marker-marker, line-line, fill-fill/line)
QgsMarkerSymbolV2(QgsSymbolLayerV2List layers=QgsSymbolLayerV2List())
Contains information about the context of a rendering operation.
QString readEntry(const QString &scope, const QString &key, const QString &def=QString::null, bool *ok=0) const
void stopRender(QgsRenderContext &context)
bool insertSymbolLayer(int index, QgsSymbolLayerV2 *layer)
insert symbol layer to specified index
static QgsSymbolV2 * defaultSymbol(QGis::GeometryType geomType)
return new default symbol for specified geometry type
virtual QgsSymbolV2 * clone() const
QList< QgsSymbolLayerV2 * > QgsSymbolLayerV2List
void setLayer(const QgsVectorLayer *layer)
static QgsProject * instance()
access to canonical QgsProject instance
QgsRenderContext & mRenderContext
void startRender(QgsRenderContext &context, const QgsVectorLayer *layer=0)
QgsSymbolV2::OutputUnit outputUnit() const
static double lineWidthScaleFactor(const QgsRenderContext &c, QgsSymbolV2::OutputUnit u)
Returns the line width scale factor depending on the unit and the paint device.
virtual QgsSymbolV2 * clone() const
QgsSymbolLayerV2 * takeSymbolLayer(int index)
remove symbol layer from the list and return pointer to it
double outputPixelSize(double size) const
double outputLineWidth(double width) const
QgsSymbolLayerV2 * symbolLayer(int layer)
void setSize(double size)
void setAngle(double angle)
Represents a vector layer which manages a vector based data sets.
virtual void stopRender(QgsSymbolV2RenderContext &context)=0
QgsSymbolV2::OutputUnit mOutputUnit
void setOutputUnit(QgsSymbolV2::OutputUnit u)
void setAlpha(qreal alpha)
Set alpha transparency 1 for opaque, 0 for invisible.
QImage bigSymbolPreviewImage()
void setScaleMethod(QgsSymbolV2::ScaleMethod scaleMethod)
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())