31 #include <QSvgRenderer> 32 #include <QDomDocument> 33 #include <QDomElement> 36 Qt::PenJoinStyle penJoinStyle )
37 : mBrushStyle( style )
38 , mBorderColor( borderColor )
39 , mBorderStyle( borderStyle )
40 , mBorderWidth( borderWidth )
42 , mPenJoinStyle( penJoinStyle )
152 if ( props.
contains(
"color_border" ) )
157 else if ( props.
contains(
"outline_color" ) )
161 else if ( props.
contains(
"line_color" ) )
166 if ( props.
contains(
"style_border" ) )
171 else if ( props.
contains(
"outline_style" ) )
175 else if ( props.
contains(
"line_style" ) )
179 if ( props.
contains(
"width_border" ) )
182 borderWidth = props[
"width_border"].toDouble();
184 else if ( props.
contains(
"outline_width" ) )
186 borderWidth = props[
"outline_width"].toDouble();
188 else if ( props.
contains(
"line_width" ) )
190 borderWidth = props[
"line_width"].toDouble();
194 if ( props.
contains(
"joinstyle" ) )
199 if ( props.
contains(
"border_width_unit" ) )
203 else if ( props.
contains(
"outline_width_unit" ) )
207 else if ( props.
contains(
"line_width_unit" ) )
211 if ( props.
contains(
"offset_unit" ) )
214 if ( props.
contains(
"border_width_map_unit_scale" ) )
216 if ( props.
contains(
"offset_map_unit_scale" ) )
238 if ( rasterScaleFactor != 1.0 )
333 if ( !props.
value(
"uom",
"" ).isEmpty() )
365 symbolStyle.
append(
';' );
376 Qt::BrushStyle fillStyle;
398 return penBleed + offsetBleed;
453 : mGradientColorType( colorType )
454 , mGradientRamp( nullptr )
455 , mGradientType( gradientType )
456 , mCoordinateMode( coordinateMode )
457 , mGradientSpread( spread )
458 , mReferencePoint1(
QPointF( 0.5, 0 ) )
459 , mReferencePoint1IsCentroid( false )
460 , mReferencePoint2(
QPointF( 0.5, 1 ) )
461 , mReferencePoint2IsCentroid( false )
483 bool refPoint1IsCentroid =
false;
485 bool refPoint2IsCentroid =
false;
491 type = static_cast< GradientType >( props[
"type"].toInt() );
492 if ( props.
contains(
"coordinate_mode" ) )
493 coordinateMode = static_cast< GradientCoordinateMode >( props[
"coordinate_mode"].toInt() );
495 gradientSpread = static_cast< GradientSpread >( props[
"spread"].toInt() );
496 if ( props.
contains(
"color_type" ) )
497 colorType = static_cast< GradientColorType >( props[
"color_type"].toInt() );
498 if ( props.
contains(
"gradient_color" ) )
503 else if ( props.
contains(
"color" ) )
507 if ( props.
contains(
"gradient_color2" ) )
512 if ( props.
contains(
"reference_point1" ) )
514 if ( props.
contains(
"reference_point1_iscentroid" ) )
515 refPoint1IsCentroid = props[
"reference_point1_iscentroid"].toInt();
516 if ( props.
contains(
"reference_point2" ) )
518 if ( props.
contains(
"reference_point2_iscentroid" ) )
519 refPoint2IsCentroid = props[
"reference_point2_iscentroid"].toInt();
521 angle = props[
"angle"].toDouble();
532 if ( props.
contains(
"offset_unit" ) )
534 if ( props.
contains(
"offset_map_unit_scale" ) )
557 return "GradientFill";
615 else if ( currentType ==
QObject::tr(
"conical" ) )
629 if ( currentCoordMode ==
QObject::tr(
"feature" ) )
633 else if ( currentCoordMode ==
QObject::tr(
"viewport" ) )
651 else if ( currentSpread ==
QObject::tr(
"repeat" ) )
655 else if ( currentSpread ==
QObject::tr(
"reflect" ) )
702 if ( refPoint1IsCentroid || refPoint2IsCentroid )
708 double centroidX = ( centroid.
x() - bbox.
left() ) / bbox.
width();
709 double centroidY = ( centroid.
y() - bbox.
top() ) / bbox.
height();
711 if ( refPoint1IsCentroid )
713 refPoint1X = centroidX;
714 refPoint1Y = centroidY;
716 if ( refPoint2IsCentroid )
718 refPoint2X = centroidX;
719 refPoint2Y = centroidY;
725 spread,
QPointF( refPoint1X, refPoint1Y ),
QPointF( refPoint2X, refPoint2Y ), angle );
728 QPointF QgsGradientFillSymbolLayerV2::rotateReferencePoint(
QPointF refPoint,
double angle )
737 QPointF rotatedReferencePoint = refLine.
p2();
739 if ( rotatedReferencePoint.
x() > 1 )
740 rotatedReferencePoint.
setX( 1 );
741 if ( rotatedReferencePoint.
x() < 0 )
742 rotatedReferencePoint.
setX( 0 );
743 if ( rotatedReferencePoint.
y() > 1 )
744 rotatedReferencePoint.
setY( 1 );
745 if ( rotatedReferencePoint.
y() < 0 )
746 rotatedReferencePoint.
setY( 0 );
748 return rotatedReferencePoint;
772 gradient =
QLinearGradient( rotatedReferencePoint1, rotatedReferencePoint2 );
775 gradient =
QRadialGradient( rotatedReferencePoint1,
QLineF( rotatedReferencePoint1, rotatedReferencePoint2 ).length() );
793 gradient.
setSpread( QGradient::PadSpread );
796 gradient.
setSpread( QGradient::ReflectSpread );
799 gradient.
setSpread( QGradient::RepeatSpread );
818 brush =
QBrush( gradient );
844 applyDataDefinedSymbology( context, points );
937 int blurRadius,
bool useWholeShape,
double maxDistance ) :
939 mBlurRadius( blurRadius ),
940 mUseWholeShape( useWholeShape ),
941 mMaxDistance( maxDistance ),
943 mColorType( colorType ),
946 mTwoColorGradientRamp( nullptr ),
947 mIgnoreRings( false ),
969 if ( props.
contains(
"color_type" ) )
973 if ( props.
contains(
"shapeburst_color" ) )
978 else if ( props.
contains(
"color" ) )
983 if ( props.
contains(
"shapeburst_color2" ) )
988 else if ( props.
contains(
"gradient_color2" ) )
992 if ( props.
contains(
"blur_radius" ) )
994 blurRadius = props[
"blur_radius"].toInt();
996 if ( props.
contains(
"use_whole_shape" ) )
998 useWholeShape = props[
"use_whole_shape"].toInt();
1000 if ( props.
contains(
"max_distance" ) )
1002 maxDistance = props[
"max_distance"].toDouble();
1015 if ( props.
contains(
"offset_unit" ) )
1019 if ( props.
contains(
"distance_unit" ) )
1023 if ( props.
contains(
"offset_map_unit_scale" ) )
1027 if ( props.
contains(
"distance_map_unit_scale" ) )
1031 if ( props.
contains(
"ignore_rings" ) )
1047 return "ShapeburstFill";
1127 Q_UNUSED( context );
1163 applyDataDefinedSymbology( context, color1, color2, blurRadius, useWholeShape, maxDistance, ignoreRings );
1166 int outputPixelMaxDist = 0;
1184 int sideBuffer = 4 + ( blurRadius + 2 ) * 4;
1193 fillImage->
fill( Qt::black );
1196 QImage * alphaImage =
new QImage( fillImage->
width(), fillImage->
height(), QImage::Format_ARGB32_Premultiplied );
1198 alphaImage->
fill( Qt::transparent );
1202 imgPainter.
begin( alphaImage );
1213 imgPainter.
begin( fillImage );
1216 imgPainter.
drawImage( 0, 0, *alphaImage );
1232 double * dtArray = distanceTransform( fillImage );
1246 if ( blurRadius > 0 )
1252 imgPainter.
begin( fillImage );
1254 imgPainter.
drawImage( 0, 0, *alphaImage );
1286 void QgsShapeburstFillSymbolLayerV2::distanceTransform1d(
double *f,
int n,
int *v,
double *z,
double *d )
1292 for (
int q = 1; q <= n - 1; q++ )
1294 double s = (( f[q] + q * q ) - ( f[v[k]] + ( v[k] * v[k] ) ) ) / ( 2 * q - 2 * v[k] );
1298 s = (( f[q] + q * q ) - ( f[v[k]] + ( v[k] * v[k] ) ) ) / ( 2 * q - 2 * v[k] );
1307 for (
int q = 0; q <= n - 1; q++ )
1309 while ( z[k+1] < q )
1311 d[q] = ( q - v[k] ) * ( q - v[k] ) + f[v[k]];
1316 void QgsShapeburstFillSymbolLayerV2::distanceTransform2d(
double * im,
int width,
int height )
1318 int maxDimension = qMax( width, height );
1319 double *f =
new double[ maxDimension ];
1320 int *v =
new int[ maxDimension ];
1321 double *z =
new double[ maxDimension + 1 ];
1322 double *d =
new double[ maxDimension ];
1325 for (
int x = 0; x < width; x++ )
1327 for (
int y = 0; y < height; y++ )
1329 f[y] = im[ x + y * width ];
1331 distanceTransform1d( f, height, v, z, d );
1332 for (
int y = 0; y < height; y++ )
1334 im[ x + y * width ] = d[y];
1339 for (
int y = 0; y < height; y++ )
1341 for (
int x = 0; x < width; x++ )
1343 f[x] = im[ x + y*width ];
1345 distanceTransform1d( f, width, v, z, d );
1346 for (
int x = 0; x < width; x++ )
1348 im[ x + y*width ] = d[x];
1359 double * QgsShapeburstFillSymbolLayerV2::distanceTransform(
QImage *im )
1361 int width = im->
width();
1362 int height = im->
height();
1364 double * dtArray =
new double[width * height];
1369 for (
int heightIndex = 0; heightIndex < height; ++heightIndex )
1371 const QRgb* scanLine =
reinterpret_cast< const QRgb*
>( im->
constScanLine( heightIndex ) );
1372 for (
int widthIndex = 0; widthIndex < width; ++widthIndex )
1374 tmpRgb = scanLine[widthIndex];
1375 if ( qRed( tmpRgb ) == 0 )
1383 dtArray[ idx ] =
INF;
1390 distanceTransform2d( dtArray, width, height );
1397 int width = im->
width();
1398 int height = im->
height();
1401 double maxDistanceValue;
1406 double dtMaxValue = array[0];
1407 for (
int i = 1; i < ( width * height ); ++i )
1409 if ( array[i] > dtMaxValue )
1411 dtMaxValue = array[i];
1416 maxDistanceValue = sqrt( dtMaxValue );
1421 maxDistanceValue = maxPixelDistance;
1426 double squaredVal = 0;
1429 bool layerHasAlpha = layerAlpha < 1.0;
1431 for (
int heightIndex = 0; heightIndex < height; ++heightIndex )
1433 QRgb* scanLine =
reinterpret_cast< QRgb*
>( im->
scanLine( heightIndex ) );
1434 for (
int widthIndex = 0; widthIndex < width; ++widthIndex )
1437 squaredVal = array[idx];
1440 if ( maxDistanceValue > 0 )
1442 pixVal = squaredVal > 0 ? qMin(( sqrt( squaredVal ) / maxDistanceValue ), 1.0 ) : 0;
1450 pixColor = ramp->
color( pixVal );
1452 int pixAlpha = pixColor.
alpha();
1453 if (( layerHasAlpha ) || ( pixAlpha != 255 ) )
1456 double alpha = pixAlpha * layerAlpha;
1461 scanLine[widthIndex] = pixColor.
rgba();
1552 , mOutlineWidth( 0.0 )
1554 , mOutline( nullptr )
1610 for ( ; ringIt != rings->
constEnd(); ++ringIt )
1672 return subLayerBleed;
1690 Q_UNUSED( context );
1693 return QColor( Qt::black );
1700 return Qt::SolidLine;
1704 return Qt::SolidLine;
1725 mPatternWidth( width ),
1735 setDefaultSvgParams();
1752 setDefaultSvgParams();
1804 setDefaultSvgParams();
1814 if ( properties.
contains(
"width" ) )
1816 width = properties[
"width"].toDouble();
1818 if ( properties.
contains(
"svgFile" ) )
1820 QString svgName = properties[
"svgFile"];
1822 svgFilePath = ( savePath.
isEmpty() ? svgName : savePath );
1824 if ( properties.
contains(
"angle" ) )
1826 angle = properties[
"angle"].toDouble();
1836 if ( properties.
contains(
"data" ) )
1844 if ( properties.
contains(
"svgFillColor" ) )
1849 else if ( properties.
contains(
"color" ) )
1853 if ( properties.
contains(
"svgOutlineColor" ) )
1858 else if ( properties.
contains(
"outline_color" ) )
1862 else if ( properties.
contains(
"line_color" ) )
1866 if ( properties.
contains(
"svgOutlineWidth" ) )
1871 else if ( properties.
contains(
"outline_width" ) )
1875 else if ( properties.
contains(
"line_width" ) )
1881 if ( properties.
contains(
"pattern_width_unit" ) )
1885 if ( properties.
contains(
"pattern_width_map_unit_scale" ) )
1889 if ( properties.
contains(
"svg_outline_width_unit" ) )
1893 if ( properties.
contains(
"svg_outline_width_map_unit_scale" ) )
1897 if ( properties.
contains(
"outline_width_unit" ) )
1901 if ( properties.
contains(
"outline_width_map_unit_scale" ) )
1930 if ( static_cast< int >( size ) < 1.0 || 10000.0 < size )
1937 bool fitsInCache =
true;
1945 double hwRatio = 1.0;
1946 if ( patternPict.
width() > 0 )
1948 hwRatio =
static_cast< double >( patternPict.
height() ) / static_cast< double >( patternPict.
width() );
1950 mSvgPattern =
new QImage( static_cast< int >( size ), static_cast< int >( size * hwRatio ), QImage::Format_ARGB32_Premultiplied );
1976 applyPattern(
mBrush,
mSvgFilePath,
mPatternWidth,
mPatternWidthUnit,
mColor,
mSvgOutlineColor,
mSvgOutlineWidth,
mSvgOutlineWidthUnit, context,
mPatternWidthMapUnitScale,
mSvgOutlineWidthMapUnitScale );
2060 if ( !props.
value(
"uom",
"" ).isEmpty() )
2094 double angle = props.
value(
"angle",
"0" ).toDouble( &ok );
2120 Qt::PenStyle penStyle;
2121 double size, borderWidth;
2128 if ( graphicFillElem.
isNull() )
2132 if ( graphicElem.
isNull() )
2138 if ( mimeType !=
"image/svg+xml" )
2148 double d = angleFunc.
toDouble( &ok );
2160 if ( !strokeElem.
isNull() )
2232 void QgsSVGFillSymbolLayer::storeViewBox()
2248 void QgsSVGFillSymbolLayer::setDefaultSvgParams()
2255 bool hasFillParam, hasFillOpacityParam, hasOutlineParam, hasOutlineWidthParam, hasOutlineOpacityParam;
2256 bool hasDefaultFillColor, hasDefaultFillOpacity, hasDefaultOutlineColor, hasDefaultOutlineWidth, hasDefaultOutlineOpacity;
2257 QColor defaultFillColor, defaultOutlineColor;
2258 double defaultOutlineWidth, defaultFillOpacity, defaultOutlineOpacity;
2260 hasFillOpacityParam, hasDefaultFillOpacity, defaultFillOpacity,
2261 hasOutlineParam, hasDefaultOutlineColor, defaultOutlineColor,
2262 hasOutlineWidthParam, hasDefaultOutlineWidth, defaultOutlineWidth,
2263 hasOutlineOpacityParam, hasDefaultOutlineOpacity, defaultOutlineOpacity );
2265 double newFillOpacity = hasFillOpacityParam ?
mColor.
alphaF() : 1.0;
2268 if ( hasDefaultFillColor )
2270 mColor = defaultFillColor;
2273 if ( hasDefaultFillOpacity )
2277 if ( hasDefaultOutlineColor )
2282 if ( hasDefaultOutlineOpacity )
2286 if ( hasDefaultOutlineWidth )
2299 , mLineAngle( 45.0 )
2302 , mFillLineSymbol( nullptr )
2322 delete mFillLineSymbol;
2337 delete mFillLineSymbol;
2338 mFillLineSymbol = lineSymbol;
2349 return mFillLineSymbol;
2355 if ( mFillLineSymbol )
2413 if ( properties.
contains(
"lineangle" ) )
2416 lineAngle = properties[
"lineangle"].toDouble();
2418 else if ( properties.
contains(
"angle" ) )
2420 lineAngle = properties[
"angle"].toDouble();
2424 if ( properties.
contains(
"distance" ) )
2426 distance = properties[
"distance"].toDouble();
2430 if ( properties.
contains(
"linewidth" ) )
2433 lineWidth = properties[
"linewidth"].toDouble();
2435 else if ( properties.
contains(
"outline_width" ) )
2437 lineWidth = properties[
"outline_width"].toDouble();
2439 else if ( properties.
contains(
"line_width" ) )
2441 lineWidth = properties[
"line_width"].toDouble();
2445 if ( properties.
contains(
"color" ) )
2449 else if ( properties.
contains(
"outline_color" ) )
2453 else if ( properties.
contains(
"line_color" ) )
2459 if ( properties.
contains(
"offset" ) )
2461 offset = properties[
"offset"].toDouble();
2466 if ( properties.
contains(
"distance_unit" ) )
2470 if ( properties.
contains(
"distance_map_unit_scale" ) )
2474 if ( properties.
contains(
"line_width_unit" ) )
2478 else if ( properties.
contains(
"outline_width_unit" ) )
2482 if ( properties.
contains(
"line_width_map_unit_scale" ) )
2486 if ( properties.
contains(
"offset_unit" ) )
2490 if ( properties.
contains(
"offset_map_unit_scale" ) )
2494 if ( properties.
contains(
"outline_width_unit" ) )
2498 if ( properties.
contains(
"outline_width_map_unit_scale" ) )
2505 return patternLayer;
2510 return "LinePatternFill";
2521 if ( !mFillLineSymbol )
2527 if ( !fillLineSymbol )
2539 double outputPixelBleed = 0;
2540 double outputPixelInterval = 0;
2552 outputPixelBleed = qMax( outputPixelBleed, outputPixelLayerBleed );
2555 if ( markerLineLayer )
2564 outputPixelInterval = qMax( outputPixelInterval, outputPixelLayerInterval );
2568 if ( outputPixelInterval > 0 )
2572 double intervalScale = qRound( outputPixelInterval ) / outputPixelInterval;
2573 outputPixelInterval = qRound( outputPixelInterval );
2580 if ( markerLineLayer )
2591 height = outputPixelDist;
2592 width = outputPixelInterval > 0 ? outputPixelInterval : height;
2596 width = outputPixelDist;
2597 height = outputPixelInterval > 0 ? outputPixelInterval : width;
2605 lineAngle = 180 * atan2( static_cast< double >( height ), static_cast< double >( width ) ) /
M_PI;
2611 height = qAbs( height );
2612 width = qAbs( width );
2618 int offsetHeight = qRound( qAbs( outputPixelOffset / cos(
lineAngle *
M_PI / 180 ) ) );
2619 outputPixelOffset = offsetHeight * cos(
lineAngle *
M_PI / 180 );
2628 int bufferMulti = qMax( qCeil( outputPixelBleed / width ), qCeil( outputPixelBleed / width ) );
2632 bufferMulti = qMax( bufferMulti, 1 );
2634 int xBuffer = width * bufferMulti;
2635 int yBuffer = height * bufferMulti;
2636 int innerWidth = width;
2637 int innerHeight = height;
2638 width += 2 * xBuffer;
2639 height += 2 * yBuffer;
2641 if ( width > 10000 || height > 10000 )
2646 QImage patternImage( width, height, QImage::Format_ARGB32 );
2647 patternImage.
fill( 0 );
2649 QPointF p1, p2, p3, p4, p5, p6;
2653 p2 =
QPointF( width, yBuffer );
2654 p3 =
QPointF( 0, yBuffer + innerHeight );
2655 p4 =
QPointF( width, yBuffer + innerHeight );
2659 p1 =
QPointF( xBuffer, height );
2661 p3 =
QPointF( xBuffer + innerWidth, height );
2662 p4 =
QPointF( xBuffer + innerWidth, 0 );
2666 dx = outputPixelDist * cos(( 90 -
lineAngle ) *
M_PI / 180.0 );
2667 dy = outputPixelDist * sin(( 90 -
lineAngle ) *
M_PI / 180.0 );
2670 p3 =
QPointF( -dx, height - dy );
2671 p4 =
QPointF( width - dx, -dy );
2672 p5 =
QPointF( dx, height + dy );
2673 p6 =
QPointF( width + dx, dy );
2677 dx = outputPixelDist * cos(( 90 -
lineAngle ) *
M_PI / 180.0 );
2678 dy = outputPixelDist * sin(( 90 -
lineAngle ) *
M_PI / 180.0 );
2681 p3 =
QPointF( width - dx, -dy );
2682 p4 =
QPointF( -dx, height - dy );
2683 p5 =
QPointF( width + dx, dy );
2684 p6 =
QPointF( dx, height + dy );
2688 dy = outputPixelDist * cos(( 180 -
lineAngle ) *
M_PI / 180 );
2689 dx = outputPixelDist * sin(( 180 -
lineAngle ) *
M_PI / 180 );
2691 p2 =
QPointF( width, height );
2693 p6 =
QPointF( width + dx, height - dy );
2695 p4 =
QPointF( width - dx, height + dy );
2699 dy = outputPixelDist * cos(( 180 -
lineAngle ) *
M_PI / 180 );
2700 dx = outputPixelDist * sin(( 180 -
lineAngle ) *
M_PI / 180 );
2701 p1 =
QPointF( width, height );
2703 p5 =
QPointF( width + dx, height - dy );
2705 p3 =
QPointF( width - dx, height + dy );
2732 p.setRenderHint( QPainter::Antialiasing,
false );
2741 p.drawPolygon( polygon );
2743 polygon =
QPolygon() <<
QPoint( xBuffer, yBuffer ) <<
QPoint( width - xBuffer - 1, yBuffer ) <<
QPoint( width - xBuffer - 1, height - yBuffer - 1 ) <<
QPoint( xBuffer, height - yBuffer - 1 ) <<
QPoint( xBuffer, yBuffer );
2744 p.drawPolygon( polygon );
2750 p.setRenderHint( QPainter::Antialiasing,
true );
2772 Q_FOREACH (
const QPolygonF& polygon, polygons )
2777 fillLineSymbol->
stopRender( lineRenderContext );
2781 patternImage = patternImage.
copy( xBuffer, yBuffer, patternImage.
width() - 2 * xBuffer, patternImage.
height() - 2 * yBuffer );
2786 QImage transparentImage = patternImage.
copy();
2799 delete fillLineSymbol;
2806 if ( mFillLineSymbol )
2841 if ( mFillLineSymbol )
2852 if ( !props.
value(
"uom",
"" ).isEmpty() )
2870 double lineWidth = mFillLineSymbol ? mFillLineSymbol->
width() : 0.0;
2876 double angle = props.
value(
"angle",
"0" ).toDouble( &ok );
2895 featureStyle.
append(
"Brush(" );
2897 featureStyle.
append(
QString(
",bc:%1" ).arg(
"#00000000" ) );
2898 featureStyle.
append(
",id:\"ogr-brush-2\"" );
2901 featureStyle.
append(
",dx:0mm" );
2903 featureStyle.
append(
')' );
2904 return featureStyle;
2943 applyPattern( context,
mBrush, lineAngle, distance, lineWidth, color );
2953 Qt::PenStyle lineStyle;
2960 if ( graphicFillElem.
isNull() )
2964 if ( graphicElem.
isNull() )
2970 if ( name !=
"horline" )
2978 double d = angleFunc.
toDouble( &ok );
2987 offset = sqrt( pow( vectOffset.
x(), 2 ) + pow( vectOffset.
y(), 2 ) );
2999 if ( !strokeElem.
isNull() )
3018 mDisplacementY( 0 ), mDisplacementYUnit(
QgsSymbolV2::MM )
3076 if ( properties.
contains(
"distance_x" ) )
3078 layer->
setDistanceX( properties[
"distance_x"].toDouble() );
3080 if ( properties.
contains(
"distance_y" ) )
3082 layer->
setDistanceY( properties[
"distance_y"].toDouble() );
3084 if ( properties.
contains(
"displacement_x" ) )
3088 if ( properties.
contains(
"displacement_y" ) )
3093 if ( properties.
contains(
"distance_x_unit" ) )
3097 if ( properties.
contains(
"distance_x_map_unit_scale" ) )
3101 if ( properties.
contains(
"distance_y_unit" ) )
3105 if ( properties.
contains(
"distance_y_map_unit_scale" ) )
3109 if ( properties.
contains(
"displacement_x_unit" ) )
3113 if ( properties.
contains(
"displacement_x_map_unit_scale" ) )
3117 if ( properties.
contains(
"displacement_y_unit" ) )
3121 if ( properties.
contains(
"displacement_y_map_unit_scale" ) )
3125 if ( properties.
contains(
"outline_width_unit" ) )
3129 if ( properties.
contains(
"outline_width_map_unit_scale" ) )
3141 return "PointPatternFill";
3152 if ( width > 10000 || height > 10000 )
3159 QImage patternImage( width, height, QImage::Format_ARGB32 );
3160 patternImage.
fill( 0 );
3199 QImage transparentImage = patternImage.
copy();
3268 if ( !props.
value(
"uom",
"" ).isEmpty() )
3302 Q_UNUSED( element );
3355 applyPattern( context,
mBrush, distanceX, distanceY, displacementX, displacementY );
3390 if ( properties.
contains(
"point_on_surface" ) )
3398 return "CentroidFill";
3538 , mImageFilePath( imageFilePath )
3562 if ( properties.
contains(
"imageFile" ) )
3564 imagePath = properties[
"imageFile"];
3566 if ( properties.
contains(
"coordinate_mode" ) )
3570 if ( properties.
contains(
"alpha" ) )
3572 alpha = properties[
"alpha"].toDouble();
3574 if ( properties.
contains(
"offset" ) )
3578 if ( properties.
contains(
"angle" ) )
3580 angle = properties[
"angle"].toDouble();
3582 if ( properties.
contains(
"width" ) )
3584 width = properties[
"width"].toDouble();
3592 if ( properties.
contains(
"offset_unit" ) )
3596 if ( properties.
contains(
"offset_map_unit_scale" ) )
3600 if ( properties.
contains(
"width_unit" ) )
3604 if ( properties.
contains(
"width_map_unit_scale" ) )
3622 return "RasterFill";
3662 Q_UNUSED( context );
3730 if ( !hasWidthExpression && !hasAngleExpression && !hasAlphaExpression && !hasFileExpression )
3736 if ( hasAngleExpression )
3744 if ( !hasWidthExpression && !hasAlphaExpression && !hasFileExpression )
3750 if ( hasWidthExpression )
3756 if ( hasAlphaExpression )
3762 if ( hasFileExpression )
3767 applyPattern(
mBrush, file, width, alpha, context );
3772 QImage image( imageFilePath );
3789 pixelWidth = image.
width();
3798 QColor alphaColor( 0, 0, 0 );
3807 image = image.
scaledToWidth( pixelWidth, Qt::SmoothTransformation );
virtual QSet< QString > usedAttributes() const
Returns the set of attributes referenced by the layer.
QgsStringMap properties() const override
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
static double mapUnitScaleFactor(double scaleDenominator, QgsSymbolV2::OutputUnit symbolUnits, QGis::UnitType mapUnits)
QgsMapUnitScale mSvgOutlineWidthMapUnitScale
static QString encodeOutputUnit(QgsSymbolV2::OutputUnit unit)
static const QString EXPR_DISTANCE_Y
void setBorderWidthMapUnitScale(const QgsMapUnitScale &scale)
QgsMapUnitScale mapUnitScale() const override
QgsSymbolV2 * subSymbol() override
ShapeburstColorType mColorType
bool ignoreRings() const
Returns whether the shapeburst fill is set to ignore polygon interior rings.
void setForceVectorOutput(bool force)
QgsSymbolV2::OutputUnit intervalUnit() const
QgsSymbolV2::OutputUnit patternWidthUnit() const
void setDistanceUnit(QgsSymbolV2::OutputUnit unit)
Sets the unit for the maximum distance to shade inside of the shape from the polygon's boundary...
QgsImageFillSymbolLayer()
double borderWidth() const
static void createRotationElement(QDomDocument &doc, QDomElement &element, const QString &rotationFunc)
const QgsMapUnitScale & patternWidthMapUnitScale() const
#define DEFAULT_SIMPLEFILL_BORDERCOLOR
QString layerType() const override
Returns a string that represents this layer type.
static const QString EXPR_DISPLACEMENT_Y
void setDistance(double d)
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
virtual QSet< QString > usedAttributes() const override
Returns the set of attributes referenced by the layer.
void setReferencePoint1(QPointF referencePoint)
Starting point of gradient fill, in the range [0,0] - [1,1].
QgsSymbolV2::OutputUnit mSvgOutlineWidthUnit
void setStyle(Qt::PenStyle style)
void setReferencePoint2IsCentroid(bool isCentroid)
Sets the end point of the gradient to be the feature centroid.
void startRender(QgsSymbolV2RenderContext &context) override
void setSvgOutlineWidth(double w)
QString & append(QChar ch)
static void multiplyImageOpacity(QImage *image, qreal alpha)
Multiplies opacity of image pixel values with a (global) transparency value.
OutputUnit
The unit of the output.
QImage scaledToWidth(int width, Qt::TransformationMode mode) const
QString ogrFeatureStyleWidth(double widthScaleFactor) const
virtual QColor dxfColor(QgsSymbolV2RenderContext &context) const override
QgsSymbolV2::OutputUnit mOffsetUnit
static Qt::BrushStyle decodeBrushStyle(const QString &str)
QgsStringMap properties() const override
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
FillCoordinateMode mCoordinateMode
static bool lineFromSld(QDomElement &element, Qt::PenStyle &penStyle, QColor &color, double &width, Qt::PenJoinStyle *penJoinStyle=nullptr, Qt::PenCapStyle *penCapStyle=nullptr, QVector< qreal > *customDashPattern=nullptr, double *dashOffset=nullptr)
QgsSymbolV2::OutputUnit mLineWidthUnit
virtual QString type() const =0
QSet< QString > usedAttributes() const override
Returns the set of attributes referenced by the layer.
bool contains(const Key &key) const
static Q_DECL_DEPRECATED bool wellKnownMarkerFromSld(QDomElement &element, QString &name, QColor &color, QColor &borderColor, double &borderWidth, double &size)
static const QString EXPR_BORDER_COLOR
void fillRect(const QRectF &rectangle, const QBrush &brush)
void setCompositionMode(CompositionMode mode)
QgsRasterFillSymbolLayer * clone() const override
Shall be reimplemented by subclasses to create a deep copy of the instance.
virtual QgsLineSymbolV2 * clone() const override
QgsMapUnitScale mLineWidthMapUnitScale
const uchar * constScanLine(int i) const
void setSvgFillColor(const QColor &c)
void setPatternWidthMapUnitScale(const QgsMapUnitScale &scale)
bool mReferencePoint1IsCentroid
void setRenderHint(RenderHint hint, bool on)
void startRender(QgsSymbolV2RenderContext &context) override
QDomNode appendChild(const QDomNode &newChild)
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
void setDistanceYUnit(QgsSymbolV2::OutputUnit unit)
QString svgFilePath() const
void stopRender(QgsSymbolV2RenderContext &context) override
void append(const T &value)
static QDomElement createVendorOptionElement(QDomDocument &doc, const QString &name, const QString &value)
void setOffsetUnit(QgsSymbolV2::OutputUnit unit)
static const QString EXPR_USE_WHOLE_SHAPE
virtual double dxfWidth(const QgsDxfExport &e, QgsSymbolV2RenderContext &context) const override
const QPicture & svgAsPicture(const QString &file, double size, const QColor &fill, const QColor &outline, double outlineWidth, double widthScaleFactor, double rasterScaleFactor, bool forceVectorOutput=false)
Get SVG as QPicture&.
static const QString EXPR_REFERENCE2_Y
static void createGeometryElement(QDomDocument &doc, QDomElement &element, const QString &geomFunc)
QColor selectionColor() const
QMap< Key, T > & unite(const QMap< Key, T > &other)
QSet< QString > usedAttributes() const
Return a list of attributes required to render this feature.
void setOutlineWidthMapUnitScale(const QgsMapUnitScale &scale)
QPointF referencePoint2() const
void setMapUnitScale(const QgsMapUnitScale &scale) override
QgsPointPatternFillSymbolLayer * clone() const override
Shall be reimplemented by subclasses to create a deep copy of the instance.
QgsLinePatternFillSymbolLayer()
void setMatrix(const QMatrix &matrix)
double displacementX() const
bool setSubSymbol(QgsSymbolV2 *symbol) override
set layer's subsymbol. takes ownership of the passed symbol
double svgOutlineWidth() const
void setColorAt(qreal position, const QColor &color)
static QString encodeColor(const QColor &color)
Base class for polygon renderers generating texture images.
QgsMapUnitScale mOffsetMapUnitScale
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
QgsMapUnitScale mPatternWidthMapUnitScale
static const QString EXPR_DISPLACEMENT_X
GradientCoordinateMode mCoordinateMode
double rendererScale() const
void stopRender(QgsSymbolV2RenderContext &context) override
void setPointOnSurface(bool pointOnSurface)
static const QString EXPR_WIDTH
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
static void externalGraphicToSld(QDomDocument &doc, QDomElement &element, const QString &path, const QString &mime, const QColor &color, double size=-1)
QgsSymbolV2::OutputUnit svgOutlineWidthUnit() const
void scale(qreal sx, qreal sy)
virtual void writeSldMarker(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const
QGis::UnitType mapUnits() const
Retrieve map units.
void setIgnoreRings(bool ignoreRings)
Sets whether the shapeburst fill should ignore polygon rings when calculating the buffered shading...
void setRendererScale(double scale)
void stopRender(QgsSymbolV2RenderContext &context) override
void toSld(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const override
void setTextureImage(const QImage &image)
static QString ogrFeatureStyleBrush(const QColor &fillColr)
Create ogr feature style string for brush.
void setMapUnitScale(const QgsMapUnitScale &scale) override
void setDistanceMapUnitScale(const QgsMapUnitScale &scale)
void stopRender(QgsSymbolV2RenderContext &context) override
QString layerType() const override
Returns a string that represents this layer type.
const QgsMapUnitScale & intervalMapUnitScale() const
void setOriginalValueVariable(const QVariant &value)
Sets the original value variable value for data defined symbology.
bool hasAlphaChannel() const
QgsMapUnitScale mapUnitScale() const
QString layerType() const override
Returns a string that represents this layer type.
QgsMapUnitScale mOutlineWidthMapUnitScale
Qt::BrushStyle dxfBrushStyle() const override
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=nullptr)
Create ogr feature style string for pen.
QgsSymbolV2::OutputUnit outputUnit() const override
static const QString EXPR_BLUR_RADIUS
void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context) override
static bool externalGraphicFromSld(QDomElement &element, QString &path, QString &mime, QColor &color, double &size)
void setJoinStyle(Qt::PenJoinStyle style)
QgsShapeburstFillSymbolLayerV2(const QColor &color=DEFAULT_SIMPLEFILL_COLOR, const QColor &color2=Qt::white, ShapeburstColorType colorType=SimpleTwoColor, int blurRadius=0, bool useWholeShape=true, double maxDistance=5)
virtual QgsStringMap properties() const =0
GradientType mGradientType
static const QString EXPR_COORDINATE_MODE
GradientCoordinateMode coordinateMode() const
Coordinate mode for gradient.
QgsSymbolV2::OutputUnit mWidthUnit
static QPointF decodePoint(const QString &str)
QgsSymbolV2::OutputUnit mDisplacementXUnit
static QgsSymbolLayerV2 * createFromSld(QDomElement &element)
void stopRender(QgsSymbolV2RenderContext &context) override
static Qt::PenJoinStyle decodePenJoinStyle(const QString &str)
static const QString EXPR_COLOR2
void copyPaintEffect(QgsSymbolLayerV2 *destLayer) const
Copies paint effect of this layer to another symbol layer.
void setDistanceXMapUnitScale(const QgsMapUnitScale &scale)
static const bool selectionIsOpaque
int blurRadius() const
Returns the blur radius, which controls the amount of blurring applied to the fill.
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
static QString encodeMapUnitScale(const QgsMapUnitScale &mapUnitScale)
void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context) override
virtual bool hasDataDefinedProperty(const QString &property) const
Checks whether the layer has a matching data defined property and if that property is currently activ...
void applyDataDefinedSettings(QgsSymbolV2RenderContext &context) override
void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context) override
double scaleFactor() const
virtual bool setSubSymbol(QgsSymbolV2 *symbol) override
set layer's subsymbol. takes ownership of the passed symbol
double mDistance
Distance (in mm or map units) between lines.
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
void setSvgOutlineWidthUnit(QgsSymbolV2::OutputUnit unit)
QImage copy(const QRect &rectangle) const
QgsMapUnitScale mOffsetMapUnitScale
QgsStringMap properties() const override
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
static void createDisplacementElement(QDomDocument &doc, QDomElement &element, QPointF offset)
double mLineAngle
Vector line angle in degrees (0 = horizontal, counterclockwise)
bool setSubSymbol(QgsSymbolV2 *symbol) override
set layer's subsymbol. takes ownership of the passed symbol
GradientSpread mGradientSpread
double estimateMaxBleed() const override
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
void setMapUnitScale(const QgsMapUnitScale &scale) override
double toDouble(bool *ok) const
QColor color() const override
The fill color.
virtual QColor fillColor() const
Get fill color.
QgsMapUnitScale mDistanceYMapUnitScale
void setStyle(Qt::BrushStyle style)
QgsVectorColorRampV2 * mGradientRamp
QString layerType() const override
Returns a string that represents this layer type.
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
QString tr(const char *sourceText, const char *disambiguation, int n)
void setColorRamp(QgsVectorColorRampV2 *ramp)
bool qgsDoubleNear(double a, double b, double epsilon=4 *DBL_EPSILON)
static double pixelSizeScaleFactor(const QgsRenderContext &c, QgsSymbolV2::OutputUnit u, const QgsMapUnitScale &scale=QgsMapUnitScale())
Returns scale factor painter units -> pixel dimensions.
void setWidth(double width)
void setMapUnitScale(const QgsMapUnitScale &scale)
QgsStringMap properties() const override
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
QgsMapUnitScale mapUnitScale() const override
virtual double estimateMaxBleed() const
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
QgsSymbolV2::OutputUnit outputUnit() const override
void setSvgOutlineColor(const QColor &c)
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
void setMapUnitScale(const QgsMapUnitScale &scale) override
void setInterval(double interval)
The interval between individual markers.
static const QString EXPR_JOIN_STYLE
void setDistanceUnit(QgsSymbolV2::OutputUnit unit)
QgsMapUnitScale mDisplacementYMapUnitScale
void containsParams(const QString &path, bool &hasFillParam, QColor &defaultFillColor, bool &hasOutlineParam, QColor &defaultOutlineColor, bool &hasOutlineWidthParam, double &defaultOutlineWidth) const
Tests if an svg file contains parameters for fill, outline color, outline width.
static QgsSymbolV2::OutputUnit decodeOutputUnit(const QString &str)
static bool displacementFromSldElement(QDomElement &element, QPointF &offset)
QColor dxfColor(QgsSymbolV2RenderContext &context) const override
static const QString EXPR_FILL_STYLE
qreal alpha() const
Get alpha transparency 1 for opaque, 0 for invisible.
static QgsSvgCache * instance()
static const QString EXPR_REFERENCE1_Y
static QString encodePenStyle(Qt::PenStyle style)
static QPointF pointOnLineWithDistance(QPointF startPoint, QPointF directionPoint, double distance)
Returns a point on the line from startPoint to directionPoint that is a certain distance away from th...
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
void setCapStyle(Qt::PenCapStyle style)
const QImage & svgAsImage(const QString &file, double size, const QColor &fill, const QColor &outline, double outlineWidth, double widthScaleFactor, double rasterScaleFactor, bool &fitsInCache)
Get SVG as QImage.
QString mImageFilePath
Path to the image file.
QgsSymbolV2::OutputUnit mDisplacementYUnit
Perform transforms between map coordinates and device coordinates.
static const QString EXPR_BORDER_STYLE
void setColor(const QColor &color)
static const QString EXPR_REFERENCE2_X
static const QString EXPR_REFERENCE2_ISCENTROID
static QString symbolPathToName(QString path)
Get symbols's name from its path.
Mixed units in symbol layers.
void setLineAngle(double a)
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
static const QString EXPR_LINEWIDTH
QgsLinePatternFillSymbolLayer * clone() const override
Shall be reimplemented by subclasses to create a deep copy of the instance.
QgsSymbolV2::OutputUnit outputUnit() const override
void setImageFilePath(const QString &imagePath)
Sets the path to the raster image used for the fill.
static QgsSymbolLayerV2 * createMarkerLayerFromSld(QDomElement &element)
The output shall be in millimeters.
#define DEFAULT_SIMPLEFILL_BORDERSTYLE
void stopRender(QgsSymbolV2RenderContext &context) override
QString number(int n, int base)
A class for filling symbols with a repeated raster image.
bool mReferencePoint2IsCentroid
void setOffset(QPointF offset)
Sets the offset for the shapeburst fill.
QByteArray mSvgData
SVG data.
Qt::PenStyle borderStyle() const
void append(const T &value)
void setOutlineWidthUnit(QgsSymbolV2::OutputUnit unit)
QgsLineSymbolV2 * mOutline
Custom outline.
static const QString EXPR_SPREAD
#define DEFAULT_SIMPLEFILL_STYLE
virtual ~QgsImageFillSymbolLayer()
QgsMapUnitScale mDistanceXMapUnitScale
void startRender(QgsSymbolV2RenderContext &context) override
static bool fillFromSld(QDomElement &element, Qt::BrushStyle &brushStyle, QColor &color)
void setScaleFactor(double factor)
QgsGradientFillSymbolLayerV2 * clone() const override
Shall be reimplemented by subclasses to create a deep copy of the instance.
const QgsFeature * feature() const
Current feature being rendered - may be null.
QString layerType() const override
Returns a string that represents this layer type.
void startRender(QgsRenderContext &context, const QgsFields *fields=nullptr)
static const QString EXPR_LINEANGLE
int toInt(bool *ok) const
void setWidth(const double width)
Sets the width for scaling the image used in the fill.
void startRender(QgsSymbolV2RenderContext &context) override
void applyDataDefinedSettings(QgsSymbolV2RenderContext &context) override
double mOffset
Offset perpendicular to line direction.
void fill(uint pixelValue)
QgsMapUnitScale mDistanceMapUnitScale
static QString encodePoint(QPointF point)
void setReferencePoint1IsCentroid(bool isCentroid)
Sets the starting point of the gradient to be the feature centroid.
QByteArray getImageData(const QString &path) const
Get image data.
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.
static const QString EXPR_ALPHA
QgsSymbolV2::OutputUnit outputUnit() const override
double dxfWidth(const QgsDxfExport &e, QgsSymbolV2RenderContext &context) const override
QgsVectorColorRampV2 * mTwoColorGradientRamp
void setPen(const QColor &color)
void setLineWidthUnit(QgsSymbolV2::OutputUnit unit)
void toSld(QDomDocument &doc, QDomElement &element, QgsStringMap props) const
QgsSymbolV2::OutputUnit outputUnit() const override
void setAttribute(const QString &name, const QString &value)
void toSld(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const override
virtual QgsVectorColorRampV2 * clone() const =0
virtual QSet< QString > usedAttributes() const override
Returns the set of attributes referenced by the layer.
~QgsCentroidFillSymbolLayerV2()
bool useWholeShape() const
Returns whether the shapeburst fill is set to cover the entire shape.
void toSld(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const override
bool setSubSymbol(QgsSymbolV2 *symbol) override
set layer's subsymbol. takes ownership of the passed symbol
static QgsSymbolLayerV2 * createFromSld(QDomElement &element)
virtual double estimateMaxBleed() const override
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
void setAngle(qreal angle)
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
void setOffsetUnit(QgsSymbolV2::OutputUnit unit)
double estimateMaxBleed() const override
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
QgsMarkerSymbolV2 * mMarker
void setWidthMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the image's width.
QPointF offset() const
Returns the offset for the shapeburst fill.
void renderPolyline(const QPolygonF &points, const QgsFeature *f, QgsRenderContext &context, int layer=-1, bool selected=false)
static QString encodePenJoinStyle(Qt::PenJoinStyle style)
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
QgsMapUnitScale mapUnitScale() const override
void setAngle(double angle)
virtual double estimateMaxBleed() const override
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
static QString symbolNameToPath(QString name)
Get symbol's path from its name.
void startRender(QgsSymbolV2RenderContext &context) override
QString imageFilePath() const
The path to the raster image used for the fill.
QgsSVGFillSymbolLayer(const QString &svgFilePath="", double width=20, double rotation=0.0)
~QgsLinePatternFillSymbolLayer()
void setDistanceYMapUnitScale(const QgsMapUnitScale &scale)
Qt::PenStyle mBorderStyle
void setWidthF(qreal width)
QColor svgFillColor() const
void toSld(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const override
QgsMapUnitScale mOffsetMapUnitScale
int symbolLayerCount()
Returns total number of symbol layers contained in the symbol.
QgsSymbolV2::OutputUnit mOffsetUnit
void setBrush(const QBrush &brush)
QgsCentroidFillSymbolLayerV2()
void setPainter(QPainter *p)
double rasterScaleFactor() const
ShapeburstColorType colorType() const
Returns the color mode used for the shapeburst fill.
QgsSymbolV2::OutputUnit outputUnit() const override
static const bool selectFillStyle
double interval() const
The interval between individual markers.
double patternWidth() const
void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context) override
double mapUnitsPerPixel() const
Return current map units per pixel.
virtual QColor color() const
The fill color.
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
GradientColorType gradientColorType() const
Gradient color mode, controls how gradient color stops are created.
void setDisplacementXUnit(QgsSymbolV2::OutputUnit unit)
void setCoordinateMode(const FillCoordinateMode mode)
Set the coordinate mode for fill.
QgsStringMap properties() const override
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
virtual bool setSubSymbol(QgsSymbolV2 *symbol) override
set layer's subsymbol. takes ownership of the passed symbol
QgsMapUnitScale mOffsetMapUnitScale
QString layerType() const override
Returns a string that represents this layer type.
QgsShapeburstFillSymbolLayerV2 * clone() const override
Shall be reimplemented by subclasses to create a deep copy of the instance.
QgsSymbolV2::OutputUnit mOffsetUnit
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.
void startRender(QgsSymbolV2RenderContext &context) override
QgsMapUnitScale mDisplacementXMapUnitScale
void setBorderWidthUnit(QgsSymbolV2::OutputUnit unit)
static void lineToSld(QDomDocument &doc, QDomElement &element, Qt::PenStyle penStyle, const QColor &color, double width=-1, const Qt::PenJoinStyle *penJoinStyle=nullptr, const Qt::PenCapStyle *penCapStyle=nullptr, const QVector< qreal > *customDashPattern=nullptr, double dashOffset=0.0)
static const QString EXPR_FILE
void setCoordinateMode(CoordinateMode mode)
virtual bool hasDataDefinedProperties() const
Checks whether the layer has any associated data defined properties.
void setLineWidthMapUnitScale(const QgsMapUnitScale &scale)
QSet< QString > usedAttributes() const override
Returns the set of attributes referenced by the layer.
QString layerType() const override
Returns a string that represents this layer type.
void setDisplacementXMapUnitScale(const QgsMapUnitScale &scale)
QgsMapUnitScale mOffsetMapUnitScale
QgsSymbolV2::OutputUnit mOffsetUnit
void setOffset(QPointF offset)
Sets the offset for the fill.
static Qt::PenStyle decodePenStyle(const QString &str)
void startRender(QgsSymbolV2RenderContext &context) override
QPointF referencePoint1() const
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
QString mSvgFilePath
Path to the svg file (or empty if constructed directly from data)
QgsSymbolV2::SymbolType type() const
virtual QColor color(double value) const =0
QgsSymbolV2::OutputUnit mOffsetUnit
static const QString EXPR_DISTANCE
QgsSymbolV2::OutputUnit mOutlineWidthUnit
QByteArray fromHex(const QByteArray &hexEncoded)
QgsStringMap properties() const override
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
double mOutlineWidth
Outline width.
void setDistanceXUnit(QgsSymbolV2::OutputUnit unit)
double mLineWidth
Line width (in mm or map units)
QgsVectorColorRampV2 * mGradientRamp
QColor svgOutlineColor() const
static const QString EXPR_COLOR
static const QString EXPR_WIDTH_BORDER
QgsMapUnitScale mapUnitScale() const override
GradientSpread gradientSpread() const
Gradient spread mode.
QgsStringMap properties() const override
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
static QgsSymbolLayerV2 * createLineLayerFromSld(QDomElement &element)
QgsMapUnitScale mapUnitScale() const override
static QgsSymbolLayerV2 * createFromSld(QDomElement &element)
static const QString EXPR_SVG_FILE
static const QString EXPR_ANGLE
QColor color2() const
Returns the color used for the endpoint of the shapeburst fill.
void setOffset(QPointF offset)
Offset for gradient fill.
virtual QString layerType() const =0
Returns a string that represents this layer type.
void applyDataDefinedSettings(QgsSymbolV2RenderContext &context) override
virtual ~QgsShapeburstFillSymbolLayerV2()
void setDisplacementY(double d)
QgsExpressionContext & expressionContext()
Gets the expression context.
double symbologyScaleDenominator() const
Retrieve reference scale for output.
double estimateMaxBleed() const override
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
void setOffsetUnit(QgsSymbolV2::OutputUnit unit)
Sets the units used for the offset for the shapeburst fill.
QgsSymbolV2::OutputUnit mDistanceYUnit
static const QString EXPR_DISTANCE_X
QString layerType() const override
Returns a string that represents this layer type.
static const QString EXPR_REFERENCE1_X
double estimateMaxBleed() const override
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
static QgsVectorColorRampV2 * create(const QgsStringMap &properties=QgsStringMap())
void setOffset(QPointF offset)
static const QString EXPR_GRADIENT_TYPE
QgsRasterFillSymbolLayer(const QString &imageFilePath=QString())
void setLineWidth(double w)
Qt::PenJoinStyle mPenJoinStyle
QgsMapUnitScale mWidthMapUnitScale
A class for svg fill patterns.
void setMapUnitScale(const QgsMapUnitScale &scale) override
QgsMapUnitScale mapUnitScale() const override
Contains information about the context of a rendering operation.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
Sets the map unit scale for the fill's offset.
static const QString EXPR_SVG_FILL_COLOR
Qt::BrushStyle mBrushStyle
QColor color2() const
Color for endpoint of gradient, only used if the gradient color type is set to SimpleTwoColor.
QRectF boundingRect() const
void drawImage(const QRectF &target, const QImage &image, const QRectF &source, QFlags< Qt::ImageConversionFlag > flags)
void stopRender(QgsRenderContext &context)
QgsMapUnitScale mBorderWidthMapUnitScale
QPointF offset() const
Returns the offset for the fill.
static QString encodeBrushStyle(Qt::BrushStyle style)
static void fillToSld(QDomDocument &doc, QDomElement &element, Qt::BrushStyle brushStyle, const QColor &color=QColor())
QSet< T > & unite(const QSet< T > &other)
GradientColorType mGradientColorType
QgsPointPatternFillSymbolLayer()
void toSld(QDomDocument &doc, QDomElement &element, const QgsStringMap &props) const override
Struct for storing maximum and minimum scales for measurements in map units.
QgsSymbolV2::OutputUnit mDistanceXUnit
QgsMapUnitScale mDistanceMapUnitScale
void setDisplacementYUnit(QgsSymbolV2::OutputUnit unit)
static const QString EXPR_SVG_OUTLINE_COLOR
QgsSymbolV2::OutputUnit outputUnit() const override
void setSvgFilePath(const QString &svgPath)
QgsStringMap properties() const override
Should be reimplemented by subclasses to return a string map that contains the configuration informat...
QgsRenderContext & renderContext()
QDomElement firstChildElement(const QString &tagName) const
QgsSymbolV2::OutputUnit mBorderWidthUnit
Qt::PenJoinStyle penJoinStyle() const
static QgsSymbolLayerV2 * createFromSld(QDomElement &element)
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
static const QString EXPR_IGNORE_RINGS
virtual ~QgsGradientFillSymbolLayerV2()
void setColorRamp(QgsVectorColorRampV2 *ramp)
Sets the color ramp used to draw the shapeburst fill.
void setMapToPixel(const QgsMapToPixel &mtp)
QgsSymbolV2::OutputUnit outputUnit() const
static const QString EXPR_COLOR_BORDER
QString ogrFeatureStyle(double mmScaleFactor, double mapUnitScaleFactor) const override
QgsSymbolV2::OutputUnit mDistanceUnit
void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context) override
void setDistanceY(double d)
QgsMarkerSymbolV2 * mMarkerSymbol
void renderPoint(QPointF point, const QgsFeature *f, QgsRenderContext &context, int layer=-1, bool selected=false)
void translate(const QPointF &offset)
bool testFlag(Flag flag) const
Check whether a particular flag is enabled.
static const QString EXPR_REFERENCE1_ISCENTROID
void setDisplacementYMapUnitScale(const QgsMapUnitScale &scale)
const QgsMapToPixel & mapToPixel() const
void setAlpha(const double alpha)
Sets the opacity for the raster image used in the fill.
QgsMapUnitScale mapUnitScale() const override
const QgsFields * fields() const
Fields of the layer.
QgsSymbolV2::OutputUnit outputUnit() const override
void startRender(QgsSymbolV2RenderContext &context) override
~QgsRasterFillSymbolLayer()
QgsGradientFillSymbolLayerV2(const QColor &color=DEFAULT_SIMPLEFILL_COLOR, const QColor &color2=Qt::white, GradientColorType gradientColorType=SimpleTwoColor, GradientType gradientType=Linear, GradientCoordinateMode coordinateMode=Feature, GradientSpread gradientSpread=Pad)
QgsSymbolV2 * subSymbol() override
void setAlphaF(qreal alpha)
static bool rotationFromSldElement(QDomElement &element, QString &rotationFunc)
GradientType gradientType() const
Type of gradient, eg linear or radial.
QColor borderColor() const
double estimateMaxBleed() const override
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
QgsCentroidFillSymbolLayerV2 * clone() const override
Shall be reimplemented by subclasses to create a deep copy of the instance.
double toDouble(bool *ok) const
static QColor decodeColor(const QString &str)
void setDistanceX(double d)
iterator insert(const Key &key, const T &value)
void setMapUnitScale(const QgsMapUnitScale &scale) override
static QPointF polygonCentroid(const QPolygonF &points)
Calculate the centroid point of a QPolygonF.
void setRasterScaleFactor(double factor)
Qt::PenStyle dxfPenStyle() const override
QgsSymbolV2::OutputUnit mDistanceUnit
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
void setColor(const QColor &c) override
The fill color.
void drawPicture(const QPointF &point, const QPicture &picture)
~QgsPointPatternFillSymbolLayer()
static const QString EXPR_SVG_OUTLINE_WIDTH
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
static QgsSymbolLayerV2 * createFromSld(QDomElement &element)
QDomElement createElement(const QString &tagName)
const_iterator constBegin() const
void setOffset(double offset)
void setWidthUnit(const QgsSymbolV2::OutputUnit unit)
Sets the units for the image's width.
void setPatternWidthUnit(QgsSymbolV2::OutputUnit unit)
double width() const
Returns the width used for scaling the image used in the fill.
Draw map such that there are no problems between adjacent tiles.
QgsSymbolV2::OutputUnit mPatternWidthUnit
static QPointF polygonPointOnSurface(const QPolygonF &points)
Calculate a point within of a QPolygonF.
void setOffsetMapUnitScale(const QgsMapUnitScale &scale)
void _renderPolygon(QPainter *p, const QPolygonF &points, const QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context)
Default method to render polygon.
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
void addStopsToGradient(QGradient *gradient, double alpha=1)
Copy color ramp stops to a QGradient.
static const bool selectFillBorder
QColor dxfBrushColor(QgsSymbolV2RenderContext &context) const override
void setColor(const QColor &color) override
The fill color.
bool begin(QPaintDevice *device)
void setReferencePoint2(QPointF referencePoint)
End point of gradient fill, in the range [0,0] - [1,1].
static const QString EXPR_MAX_DISTANCE
void setColor(const QColor &color)
const QgsMapUnitScale & svgOutlineWidthMapUnitScale() const
#define DEFAULT_SIMPLEFILL_JOINSTYLE
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QgsSimpleFillSymbolLayerV2 * clone() const override
Shall be reimplemented by subclasses to create a deep copy of the instance.
void setDisplacementX(double d)
void setSpread(Spread method)
void saveDataDefinedProperties(QgsStringMap &stringMap) const
Saves all data defined properties to a string map.
void setMapUnitScale(const QgsMapUnitScale &scale) override
QgsSimpleFillSymbolLayerV2(const QColor &color=DEFAULT_SIMPLEFILL_COLOR, Qt::BrushStyle style=DEFAULT_SIMPLEFILL_STYLE, const QColor &borderColor=DEFAULT_SIMPLEFILL_BORDERCOLOR, Qt::PenStyle borderStyle=DEFAULT_SIMPLEFILL_BORDERSTYLE, double borderWidth=DEFAULT_SIMPLEFILL_BORDERWIDTH, Qt::PenJoinStyle penJoinStyle=DEFAULT_SIMPLEFILL_JOINSTYLE)
static void blurImageInPlace(QImage &image, QRect rect, int radius, bool alphaOnly)
Blurs an image in place, e.g.
void applyDataDefinedSettings(QgsSymbolV2RenderContext &context) override
void setOutputUnit(QgsSymbolV2::OutputUnit u)
QgsSVGFillSymbolLayer * clone() const override
Shall be reimplemented by subclasses to create a deep copy of the instance.
void setAlpha(qreal alpha)
Set alpha transparency 1 for opaque, 0 for invisible.
double displacementY() const
bool hasDataDefinedProperties() const
Returns whether the symbol utilises any data defined properties.
void setMapUnitScale(const QgsMapUnitScale &scale) override
QgsMapUnitScale mapUnitScale() const override
QColor fillColor() const override
Get fill color.
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
void setOffsetUnit(const QgsSymbolV2::OutputUnit unit)
Sets the units for the fill's offset.
void stopRender(QgsSymbolV2RenderContext &context) override
void setDistanceMapUnitScale(const QgsMapUnitScale &scale)
virtual Qt::PenStyle dxfPenStyle() const override
#define DEFAULT_SIMPLEFILL_BORDERWIDTH
virtual void applyDataDefinedSettings(QgsSymbolV2RenderContext &context)
void copyDataDefinedProperties(QgsSymbolLayerV2 *destLayer) const
Copies all data defined properties of this layer to another symbol layer.
void setExpressionContext(const QgsExpressionContext &context)
Sets the expression context.
virtual QgsMarkerSymbolV2 * clone() const override
static void premultiplyColor(QColor &rgb, int alpha)
Converts a QColor into a premultiplied ARGB QColor value using a specified alpha value.
void setOffsetUnit(QgsSymbolV2::OutputUnit unit)
Units for gradient fill offset.
void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context) override
QRectF mSvgViewBox
SVG view box (to keep the aspect ratio.
QImage * mSvgPattern
SVG pattern image.
double maxDistance() const
Returns the maximum distance from the shape's boundary which is shaded.
void setSvgOutlineWidthMapUnitScale(const QgsMapUnitScale &scale)
const T value(const Key &key) const
void stopRender(QgsSymbolV2RenderContext &context) override
double alpha() const
The opacity for the raster image used in the fill.
double mPatternWidth
Width of the pattern (in output units)
static Q_DECL_DEPRECATED void wellKnownMarkerToSld(QDomDocument &doc, QDomElement &element, const QString &name, const QColor &color, const QColor &borderColor=QColor(), double borderWidth=-1, double size=-1)
virtual Q_DECL_DEPRECATED QVariant evaluateDataDefinedProperty(const QString &property, const QgsFeature *feature, const QVariant &defaultVal=QVariant(), bool *ok=nullptr) const
Evaluates the matching data defined property and returns the calculated value.
#define DEFAULT_SIMPLEFILL_COLOR