|
@@ -64,6 +64,8 @@ QList<QgsSimpleMarkerSymbolLayerBase::Shape> QgsSimpleMarkerSymbolLayerBase::ava |
|
|
<< Diamond |
|
|
<< Pentagon |
|
|
<< Hexagon |
|
|
<< Octagon |
|
|
<< SquareWithCorners |
|
|
<< Triangle |
|
|
<< EquilateralTriangle |
|
|
<< Star |
|
@@ -82,7 +84,9 @@ QList<QgsSimpleMarkerSymbolLayerBase::Shape> QgsSimpleMarkerSymbolLayerBase::ava |
|
|
<< HalfSquare |
|
|
<< DiagonalHalfSquare |
|
|
<< RightHalfTriangle |
|
|
<< LeftHalfTriangle; |
|
|
<< LeftHalfTriangle |
|
|
<< AsteriskFill; |
|
|
|
|
|
return shapes; |
|
|
} |
|
|
|
|
@@ -105,6 +109,8 @@ bool QgsSimpleMarkerSymbolLayerBase::shapeIsFilled( QgsSimpleMarkerSymbolLayerBa |
|
|
case Diamond: |
|
|
case Pentagon: |
|
|
case Hexagon: |
|
|
case Octagon: |
|
|
case SquareWithCorners: |
|
|
case Triangle: |
|
|
case EquilateralTriangle: |
|
|
case Star: |
|
@@ -120,6 +126,7 @@ bool QgsSimpleMarkerSymbolLayerBase::shapeIsFilled( QgsSimpleMarkerSymbolLayerBa |
|
|
case DiagonalHalfSquare: |
|
|
case RightHalfTriangle: |
|
|
case LeftHalfTriangle: |
|
|
case AsteriskFill: |
|
|
return true; |
|
|
|
|
|
case Cross: |
|
@@ -299,12 +306,16 @@ QgsSimpleMarkerSymbolLayerBase::Shape QgsSimpleMarkerSymbolLayerBase::decodeShap |
|
|
|
|
|
if ( cleaned == QLatin1String( "square" ) || cleaned == QLatin1String( "rectangle" ) ) |
|
|
return Square; |
|
|
else if ( cleaned == QLatin1String( "square_with_corners" ) ) |
|
|
return SquareWithCorners; |
|
|
else if ( cleaned == QLatin1String( "diamond" ) ) |
|
|
return Diamond; |
|
|
else if ( cleaned == QLatin1String( "pentagon" ) ) |
|
|
return Pentagon; |
|
|
else if ( cleaned == QLatin1String( "hexagon" ) ) |
|
|
return Hexagon; |
|
|
else if ( cleaned == QLatin1String( "octagon" ) ) |
|
|
return Octagon; |
|
|
else if ( cleaned == QLatin1String( "triangle" ) ) |
|
|
return Triangle; |
|
|
else if ( cleaned == QLatin1String( "equilateral_triangle" ) ) |
|
@@ -343,6 +354,8 @@ QgsSimpleMarkerSymbolLayerBase::Shape QgsSimpleMarkerSymbolLayerBase::decodeShap |
|
|
return RightHalfTriangle; |
|
|
else if ( cleaned == QLatin1String( "left_half_triangle" ) ) |
|
|
return LeftHalfTriangle; |
|
|
else if ( cleaned == QLatin1String( "asterisk_fill" ) ) |
|
|
return AsteriskFill; |
|
|
|
|
|
if ( ok ) |
|
|
*ok = false; |
|
@@ -367,6 +380,10 @@ QString QgsSimpleMarkerSymbolLayerBase::encodeShape( QgsSimpleMarkerSymbolLayerB |
|
|
return QStringLiteral( "pentagon" ); |
|
|
case Hexagon: |
|
|
return QStringLiteral( "hexagon" ); |
|
|
case Octagon: |
|
|
return QStringLiteral( "octagon" ); |
|
|
case SquareWithCorners: |
|
|
return QStringLiteral( "square_with_corners" ); |
|
|
case Triangle: |
|
|
return QStringLiteral( "triangle" ); |
|
|
case EquilateralTriangle: |
|
@@ -399,6 +416,8 @@ QString QgsSimpleMarkerSymbolLayerBase::encodeShape( QgsSimpleMarkerSymbolLayerB |
|
|
return QStringLiteral( "third_circle" ); |
|
|
case QuarterCircle: |
|
|
return QStringLiteral( "quarter_circle" ); |
|
|
case AsteriskFill: |
|
|
return QStringLiteral( "asterisk_fill" ); |
|
|
} |
|
|
return QString(); |
|
|
} |
|
@@ -418,6 +437,22 @@ bool QgsSimpleMarkerSymbolLayerBase::shapeToPolygon( QgsSimpleMarkerSymbolLayerB |
|
|
polygon = QPolygonF( QRectF( QPointF( -1, -1 ), QPointF( 1, 1 ) ) ); |
|
|
return true; |
|
|
|
|
|
case SquareWithCorners: |
|
|
{ |
|
|
static constexpr double VERTEX_OFFSET_FROM_ORIGIN = 0.6072; |
|
|
|
|
|
polygon << QPointF( - VERTEX_OFFSET_FROM_ORIGIN, 1 ) |
|
|
<< QPointF( VERTEX_OFFSET_FROM_ORIGIN, 1 ) |
|
|
<< QPointF( 1, VERTEX_OFFSET_FROM_ORIGIN ) |
|
|
<< QPointF( 1, -VERTEX_OFFSET_FROM_ORIGIN ) |
|
|
<< QPointF( VERTEX_OFFSET_FROM_ORIGIN, -1 ) |
|
|
<< QPointF( -VERTEX_OFFSET_FROM_ORIGIN, -1 ) |
|
|
<< QPointF( -1, -VERTEX_OFFSET_FROM_ORIGIN ) |
|
|
<< QPointF( -1, VERTEX_OFFSET_FROM_ORIGIN ) |
|
|
<< QPointF( -VERTEX_OFFSET_FROM_ORIGIN, 1 ); |
|
|
return true; |
|
|
} |
|
|
|
|
|
case QuarterSquare: |
|
|
polygon = QPolygonF( QRectF( QPointF( -1, -1 ), QPointF( 0, 0 ) ) ); |
|
|
return true; |
|
@@ -467,6 +502,22 @@ bool QgsSimpleMarkerSymbolLayerBase::shapeToPolygon( QgsSimpleMarkerSymbolLayerB |
|
|
<< QPointF( -0.8660, -0.5 ); |
|
|
return true; |
|
|
|
|
|
case Octagon: |
|
|
{ |
|
|
static constexpr double VERTEX_OFFSET_FROM_ORIGIN = 1.0 / ( 1 + M_SQRT2 ); |
|
|
|
|
|
polygon << QPointF( - VERTEX_OFFSET_FROM_ORIGIN, 1 ) |
|
|
<< QPointF( VERTEX_OFFSET_FROM_ORIGIN, 1 ) |
|
|
<< QPointF( 1, VERTEX_OFFSET_FROM_ORIGIN ) |
|
|
<< QPointF( 1, -VERTEX_OFFSET_FROM_ORIGIN ) |
|
|
<< QPointF( VERTEX_OFFSET_FROM_ORIGIN, -1 ) |
|
|
<< QPointF( -VERTEX_OFFSET_FROM_ORIGIN, -1 ) |
|
|
<< QPointF( -1, -VERTEX_OFFSET_FROM_ORIGIN ) |
|
|
<< QPointF( -1, VERTEX_OFFSET_FROM_ORIGIN ) |
|
|
<< QPointF( -VERTEX_OFFSET_FROM_ORIGIN, 1 ); |
|
|
return true; |
|
|
} |
|
|
|
|
|
case Triangle: |
|
|
polygon << QPointF( -1, 1 ) << QPointF( 1, 1 ) << QPointF( 0, -1 ) << QPointF( -1, 1 ); |
|
|
return true; |
|
@@ -540,6 +591,42 @@ bool QgsSimpleMarkerSymbolLayerBase::shapeToPolygon( QgsSimpleMarkerSymbolLayerB |
|
|
<< QPointF( -1, -0.2 ); |
|
|
return true; |
|
|
|
|
|
case AsteriskFill: |
|
|
{ |
|
|
static constexpr double THICKNESS = 0.3; |
|
|
static constexpr double HALF_THICKNESS = THICKNESS / 2.0; |
|
|
static constexpr double INTERSECTION_POINT = THICKNESS / M_SQRT2; |
|
|
static constexpr double DIAGONAL1 = M_SQRT1_2 - INTERSECTION_POINT * 0.5; |
|
|
static constexpr double DIAGONAL2 = M_SQRT1_2 + INTERSECTION_POINT * 0.5; |
|
|
|
|
|
polygon << QPointF( -HALF_THICKNESS, -1 ) |
|
|
<< QPointF( HALF_THICKNESS, -1 ) |
|
|
<< QPointF( HALF_THICKNESS, -HALF_THICKNESS - INTERSECTION_POINT ) |
|
|
<< QPointF( DIAGONAL1, -DIAGONAL2 ) |
|
|
<< QPointF( DIAGONAL2, -DIAGONAL1 ) |
|
|
<< QPointF( HALF_THICKNESS + INTERSECTION_POINT, -HALF_THICKNESS ) |
|
|
<< QPointF( 1, -HALF_THICKNESS ) |
|
|
<< QPointF( 1, HALF_THICKNESS ) |
|
|
<< QPointF( HALF_THICKNESS + INTERSECTION_POINT, HALF_THICKNESS ) |
|
|
<< QPointF( DIAGONAL2, DIAGONAL1 ) |
|
|
<< QPointF( DIAGONAL1, DIAGONAL2 ) |
|
|
<< QPointF( HALF_THICKNESS, HALF_THICKNESS + INTERSECTION_POINT ) |
|
|
<< QPointF( HALF_THICKNESS, 1 ) |
|
|
<< QPointF( -HALF_THICKNESS, 1 ) |
|
|
<< QPointF( -HALF_THICKNESS, HALF_THICKNESS + INTERSECTION_POINT ) |
|
|
<< QPointF( -DIAGONAL1, DIAGONAL2 ) |
|
|
<< QPointF( -DIAGONAL2, DIAGONAL1 ) |
|
|
<< QPointF( -HALF_THICKNESS - INTERSECTION_POINT, HALF_THICKNESS ) |
|
|
<< QPointF( -1, HALF_THICKNESS ) |
|
|
<< QPointF( -1, -HALF_THICKNESS ) |
|
|
<< QPointF( -HALF_THICKNESS - INTERSECTION_POINT, -HALF_THICKNESS ) |
|
|
<< QPointF( -DIAGONAL2, -DIAGONAL1 ) |
|
|
<< QPointF( -DIAGONAL1, -DIAGONAL2 ) |
|
|
<< QPointF( -HALF_THICKNESS, -HALF_THICKNESS - INTERSECTION_POINT ) |
|
|
<< QPointF( -HALF_THICKNESS, -1 ); |
|
|
return true; |
|
|
} |
|
|
|
|
|
case Circle: |
|
|
case Cross: |
|
|
case Cross2: |
|
@@ -606,12 +693,14 @@ bool QgsSimpleMarkerSymbolLayerBase::prepareMarkerPath( QgsSimpleMarkerSymbolLay |
|
|
return true; |
|
|
|
|
|
case Square: |
|
|
case SquareWithCorners: |
|
|
case QuarterSquare: |
|
|
case HalfSquare: |
|
|
case DiagonalHalfSquare: |
|
|
case Diamond: |
|
|
case Pentagon: |
|
|
case Hexagon: |
|
|
case Octagon: |
|
|
case Triangle: |
|
|
case EquilateralTriangle: |
|
|
case LeftHalfTriangle: |
|
@@ -620,6 +709,7 @@ bool QgsSimpleMarkerSymbolLayerBase::prepareMarkerPath( QgsSimpleMarkerSymbolLay |
|
|
case Arrow: |
|
|
case ArrowHeadFilled: |
|
|
case CrossFill: |
|
|
case AsteriskFill: |
|
|
return false; |
|
|
} |
|
|
return false; |
|
|