30 #include <QSvgRenderer>
31 #include <QDomDocument>
32 #include <QDomElement>
35 Qt::PenJoinStyle penJoinStyle )
36 : mBrushStyle( style )
37 , mBorderColor( borderColor )
38 , mBorderStyle( borderStyle )
39 , mBorderWidth( borderWidth )
41 , mPenJoinStyle( penJoinStyle )
151 if ( props.
contains(
"color_border" ) )
156 else if ( props.
contains(
"outline_color" ) )
160 else if ( props.
contains(
"line_color" ) )
165 if ( props.
contains(
"style_border" ) )
170 else if ( props.
contains(
"outline_style" ) )
174 else if ( props.
contains(
"line_style" ) )
178 if ( props.
contains(
"width_border" ) )
181 borderWidth = props[
"width_border"].toDouble();
183 else if ( props.
contains(
"outline_width" ) )
185 borderWidth = props[
"outline_width"].toDouble();
187 else if ( props.
contains(
"line_width" ) )
189 borderWidth = props[
"line_width"].toDouble();
193 if ( props.
contains(
"joinstyle" ) )
198 if ( props.
contains(
"border_width_unit" ) )
202 else if ( props.
contains(
"outline_width_unit" ) )
206 else if ( props.
contains(
"line_width_unit" ) )
210 if ( props.
contains(
"offset_unit" ) )
213 if ( props.
contains(
"border_width_map_unit_scale" ) )
215 if ( props.
contains(
"offset_map_unit_scale" ) )
237 if ( rasterScaleFactor != 1.0 )
332 if ( !props.
value(
"uom",
"" ).isEmpty() )
364 symbolStyle.
append(
";" );
375 Qt::BrushStyle fillStyle;
397 return penBleed + offsetBleed;
452 : mGradientColorType( colorType )
453 , mGradientRamp( NULL )
454 , mGradientType( gradientType )
455 , mCoordinateMode( coordinateMode )
456 , mGradientSpread( spread )
457 , mReferencePoint1(
QPointF( 0.5, 0 ) )
458 , mReferencePoint1IsCentroid( false )
459 , mReferencePoint2(
QPointF( 0.5, 1 ) )
460 , mReferencePoint2IsCentroid( false )
482 bool refPoint1IsCentroid =
false;
484 bool refPoint2IsCentroid =
false;
491 if ( props.
contains(
"coordinate_mode" ) )
495 if ( props.
contains(
"color_type" ) )
497 if ( props.
contains(
"gradient_color" ) )
502 else if ( props.
contains(
"color" ) )
506 if ( props.
contains(
"gradient_color2" ) )
511 if ( props.
contains(
"reference_point1" ) )
513 if ( props.
contains(
"reference_point1_iscentroid" ) )
514 refPoint1IsCentroid = props[
"reference_point1_iscentroid"].toInt();
515 if ( props.
contains(
"reference_point2" ) )
517 if ( props.
contains(
"reference_point2_iscentroid" ) )
518 refPoint2IsCentroid = props[
"reference_point2_iscentroid"].toInt();
520 angle = props[
"angle"].toDouble();
531 if ( props.
contains(
"offset_unit" ) )
533 if ( props.
contains(
"offset_map_unit_scale" ) )
556 return "GradientFill";
614 else if ( currentType ==
QObject::tr(
"conical" ) )
628 if ( currentCoordMode ==
QObject::tr(
"feature" ) )
632 else if ( currentCoordMode ==
QObject::tr(
"viewport" ) )
650 else if ( currentSpread ==
QObject::tr(
"repeat" ) )
654 else if ( currentSpread ==
QObject::tr(
"reflect" ) )
701 if ( refPoint1IsCentroid || refPoint2IsCentroid )
707 double centroidX = ( centroid.
x() - bbox.
left() ) / bbox.
width();
708 double centroidY = ( centroid.
y() - bbox.
top() ) / bbox.
height();
710 if ( refPoint1IsCentroid )
712 refPoint1X = centroidX;
713 refPoint1Y = centroidY;
715 if ( refPoint2IsCentroid )
717 refPoint2X = centroidX;
718 refPoint2Y = centroidY;
724 spread,
QPointF( refPoint1X, refPoint1Y ),
QPointF( refPoint2X, refPoint2Y ), angle );
727 QPointF QgsGradientFillSymbolLayerV2::rotateReferencePoint(
const QPointF & refPoint,
double angle )
736 QPointF rotatedReferencePoint = refLine.
p2();
738 if ( rotatedReferencePoint.
x() > 1 )
739 rotatedReferencePoint.
setX( 1 );
740 if ( rotatedReferencePoint.
x() < 0 )
741 rotatedReferencePoint.
setX( 0 );
742 if ( rotatedReferencePoint.
y() > 1 )
743 rotatedReferencePoint.
setY( 1 );
744 if ( rotatedReferencePoint.
y() < 0 )
745 rotatedReferencePoint.
setY( 0 );
747 return rotatedReferencePoint;
751 const QColor &color,
const QColor &color2,
const GradientColorType &gradientColorType,
753 const GradientCoordinateMode &coordinateMode,
const GradientSpread &gradientSpread,
754 const QPointF &referencePoint1,
const QPointF &referencePoint2,
const double angle )
763 QPointF rotatedReferencePoint1 = angle != 0 ? rotateReferencePoint( referencePoint1, angle ) : referencePoint1;
764 QPointF rotatedReferencePoint2 = angle != 0 ? rotateReferencePoint( referencePoint2, angle ) : referencePoint2;
768 switch ( gradientType )
771 gradient =
QLinearGradient( rotatedReferencePoint1, rotatedReferencePoint2 );
774 gradient =
QRadialGradient( rotatedReferencePoint1,
QLineF( rotatedReferencePoint1, rotatedReferencePoint2 ).length() );
780 switch ( coordinateMode )
789 switch ( gradientSpread )
792 gradient.
setSpread( QGradient::PadSpread );
795 gradient.
setSpread( QGradient::ReflectSpread );
798 gradient.
setSpread( QGradient::RepeatSpread );
817 brush =
QBrush( gradient );
843 applyDataDefinedSymbology( context, points );
936 int blurRadius,
bool useWholeShape,
double maxDistance ) :
938 mBlurRadius( blurRadius ),
939 mUseWholeShape( useWholeShape ),
940 mMaxDistance( maxDistance ),
942 mColorType( colorType ),
944 mGradientRamp( NULL ),
945 mTwoColorGradientRamp( 0 ),
946 mIgnoreRings( false ),
968 if ( props.
contains(
"color_type" ) )
972 if ( props.
contains(
"shapeburst_color" ) )
977 else if ( props.
contains(
"color" ) )
982 if ( props.
contains(
"shapeburst_color2" ) )
987 else if ( props.
contains(
"gradient_color2" ) )
991 if ( props.
contains(
"blur_radius" ) )
993 blurRadius = props[
"blur_radius"].toInt();
995 if ( props.
contains(
"use_whole_shape" ) )
997 useWholeShape = props[
"use_whole_shape"].toInt();
999 if ( props.
contains(
"max_distance" ) )
1001 maxDistance = props[
"max_distance"].toDouble();
1014 if ( props.
contains(
"offset_unit" ) )
1018 if ( props.
contains(
"distance_unit" ) )
1022 if ( props.
contains(
"offset_map_unit_scale" ) )
1026 if ( props.
contains(
"distance_map_unit_scale" ) )
1030 if ( props.
contains(
"ignore_rings" ) )
1046 return "ShapeburstFill";
1056 double& maxDistance,
bool& ignoreRings )
1126 Q_UNUSED( context );
1162 applyDataDefinedSymbology( context, color1, color2, blurRadius, useWholeShape, maxDistance, ignoreRings );
1165 int outputPixelMaxDist = 0;
1166 if ( !useWholeShape && maxDistance != 0 )
1183 int sideBuffer = 4 + ( blurRadius + 2 ) * 4;
1192 fillImage->
fill( Qt::black );
1195 QImage * alphaImage =
new QImage( fillImage->
width(), fillImage->
height(), QImage::Format_ARGB32_Premultiplied );
1197 alphaImage->
fill( Qt::transparent );
1201 imgPainter.
begin( alphaImage );
1212 imgPainter.
begin( fillImage );
1215 imgPainter.
drawImage( 0, 0, *alphaImage );
1231 double * dtArray = distanceTransform( fillImage );
1245 if ( blurRadius > 0 )
1251 imgPainter.
begin( fillImage );
1253 imgPainter.
drawImage( 0, 0, *alphaImage );
1285 void QgsShapeburstFillSymbolLayerV2::distanceTransform1d(
double *f,
int n,
int *v,
double *z,
double *d )
1291 for (
int q = 1; q <= n - 1; q++ )
1293 double s = (( f[q] + q * q ) - ( f[v[k]] + ( v[k] * v[k] ) ) ) / ( 2 * q - 2 * v[k] );
1297 s = (( f[q] + q * q ) - ( f[v[k]] + ( v[k] * v[k] ) ) ) / ( 2 * q - 2 * v[k] );
1306 for (
int q = 0; q <= n - 1; q++ )
1308 while ( z[k+1] < q )
1310 d[q] = ( q - v[k] ) * ( q - v[k] ) + f[v[k]];
1315 void QgsShapeburstFillSymbolLayerV2::distanceTransform2d(
double * im,
int width,
int height )
1317 int maxDimension = qMax( width, height );
1318 double *f =
new double[ maxDimension ];
1319 int *v =
new int[ maxDimension ];
1320 double *z =
new double[ maxDimension + 1 ];
1321 double *d =
new double[ maxDimension ];
1324 for (
int x = 0; x < width; x++ )
1326 for (
int y = 0; y < height; y++ )
1328 f[y] = im[ x + y * width ];
1330 distanceTransform1d( f, height, v, z, d );
1331 for (
int y = 0; y < height; y++ )
1333 im[ x + y * width ] = d[y];
1338 for (
int y = 0; y < height; y++ )
1340 for (
int x = 0; x < width; x++ )
1342 f[x] = im[ x + y*width ];
1344 distanceTransform1d( f, width, v, z, d );
1345 for (
int x = 0; x < width; x++ )
1347 im[ x + y*width ] = d[x];
1358 double * QgsShapeburstFillSymbolLayerV2::distanceTransform(
QImage *im )
1360 int width = im->
width();
1361 int height = im->
height();
1363 double * dtArray =
new double[width * height];
1368 for (
int heightIndex = 0; heightIndex < height; ++heightIndex )
1371 for (
int widthIndex = 0; widthIndex < width; ++widthIndex )
1373 tmpRgb = scanLine[widthIndex];
1374 if ( qRed( tmpRgb ) == 0 )
1382 dtArray[ idx ] =
INF;
1389 distanceTransform2d( dtArray, width, height );
1394 void QgsShapeburstFillSymbolLayerV2::dtArrayToQImage(
double * array,
QImage *im,
QgsVectorColorRampV2* ramp,
double layerAlpha,
bool useWholeShape,
int maxPixelDistance )
1396 int width = im->
width();
1397 int height = im->
height();
1400 double maxDistanceValue;
1402 if ( useWholeShape )
1405 double dtMaxValue = array[0];
1406 for (
int i = 1; i < ( width * height ); ++i )
1408 if ( array[i] > dtMaxValue )
1410 dtMaxValue = array[i];
1415 maxDistanceValue = sqrt( dtMaxValue );
1420 maxDistanceValue = maxPixelDistance;
1425 double squaredVal = 0;
1428 bool layerHasAlpha = layerAlpha < 1.0;
1430 for (
int heightIndex = 0; heightIndex < height; ++heightIndex )
1432 QRgb* scanLine = ( QRgb* )im->
scanLine( heightIndex );
1433 for (
int widthIndex = 0; widthIndex < width; ++widthIndex )
1436 squaredVal = array[idx];
1439 if ( maxDistanceValue > 0 )
1441 pixVal = squaredVal > 0 ? qMin(( sqrt( squaredVal ) / maxDistanceValue ), 1.0 ) : 0;
1449 pixColor = ramp->
color( pixVal );
1451 int pixAlpha = pixColor.
alpha();
1452 if (( layerHasAlpha ) || ( pixAlpha != 255 ) )
1455 double alpha = pixAlpha * layerAlpha;
1460 scanLine[widthIndex] = pixColor.
rgba();
1551 , mOutlineWidth( 0.0 )
1603 for ( ; ringIt != rings->
constEnd(); ++ringIt )
1663 return subLayerBleed;
1681 Q_UNUSED( context );
1684 return QColor( Qt::black );
1691 return Qt::SolidLine;
1695 return Qt::SolidLine;
1708 mPatternWidth( width ),
1718 setDefaultSvgParams();
1723 mPatternWidth( width ),
1725 mSvgData( svgData ),
1735 setDefaultSvgParams();
1787 setDefaultSvgParams();
1797 if ( properties.
contains(
"width" ) )
1799 width = properties[
"width"].toDouble();
1801 if ( properties.
contains(
"svgFile" ) )
1803 QString svgName = properties[
"svgFile"];
1805 svgFilePath = ( savePath.
isEmpty() ? svgName : savePath );
1807 if ( properties.
contains(
"angle" ) )
1809 angle = properties[
"angle"].toDouble();
1819 if ( properties.
contains(
"data" ) )
1827 if ( properties.
contains(
"svgFillColor" ) )
1832 else if ( properties.
contains(
"color" ) )
1836 if ( properties.
contains(
"svgOutlineColor" ) )
1841 else if ( properties.
contains(
"outline_color" ) )
1845 else if ( properties.
contains(
"line_color" ) )
1849 if ( properties.
contains(
"svgOutlineWidth" ) )
1854 else if ( properties.
contains(
"outline_width" ) )
1858 else if ( properties.
contains(
"line_width" ) )
1864 if ( properties.
contains(
"pattern_width_unit" ) )
1868 if ( properties.
contains(
"pattern_width_map_unit_scale" ) )
1872 if ( properties.
contains(
"svg_outline_width_unit" ) )
1876 if ( properties.
contains(
"svg_outline_width_map_unit_scale" ) )
1880 if ( properties.
contains(
"outline_width_unit" ) )
1884 if ( properties.
contains(
"outline_width_map_unit_scale" ) )
1900 const QColor& svgFillColor,
const QColor& svgOutlineColor,
double svgOutlineWidth,
1913 if ((
int )size < 1.0 || 10000.0 < size )
1920 bool fitsInCache =
true;
1928 double hwRatio = 1.0;
1929 if ( patternPict.
width() > 0 )
1931 hwRatio = ( double )patternPict.
height() / ( double )patternPict.
width();
1933 mSvgPattern =
new QImage((
int )size, (
int )( size * hwRatio ), QImage::Format_ARGB32_Premultiplied );
1937 p.drawPicture(
QPointF( size / 2, size * hwRatio / 2 ), patternPict );
1959 applyPattern(
mBrush,
mSvgFilePath,
mPatternWidth,
mPatternWidthUnit,
mColor,
mSvgOutlineColor,
mSvgOutlineWidth,
mSvgOutlineWidthUnit, context,
mPatternWidthMapUnitScale,
mSvgOutlineWidthMapUnitScale );
2043 if ( !props.
value(
"uom",
"" ).isEmpty() )
2077 double angle = props.
value(
"angle",
"0" ).toDouble( &ok );
2082 else if ( angle +
mAngle != 0 )
2103 Qt::PenStyle penStyle;
2104 double size, borderWidth;
2111 if ( graphicFillElem.
isNull() )
2115 if ( graphicElem.
isNull() )
2121 if ( mimeType !=
"image/svg+xml" )
2131 double d = angleFunc.
toDouble( &ok );
2143 if ( !strokeElem.
isNull() )
2215 void QgsSVGFillSymbolLayer::storeViewBox()
2231 void QgsSVGFillSymbolLayer::setDefaultSvgParams()
2238 bool hasFillParam, hasOutlineParam, hasOutlineWidthParam;
2239 bool hasDefaultFillColor, hasDefaultOutlineColor, hasDefaultOutlineWidth;
2240 QColor defaultFillColor, defaultOutlineColor;
2241 double defaultOutlineWidth;
2243 hasOutlineParam, hasDefaultOutlineColor, defaultOutlineColor,
2244 hasOutlineWidthParam, hasDefaultOutlineWidth, defaultOutlineWidth );
2246 if ( hasDefaultFillColor )
2248 mColor = defaultFillColor;
2250 if ( hasDefaultOutlineColor )
2254 if ( hasDefaultOutlineWidth )
2267 , mLineAngle( 45.0 )
2270 , mFillLineSymbol( 0 )
2290 delete mFillLineSymbol;
2305 delete mFillLineSymbol;
2306 mFillLineSymbol = lineSymbol;
2317 return mFillLineSymbol;
2323 if ( mFillLineSymbol )
2381 if ( properties.
contains(
"lineangle" ) )
2384 lineAngle = properties[
"lineangle"].toDouble();
2386 else if ( properties.
contains(
"angle" ) )
2388 lineAngle = properties[
"angle"].toDouble();
2392 if ( properties.
contains(
"distance" ) )
2394 distance = properties[
"distance"].toDouble();
2398 if ( properties.
contains(
"linewidth" ) )
2401 lineWidth = properties[
"linewidth"].toDouble();
2403 else if ( properties.
contains(
"outline_width" ) )
2405 lineWidth = properties[
"outline_width"].toDouble();
2407 else if ( properties.
contains(
"line_width" ) )
2409 lineWidth = properties[
"line_width"].toDouble();
2413 if ( properties.
contains(
"color" ) )
2417 else if ( properties.
contains(
"outline_color" ) )
2421 else if ( properties.
contains(
"line_color" ) )
2427 if ( properties.
contains(
"offset" ) )
2429 offset = properties[
"offset"].toDouble();
2434 if ( properties.
contains(
"distance_unit" ) )
2438 if ( properties.
contains(
"distance_map_unit_scale" ) )
2442 if ( properties.
contains(
"line_width_unit" ) )
2446 else if ( properties.
contains(
"outline_width_unit" ) )
2450 if ( properties.
contains(
"line_width_map_unit_scale" ) )
2454 if ( properties.
contains(
"offset_unit" ) )
2458 if ( properties.
contains(
"offset_map_unit_scale" ) )
2462 if ( properties.
contains(
"outline_width_unit" ) )
2466 if ( properties.
contains(
"outline_width_map_unit_scale" ) )
2473 return patternLayer;
2478 return "LinePatternFill";
2482 double lineWidth,
const QColor& color )
2484 Q_UNUSED( lineWidth );
2489 if ( !mFillLineSymbol )
2495 if ( !fillLineSymbol )
2507 double outputPixelBleed = 0;
2508 double outputPixelInterval = 0;
2520 outputPixelBleed = qMax( outputPixelBleed, outputPixelLayerBleed );
2523 if ( markerLineLayer )
2532 outputPixelInterval = qMax( outputPixelInterval, outputPixelLayerInterval );
2536 if ( outputPixelInterval > 0 )
2540 double intervalScale = qRound( outputPixelInterval ) / outputPixelInterval;
2541 outputPixelInterval = qRound( outputPixelInterval );
2548 if ( markerLineLayer )
2559 height = outputPixelDist;
2560 width = outputPixelInterval > 0 ? outputPixelInterval : height;
2564 width = outputPixelDist;
2565 height = outputPixelInterval > 0 ? outputPixelInterval : width;
2569 height = outputPixelDist / cos( lineAngle *
M_PI / 180 );
2570 width = outputPixelDist / sin( lineAngle *
M_PI / 180 );
2573 lineAngle = 180 * atan2((
double ) height, (
double ) width ) /
M_PI;
2574 if ( lineAngle < 0 )
2579 height = qAbs( height );
2580 width = qAbs( width );
2582 outputPixelDist = height * cos( lineAngle *
M_PI / 180 );
2586 int offsetHeight = qRound( qAbs( outputPixelOffset / cos( lineAngle *
M_PI / 180 ) ) );
2587 outputPixelOffset = offsetHeight * cos( lineAngle *
M_PI / 180 );
2596 int bufferMulti = qMax( qCeil( outputPixelBleed / width ), qCeil( outputPixelBleed / width ) );
2600 bufferMulti = qMax( bufferMulti, 1 );
2602 int xBuffer = width * bufferMulti;
2603 int yBuffer = height * bufferMulti;
2604 int innerWidth = width;
2605 int innerHeight = height;
2606 width += 2 * xBuffer;
2607 height += 2 * yBuffer;
2609 if ( width > 10000 || height > 10000 )
2614 QImage patternImage( width, height, QImage::Format_ARGB32 );
2615 patternImage.fill( 0 );
2617 QPointF p1, p2, p3, p4, p5, p6;
2621 p2 =
QPointF( width, yBuffer );
2622 p3 =
QPointF( 0, yBuffer + innerHeight );
2623 p4 =
QPointF( width, yBuffer + innerHeight );
2627 p1 =
QPointF( xBuffer, height );
2629 p3 =
QPointF( xBuffer + innerWidth, height );
2630 p4 =
QPointF( xBuffer + innerWidth, 0 );
2632 else if ( lineAngle > 0 && lineAngle < 90 )
2634 dx = outputPixelDist * cos(( 90 - lineAngle ) *
M_PI / 180.0 );
2635 dy = outputPixelDist * sin(( 90 - lineAngle ) *
M_PI / 180.0 );
2638 p3 =
QPointF( -dx, height - dy );
2639 p4 =
QPointF( width - dx, -dy );
2640 p5 =
QPointF( dx, height + dy );
2641 p6 =
QPointF( width + dx, dy );
2643 else if ( lineAngle > 180 && lineAngle < 270 )
2645 dx = outputPixelDist * cos(( 90 - lineAngle ) *
M_PI / 180.0 );
2646 dy = outputPixelDist * sin(( 90 - lineAngle ) *
M_PI / 180.0 );
2649 p3 =
QPointF( width - dx, -dy );
2650 p4 =
QPointF( -dx, height - dy );
2651 p5 =
QPointF( width + dx, dy );
2652 p6 =
QPointF( dx, height + dy );
2654 else if ( lineAngle > 90 && lineAngle < 180 )
2656 dy = outputPixelDist * cos(( 180 - lineAngle ) *
M_PI / 180 );
2657 dx = outputPixelDist * sin(( 180 - lineAngle ) *
M_PI / 180 );
2659 p2 =
QPointF( width, height );
2661 p6 =
QPointF( width + dx, height - dy );
2663 p4 =
QPointF( width - dx, height + dy );
2665 else if ( lineAngle > 270 && lineAngle < 360 )
2667 dy = outputPixelDist * cos(( 180 - lineAngle ) *
M_PI / 180 );
2668 dx = outputPixelDist * sin(( 180 - lineAngle ) *
M_PI / 180 );
2669 p1 =
QPointF( width, height );
2671 p5 =
QPointF( width + dx, height - dy );
2673 p3 =
QPointF( width - dx, height + dy );
2700 p.setRenderHint( QPainter::Antialiasing,
false );
2709 p.drawPolygon( polygon );
2711 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 );
2712 p.drawPolygon( polygon );
2718 p.setRenderHint( QPainter::Antialiasing,
true );
2739 Q_FOREACH (
const QPolygonF& polygon, polygons )
2744 fillLineSymbol->
stopRender( lineRenderContext );
2748 patternImage = patternImage.copy( xBuffer, yBuffer, patternImage.width() - 2 * xBuffer, patternImage.height() - 2 * yBuffer );
2753 QImage transparentImage = patternImage.
copy();
2766 delete fillLineSymbol;
2773 if ( mFillLineSymbol )
2808 if ( mFillLineSymbol )
2819 if ( !props.
value(
"uom",
"" ).isEmpty() )
2837 double lineWidth = mFillLineSymbol ? mFillLineSymbol->
width() : 0.0;
2843 double angle = props.
value(
"angle",
"0" ).toDouble( &ok );
2862 featureStyle.
append(
"Brush(" );
2864 featureStyle.
append(
QString(
",bc:%1" ).arg(
"#00000000" ) );
2865 featureStyle.
append(
",id:\"ogr-brush-2\"" );
2868 featureStyle.
append(
",dx:0mm" );
2870 featureStyle.
append(
")" );
2871 return featureStyle;
2909 applyPattern( context,
mBrush, lineAngle, distance, lineWidth, color );
2919 Qt::PenStyle lineStyle;
2926 if ( graphicFillElem.
isNull() )
2930 if ( graphicElem.
isNull() )
2936 if ( name !=
"horline" )
2944 double d = angleFunc.
toDouble( &ok );
2953 offset = sqrt( pow( vectOffset.
x(), 2 ) + pow( vectOffset.
y(), 2 ) );
2965 if ( !strokeElem.
isNull() )
2984 mDisplacementY( 0 ), mDisplacementYUnit(
QgsSymbolV2::MM )
3042 if ( properties.
contains(
"distance_x" ) )
3044 layer->
setDistanceX( properties[
"distance_x"].toDouble() );
3046 if ( properties.
contains(
"distance_y" ) )
3048 layer->
setDistanceY( properties[
"distance_y"].toDouble() );
3050 if ( properties.
contains(
"displacement_x" ) )
3054 if ( properties.
contains(
"displacement_y" ) )
3059 if ( properties.
contains(
"distance_x_unit" ) )
3063 if ( properties.
contains(
"distance_x_map_unit_scale" ) )
3067 if ( properties.
contains(
"distance_y_unit" ) )
3071 if ( properties.
contains(
"distance_y_map_unit_scale" ) )
3075 if ( properties.
contains(
"displacement_x_unit" ) )
3079 if ( properties.
contains(
"displacement_x_map_unit_scale" ) )
3083 if ( properties.
contains(
"displacement_y_unit" ) )
3087 if ( properties.
contains(
"displacement_y_map_unit_scale" ) )
3091 if ( properties.
contains(
"outline_width_unit" ) )
3095 if ( properties.
contains(
"outline_width_map_unit_scale" ) )
3107 return "PointPatternFill";
3111 double displacementX,
double displacementY )
3118 if ( width > 10000 || height > 10000 )
3125 QImage patternImage( width, height, QImage::Format_ARGB32 );
3126 patternImage.fill( 0 );
3164 QImage transparentImage = patternImage.
copy();
3233 if ( !props.
value(
"uom",
"" ).isEmpty() )
3267 Q_UNUSED( element );
3322 applyPattern( context,
mBrush, distanceX, distanceY, displacementX, displacementY );
3357 if ( properties.
contains(
"point_on_surface" ) )
3365 return "CentroidFill";
3507 , mImageFilePath( imageFilePath )
3531 if ( properties.
contains(
"imageFile" ) )
3533 imagePath = properties[
"imageFile"];
3535 if ( properties.
contains(
"coordinate_mode" ) )
3539 if ( properties.
contains(
"alpha" ) )
3541 alpha = properties[
"alpha"].toDouble();
3543 if ( properties.
contains(
"offset" ) )
3547 if ( properties.
contains(
"angle" ) )
3549 angle = properties[
"angle"].toDouble();
3551 if ( properties.
contains(
"width" ) )
3553 width = properties[
"width"].toDouble();
3561 if ( properties.
contains(
"offset_unit" ) )
3565 if ( properties.
contains(
"offset_map_unit_scale" ) )
3569 if ( properties.
contains(
"width_unit" ) )
3573 if ( properties.
contains(
"width_map_unit_scale" ) )
3591 return "RasterFill";
3631 Q_UNUSED( context );
3699 if ( !hasWidthExpression && !hasAngleExpression && !hasAlphaExpression && !hasFileExpression )
3705 if ( hasAngleExpression )
3713 if ( !hasWidthExpression && !hasAlphaExpression && !hasFileExpression )
3719 if ( hasWidthExpression )
3725 if ( hasAlphaExpression )
3731 if ( hasFileExpression )
3736 applyPattern(
mBrush, file, width, alpha, context );
3741 QImage image( imageFilePath );
3742 if ( image.isNull() )
3746 if ( !image.hasAlphaChannel() )
3748 image = image.convertToFormat( QImage::Format_ARGB32 );
3758 pixelWidth = image.width();
3767 QColor alphaColor( 0, 0, 0 );
3768 alphaColor.setAlphaF( alpha );
3769 p.
fillRect( image.rect(), alphaColor );
3776 image = image.scaledToWidth( pixelWidth, Qt::SmoothTransformation );
virtual QSet< QString > usedAttributes() const
Returns the set of attributes referenced by the layer.
QgsStringMap properties() const override
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
static const QString EXPR_DISPLACEMENT_Y
void setDistance(double d)
void setOutputUnit(QgsSymbolV2::OutputUnit unit) override
Qt::PenStyle style() const
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.
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
FillCoordinateMode mCoordinateMode
QgsSymbolV2::OutputUnit mLineWidthUnit
virtual QString type() const =0
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)
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&.
Qt::BrushStyle style() const
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
void setOutlineWidthMapUnitScale(const QgsMapUnitScale &scale)
QPointF referencePoint2() const
void setMapUnitScale(const QgsMapUnitScale &scale) override
QgsLinePatternFillSymbolLayer()
void setMatrix(const QMatrix &matrix)
bool setSubSymbol(QgsSymbolV2 *symbol) override
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
QgsSymbolLayerV2 * clone() const override
QGis::UnitType mapUnits() const
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
Qt::PenJoinStyle joinStyle() const
const QgsMapUnitScale & intervalMapUnitScale() const
void setOriginalValueVariable(const QVariant &value)
Sets the original value variable value for data defined symbology.
QgsMapUnitScale mapUnitScale() const
QString layerType() const override
QgsMapUnitScale mOutlineWidthMapUnitScale
Qt::BrushStyle dxfBrushStyle() const override
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
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
static void createDisplacementElement(QDomDocument &doc, QDomElement &element, QPointF offset)
double mLineAngle
Vector line angle in degrees (0 = horizontal, counterclockwise)
bool setSubSymbol(QgsSymbolV2 *symbol) override
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
virtual QColor fillColor() const
Get fill color.
QgsMapUnitScale mDistanceYMapUnitScale
void setStyle(Qt::BrushStyle style)
QgsVectorColorRampV2 * mGradientRamp
QString layerType() const override
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
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)
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.
const QColor & color() const
static QgsSvgCache * instance()
static const QString EXPR_REFERENCE1_Y
static QString encodePenStyle(Qt::PenStyle style)
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
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
static QString ogrFeatureStylePen(double width, double mmScaleFactor, double mapUnitsScaleFactor, const QColor &c, Qt::PenJoinStyle joinStyle=Qt::MiterJoin, Qt::PenCapStyle capStyle=Qt::FlatCap, double offset=0.0, const QVector< qreal > *dashPattern=0)
Create ogr feature style string for pen.
void startRender(QgsSymbolV2RenderContext &context) override
static bool fillFromSld(QDomElement &element, Qt::BrushStyle &brushStyle, QColor &color)
void setScaleFactor(double factor)
const QgsFeature * feature() const
Current feature being rendered - may be null.
QString layerType() const override
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.
void startRender(QgsRenderContext &context, const QgsFields *fields=0)
static const QString EXPR_ALPHA
QgsSymbolLayerV2 * clone() const override
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
QgsSymbolLayerV2 * clone() 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
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
QgsSVGFillSymbolLayer(const QString &svgFilePath="", double width=20, double rotation=0.0)
~QgsLinePatternFillSymbolLayer()
virtual QgsSymbolV2 * clone() const override
void setDistanceYMapUnitScale(const QgsMapUnitScale &scale)
Qt::PenStyle mBorderStyle
void setWidthF(qreal width)
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
void renderPolygon(const QPolygonF &points, QList< QPolygonF > *rings, QgsSymbolV2RenderContext &context) override
double mapUnitsPerPixel() const
Return current map units per pixel.
virtual QColor color() const
static QgsSymbolLayerV2 * create(const QgsStringMap &properties=QgsStringMap())
void setDisplacementXUnit(QgsSymbolV2::OutputUnit unit)
void setCoordinateMode(const FillCoordinateMode mode)
Set the coordinate mode for fill.
QgsStringMap properties() const override
virtual bool setSubSymbol(QgsSymbolV2 *symbol) override
QgsMapUnitScale mOffsetMapUnitScale
QString layerType() const override
QgsSymbolV2::OutputUnit mOffsetUnit
void renderPoint(const QPointF &point, const QgsFeature *f, QgsRenderContext &context, int layer=-1, bool selected=false)
void setColor(const QColor &color)
virtual Q_DECL_DEPRECATED void prepareExpressions(const QgsFields *fields, double scale=-1.0)
Prepares all data defined property expressions for evaluation.
void startRender(QgsSymbolV2RenderContext &context) override
QgsMapUnitScale mDisplacementXMapUnitScale
void setBorderWidthUnit(QgsSymbolV2::OutputUnit unit)
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
void setDisplacementXMapUnitScale(const QgsMapUnitScale &scale)
QgsMapUnitScale mOffsetMapUnitScale
QgsSymbolV2::OutputUnit mOffsetUnit
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
double mOutlineWidth
Outline width.
void setDistanceXUnit(QgsSymbolV2::OutputUnit unit)
double mLineWidth
Line width (in mm or map units)
QgsVectorColorRampV2 * mGradientRamp
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
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
QgsSymbolLayerV2 * clone() const override
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
void applyDataDefinedSettings(QgsSymbolV2RenderContext &context) override
virtual ~QgsShapeburstFillSymbolLayerV2()
void setDisplacementY(double d)
double symbologyScaleDenominator() const
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
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()
virtual Q_DECL_DEPRECATED QVariant evaluateDataDefinedProperty(const QString &property, const QgsFeature *feature, const QVariant &defaultVal=QVariant(), bool *ok=0) const
Evaluates the matching data defined property and returns the calculated value.
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
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
void setOffset(const QPointF &offset)
Sets the offset for the fill.
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)
QgsSymbolLayerV2 * clone() const override
QgsMarkerSymbolV2 * mMarkerSymbol
void translate(const QPointF &offset)
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.
static void lineToSld(QDomDocument &doc, QDomElement &element, Qt::PenStyle penStyle, const QColor &color, double width=-1, const Qt::PenJoinStyle *penJoinStyle=0, const Qt::PenCapStyle *penCapStyle=0, const QVector< qreal > *customDashPattern=0, double dashOffset=0.0)
QColor borderColor() const
double estimateMaxBleed() const override
Returns the estimated maximum distance which the layer style will bleed outside the drawn shape...
double toDouble(bool *ok) const
static QColor decodeColor(const QString &str)
void setDistanceX(double d)
iterator insert(const Key &key, const T &value)
QgsSymbolLayerV2 * clone() const override
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
~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)
static bool lineFromSld(QDomElement &element, Qt::PenStyle &penStyle, QColor &color, double &width, Qt::PenJoinStyle *penJoinStyle=0, Qt::PenCapStyle *penCapStyle=0, QVector< qreal > *customDashPattern=0, double *dashOffset=0)
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
static QPointF pointOnLineWithDistance(const QPointF &startPoint, const QPointF &directionPoint, double distance)
Returns a point on the line from startPoint to directionPoint that is a certain distance away from th...
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)
virtual QgsSymbolV2 * clone() const override
const QgsMapUnitScale & svgOutlineWidthMapUnitScale() const
#define DEFAULT_SIMPLEFILL_JOINSTYLE
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
QgsSymbolLayerV2 * clone() const override
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)
void applyDataDefinedSettings(QgsSymbolV2RenderContext &context) override
void setOutputUnit(QgsSymbolV2::OutputUnit u)
QgsSymbolLayerV2 * clone() const override
void setAlpha(qreal alpha)
Set alpha transparency 1 for opaque, 0 for invisible.
static void blurImageInPlace(QImage &image, const QRect &rect, int radius, bool alphaOnly)
Blurs an image in place, e.g.
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.
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)
#define DEFAULT_SIMPLEFILL_COLOR