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;
464 : mGradientColorType( colorType )
465 , mGradientRamp( nullptr )
466 , mGradientType( gradientType )
467 , mCoordinateMode( coordinateMode )
468 , mGradientSpread( spread )
469 , mReferencePoint1(
QPointF( 0.5, 0 ) )
470 , mReferencePoint1IsCentroid( false )
471 , mReferencePoint2(
QPointF( 0.5, 1 ) )
472 , mReferencePoint2IsCentroid( false )
494 bool refPoint1IsCentroid =
false;
496 bool refPoint2IsCentroid =
false;
502 type = static_cast< GradientType >( props[
"type"].toInt() );
503 if ( props.
contains(
"coordinate_mode" ) )
504 coordinateMode = static_cast< GradientCoordinateMode >( props[
"coordinate_mode"].toInt() );
506 gradientSpread = static_cast< GradientSpread >( props[
"spread"].toInt() );
507 if ( props.
contains(
"color_type" ) )
508 colorType = static_cast< GradientColorType >( props[
"color_type"].toInt() );
509 if ( props.
contains(
"gradient_color" ) )
514 else if ( props.
contains(
"color" ) )
518 if ( props.
contains(
"gradient_color2" ) )
523 if ( props.
contains(
"reference_point1" ) )
525 if ( props.
contains(
"reference_point1_iscentroid" ) )
526 refPoint1IsCentroid = props[
"reference_point1_iscentroid"].toInt();
527 if ( props.
contains(
"reference_point2" ) )
529 if ( props.
contains(
"reference_point2_iscentroid" ) )
530 refPoint2IsCentroid = props[
"reference_point2_iscentroid"].toInt();
532 angle = props[
"angle"].toDouble();
543 if ( props.
contains(
"offset_unit" ) )
545 if ( props.
contains(
"offset_map_unit_scale" ) )
568 return "GradientFill";
626 else if ( currentType ==
QObject::tr(
"conical" ) )
640 if ( currentCoordMode ==
QObject::tr(
"feature" ) )
644 else if ( currentCoordMode ==
QObject::tr(
"viewport" ) )
662 else if ( currentSpread ==
QObject::tr(
"repeat" ) )
666 else if ( currentSpread ==
QObject::tr(
"reflect" ) )
713 if ( refPoint1IsCentroid || refPoint2IsCentroid )
719 double centroidX = ( centroid.
x() - bbox.
left() ) / bbox.
width();
720 double centroidY = ( centroid.
y() - bbox.
top() ) / bbox.
height();
722 if ( refPoint1IsCentroid )
724 refPoint1X = centroidX;
725 refPoint1Y = centroidY;
727 if ( refPoint2IsCentroid )
729 refPoint2X = centroidX;
730 refPoint2Y = centroidY;
736 spread,
QPointF( refPoint1X, refPoint1Y ),
QPointF( refPoint2X, refPoint2Y ), angle );
739 QPointF QgsGradientFillSymbolLayerV2::rotateReferencePoint(
QPointF refPoint,
double angle )
748 QPointF rotatedReferencePoint = refLine.
p2();
750 if ( rotatedReferencePoint.
x() > 1 )
751 rotatedReferencePoint.
setX( 1 );
752 if ( rotatedReferencePoint.
x() < 0 )
753 rotatedReferencePoint.
setX( 0 );
754 if ( rotatedReferencePoint.
y() > 1 )
755 rotatedReferencePoint.
setY( 1 );
756 if ( rotatedReferencePoint.
y() < 0 )
757 rotatedReferencePoint.
setY( 0 );
759 return rotatedReferencePoint;
783 gradient =
QLinearGradient( rotatedReferencePoint1, rotatedReferencePoint2 );
786 gradient =
QRadialGradient( rotatedReferencePoint1,
QLineF( rotatedReferencePoint1, rotatedReferencePoint2 ).length() );
804 gradient.
setSpread( QGradient::PadSpread );
807 gradient.
setSpread( QGradient::ReflectSpread );
810 gradient.
setSpread( QGradient::RepeatSpread );
829 brush =
QBrush( gradient );
855 applyDataDefinedSymbology( context, points );
948 int blurRadius,
bool useWholeShape,
double maxDistance ) :
950 mBlurRadius( blurRadius ),
951 mUseWholeShape( useWholeShape ),
952 mMaxDistance( maxDistance ),
954 mColorType( colorType ),
957 mTwoColorGradientRamp( nullptr ),
958 mIgnoreRings( false ),
980 if ( props.
contains(
"color_type" ) )
984 if ( props.
contains(
"shapeburst_color" ) )
989 else if ( props.
contains(
"color" ) )
994 if ( props.
contains(
"shapeburst_color2" ) )
999 else if ( props.
contains(
"gradient_color2" ) )
1003 if ( props.
contains(
"blur_radius" ) )
1005 blurRadius = props[
"blur_radius"].toInt();
1007 if ( props.
contains(
"use_whole_shape" ) )
1009 useWholeShape = props[
"use_whole_shape"].toInt();
1011 if ( props.
contains(
"max_distance" ) )
1013 maxDistance = props[
"max_distance"].toDouble();
1026 if ( props.
contains(
"offset_unit" ) )
1030 if ( props.
contains(
"distance_unit" ) )
1034 if ( props.
contains(
"offset_map_unit_scale" ) )
1038 if ( props.
contains(
"distance_map_unit_scale" ) )
1042 if ( props.
contains(
"ignore_rings" ) )
1058 return "ShapeburstFill";
1138 Q_UNUSED( context );
1174 applyDataDefinedSymbology( context, color1, color2, blurRadius, useWholeShape, maxDistance, ignoreRings );
1177 int outputPixelMaxDist = 0;
1195 int sideBuffer = 4 + ( blurRadius + 2 ) * 4;
1204 fillImage->
fill( Qt::black );
1207 QImage * alphaImage =
new QImage( fillImage->
width(), fillImage->
height(), QImage::Format_ARGB32_Premultiplied );
1209 alphaImage->
fill( Qt::transparent );
1213 imgPainter.
begin( alphaImage );
1224 imgPainter.
begin( fillImage );
1227 imgPainter.
drawImage( 0, 0, *alphaImage );
1243 double * dtArray = distanceTransform( fillImage );
1257 if ( blurRadius > 0 )
1263 imgPainter.
begin( fillImage );
1265 imgPainter.
drawImage( 0, 0, *alphaImage );
1297 void QgsShapeburstFillSymbolLayerV2::distanceTransform1d(
double *f,
int n,
int *v,
double *z,
double *d )
1303 for (
int q = 1; q <= n - 1; q++ )
1305 double s = (( f[q] + q * q ) - ( f[v[k]] + ( v[k] * v[k] ) ) ) / ( 2 * q - 2 * v[k] );
1309 s = (( f[q] + q * q ) - ( f[v[k]] + ( v[k] * v[k] ) ) ) / ( 2 * q - 2 * v[k] );
1318 for (
int q = 0; q <= n - 1; q++ )
1320 while ( z[k+1] < q )
1322 d[q] = ( q - v[k] ) * ( q - v[k] ) + f[v[k]];
1327 void QgsShapeburstFillSymbolLayerV2::distanceTransform2d(
double * im,
int width,
int height )
1329 int maxDimension = qMax( width, height );
1330 double *f =
new double[ maxDimension ];
1331 int *v =
new int[ maxDimension ];
1332 double *z =
new double[ maxDimension + 1 ];
1333 double *d =
new double[ maxDimension ];
1336 for (
int x = 0; x < width; x++ )
1338 for (
int y = 0; y < height; y++ )
1340 f[y] = im[ x + y * width ];
1342 distanceTransform1d( f, height, v, z, d );
1343 for (
int y = 0; y < height; y++ )
1345 im[ x + y * width ] = d[y];
1350 for (
int y = 0; y < height; y++ )
1352 for (
int x = 0; x < width; x++ )
1354 f[x] = im[ x + y*width ];
1356 distanceTransform1d( f, width, v, z, d );
1357 for (
int x = 0; x < width; x++ )
1359 im[ x + y*width ] = d[x];
1370 double * QgsShapeburstFillSymbolLayerV2::distanceTransform(
QImage *im )
1372 int width = im->
width();
1373 int height = im->
height();
1375 double * dtArray =
new double[width * height];
1380 for (
int heightIndex = 0; heightIndex < height; ++heightIndex )
1382 const QRgb* scanLine =
reinterpret_cast< const QRgb*
>( im->
constScanLine( heightIndex ) );
1383 for (
int widthIndex = 0; widthIndex < width; ++widthIndex )
1385 tmpRgb = scanLine[widthIndex];
1386 if ( qRed( tmpRgb ) == 0 )
1394 dtArray[ idx ] =
INF;
1401 distanceTransform2d( dtArray, width, height );
1408 int width = im->
width();
1409 int height = im->
height();
1412 double maxDistanceValue;
1417 double dtMaxValue = array[0];
1418 for (
int i = 1; i < ( width * height ); ++i )
1420 if ( array[i] > dtMaxValue )
1422 dtMaxValue = array[i];
1427 maxDistanceValue = sqrt( dtMaxValue );
1432 maxDistanceValue = maxPixelDistance;
1437 double squaredVal = 0;
1440 bool layerHasAlpha = layerAlpha < 1.0;
1442 for (
int heightIndex = 0; heightIndex < height; ++heightIndex )
1444 QRgb* scanLine =
reinterpret_cast< QRgb*
>( im->
scanLine( heightIndex ) );
1445 for (
int widthIndex = 0; widthIndex < width; ++widthIndex )
1448 squaredVal = array[idx];
1451 if ( maxDistanceValue > 0 )
1453 pixVal = squaredVal > 0 ? qMin(( sqrt( squaredVal ) / maxDistanceValue ), 1.0 ) : 0;
1461 pixColor = ramp->
color( pixVal );
1463 int pixAlpha = pixColor.
alpha();
1464 if (( layerHasAlpha ) || ( pixAlpha != 255 ) )
1467 double alpha = pixAlpha * layerAlpha;
1472 scanLine[widthIndex] = pixColor.
rgba();
1563 , mOutlineWidth( 0.0 )
1565 , mOutline( nullptr )
1621 for ( ; ringIt != rings->
constEnd(); ++ringIt )
1683 return subLayerBleed;
1701 Q_UNUSED( context );
1704 return QColor( Qt::black );
1711 return Qt::SolidLine;
1715 return Qt::SolidLine;
1736 mPatternWidth( width ),
1746 setDefaultSvgParams();
1763 setDefaultSvgParams();
1815 setDefaultSvgParams();
1825 if ( properties.
contains(
"width" ) )
1827 width = properties[
"width"].toDouble();
1829 if ( properties.
contains(
"svgFile" ) )
1831 QString svgName = properties[
"svgFile"];
1833 svgFilePath = ( savePath.
isEmpty() ? svgName : savePath );
1835 if ( properties.
contains(
"angle" ) )
1837 angle = properties[
"angle"].toDouble();
1847 if ( properties.
contains(
"data" ) )
1855 if ( properties.
contains(
"svgFillColor" ) )
1860 else if ( properties.
contains(
"color" ) )
1864 if ( properties.
contains(
"svgOutlineColor" ) )
1869 else if ( properties.
contains(
"outline_color" ) )
1873 else if ( properties.
contains(
"line_color" ) )
1877 if ( properties.
contains(
"svgOutlineWidth" ) )
1882 else if ( properties.
contains(
"outline_width" ) )
1886 else if ( properties.
contains(
"line_width" ) )
1892 if ( properties.
contains(
"pattern_width_unit" ) )
1896 if ( properties.
contains(
"pattern_width_map_unit_scale" ) )
1900 if ( properties.
contains(
"svg_outline_width_unit" ) )
1904 if ( properties.
contains(
"svg_outline_width_map_unit_scale" ) )
1908 if ( properties.
contains(
"outline_width_unit" ) )
1912 if ( properties.
contains(
"outline_width_map_unit_scale" ) )
1941 if ( static_cast< int >( size ) < 1.0 || 10000.0 < size )
1948 bool fitsInCache =
true;
1956 double hwRatio = 1.0;
1957 if ( patternPict.
width() > 0 )
1959 hwRatio =
static_cast< double >( patternPict.
height() ) / static_cast< double >( patternPict.
width() );
1961 mSvgPattern =
new QImage( static_cast< int >( size ), static_cast< int >( size * hwRatio ), QImage::Format_ARGB32_Premultiplied );
1987 applyPattern(
mBrush,
mSvgFilePath,
mPatternWidth,
mPatternWidthUnit,
mColor,
mSvgOutlineColor,
mSvgOutlineWidth,
mSvgOutlineWidthUnit, context,
mPatternWidthMapUnitScale,
mSvgOutlineWidthMapUnitScale );
2071 if ( !props.
value(
"uom",
"" ).isEmpty() )
2105 double angle = props.
value(
"angle",
"0" ).toDouble( &ok );
2131 Qt::PenStyle penStyle;
2132 double size, borderWidth;
2139 if ( graphicFillElem.
isNull() )
2143 if ( graphicElem.
isNull() )
2149 if ( mimeType !=
"image/svg+xml" )
2159 double d = angleFunc.
toDouble( &ok );
2171 if ( !strokeElem.
isNull() )
2243 void QgsSVGFillSymbolLayer::storeViewBox()
2259 void QgsSVGFillSymbolLayer::setDefaultSvgParams()
2266 bool hasFillParam, hasFillOpacityParam, hasOutlineParam, hasOutlineWidthParam, hasOutlineOpacityParam;
2267 bool hasDefaultFillColor, hasDefaultFillOpacity, hasDefaultOutlineColor, hasDefaultOutlineWidth, hasDefaultOutlineOpacity;
2268 QColor defaultFillColor, defaultOutlineColor;
2269 double defaultOutlineWidth, defaultFillOpacity, defaultOutlineOpacity;
2271 hasFillOpacityParam, hasDefaultFillOpacity, defaultFillOpacity,
2272 hasOutlineParam, hasDefaultOutlineColor, defaultOutlineColor,
2273 hasOutlineWidthParam, hasDefaultOutlineWidth, defaultOutlineWidth,
2274 hasOutlineOpacityParam, hasDefaultOutlineOpacity, defaultOutlineOpacity );
2276 double newFillOpacity = hasFillOpacityParam ?
mColor.
alphaF() : 1.0;
2279 if ( hasDefaultFillColor )
2281 mColor = defaultFillColor;
2284 if ( hasDefaultFillOpacity )
2288 if ( hasDefaultOutlineColor )
2293 if ( hasDefaultOutlineOpacity )
2297 if ( hasDefaultOutlineWidth )
2310 , mLineAngle( 45.0 )
2313 , mFillLineSymbol( nullptr )
2333 return mFillLineSymbol ? mFillLineSymbol->
color() :
mColor;
2338 delete mFillLineSymbol;
2353 delete mFillLineSymbol;
2354 mFillLineSymbol = lineSymbol;
2365 return mFillLineSymbol;
2371 if ( mFillLineSymbol )
2429 if ( properties.
contains(
"lineangle" ) )
2432 lineAngle = properties[
"lineangle"].toDouble();
2434 else if ( properties.
contains(
"angle" ) )
2436 lineAngle = properties[
"angle"].toDouble();
2440 if ( properties.
contains(
"distance" ) )
2442 distance = properties[
"distance"].toDouble();
2446 if ( properties.
contains(
"linewidth" ) )
2449 lineWidth = properties[
"linewidth"].toDouble();
2451 else if ( properties.
contains(
"outline_width" ) )
2453 lineWidth = properties[
"outline_width"].toDouble();
2455 else if ( properties.
contains(
"line_width" ) )
2457 lineWidth = properties[
"line_width"].toDouble();
2461 if ( properties.
contains(
"color" ) )
2465 else if ( properties.
contains(
"outline_color" ) )
2469 else if ( properties.
contains(
"line_color" ) )
2475 if ( properties.
contains(
"offset" ) )
2477 offset = properties[
"offset"].toDouble();
2482 if ( properties.
contains(
"distance_unit" ) )
2486 if ( properties.
contains(
"distance_map_unit_scale" ) )
2490 if ( properties.
contains(
"line_width_unit" ) )
2494 else if ( properties.
contains(
"outline_width_unit" ) )
2498 if ( properties.
contains(
"line_width_map_unit_scale" ) )
2502 if ( properties.
contains(
"offset_unit" ) )
2506 if ( properties.
contains(
"offset_map_unit_scale" ) )
2510 if ( properties.
contains(
"outline_width_unit" ) )
2514 if ( properties.
contains(
"outline_width_map_unit_scale" ) )
2521 return patternLayer;
2526 return "LinePatternFill";
2537 if ( !mFillLineSymbol )
2543 if ( !fillLineSymbol )
2555 double outputPixelBleed = 0;
2556 double outputPixelInterval = 0;
2568 outputPixelBleed = qMax( outputPixelBleed, outputPixelLayerBleed );
2571 if ( markerLineLayer )
2580 outputPixelInterval = qMax( outputPixelInterval, outputPixelLayerInterval );
2584 if ( outputPixelInterval > 0 )
2588 double intervalScale = qRound( outputPixelInterval ) / outputPixelInterval;
2589 outputPixelInterval = qRound( outputPixelInterval );
2596 if ( markerLineLayer )
2607 height = outputPixelDist;
2608 width = outputPixelInterval > 0 ? outputPixelInterval : height;
2612 width = outputPixelDist;
2613 height = outputPixelInterval > 0 ? outputPixelInterval : width;
2621 lineAngle = 180 * atan2( static_cast< double >( height ), static_cast< double >( width ) ) /
M_PI;
2627 height = qAbs( height );
2628 width = qAbs( width );
2634 int offsetHeight = qRound( qAbs( outputPixelOffset / cos(
lineAngle *
M_PI / 180 ) ) );
2635 outputPixelOffset = offsetHeight * cos(
lineAngle *
M_PI / 180 );
2644 int bufferMulti = qMax( qCeil( outputPixelBleed / width ), qCeil( outputPixelBleed / width ) );
2648 bufferMulti = qMax( bufferMulti, 1 );
2650 int xBuffer = width * bufferMulti;
2651 int yBuffer = height * bufferMulti;
2652 int innerWidth = width;
2653 int innerHeight = height;
2654 width += 2 * xBuffer;
2655 height += 2 * yBuffer;
2657 if ( width > 10000 || height > 10000 )
2662 QImage patternImage( width, height, QImage::Format_ARGB32 );
2663 patternImage.
fill( 0 );
2665 QPointF p1, p2, p3, p4, p5, p6;
2669 p2 =
QPointF( width, yBuffer );
2670 p3 =
QPointF( 0, yBuffer + innerHeight );
2671 p4 =
QPointF( width, yBuffer + innerHeight );
2675 p1 =
QPointF( xBuffer, height );
2677 p3 =
QPointF( xBuffer + innerWidth, height );
2678 p4 =
QPointF( xBuffer + innerWidth, 0 );
2682 dx = outputPixelDist * cos(( 90 -
lineAngle ) *
M_PI / 180.0 );
2683 dy = outputPixelDist * sin(( 90 -
lineAngle ) *
M_PI / 180.0 );
2686 p3 =
QPointF( -dx, height - dy );
2687 p4 =
QPointF( width - dx, -dy );
2688 p5 =
QPointF( dx, height + dy );
2689 p6 =
QPointF( width + dx, dy );
2693 dx = outputPixelDist * cos(( 90 -
lineAngle ) *
M_PI / 180.0 );
2694 dy = outputPixelDist * sin(( 90 -
lineAngle ) *
M_PI / 180.0 );
2697 p3 =
QPointF( width - dx, -dy );
2698 p4 =
QPointF( -dx, height - dy );
2699 p5 =
QPointF( width + dx, dy );
2700 p6 =
QPointF( dx, height + dy );
2704 dy = outputPixelDist * cos(( 180 -
lineAngle ) *
M_PI / 180 );
2705 dx = outputPixelDist * sin(( 180 -
lineAngle ) *
M_PI / 180 );
2707 p2 =
QPointF( width, height );
2709 p6 =
QPointF( width + dx, height - dy );
2711 p4 =
QPointF( width - dx, height + dy );
2715 dy = outputPixelDist * cos(( 180 -
lineAngle ) *
M_PI / 180 );
2716 dx = outputPixelDist * sin(( 180 -
lineAngle ) *
M_PI / 180 );
2717 p1 =
QPointF( width, height );
2719 p5 =
QPointF( width + dx, height - dy );
2721 p3 =
QPointF( width - dx, height + dy );
2748 p.setRenderHint( QPainter::Antialiasing,
false );
2757 p.drawPolygon( polygon );
2759 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 );
2760 p.drawPolygon( polygon );
2766 p.setRenderHint( QPainter::Antialiasing,
true );
2788 Q_FOREACH (
const QPolygonF& polygon, polygons )
2793 fillLineSymbol->
stopRender( lineRenderContext );
2797 patternImage = patternImage.
copy( xBuffer, yBuffer, patternImage.
width() - 2 * xBuffer, patternImage.
height() - 2 * yBuffer );
2802 QImage transparentImage = patternImage.
copy();
2815 delete fillLineSymbol;
2822 if ( mFillLineSymbol )
2857 if ( mFillLineSymbol )
2868 if ( !props.
value(
"uom",
"" ).isEmpty() )
2886 double lineWidth = mFillLineSymbol ? mFillLineSymbol->
width() : 0.0;
2892 double angle = props.
value(
"angle",
"0" ).toDouble( &ok );
2911 featureStyle.
append(
"Brush(" );
2913 featureStyle.
append(
QString(
",bc:%1" ).arg(
"#00000000" ) );
2914 featureStyle.
append(
",id:\"ogr-brush-2\"" );
2917 featureStyle.
append(
",dx:0mm" );
2919 featureStyle.
append(
')' );
2920 return featureStyle;
2959 applyPattern( context,
mBrush, lineAngle, distance, lineWidth, color );
2969 Qt::PenStyle lineStyle;
2976 if ( graphicFillElem.
isNull() )
2980 if ( graphicElem.
isNull() )
2986 if ( name !=
"horline" )
2994 double d = angleFunc.
toDouble( &ok );
3003 offset = sqrt( pow( vectOffset.
x(), 2 ) + pow( vectOffset.
y(), 2 ) );
3015 if ( !strokeElem.
isNull() )
3034 mDisplacementY( 0 ), mDisplacementYUnit(
QgsSymbolV2::MM )
3092 if ( properties.
contains(
"distance_x" ) )
3094 layer->
setDistanceX( properties[
"distance_x"].toDouble() );
3096 if ( properties.
contains(
"distance_y" ) )
3098 layer->
setDistanceY( properties[
"distance_y"].toDouble() );
3100 if ( properties.
contains(
"displacement_x" ) )
3104 if ( properties.
contains(
"displacement_y" ) )
3109 if ( properties.
contains(
"distance_x_unit" ) )
3113 if ( properties.
contains(
"distance_x_map_unit_scale" ) )
3117 if ( properties.
contains(
"distance_y_unit" ) )
3121 if ( properties.
contains(
"distance_y_map_unit_scale" ) )
3125 if ( properties.
contains(
"displacement_x_unit" ) )
3129 if ( properties.
contains(
"displacement_x_map_unit_scale" ) )
3133 if ( properties.
contains(
"displacement_y_unit" ) )
3137 if ( properties.
contains(
"displacement_y_map_unit_scale" ) )
3141 if ( properties.
contains(
"outline_width_unit" ) )
3145 if ( properties.
contains(
"outline_width_map_unit_scale" ) )
3157 return "PointPatternFill";
3168 if ( width > 10000 || height > 10000 )
3175 QImage patternImage( width, height, QImage::Format_ARGB32 );
3176 patternImage.
fill( 0 );
3215 QImage transparentImage = patternImage.
copy();
3284 if ( !props.
value(
"uom",
"" ).isEmpty() )
3318 Q_UNUSED( element );
3371 applyPattern( context,
mBrush, distanceX, distanceY, displacementX, displacementY );
3418 if ( properties.
contains(
"point_on_surface" ) )
3426 return "CentroidFill";
3571 , mImageFilePath( imageFilePath )
3595 if ( properties.
contains(
"imageFile" ) )
3597 imagePath = properties[
"imageFile"];
3599 if ( properties.
contains(
"coordinate_mode" ) )
3603 if ( properties.
contains(
"alpha" ) )
3605 alpha = properties[
"alpha"].toDouble();
3607 if ( properties.
contains(
"offset" ) )
3611 if ( properties.
contains(
"angle" ) )
3613 angle = properties[
"angle"].toDouble();
3615 if ( properties.
contains(
"width" ) )
3617 width = properties[
"width"].toDouble();
3625 if ( properties.
contains(
"offset_unit" ) )
3629 if ( properties.
contains(
"offset_map_unit_scale" ) )
3633 if ( properties.
contains(
"width_unit" ) )
3637 if ( properties.
contains(
"width_map_unit_scale" ) )
3655 return "RasterFill";
3695 Q_UNUSED( context );
3763 if ( !hasWidthExpression && !hasAngleExpression && !hasAlphaExpression && !hasFileExpression )
3769 if ( hasAngleExpression )
3777 if ( !hasWidthExpression && !hasAlphaExpression && !hasFileExpression )
3783 if ( hasWidthExpression )
3789 if ( hasAlphaExpression )
3795 if ( hasFileExpression )
3800 applyPattern(
mBrush, file, width, alpha, context );
3805 QImage image( imageFilePath );
3822 pixelWidth = image.
width();
3831 QColor alphaColor( 0, 0, 0 );
3840 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
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)
void setColor(const QColor &c) override
The fill color.
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
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)
double dxfAngle(QgsSymbolV2RenderContext &context) const override
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)
virtual QColor color() const override
The fill color.
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
QColor color() const override
The fill color.
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)
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