Skip to content

Commit

Permalink
Cleanup georeferencer GCP data class by separating data point
Browse files Browse the repository at this point in the history
from class which stores graphical item representing point
  • Loading branch information
nyalldawson authored and github-actions[bot] committed Feb 9, 2022
1 parent 2127c0c commit 4c0bf94
Show file tree
Hide file tree
Showing 9 changed files with 241 additions and 67 deletions.
8 changes: 4 additions & 4 deletions src/app/georeferencer/qgsgcpcanvasitem.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ void QgsGCPCanvasItem::paint( QPainter *p )
if ( mDataPoint )
{
enabled = mDataPoint->isEnabled();
worldCoords = mDataPoint->destinationMapCoords();
worldCoords = mDataPoint->destinationPoint();
id = mDataPoint->id();
}
p->setOpacity( enabled ? 1.0 : 0.3 );
Expand Down Expand Up @@ -163,14 +163,14 @@ void QgsGCPCanvasItem::updatePosition()

if ( mIsGCPSource )
{
setPos( toCanvasCoordinates( mDataPoint->sourceCoords() ) );
setPos( toCanvasCoordinates( mDataPoint->sourcePoint() ) );
}
else
{
const QgsCoordinateTransform pointToCanvasTransform( mDataPoint->destinationCrs(), mMapCanvas->mapSettings().destinationCrs(), QgsProject::instance() );
const QgsCoordinateTransform pointToCanvasTransform( mDataPoint->destinationPointCrs(), mMapCanvas->mapSettings().destinationCrs(), QgsProject::instance() );
try
{
const QgsPointXY canvasMapCoords = pointToCanvasTransform.transform( mDataPoint->destinationMapCoords() );
const QgsPointXY canvasMapCoords = pointToCanvasTransform.transform( mDataPoint->destinationPoint() );
const QPointF canvasCoordinatesInPixels = toCanvasCoordinates( canvasMapCoords );

setPos( canvasCoordinatesInPixels );
Expand Down
10 changes: 5 additions & 5 deletions src/app/georeferencer/qgsgcplist.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -46,23 +46,23 @@ void QgsGCPList::createGCPVectors( QVector<QgsPointXY> &sourceCoordinates, QVect
if ( !pt->isEnabled() )
continue;

sourceCoordinates.push_back( pt->sourceCoords() );
sourceCoordinates.push_back( pt->sourcePoint() );
if ( targetCrs.isValid() )
{
try
{
QgsPointXY transCoords = QgsCoordinateTransform( pt->destinationCrs(), targetCrs,
QgsProject::instance() ).transform( pt->destinationMapCoords() );
QgsPointXY transCoords = QgsCoordinateTransform( pt->destinationPointCrs(), targetCrs,
QgsProject::instance() ).transform( pt->destinationPoint() );
destinationCoordinates.push_back( transCoords );
pt->setTransCoords( transCoords );
}
catch ( const QgsException & )
{
destinationCoordinates.push_back( pt->destinationMapCoords() );
destinationCoordinates.push_back( pt->destinationPoint() );
}
}
else
destinationCoordinates.push_back( pt->destinationMapCoords() );
destinationCoordinates.push_back( pt->destinationPoint() );
}
}

Expand Down
6 changes: 3 additions & 3 deletions src/app/georeferencer/qgsgcplistmodel.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,8 @@ void QgsGCPListModel::updateModel()

setItem( i, j++, si );
setItem( i, j++, new QgsStandardItem( i ) );
setItem( i, j++, new QgsStandardItem( p->sourceCoords().x() ) );
setItem( i, j++, new QgsStandardItem( p->sourceCoords().y() ) );
setItem( i, j++, new QgsStandardItem( p->sourcePoint().x() ) );
setItem( i, j++, new QgsStandardItem( p->sourcePoint().y() ) );
setItem( i, j++, new QgsStandardItem( p->transCoords().x() ) );
setItem( i, j++, new QgsStandardItem( p->transCoords().y() ) );

Expand All @@ -148,7 +148,7 @@ void QgsGCPListModel::updateModel()
if ( mGeorefTransform && bTransformUpdated && mGeorefTransform->parametersInitialized() )
{
QgsPointXY dst;
const QgsPointXY pixel = mGeorefTransform->toSourcePixel( p->sourceCoords() );
const QgsPointXY pixel = mGeorefTransform->toSourcePixel( p->sourcePoint() );
if ( unitType == tr( "pixels" ) )
{
// Transform from world to raster coordinate:
Expand Down
8 changes: 4 additions & 4 deletions src/app/georeferencer/qgsgcplistwidget.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -214,9 +214,9 @@ void QgsGCPListWidget::updateItemCoords( QWidget *editor )
if ( lineEdit )
{
const double value = lineEdit->text().toDouble();
QgsPointXY newMapCoords( dataPoint->destinationMapCoords() );
QgsPointXY newMapCoords( dataPoint->destinationPoint() );

QgsPointXY newSourceCoords( dataPoint->sourceCoords() );
QgsPointXY newSourceCoords( dataPoint->sourcePoint() );
if ( mPrevColumn == 2 ) // srcX
{
newSourceCoords.setX( value );
Expand All @@ -238,8 +238,8 @@ void QgsGCPListWidget::updateItemCoords( QWidget *editor )
return;
}

dataPoint->setSourceCoords( newSourceCoords );
dataPoint->setDestinationMapCoords( newMapCoords );
dataPoint->setSourcePoint( newSourceCoords );
dataPoint->setDestinationPoint( newMapCoords );
}

dataPoint->updateCoords();
Expand Down
72 changes: 47 additions & 25 deletions src/app/georeferencer/qgsgeorefdatapoint.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -21,38 +21,60 @@

#include "qgsgeorefdatapoint.h"

//
// QgsGcpPoint
//

QgsGcpPoint::QgsGcpPoint( const QgsPointXY &sourcePoint, const QgsPointXY &destinationPoint, const QgsCoordinateReferenceSystem &destinationPointCrs, bool enabled )
: mSourcePoint( sourcePoint )
, mDestinationPoint( destinationPoint )
, mDestinationCrs( destinationPointCrs )
, mEnabled( enabled )
{

}

QgsCoordinateReferenceSystem QgsGcpPoint::destinationPointCrs() const
{
return mDestinationCrs;
}

void QgsGcpPoint::setDestinationPointCrs( const QgsCoordinateReferenceSystem &crs )
{
mDestinationCrs = crs;
}


//
// QgsGeorefDataPoint
//

QgsGeorefDataPoint::QgsGeorefDataPoint( QgsMapCanvas *srcCanvas, QgsMapCanvas *dstCanvas,
const QgsPointXY &sourceCoordinates, const QgsPointXY &destinationMapCoords,
const QgsCoordinateReferenceSystem &destinationCrs, bool enable )
const QgsPointXY &sourceCoordinates, const QgsPointXY &destinationPoint,
const QgsCoordinateReferenceSystem &destinationPointCrs, bool enabled )
: mSrcCanvas( srcCanvas )
, mDstCanvas( dstCanvas )
, mSourceCoords( sourceCoordinates )
, mDestinationMapCoords( destinationMapCoords )
, mGcpPoint( sourceCoordinates, destinationPoint, destinationPointCrs, enabled )
, mId( -1 )
, mDestinationCrs( destinationCrs )
, mEnabled( enable )
{
mTransCoords = QgsPointXY( destinationMapCoords );
mTransCoords = QgsPointXY( destinationPoint );
mGCPSourceItem = new QgsGCPCanvasItem( srcCanvas, this, true );
mGCPDestinationItem = new QgsGCPCanvasItem( dstCanvas, this, false );
mGCPSourceItem->setEnabled( enable );
mGCPDestinationItem->setEnabled( enable );
mGCPSourceItem->setEnabled( enabled );
mGCPDestinationItem->setEnabled( enabled );
mGCPSourceItem->show();
mGCPDestinationItem->show();
}

QgsGeorefDataPoint::QgsGeorefDataPoint( const QgsGeorefDataPoint &p )
: QObject( nullptr )
, mGcpPoint( p.mGcpPoint )
{
// we share item representation on canvas between all points
// mGCPSourceItem = new QgsGCPCanvasItem(p.srcCanvas(), p.pixelCoords(), p.mapCoords(), p.isEnabled());
// mGCPDestinationItem = new QgsGCPCanvasItem(p.dstCanvas(), p.pixelCoords(), p.mapCoords(), p.isEnabled());
mSourceCoords = p.sourceCoords();
mDestinationMapCoords = p.destinationMapCoords();
mTransCoords = p.transCoords();
mEnabled = p.isEnabled();
mResidual = p.residual();
mDestinationCrs = p.destinationCrs();
mId = p.id();
}

Expand All @@ -62,16 +84,16 @@ QgsGeorefDataPoint::~QgsGeorefDataPoint()
delete mGCPDestinationItem;
}

void QgsGeorefDataPoint::setSourceCoords( const QgsPointXY &p )
void QgsGeorefDataPoint::setSourcePoint( const QgsPointXY &p )
{
mSourceCoords = p;
mGcpPoint.setSourcePoint( p );
mGCPSourceItem->update();
mGCPDestinationItem->update();
}

void QgsGeorefDataPoint::setDestinationMapCoords( const QgsPointXY &p )
void QgsGeorefDataPoint::setDestinationPoint( const QgsPointXY &p )
{
mDestinationMapCoords = p;
mGcpPoint.setDestinationPoint( p );
if ( mGCPSourceItem )
{
mGCPSourceItem->update();
Expand All @@ -97,12 +119,12 @@ void QgsGeorefDataPoint::setTransCoords( const QgsPointXY &p )

QgsPointXY QgsGeorefDataPoint::transCoords() const
{
return mTransCoords.isEmpty() ? mDestinationMapCoords : mTransCoords;
return mTransCoords.isEmpty() ? mGcpPoint.destinationPoint() : mTransCoords;
}

void QgsGeorefDataPoint::setEnabled( bool enabled )
{
mEnabled = enabled;
mGcpPoint.setEnabled( enabled );
if ( mGCPSourceItem )
{
mGCPSourceItem->update();
Expand Down Expand Up @@ -164,18 +186,18 @@ void QgsGeorefDataPoint::moveTo( QPoint canvasPixels, bool isMapPlugin )
if ( isMapPlugin )
{
const QgsPointXY pnt = mGCPSourceItem->toMapCoordinates( canvasPixels );
mSourceCoords = pnt;
mGcpPoint.setSourcePoint( pnt );
}
else
{
mDestinationMapCoords = mGCPDestinationItem->toMapCoordinates( canvasPixels );
mGcpPoint.setDestinationPoint( mGCPDestinationItem->toMapCoordinates( canvasPixels ) );
if ( mSrcCanvas && mSrcCanvas->mapSettings().destinationCrs().isValid() )
mDestinationCrs = mSrcCanvas->mapSettings().destinationCrs();
mGcpPoint.setDestinationPointCrs( mSrcCanvas->mapSettings().destinationCrs() );
else
mDestinationCrs = mGCPDestinationItem->canvas()->mapSettings().destinationCrs();
mGcpPoint.setDestinationPointCrs( mGCPDestinationItem->canvas()->mapSettings().destinationCrs() );
}
if ( !mDestinationCrs.isValid() )
mDestinationCrs = QgsProject::instance()->crs();
if ( !mGcpPoint.destinationPointCrs().isValid() )
mGcpPoint.setDestinationPointCrs( QgsProject::instance()->crs() );
mGCPSourceItem->update();
mGCPDestinationItem->update();
updateCoords();
Expand Down

0 comments on commit 4c0bf94

Please sign in to comment.