@@ -1643,11 +1643,19 @@ void QgsLinePatternFillSymbolLayer::applyPattern( const QgsSymbolV2RenderContext
1643
1643
}
1644
1644
else
1645
1645
{
1646
- height = qAbs ( outputPixelDist / cos ( lineAngle * M_PI / 180 ) ); // keep perpendicular distance between lines constant
1647
- width = qAbs ( height / tan ( lineAngle * M_PI / 180 ) );
1646
+ height = outputPixelDist / cos ( lineAngle * M_PI / 180 ); // keep perpendicular distance between lines constant
1647
+ width = outputPixelDist / sin ( lineAngle * M_PI / 180 );
1648
1648
1649
1649
// recalculate real angle and distance after rounding to pixels
1650
- lineAngle = 180 * qAbs ( atan2 (( double ) height, ( double ) width ) ) / M_PI;
1650
+ lineAngle = 180 * atan2 (( double ) height, ( double ) width ) / M_PI;
1651
+ if ( lineAngle < 0 )
1652
+ {
1653
+ lineAngle += 360 .;
1654
+ }
1655
+
1656
+ height = qAbs ( height );
1657
+ width = qAbs ( width );
1658
+
1651
1659
outputPixelDist = height * cos ( lineAngle * M_PI / 180 );
1652
1660
1653
1661
// Round offset to correspond to one pixel height, otherwise lines may
@@ -1698,27 +1706,49 @@ void QgsLinePatternFillSymbolLayer::applyPattern( const QgsSymbolV2RenderContext
1698
1706
p3 = QPointF ( xBuffer + innerWidth, height );
1699
1707
p4 = QPointF ( xBuffer + innerWidth, 0 );
1700
1708
}
1701
- else if (( lineAngle > 0 && lineAngle < 90 ) || ( lineAngle > 180 && lineAngle < 270 ) )
1709
+ else if ( lineAngle > 0 && lineAngle < 90 )
1702
1710
{
1703
1711
dx = outputPixelDist * cos (( 90 - lineAngle ) * M_PI / 180.0 );
1704
1712
dy = outputPixelDist * sin (( 90 - lineAngle ) * M_PI / 180.0 );
1705
1713
p1 = QPointF ( 0 , height );
1706
1714
p2 = QPointF ( width, 0 );
1707
1715
p3 = QPointF ( -dx, height - dy );
1708
- p4 = QPointF ( width - dx, -dy ); // p4 = QPoint( p3.x() + width, p3.y() - height );
1716
+ p4 = QPointF ( width - dx, -dy );
1709
1717
p5 = QPointF ( dx, height + dy );
1710
- p6 = QPointF ( width + dx, dy ); // p6 = QPoint( p5.x() + width, p5.y() - height );
1718
+ p6 = QPointF ( width + dx, dy );
1719
+ }
1720
+ else if ( lineAngle > 180 && lineAngle < 270 )
1721
+ {
1722
+ dx = outputPixelDist * cos (( 90 - lineAngle ) * M_PI / 180.0 );
1723
+ dy = outputPixelDist * sin (( 90 - lineAngle ) * M_PI / 180.0 );
1724
+ p1 = QPointF ( width, 0 );
1725
+ p2 = QPointF ( 0 , height );
1726
+ p3 = QPointF ( width - dx, -dy );
1727
+ p4 = QPointF ( -dx, height - dy );
1728
+ p5 = QPointF ( width + dx, dy );
1729
+ p6 = QPointF ( dx, height + dy );
1730
+ }
1731
+ else if ( lineAngle > 90 && lineAngle < 180 )
1732
+ {
1733
+ dy = outputPixelDist * cos (( 180 - lineAngle ) * M_PI / 180 );
1734
+ dx = outputPixelDist * sin (( 180 - lineAngle ) * M_PI / 180 );
1735
+ p1 = QPointF ( 0 , 0 );
1736
+ p2 = QPointF ( width, height );
1737
+ p5 = QPointF ( dx, -dy );
1738
+ p6 = QPointF ( width + dx, height - dy );
1739
+ p3 = QPointF ( -dx, dy );
1740
+ p4 = QPointF ( width - dx, height + dy );
1711
1741
}
1712
- else if (( lineAngle < 180 ) || ( lineAngle > 270 && lineAngle < 360 ) )
1742
+ else if ( lineAngle > 270 && lineAngle < 360 )
1713
1743
{
1714
1744
dy = outputPixelDist * cos (( 180 - lineAngle ) * M_PI / 180 );
1715
1745
dx = outputPixelDist * sin (( 180 - lineAngle ) * M_PI / 180 );
1716
1746
p1 = QPointF ( width, height );
1717
1747
p2 = QPointF ( 0 , 0 );
1718
1748
p5 = QPointF ( width + dx, height - dy );
1719
- p6 = QPointF ( p5. x () - width, p5. y () - height ); // p6 = QPoint( dx, -dy );
1749
+ p6 = QPointF ( dx, -dy );
1720
1750
p3 = QPointF ( width - dx, height + dy );
1721
- p4 = QPointF ( p3. x () - width, p3. y () - height ); // p4 = QPoint( -dx, dy );
1751
+ p4 = QPointF ( -dx, dy );
1722
1752
}
1723
1753
1724
1754
if ( !qgsDoubleNear ( mOffset , 0.0 ) ) // shift everything
2 commit comments
nyalldawson commentedon Mar 1, 2014
Should this commit be pushed to the release-2_2 branch also?
blazek commentedon Mar 3, 2014
Yes. Once, after the 2.0, I asked if the branch 2.0 is open for bugfix backports but never got any reply...