43
43
#include < QDomDocument>
44
44
#include < QDomElement>
45
45
#include < QGraphicsRectItem>
46
+ #include < QGraphicsView>
46
47
#include < QPainter>
47
48
#include < QPrinter>
48
49
#include < QSettings>
@@ -83,13 +84,12 @@ void QgsComposition::init()
83
84
mSnapToGrid = false ;
84
85
mGridVisible = false ;
85
86
mSnapGridResolution = 0 ;
86
- mSnapGridTolerance = 0 ;
87
87
mSnapGridOffsetX = 0 ;
88
88
mSnapGridOffsetY = 0 ;
89
89
mAlignmentSnap = true ;
90
90
mGuidesVisible = true ;
91
91
mSmartGuides = true ;
92
- mAlignmentSnapTolerance = 0 ;
92
+ mSnapTolerance = 0 ;
93
93
mSelectionHandles = 0 ;
94
94
mActiveItemCommand = 0 ;
95
95
mActiveMultiFrameCommand = 0 ;
@@ -170,10 +170,9 @@ void QgsComposition::loadDefaults()
170
170
{
171
171
QSettings settings;
172
172
mSnapGridResolution = settings.value ( " /Composer/defaultSnapGridResolution" , 10.0 ).toDouble ();
173
- mSnapGridTolerance = settings.value ( " /Composer/defaultSnapGridTolerance" , 2 ).toDouble ();
174
173
mSnapGridOffsetX = settings.value ( " /Composer/defaultSnapGridOffsetX" , 0 ).toDouble ();
175
174
mSnapGridOffsetY = settings.value ( " /Composer/defaultSnapGridOffsetY" , 0 ).toDouble ();
176
- mAlignmentSnapTolerance = settings.value ( " /Composer/defaultSnapGuideTolerance " , 2 ).toDouble ();
175
+ mSnapTolerance = settings.value ( " /Composer/defaultSnapTolerancePixels " , 10 ).toInt ();
177
176
}
178
177
179
178
void QgsComposition::updateBounds ()
@@ -640,7 +639,6 @@ bool QgsComposition::writeXML( QDomElement& composerElem, QDomDocument& doc )
640
639
compositionElem.setAttribute ( " gridVisible" , " 0" );
641
640
}
642
641
compositionElem.setAttribute ( " snapGridResolution" , QString::number ( mSnapGridResolution ) );
643
- compositionElem.setAttribute ( " snapGridTolerance" , QString::number ( mSnapGridTolerance ) );
644
642
compositionElem.setAttribute ( " snapGridOffsetX" , QString::number ( mSnapGridOffsetX ) );
645
643
compositionElem.setAttribute ( " snapGridOffsetY" , QString::number ( mSnapGridOffsetY ) );
646
644
@@ -669,7 +667,7 @@ bool QgsComposition::writeXML( QDomElement& composerElem, QDomDocument& doc )
669
667
compositionElem.setAttribute ( " alignmentSnap" , mAlignmentSnap ? 1 : 0 );
670
668
compositionElem.setAttribute ( " guidesVisible" , mGuidesVisible ? 1 : 0 );
671
669
compositionElem.setAttribute ( " smartGuides" , mSmartGuides ? 1 : 0 );
672
- compositionElem.setAttribute ( " alignmentSnapTolerance " , mAlignmentSnapTolerance );
670
+ compositionElem.setAttribute ( " snapTolerancePixels " , mSnapTolerance );
673
671
674
672
// save items except paper items and frame items (they are saved with the corresponding multiframe)
675
673
QList<QGraphicsItem*> itemList = items ();
@@ -733,14 +731,13 @@ bool QgsComposition::readXML( const QDomElement& compositionElem, const QDomDocu
733
731
mGridVisible = compositionElem.attribute ( " gridVisible" , " 0" ).toInt () == 0 ? false : true ;
734
732
735
733
mSnapGridResolution = compositionElem.attribute ( " snapGridResolution" ).toDouble ();
736
- mSnapGridTolerance = compositionElem.attribute ( " snapGridTolerance" , " 2.0" ).toDouble ();
737
734
mSnapGridOffsetX = compositionElem.attribute ( " snapGridOffsetX" ).toDouble ();
738
735
mSnapGridOffsetY = compositionElem.attribute ( " snapGridOffsetY" ).toDouble ();
739
736
740
737
mAlignmentSnap = compositionElem.attribute ( " alignmentSnap" , " 1" ).toInt () == 0 ? false : true ;
741
738
mGuidesVisible = compositionElem.attribute ( " guidesVisible" , " 1" ).toInt () == 0 ? false : true ;
742
739
mSmartGuides = compositionElem.attribute ( " smartGuides" , " 1" ).toInt () == 0 ? false : true ;
743
- mAlignmentSnapTolerance = compositionElem.attribute ( " alignmentSnapTolerance " , " 2.0 " ).toDouble ();
740
+ mSnapTolerance = compositionElem.attribute ( " snapTolerancePixels " , " 10 " ).toInt ();
744
741
745
742
// custom snap lines
746
743
QDomNodeList snapLineNodes = compositionElem.elementsByTagName ( " SnapLine" );
@@ -1733,7 +1730,7 @@ void QgsComposition::refreshZList()
1733
1730
1734
1731
QPointF QgsComposition::snapPointToGrid ( const QPointF& scenePoint ) const
1735
1732
{
1736
- if ( !mSnapToGrid || mSnapGridResolution <= 0 )
1733
+ if ( !mSnapToGrid || mSnapGridResolution <= 0 || ! graphicsView () )
1737
1734
{
1738
1735
return scenePoint;
1739
1736
}
@@ -1750,12 +1747,16 @@ QPointF QgsComposition::snapPointToGrid( const QPointF& scenePoint ) const
1750
1747
double xSnapped = xRatio * mSnapGridResolution + mSnapGridOffsetX ;
1751
1748
double ySnapped = yRatio * mSnapGridResolution + mSnapGridOffsetY + yOffset;
1752
1749
1753
- if ( abs ( xSnapped - scenePoint.x () ) > mSnapGridTolerance )
1750
+ // convert snap tolerance from pixels to mm
1751
+ double viewScaleFactor = graphicsView ()->transform ().m11 ();
1752
+ double alignThreshold = mSnapTolerance / viewScaleFactor;
1753
+
1754
+ if ( fabs ( xSnapped - scenePoint.x () ) > alignThreshold )
1754
1755
{
1755
1756
// snap distance is outside of tolerance
1756
1757
xSnapped = scenePoint.x ();
1757
1758
}
1758
- if ( abs ( ySnapped - scenePoint.y () ) > mSnapGridTolerance )
1759
+ if ( fabs ( ySnapped - scenePoint.y () ) > alignThreshold )
1759
1760
{
1760
1761
// snap distance is outside of tolerance
1761
1762
ySnapped = scenePoint.y ();
@@ -1961,11 +1962,6 @@ void QgsComposition::setSnapGridResolution( double r )
1961
1962
updatePaperItems ();
1962
1963
}
1963
1964
1964
- void QgsComposition::setSnapGridTolerance ( double tolerance )
1965
- {
1966
- mSnapGridTolerance = tolerance;
1967
- }
1968
-
1969
1965
void QgsComposition::setSnapGridOffsetX ( double offset )
1970
1966
{
1971
1967
mSnapGridOffsetX = offset;
@@ -2578,6 +2574,19 @@ QString QgsComposition::encodeStringForXML( const QString& str )
2578
2574
return modifiedStr;
2579
2575
}
2580
2576
2577
+ QGraphicsView *QgsComposition::graphicsView () const
2578
+ {
2579
+ // try to find current view attached to composition
2580
+ QList<QGraphicsView*> viewList = views ();
2581
+ if ( viewList.size () > 0 )
2582
+ {
2583
+ return viewList.at ( 0 );
2584
+ }
2585
+
2586
+ // no view attached to composition
2587
+ return 0 ;
2588
+ }
2589
+
2581
2590
void QgsComposition::computeWorldFileParameters ( double & a, double & b, double & c, double & d, double & e, double & f ) const
2582
2591
{
2583
2592
//
0 commit comments