28 #include <QDomDocument>
29 #include <QDomElement>
34 : mPenStyle( penStyle )
37 , mUseCustomDashPattern( false )
39 , mDrawInsidePolygon( false )
89 if ( props.
contains(
"line_color" ) )
93 else if ( props.
contains(
"outline_color" ) )
97 else if ( props.
contains(
"color" ) )
102 if ( props.
contains(
"line_width" ) )
104 width = props[
"line_width"].toDouble();
106 else if ( props.
contains(
"outline_width" ) )
108 width = props[
"outline_width"].toDouble();
110 else if ( props.
contains(
"width" ) )
113 width = props[
"width"].toDouble();
115 if ( props.
contains(
"line_style" ) )
119 else if ( props.
contains(
"outline_style" ) )
123 else if ( props.
contains(
"penstyle" ) )
129 if ( props.
contains(
"line_width_unit" ) )
133 else if ( props.
contains(
"outline_width_unit" ) )
137 else if ( props.
contains(
"width_unit" ) )
142 if ( props.
contains(
"width_map_unit_scale" ) )
145 l->
setOffset( props[
"offset"].toDouble() );
146 if ( props.
contains(
"offset_unit" ) )
148 if ( props.
contains(
"offset_map_unit_scale" ) )
150 if ( props.
contains(
"joinstyle" ) )
155 if ( props.
contains(
"use_custom_dash" ) )
159 if ( props.
contains(
"customdash" ) )
163 if ( props.
contains(
"customdash_unit" ) )
167 if ( props.
contains(
"customdash_map_unit_scale" ) )
172 if ( props.
contains(
"draw_inside_polygon" ) )
200 double dashWidthDiv = scaledWidth;
203 if ( versionSplit.
size() > 1
204 && versionSplit.
at( 1 ).toInt() >= 8
259 for ( ; it != rings->
constEnd(); ++it )
274 Q_FOREACH (
const QPolygonF& ring, *rings )
302 applyDataDefinedSymbology( context,
mPen,
mSelPen, offset );
307 if ( points.
size() <= 2 &&
326 for (
int part = 0; part < mline.count(); ++part )
379 if ( !props.
value(
"uom",
"" ).isEmpty() )
423 if ( strokeElem.
isNull() )
435 &penJoinStyle, &penCapStyle,
436 &customDashVector ) )
441 if ( !perpOffsetElem.
isNull() )
471 bool hasStrokeWidthExpression =
false;
480 hasStrokeWidthExpression =
true;
506 if ( hasStrokeWidthExpression )
508 dashWidthDiv = pen.
widthF();
509 scaledWidth = pen.
widthF();
514 if ( versionSplit.
size() > 1
515 && versionSplit.
at( 1 ).toInt() >= 8
526 for ( ; dashIt != dashList.
constEnd(); ++dashIt )
641 if ( p1.
x() == p2.
x() )
650 mT = float( p2.
y() - p1.
y() ) / ( p2.
x() - p1.
x() );
655 double x = ( p2.
x() - p1.
x() );
656 double y = ( p2.
y() - p1.
y() );
657 mLength = sqrt( x * x + y * y );
676 double alpha = atan(
mT );
677 double dx = cos( alpha ) * interval;
678 double dy = sin( alpha ) * interval;
717 interval = props[
"interval"].toDouble();
719 rotate = ( props[
"rotate"] ==
"1" );
724 x->
setOffset( props[
"offset"].toDouble() );
726 if ( props.
contains(
"offset_unit" ) )
730 if ( props.
contains(
"interval_unit" ) )
734 if ( props.
contains(
"offset_along_line" ) )
738 if ( props.
contains(
"offset_along_line_unit" ) )
742 if ( props.
contains((
"offset_along_line_map_unit_scale" ) ) )
747 if ( props.
contains(
"offset_map_unit_scale" ) )
751 if ( props.
contains(
"interval_map_unit_scale" ) )
756 if ( props.
contains(
"placement" ) )
758 if ( props[
"placement"] ==
"vertex" )
760 else if ( props[
"placement"] ==
"lastvertex" )
762 else if ( props[
"placement"] ==
"firstvertex" )
764 else if ( props[
"placement"] ==
"centralpoint" )
766 else if ( props[
"placement"] ==
"curvepoint" )
829 if ( placementString.
compare(
"vertex", Qt::CaseInsensitive ) == 0 )
833 else if ( placementString.
compare(
"lastvertex", Qt::CaseInsensitive ) == 0 )
837 else if ( placementString.
compare(
"firstvertex", Qt::CaseInsensitive ) == 0 )
841 else if ( placementString.
compare(
"centerpoint", Qt::CaseInsensitive ) == 0 )
845 else if ( placementString.
compare(
"curvepoint", Qt::CaseInsensitive ) == 0 )
870 for (
int part = 0; part < mline.
count(); ++part )
872 const QPolygonF &points2 = mline[ part ];
896 for (
int i = 0; i < rings->
size(); ++i )
914 double lengthLeft = 0;
939 for (
int i = 1; i < points.
count(); ++i )
952 double c = 1 - lengthLeft / painterUnitInterval;
970 while ( lengthLeft > painterUnitInterval )
974 lengthLeft -= painterUnitInterval;
988 double unitX = cos( a1 ) + cos( a2 ), unitY = sin( a1 ) + sin( a2 );
990 return atan2( unitY, unitX );
1002 bool isRing =
false;
1010 if ( offsetAlongLine != 0 )
1032 x = vPoint.
x(), y = vPoint.
y(); z = vPoint.
z();
1037 mapPoint.
setX( x ); mapPoint.
setY( y );
1057 i = points.
count() - 1;
1058 maxCount = points.
count();
1060 else if ( placement ==
Vertex )
1063 maxCount = points.
count();
1076 renderOffsetVertexAlongLine( points, i, distance, context );
1082 for ( ; i < maxCount; ++i )
1084 if ( isRing && placement ==
Vertex && i == points.
count() - 1 )
1105 const QPointF& pt = points[vertex];
1107 if ( isRing || ( vertex > 0 && vertex < points.
count() - 1 ) )
1109 int prevIndex = vertex - 1;
1110 int nextIndex = vertex + 1;
1112 if ( isRing && ( vertex == 0 || vertex == points.
count() - 1 ) )
1114 prevIndex = points.
count() - 2;
1119 while ( prevIndex >= 0 )
1121 prevPoint = points[ prevIndex ];
1122 if ( prevPoint != pt )
1129 while ( nextIndex < points.
count() )
1131 nextPoint = points[ nextIndex ];
1132 if ( nextPoint != pt )
1139 if ( prevIndex >= 0 && nextIndex < points.
count() )
1148 while ( vertex < points.
size() - 1 )
1150 const QPointF& nextPt = points[vertex+1];
1162 while ( vertex >= 1 )
1164 const QPointF& prevPt = points[vertex-1];
1184 if ( distance == 0 )
1189 bool isRing =
false;
1199 int pointIncrement = distance > 0 ? 1 : -1;
1200 QPointF previousPoint = points[vertex];
1201 int startPoint = distance > 0 ? qMin( vertex + 1, points.
count() - 1 ) : qMax( vertex - 1, 0 );
1202 int endPoint = distance > 0 ? points.
count() - 1 : 0;
1203 double distanceLeft = qAbs( distance );
1205 for (
int i = startPoint; pointIncrement > 0 ? i <= endPoint : i >= endPoint; i += pointIncrement )
1207 const QPointF& pt = points[i];
1209 if ( previousPoint == pt )
1213 MyLine l( previousPoint, pt );
1215 if ( distanceLeft < l.length() )
1218 QPointF markerPoint = previousPoint + l.diffForInterval( distanceLeft );
1228 distanceLeft -= l.length();
1238 if ( points.
size() > 0 )
1244 for ( ++it; it != points.
constEnd(); ++it )
1246 length += sqrt(( last.
x() - it->x() ) * ( last.
x() - it->x() ) +
1247 ( last.
y() - it->y() ) * ( last.
y() - it->y() ) );
1254 qreal last_at = 0, next_at = 0;
1257 for ( ++it; it != points.
constEnd(); ++it )
1260 next_at += sqrt(( last.
x() - it->x() ) * ( last.
x() - it->x() ) +
1261 ( last.
y() - it->y() ) * ( last.
y() - it->y() ) );
1262 if ( next_at >= length / 2 )
1271 qreal k = ( length * 0.5 - last_at ) / ( next_at - last_at );
1272 QPointF pt = last + ( next - last ) * k;
1299 map[
"placement"] =
"vertex";
1301 map[
"placement"] =
"lastvertex";
1303 map[
"placement"] =
"firstvertex";
1305 map[
"placement"] =
"centralpoint";
1307 map[
"placement"] =
"curvepoint";
1309 map[
"placement"] =
"interval";
1357 if ( !props.
value(
"uom",
"" ).isEmpty() )
1411 if ( !gap.isEmpty() )
1432 if ( strokeElem.
isNull() )
1436 if ( graphicStrokeElem.
isNull() )
1446 if ( it.key() ==
"placement" )
1448 if ( it.value() ==
"points" ) placement =
Vertex;
1449 else if ( it.value() ==
"firstPoint" ) placement =
FirstVertex;
1450 else if ( it.value() ==
"lastPoint" ) placement =
LastVertex;
1451 else if ( it.value() ==
"centralPoint" ) placement =
CentralPoint;
1453 else if ( it.value() ==
"rotateMarker" )
1455 rotateMarker = it.value() ==
"0";
1482 double offset = 0.0;
1484 if ( !perpOffsetElem.
isNull() )
static double _averageAngle(const QPointF &prevPt, const QPointF &pt, const QPointF &nextPt)
virtual QSet< QString > usedAttributes() const
Returns the set of attributes referenced by the layer.
static double mapUnitScaleFactor(double scaleDenominator, QgsSymbolV2::OutputUnit symbolUnits, QGis::UnitType mapUnits)
void setIntervalUnit(QgsSymbolV2::OutputUnit unit)
static QString encodeOutputUnit(QgsSymbolV2::OutputUnit unit)
#define DEFAULT_SIMPLELINE_PENSTYLE
#define DEFAULT_MARKERLINE_ROTATE
static const QString EXPR_JOINSTYLE
Qt::PenStyle style() const
double estimateMaxBleed() const override
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
void setStyle(Qt::PenStyle style)
double dxfWidth(const QgsDxfExport &e, QgsSymbolV2RenderContext &context) const override
OutputUnit
The unit of the output.
float threshold() const
Gets the simplification threshold of the vector layer managed.
virtual double vertexAngle(const QgsVertexId &vertex) const =0
Returns approximate rotation angle for a vertex.
QVector< qreal > dxfCustomDashPattern(QgsSymbolV2::OutputUnit &unit) const override
bool contains(const Key &key) const
virtual double width() const
void setClipPath(const QPainterPath &path, Qt::ClipOperation operation)
double markerAngle(const QPolygonF &points, bool isRing, int vertex)
void renderPolyline(const QPolygonF &points, QgsSymbolV2RenderContext &context) override
void setRenderHint(RenderHint hint, bool on)
QDomNode appendChild(const QDomNode &newChild)
#define DEFAULT_MARKERLINE_INTERVAL
QgsStringMap properties() const override
static QDomElement createVendorOptionElement(QDomDocument &doc, const QString &name, const QString &value)
RenderHints renderHints() const
static void createGeometryElement(QDomDocument &doc, QDomElement &element, const QString &geomFunc)
QColor selectionColor() const
QSet< QString > usedAttributes() const
const QgsVectorSimplifyMethod & vectorSimplifyMethod() const
Added in QGIS v2.4.
QString nodeValue() const
virtual void setWidth(double width) override
void setCustomDashPatternUnit(QgsSymbolV2::OutputUnit unit)
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
static QString encodeColor(const QColor &color)
QgsMapUnitScale mCustomDashPatternMapUnitScale
void renderPolyline(const QPolygonF &points, QgsSymbolV2RenderContext &context) override
static const QString EXPR_WIDTH
static const QString EXPR_CUSTOMDASH
void drawPolyline(const QPointF *points, int pointCount)
static QgsStringMap getVendorOptionList(QDomElement &element)
virtual void writeSldMarker(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const
QGis::UnitType mapUnits() const
const_iterator constEnd() const
void startRender(QgsSymbolV2RenderContext &context) override
const T & at(int i) const
void setUseCustomDashPattern(bool b)
QgsCurveV2 * exteriorRing() const
static QVector< qreal > decodeRealVector(const QString &s)
void renderPolylineInterval(const QPolygonF &points, QgsSymbolV2RenderContext &context)
QgsSymbolV2::OutputUnit outputUnit() const override
QVector< qreal > customDashVector() const
bool setSubSymbol(QgsSymbolV2 *symbol) override
Qt::PenJoinStyle joinStyle() const
QGis::GeometryType type() const
Returns type of the geometry as a QGis::GeometryType.
void setPenJoinStyle(Qt::PenJoinStyle style)
void setOriginalValueVariable(const QVariant &value)
Sets the original value variable value for data defined symbology.
double dxfOffset(const QgsDxfExport &e, QgsSymbolV2RenderContext &context) const override
void setJoinStyle(Qt::PenJoinStyle style)
Qt::PenCapStyle mPenCapStyle
static Qt::PenJoinStyle decodePenJoinStyle(const QString &str)
void copyPaintEffect(QgsSymbolLayerV2 *destLayer) const
Copies paint effect of this layer to another symbol layer.
static const bool selectionIsOpaque
static QString encodeMapUnitScale(const QgsMapUnitScale &mapUnitScale)
virtual bool hasDataDefinedProperty(const QString &property) const
Checks whether the layer has a matching data defined property and if that property is currently activ...
static const QString EXPR_OFFSET_ALONG_LINE
QgsMapUnitScale mWidthMapUnitScale
void setIntervalMapUnitScale(const QgsMapUnitScale &scale)
const QgsCoordinateTransform * coordinateTransform() const
QString layerType() const override
double toDouble(bool *ok) const
void setMapUnitScale(const QgsMapUnitScale &scale) override
QgsMapUnitScale mOffsetMapUnitScale
bool qgsDoubleNear(double a, double b, double epsilon=4 *DBL_EPSILON)
static const QString EXPR_OFFSET
Qt::PenStyle penStyle() const
QgsSymbolV2::OutputUnit mOffsetUnit
void setWidthUnit(QgsSymbolV2::OutputUnit unit)
QgsMapUnitScale mOffsetAlongLineMapUnitScale
void setOffsetAlongLine(double offsetAlongLine)
Sets the the offset along the line for the marker placement.
void setInterval(double interval)
QgsMapUnitScale mapUnitScale() const override
static QgsSymbolV2::OutputUnit decodeOutputUnit(const QString &str)
qreal alpha() const
Get alpha transparency 1 for opaque, 0 for invisible.
bool mUseCustomDashPattern
void setDrawInsidePolygon(bool drawInsidePolygon)
static QString encodePenStyle(Qt::PenStyle style)
QPointF diffForInterval(double interval)
void setCapStyle(Qt::PenCapStyle style)
Perform transforms between map coordinates and device coordinates.
void setColor(const QColor &color)
QgsSymbolV2::OutputUnit mIntervalUnit
QgsSymbolLayerV2 * clone() const override
Mixed units in symbol layers.
QgsSymbolLayerV2 * clone() const override
void transformInPlace(double &x, double &y) const
Transform device coordinates to map (world) coordinates.
static QgsSymbolLayerV2 * createMarkerLayerFromSld(QDomElement &element)
The output shall be in millimeters.
static const QString EXPR_PLACEMENT
double offsetAlongLine() const
Returns the offset along the line for the marker placement.
QString number(int n, int base)
int count(const T &value) const
void append(const T &value)
void setDashPattern(const QVector< qreal > &pattern)
static QString ogrFeatureStylePen(double width, double mmScaleFactor, double mapUnitsScaleFactor, const QColor &c, Qt::PenJoinStyle joinStyle=Qt::MiterJoin, Qt::PenCapStyle capStyle=Qt::FlatCap, double offset=0.0, const QVector< qreal > *dashPattern=0)
Create ogr feature style string for pen.
void addPolygon(const QPolygonF &polygon)
void setOffset(double offset)
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
void setMapUnitScale(const QgsMapUnitScale &scale) override
const QgsFeature * feature() const
Current feature being rendered - may be null.
void renderPolygonOutline(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context) override
QgsSymbolV2::OutputUnit outputUnit() const override
static double convertToPainterUnits(const QgsRenderContext &c, double size, QgsSymbolV2::OutputUnit unit, const QgsMapUnitScale &scale=QgsMapUnitScale())
Converts a size from the specied units to painter units.
void setLineAngle(double lineAngle)
Sets the line angle modification for the symbol's angle.
Utility class for identifying a unique vertex within a geometry.
void startRender(QgsRenderContext &context, const QgsFields *fields=0)
The geometries can be rendered with 'AntiAliasing' disabled because of it is '1-pixel size'...
Qt::PenJoinStyle mPenJoinStyle
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
void setPen(const QColor &color)
QgsSymbolV2::OutputUnit mWidthUnit
void setAttribute(const QString &name, const QString &value)
void setWidthMapUnitScale(const QgsMapUnitScale &scale)
QVector< qreal > mCustomDashVector
Vector with an even number of entries for the.
#define DEFAULT_SIMPLELINE_WIDTH
static QString encodePenJoinStyle(Qt::PenJoinStyle style)
void renderPolygonOutline(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context) override
static QgsSymbolLayerV2 * createFromSld(QDomElement &element)
void setAngle(double angle)
bool rotateMarker() const
#define DEFAULT_SIMPLELINE_CAPSTYLE
virtual QgsSymbolV2 * clone() const override
#define DEFAULT_SIMPLELINE_JOINSTYLE
void setWidthF(qreal width)
virtual bool hasCurvedSegments() const
Returns true if the geometry contains curved segments.
int symbolLayerCount()
Returns total number of symbol layers contained in the symbol.
static Qt::PenCapStyle decodePenCapStyle(const QString &str)
QString layerType() const override
void setSize(double size)
double rasterScaleFactor() const
void stopRender(QgsSymbolV2RenderContext &context) override
virtual QColor color() const
void setOffsetAlongLineMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale used for calculating the offset in map units along line for markers...
virtual bool nextVertex(QgsVertexId &id, QgsPointV2 &vertex) const =0
Returns next vertex id and coordinates.
void toSld(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const override
void setOffsetAlongLineUnit(QgsSymbolV2::OutputUnit unit)
Sets the unit used for calculating the offset along line for markers.
void renderPoint(const QPointF &point, const QgsFeature *f, QgsRenderContext &context, int layer=-1, bool selected=false)
void setColor(const QColor &color)
virtual Q_DECL_DEPRECATED void prepareExpressions(const QgsFields *fields, double scale=-1.0)
Prepares all data defined property expressions for evaluation.
double estimateMaxBleed() const override
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
QgsSymbolV2 * subSymbol() override
void setPenCapStyle(Qt::PenCapStyle style)
virtual bool hasDataDefinedProperties() const
Checks whether the layer has any associated data defined properties.
void setCustomDashVector(const QVector< qreal > &vector)
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
static Qt::PenStyle decodePenStyle(const QString &str)
static const QString EXPR_CAPSTYLE
QString ogrFeatureStyle(double mmScaleFactor, double mapUnitScaleFactor) const override
QDomText createTextNode(const QString &value)
QgsMarkerSymbolV2 * mMarker
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)
void setOffsetUnit(QgsSymbolV2::OutputUnit unit)
static const QString EXPR_COLOR
static QString encodeRealVector(const QVector< qreal > &v)
QgsSymbolV2::OutputUnit outputUnit() const override
QgsSymbolV2::OutputUnit mCustomDashPatternUnit
virtual QString layerType() const =0
double symbologyScaleDenominator() const
~QgsMarkerLineSymbolLayerV2()
static QgsSymbolLayerV2 * createFromSld(QDomElement &element)
const T & at(int i) const
#define DEFAULT_SIMPLELINE_COLOR
const_iterator constBegin() const
QgsMapUnitScale mIntervalMapUnitScale
Contains information about the context of a rendering operation.
QgsMapUnitScale mapUnitScale() const override
QgsSymbolV2::OutputUnit mOffsetAlongLineUnit
QDomNode firstChild() const
void stopRender(QgsRenderContext &context)
void setMapUnitScale(const QgsMapUnitScale &scale) override
static bool createFunctionElement(QDomDocument &doc, QDomElement &element, const QString &function)
QSet< T > & unite(const QSet< T > &other)
void setPlacement(Placement p)
virtual Q_DECL_DEPRECATED QVariant evaluateDataDefinedProperty(const QString &property, const QgsFeature *feature, const QVariant &defaultVal=QVariant(), bool *ok=0) const
Evaluates the matching data defined property and returns the calculated value.
Struct for storing maximum and minimum scales for measurements in map units.
Qt::PenStyle dxfPenStyle() const override
QList< QPolygonF > offsetLine(QPolygonF polyline, double dist, QGis::GeometryType geometryType)
calculate geometry shifted by a specified distance
QgsSimpleLineSymbolLayerV2(const QColor &color=DEFAULT_SIMPLELINE_COLOR, double width=DEFAULT_SIMPLELINE_WIDTH, Qt::PenStyle penStyle=DEFAULT_SIMPLELINE_PENSTYLE)
Qt::PenCapStyle capStyle() const
void setCustomDashPatternMapUnitScale(const QgsMapUnitScale &scale)
const QgsAbstractGeometryV2 * geometry() const
Returns pointer to the unsegmentized geometry.
void stopRender(QgsSymbolV2RenderContext &context) override
QgsRenderContext & renderContext()
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
QDomElement firstChildElement(const QString &tagName) const
QColor dxfColor(QgsSymbolV2RenderContext &context) const override
int count(const T &value) const
QgsMapUnitScale mapUnitScale() const override
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
SimplifyHints simplifyHints() const
Gets the simplification hints of the vector layer managed.
const QgsGeometry * constGeometry() const
Gets a const pointer to the geometry object associated with this feature.
void setColor(const QColor &color) override
const QgsMapToPixel & mapToPixel() const
const QgsFields * fields() const
Fields of the layer.
void push_back(const T &value)
void setRenderHints(int hints)
MyLine(QPointF p1, QPointF p2)
void setAlphaF(qreal alpha)
Placement placement() const
static void lineToSld(QDomDocument &doc, QDomElement &element, Qt::PenStyle penStyle, const QColor &color, double width=-1, const Qt::PenJoinStyle *penJoinStyle=0, const Qt::PenCapStyle *penCapStyle=0, const QVector< qreal > *customDashPattern=0, double dashOffset=0.0)
double toDouble(bool *ok) const
static QColor decodeColor(const QString &str)
Curve polygon geometry type.
void restoreDataDefinedProperties(const QgsStringMap &stringMap)
Restores all data defined properties from string map.
static QgsMapUnitScale decodeMapUnitScale(const QString &str)
QgsSymbolLayerV2 * symbolLayer(int layer)
Returns a specific symbol layers contained in the symbol.
const_iterator constEnd() const
QDomElement createElement(const QString &tagName)
const_iterator constBegin() const
void toSld(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const override
static bool lineFromSld(QDomElement &element, Qt::PenStyle &penStyle, QColor &color, double &width, Qt::PenJoinStyle *penJoinStyle=0, Qt::PenCapStyle *penCapStyle=0, QVector< qreal > *customDashPattern=0, double *dashOffset=0)
void startRender(QgsSymbolV2RenderContext &context) override
QgsMarkerLineSymbolLayerV2(bool rotateMarker=DEFAULT_MARKERLINE_ROTATE, double interval=DEFAULT_MARKERLINE_INTERVAL)
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
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...
int compare(const QString &other) const
static const QString EXPR_LINE_STYLE
void saveDataDefinedProperties(QgsStringMap &stringMap) const
Saves all data defined properties to a string map.
static const QString EXPR_INTERVAL
void setAlpha(qreal alpha)
Set alpha transparency 1 for opaque, 0 for invisible.
void renderPolylineCentral(const QPolygonF &points, QgsSymbolV2RenderContext &context)
void setGeometry(const QgsAbstractGeometryV2 *geometry)
Sets pointer to original (unsegmentized) geometry.
QgsCurveV2 * interiorRing(int i) const
virtual double width() const override
QgsSymbolV2::OutputUnit widthUnit() const
QSet< QString > usedAttributes() const override
Returns the set of attributes referenced by the layer.
Qt::PenJoinStyle penJoinStyle() const
void renderPolylineVertex(const QPolygonF &points, QgsSymbolV2RenderContext &context, Placement placement=Vertex)
void copyDataDefinedProperties(QgsSymbolLayerV2 *destLayer) const
Copies all data defined properties of this layer to another symbol layer.
Qt::PenCapStyle penCapStyle() const
const T value(const Key &key) const
static QString encodePenCapStyle(Qt::PenCapStyle style)
QgsStringMap properties() const override