Skip to content

Commit

Permalink
Merge pull request #46189 from Koyaani/angle-snap-line-displaying
Browse files Browse the repository at this point in the history
[Fix] Minor display issues on the advanced digitizing
  • Loading branch information
lbartoletti committed Dec 13, 2021
2 parents 048003a + 864e022 commit 8150822
Show file tree
Hide file tree
Showing 4 changed files with 28 additions and 15 deletions.
Expand Up @@ -36,6 +36,8 @@ The QgsAdvancedDigitizingCanvasItem class draws the graphical elements of the CA

virtual void paint( QPainter *painter );

virtual void updatePosition();


};

Expand Down
39 changes: 24 additions & 15 deletions src/gui/qgsadvanceddigitizingcanvasitem.cpp
Expand Up @@ -41,14 +41,6 @@ void QgsAdvancedDigitizingCanvasItem::paint( QPainter *painter )
QPolygonF mapPoly = mMapCanvas->mapSettings().visiblePolygon();
const double canvasWidth = QLineF( mapPoly[0], mapPoly[1] ).length();
const double canvasHeight = QLineF( mapPoly[0], mapPoly[3] ).length();
const QgsRectangle mapRect = QgsRectangle( mapPoly[0],
QgsPointXY(
mapPoly[0].x() + canvasWidth,
mapPoly[0].y() - canvasHeight
)
);
if ( rect() != mapRect )
setRect( mapRect );

const int nPoints = mAdvancedDigitizingDockWidget->pointsCount();
if ( !nPoints )
Expand All @@ -69,7 +61,7 @@ void QgsAdvancedDigitizingCanvasItem::paint( QPainter *painter )
return;

const double canvasRotationRad = mMapCanvas->rotation() * M_PI / 180;
const double canvasMaxDimension = std::max( canvasWidth / mupp, canvasHeight / mupp );
const double canvasDiagonalDimension = ( canvasWidth + canvasHeight ) / mupp ;

QPointF curPointPix, prevPointPix, penulPointPix, snapSegmentPix1, snapSegmentPix2;

Expand Down Expand Up @@ -158,8 +150,9 @@ void QgsAdvancedDigitizingCanvasItem::paint( QPainter *painter )
if ( mAdvancedDigitizingDockWidget->constraintAngle()->isLocked() )
{
painter->setPen( mLockedPen );
painter->drawLine( prevPointPix - canvasMaxDimension * QPointF( std::cos( a ), std::sin( a ) ),
prevPointPix + canvasMaxDimension * QPointF( std::cos( a ), std::sin( a ) ) );
const double canvasPadding = QLineF( prevPointPix, curPointPix ).length();
painter->drawLine( prevPointPix + ( canvasPadding - canvasDiagonalDimension ) * QPointF( std::cos( a ), std::sin( a ) ),
prevPointPix + ( canvasPadding + canvasDiagonalDimension ) * QPointF( std::cos( a ), std::sin( a ) ) );
}
}

Expand Down Expand Up @@ -194,8 +187,8 @@ void QgsAdvancedDigitizingCanvasItem::paint( QPainter *painter )
}
if ( draw )
{
painter->drawLine( toCanvasCoordinates( QgsPointXY( x, mapPoly[0].y() ) ) - canvasMaxDimension * QPointF( std::sin( -canvasRotationRad ), std::cos( -canvasRotationRad ) ),
toCanvasCoordinates( QgsPointXY( x, mapPoly[0].y() ) ) + canvasMaxDimension * QPointF( std::sin( -canvasRotationRad ), std::cos( -canvasRotationRad ) ) );
painter->drawLine( toCanvasCoordinates( QgsPointXY( x, mapPoly[0].y() ) ) - canvasDiagonalDimension * QPointF( std::sin( -canvasRotationRad ), std::cos( -canvasRotationRad ) ),
toCanvasCoordinates( QgsPointXY( x, mapPoly[0].y() ) ) + canvasDiagonalDimension * QPointF( std::sin( -canvasRotationRad ), std::cos( -canvasRotationRad ) ) );
}
}

Expand All @@ -222,8 +215,8 @@ void QgsAdvancedDigitizingCanvasItem::paint( QPainter *painter )
}
if ( draw )
{
painter->drawLine( toCanvasCoordinates( QgsPointXY( mapPoly[0].x(), y ) ) - canvasMaxDimension * QPointF( std::cos( -canvasRotationRad ), -std::sin( -canvasRotationRad ) ),
toCanvasCoordinates( QgsPointXY( mapPoly[0].x(), y ) ) + canvasMaxDimension * QPointF( std::cos( -canvasRotationRad ), -std::sin( -canvasRotationRad ) ) );
painter->drawLine( toCanvasCoordinates( QgsPointXY( mapPoly[0].x(), y ) ) - canvasDiagonalDimension * QPointF( std::cos( -canvasRotationRad ), -std::sin( -canvasRotationRad ) ),
toCanvasCoordinates( QgsPointXY( mapPoly[0].x(), y ) ) + canvasDiagonalDimension * QPointF( std::cos( -canvasRotationRad ), -std::sin( -canvasRotationRad ) ) );

}
}
Expand Down Expand Up @@ -253,3 +246,19 @@ void QgsAdvancedDigitizingCanvasItem::paint( QPainter *painter )
curPointPix + QPointF( +5, -5 ) );
}
}

void QgsAdvancedDigitizingCanvasItem::updatePosition()
{
// Use visible polygon rather than extent to properly handle rotated maps
QPolygonF mapPoly = mMapCanvas->mapSettings().visiblePolygon();
const double canvasWidth = QLineF( mapPoly[0], mapPoly[1] ).length();
const double canvasHeight = QLineF( mapPoly[0], mapPoly[3] ).length();
const QgsRectangle mapRect = QgsRectangle( mapPoly[0],
QgsPointXY(
mapPoly[0].x() + canvasWidth,
mapPoly[0].y() - canvasHeight
)
);
if ( rect() != mapRect )
setRect( mapRect );
}
1 change: 1 addition & 0 deletions src/gui/qgsadvanceddigitizingcanvasitem.h
Expand Up @@ -51,6 +51,7 @@ class GUI_EXPORT QgsAdvancedDigitizingCanvasItem : public QgsMapCanvasItem
explicit QgsAdvancedDigitizingCanvasItem( QgsMapCanvas *canvas, QgsAdvancedDigitizingDockWidget *cadDockWidget );

void paint( QPainter *painter ) override;
void updatePosition() override;

private:
QPen mLockedPen;
Expand Down
1 change: 1 addition & 0 deletions src/gui/qgsadvanceddigitizingdockwidget.cpp
Expand Up @@ -837,6 +837,7 @@ void QgsAdvancedDigitizingDockWidget::updateCapacity( bool updateUIwithoutChange

// update capacities
mCapacities = newCapacities;
mCadPaintItem->updatePosition();
}


Expand Down

0 comments on commit 8150822

Please sign in to comment.