Skip to content

Commit

Permalink
Cleanup code, fix deleting points
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Feb 14, 2022
1 parent 90c1325 commit 93564e0
Show file tree
Hide file tree
Showing 3 changed files with 53 additions and 40 deletions.
60 changes: 35 additions & 25 deletions src/app/georeferencer/qgsgeorefdatapoint.cpp
Expand Up @@ -164,38 +164,48 @@ void QgsGeorefDataPoint::updateCoords()
}
}

bool QgsGeorefDataPoint::contains( QPoint p, bool isMapPlugin )
bool QgsGeorefDataPoint::contains( QPoint p, QgsGcpPoint::PointType type )
{
if ( isMapPlugin )
switch ( type )
{
const QPointF pnt = mGCPSourceItem->mapFromScene( p );
return mGCPSourceItem->shape().contains( pnt );
}
else
{
const QPointF pnt = mGCPDestinationItem->mapFromScene( p );
return mGCPDestinationItem->shape().contains( pnt );
case QgsGcpPoint::PointType::Source:
{
const QPointF pnt = mGCPSourceItem->mapFromScene( p );
return mGCPSourceItem->shape().contains( pnt );
}

case QgsGcpPoint::PointType::Destination:
{
const QPointF pnt = mGCPDestinationItem->mapFromScene( p );
return mGCPDestinationItem->shape().contains( pnt );
}
}
BUILTIN_UNREACHABLE
}

void QgsGeorefDataPoint::moveTo( QPoint canvasPixels, bool isMapPlugin )
void QgsGeorefDataPoint::moveTo( QPoint canvasPixels, QgsGcpPoint::PointType type )
{
if ( isMapPlugin )
switch ( type )
{
const QgsPointXY pnt = mGCPSourceItem->toMapCoordinates( canvasPixels );
mGcpPoint.setSourcePoint( pnt );
case QgsGcpPoint::PointType::Source:
{
const QgsPointXY pnt = mGCPSourceItem->toMapCoordinates( canvasPixels );
mGcpPoint.setSourcePoint( pnt );
break;
}
case QgsGcpPoint::PointType::Destination:
{
mGcpPoint.setDestinationPoint( mGCPDestinationItem->toMapCoordinates( canvasPixels ) );
if ( mSrcCanvas && mSrcCanvas->mapSettings().destinationCrs().isValid() )
mGcpPoint.setDestinationPointCrs( mSrcCanvas->mapSettings().destinationCrs() );
else
mGcpPoint.setDestinationPointCrs( mGCPDestinationItem->canvas()->mapSettings().destinationCrs() );

if ( !mGcpPoint.destinationPointCrs().isValid() )
mGcpPoint.setDestinationPointCrs( QgsProject::instance()->crs() );
break;
}
}
else
{
mGcpPoint.setDestinationPoint( mGCPDestinationItem->toMapCoordinates( canvasPixels ) );
if ( mSrcCanvas && mSrcCanvas->mapSettings().destinationCrs().isValid() )
mGcpPoint.setDestinationPointCrs( mSrcCanvas->mapSettings().destinationCrs() );
else
mGcpPoint.setDestinationPointCrs( mGCPDestinationItem->canvas()->mapSettings().destinationCrs() );
}
if ( !mGcpPoint.destinationPointCrs().isValid() )
mGcpPoint.setDestinationPointCrs( QgsProject::instance()->crs() );
mGCPSourceItem->update();
mGCPDestinationItem->update();

updateCoords();
}
11 changes: 9 additions & 2 deletions src/app/georeferencer/qgsgeorefdatapoint.h
Expand Up @@ -30,6 +30,13 @@ class APP_EXPORT QgsGcpPoint
{
public:

//! Coordinate point types
enum class PointType
{
Source, //!< Source point
Destination, //!< Destination point
};

/**
* Constructor for QgsGcpPoint.
*
Expand Down Expand Up @@ -215,7 +222,7 @@ class APP_EXPORT QgsGeorefDataPoint : public QObject
int id() const { return mId; }
void setId( int id );

bool contains( QPoint p, bool isMapPlugin );
bool contains( QPoint p, QgsGcpPoint::PointType type );

QgsMapCanvas *srcCanvas() const { return mSrcCanvas; }
QgsMapCanvas *dstCanvas() const { return mDstCanvas; }
Expand All @@ -233,7 +240,7 @@ class APP_EXPORT QgsGeorefDataPoint : public QObject
QgsGcpPoint point() const { return mGcpPoint; }

public slots:
void moveTo( QPoint canvasPixels, bool isMapPlugin );
void moveTo( QPoint canvasPixels, QgsGcpPoint::PointType type );
void updateCoords();

private:
Expand Down
22 changes: 9 additions & 13 deletions src/app/georeferencer/qgsgeorefmainwindow.cpp
Expand Up @@ -531,17 +531,16 @@ void QgsGeoreferencerMainWindow::deleteDataPoint( QPoint coords )
for ( QgsGCPList::iterator it = mPoints.begin(); it != mPoints.end(); ++it )
{
QgsGeorefDataPoint *pt = *it;
if ( /*pt->pixelCoords() == coords ||*/ pt->contains( coords, true ) ) // first operand for removing from GCP table
if ( pt->contains( coords, QgsGcpPoint::PointType::Source ) ) // first operand for removing from GCP table
{
delete *it;
mPoints.erase( it );
mGCPListWidget->updateResiduals();

mGCPListWidget->setGCPList( &mPoints );
mCanvas->refresh();
updateGeorefTransform();
break;
}
}
updateGeorefTransform();
}

void QgsGeoreferencerMainWindow::deleteDataPoint( int theGCPIndex )
Expand All @@ -555,13 +554,12 @@ void QgsGeoreferencerMainWindow::deleteDataPoint( int theGCPIndex )

void QgsGeoreferencerMainWindow::selectPoint( QPoint p )
{
// Get Map Sender
bool isMapPlugin = sender() == mToolMovePoint;
QgsGeorefDataPoint *&mvPoint = isMapPlugin ? mMovingPoint : mMovingPointQgis;
const QgsGcpPoint::PointType pointType = sender() == mToolMovePoint ? QgsGcpPoint::PointType::Source : QgsGcpPoint::PointType::Destination;
QgsGeorefDataPoint *&mvPoint = pointType == QgsGcpPoint::PointType::Source ? mMovingPoint : mMovingPointQgis;

for ( QgsGCPList::const_iterator it = mPoints.constBegin(); it != mPoints.constEnd(); ++it )
{
if ( ( *it )->contains( p, isMapPlugin ) )
if ( ( *it )->contains( p, pointType ) )
{
mvPoint = *it;
break;
Expand All @@ -571,15 +569,13 @@ void QgsGeoreferencerMainWindow::selectPoint( QPoint p )

void QgsGeoreferencerMainWindow::movePoint( QPoint canvasPixels )
{
// Get Map Sender
bool isMapPlugin = sender() == mToolMovePoint;
QgsGeorefDataPoint *mvPoint = isMapPlugin ? mMovingPoint : mMovingPointQgis;
const QgsGcpPoint::PointType pointType = sender() == mToolMovePoint ? QgsGcpPoint::PointType::Source : QgsGcpPoint::PointType::Destination;
QgsGeorefDataPoint *&mvPoint = pointType == QgsGcpPoint::PointType::Source ? mMovingPoint : mMovingPointQgis;

if ( mvPoint )
{
mvPoint->moveTo( canvasPixels, isMapPlugin );
mvPoint->moveTo( canvasPixels, pointType );
}

}

void QgsGeoreferencerMainWindow::releasePoint( QPoint p )
Expand Down

0 comments on commit 93564e0

Please sign in to comment.