82 double mmMapUnitScaleFactor,
83 const QString& layerName,
86 const QPointF& shift )
const 89 Q_UNUSED( mmMapUnitScaleFactor );
90 Q_UNUSED( layerName );
120 return QVector<qreal>();
125 return Qt::SolidLine;
151 it.value()->prepare( *fields );
154 it.value()->setScale( scale );
169 columns.append( ddIt.value()->referencedColumns() );
173 QSet<QString> attributes;
174 QStringList::const_iterator it = columns.constBegin();
175 for ( ; it != columns.constEnd(); ++it )
177 attributes.insert( *it );
190 stringMap.insert( ddIt.key() +
"_expression", ddIt.value()->expression() );
220 , mHorizontalAnchorPoint( HCenter )
221 , mVerticalAnchorPoint( VCenter )
223 mOffsetExpression = NULL;
224 mHorizontalAnchorExpression = NULL;
225 mVerticalAnchorExpression = NULL;
247 mHorizontalAnchorExpression =
expression(
"horizontal_anchor_point" );
248 mVerticalAnchorExpression =
expression(
"vertical_anchor_point" );
254 renderPoint( QPointF( size.width() / 2, size.height() / 2 ), context );
260 markerOffset( context, mSize, mSize, mSizeUnit, mSizeUnit, offsetX, offsetY, mSizeMapUnitScale, mSizeMapUnitScale );
265 markerOffset( context, width, height, mSizeUnit, mSizeUnit, offsetX, offsetY, mSizeMapUnitScale, mSizeMapUnitScale );
272 offsetX = mOffset.x();
273 offsetY = mOffset.y();
275 if ( mOffsetExpression )
278 offsetX = offset.x();
279 offsetY = offset.y();
287 if ( mHorizontalAnchorExpression )
289 horizontalAnchorPoint = decodeHorizontalAnchorPoint( mHorizontalAnchorExpression->evaluate( const_cast<QgsFeature*>( context.
feature() ) ).toString() );
291 if ( mVerticalAnchorExpression )
293 verticalAnchorPoint = decodeVerticalAnchorPoint( mVerticalAnchorExpression->evaluate( const_cast<QgsFeature*>( context.
feature() ) ).toString() );
297 if ( horizontalAnchorPoint == HCenter && verticalAnchorPoint == VCenter )
304 if ( horizontalAnchorPoint == Left )
306 offsetX += anchorPointCorrectionX;
308 else if ( horizontalAnchorPoint == Right )
310 offsetX -= anchorPointCorrectionX;
314 if ( verticalAnchorPoint == Top )
316 offsetY += anchorPointCorrectionY;
318 else if ( verticalAnchorPoint == Bottom )
320 offsetY -= anchorPointCorrectionY;
327 double c = cos( angle ), s = sin( angle );
328 return QPointF( offset.x() * c - offset.y() * s, offset.x() * s + offset.y() * c );
333 if ( str.compare(
"left", Qt::CaseInsensitive ) == 0 )
337 else if ( str.compare(
"right", Qt::CaseInsensitive ) == 0 )
349 if ( str.compare(
"top", Qt::CaseInsensitive ) == 0 )
353 else if ( str.compare(
"bottom", Qt::CaseInsensitive ) == 0 )
371 if ( mOffsetUnit != mSizeUnit )
380 mSizeMapUnitScale = scale;
381 mOffsetMapUnitScale = scale;
386 if ( mSizeMapUnitScale == mOffsetMapUnitScale )
388 return mSizeMapUnitScale;
405 mWidthMapUnitScale = scale;
410 return mWidthMapUnitScale;
419 points << QPointF( 0,
int( size.height() / 2 ) + 0.5 ) << QPointF( size.width(), int( size.height() / 2 ) + 0.5 );
422 renderPolyline( points, context );
428 renderPolyline( points, context );
431 foreach (
const QPolygonF& ring, *rings )
432 renderPolyline( ring, context );
445 QPolygonF poly = QRectF( QPointF( 0, 0 ), QPointF( size.width(), size.height() ) );
459 if ( points.size() <= 5 &&
462 ( p->renderHints() & QPainter::Antialiasing ) )
464 p->setRenderHint( QPainter::Antialiasing,
false );
465 p->drawRect( points.boundingRect() );
466 p->setRenderHint( QPainter::Antialiasing,
true );
472 if ( !rings && p->pen().style() == Qt::NoPen )
475 p->drawPolygon( points );
481 QPolygonF outerRing = points;
482 path.addPolygon( outerRing );
486 QList<QPolygonF>::const_iterator it = rings->constBegin();
487 for ( ; it != rings->constEnd(); ++it )
489 QPolygonF ring = *it;
490 path.addPolygon( ring );
500 QDomElement symbolizerElem = doc.createElement(
"se:PointSymbolizer" );
501 if ( !props.value(
"uom",
"" ).isEmpty() )
502 symbolizerElem.setAttribute(
"uom", props.value(
"uom",
"" ) );
503 element.appendChild( symbolizerElem );
508 writeSldMarker( doc, symbolizerElem, props );
virtual QSet< QString > usedAttributes() const
static double mapUnitScaleFactor(double scaleDenominator, QgsSymbolV2::OutputUnit symbolUnits, QGis::UnitType mapUnits)
Class for parsing and evaluation of expressions (formerly called "search strings").
virtual void removeDataDefinedProperties()
QgsSymbolV2::OutputUnit outputUnit() const override
QMap< QString, QgsExpression * > mDataDefinedProperties
float threshold() const
Gets the simplification threshold of the vector layer managed.
virtual Qt::PenStyle dxfPenStyle() const
virtual double dxfWidth(const QgsDxfExport &e, const QgsSymbolV2RenderContext &context) const
virtual double dxfOffset(const QgsDxfExport &e, const QgsSymbolV2RenderContext &context) const
const QString expression() const
Alias for dump()
const QgsVectorSimplifyMethod & vectorSimplifyMethod() const
Added in QGIS v2.4.
QGis::UnitType mapUnits() const
QgsSymbolV2::OutputUnit outputUnit() const override
static QPointF decodePoint(QString str)
Container of fields for a vector layer.
virtual void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context)=0
The feature class encapsulates a single feature including its id, geometry and a list of field/values...
virtual void removeDataDefinedProperty(const QString &property)
QMap< QString, QString > QgsStringMap
void setMapUnitScale(const QgsMapUnitScale &scale) override
virtual QString dataDefinedPropertyString(const QString &property) const
virtual void startRender(QgsSymbolV2RenderContext &context)=0
virtual QgsExpression * expression(const QString &property) const
virtual double dxfWidth(const QgsDxfExport &e, const QgsSymbolV2RenderContext &context) const override
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
const QgsFeature * feature() const
Current feature being rendered - may be null.
virtual QVector< qreal > dxfCustomDashPattern(QgsSymbolV2::OutputUnit &unit) const
The geometries can be rendered with 'AntiAliasing' disabled because of it is '1-pixel size'...
QgsMarkerSymbolLayerV2(bool locked=false)
virtual QColor color() const
virtual void renderPolygonOutline(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context)
virtual void prepareExpressions(const QgsFields *fields, double scale=-1.0)
virtual QColor dxfBrushColor(const QgsSymbolV2RenderContext &context) const
virtual QColor dxfColor(const QgsSymbolV2RenderContext &context) const
virtual bool writeDxf(QgsDxfExport &e, double mmMapUnitScaleFactor, const QString &layerName, const QgsSymbolV2RenderContext *context, const QgsFeature *f, const QPointF &shift=QPointF(0.0, 0.0)) const
virtual void toSld(QDomDocument &doc, QDomElement &element, QgsStringMap props) const override
double symbologyScaleDenominator() const
void drawPreviewIcon(QgsSymbolV2RenderContext &context, QSize size) override
QgsFillSymbolLayerV2(bool locked=false)
void startRender(QgsSymbolV2RenderContext &context) override
static void createGeometryElement(QDomDocument &doc, QDomElement &element, QString geomFunc)
QgsMapUnitScale mapUnitScale() const override
virtual Qt::BrushStyle dxfBrushStyle() const
void setMapUnitScale(const QgsMapUnitScale &scale) override
static double lineWidthScaleFactor(const QgsRenderContext &c, QgsSymbolV2::OutputUnit u, const QgsMapUnitScale &scale=QgsMapUnitScale())
Returns the line width scale factor depending on the unit and the paint device.
QgsLineSymbolLayerV2(bool locked=false)
Struct for storing maximum and minimum scales for measurements in map units.
QgsMapUnitScale mapUnitScale() const override
virtual const QgsExpression * dataDefinedProperty(const QString &property) const
QgsRenderContext & renderContext()
void drawPreviewIcon(QgsSymbolV2RenderContext &context, QSize size) override
SimplifyHints simplifyHints() const
Gets the simplification hints of the vector layer managed.
QgsSymbolV2::OutputUnit mOffsetUnit
void markerOffset(const QgsSymbolV2RenderContext &context, double &offsetX, double &offsetY) const
void drawPreviewIcon(QgsSymbolV2RenderContext &context, QSize size) override
void _renderPolygon(QPainter *p, const QPolygonF &points, const QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context)
Default method to render polygon.
static bool isGeneralizableByDeviceBoundingBox(const QgsRectangle &envelope, float mapToPixelTol=1.0f)
Returns whether the device-envelope can be replaced by its BBOX when is applied the specified toleran...
void saveDataDefinedProperties(QgsStringMap &stringMap) const
Saves data defined properties to string map.
virtual void stopRender(QgsSymbolV2RenderContext &context)=0
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
void copyDataDefinedProperties(QgsSymbolLayerV2 *destLayer) const
Copies data defined properties of this layer to another symbol layer.
virtual void setDataDefinedProperty(const QString &property, const QString &expressionString)
static QPointF _rotatedOffset(const QPointF &offset, double angle)