11#include < cmath>
22
33#include < QFileDialog>
4+ #include < QFileInfo>
45#include < QMessageBox>
56#include < QTextStream>
67
@@ -132,13 +133,17 @@ QgsPointDialog::QgsPointDialog(QString layerPath, QgisIface* theQgisInterface,
132133 if (pointFile.open (QIODevice::ReadOnly)) {
133134 QTextStream points (&pointFile);
134135 QString tmp;
136+ // read the header
135137 points>>tmp>>tmp>>tmp>>tmp;
138+ // read the first line
139+ double mapX, mapY, pixelX, pixelY;
140+ points>>mapX>>mapY>>pixelX>>pixelY;
136141 while (!points.atEnd ()) {
137- double mapX, mapY, pixelX, pixelY;
138- points>>mapX>>mapY>>pixelX>>pixelY;
139142 QgsPoint mapCoords (mapX, mapY);
140143 QgsPoint pixelCoords (pixelX, pixelY);
141144 addPoint (pixelCoords, mapCoords);
145+ // read the next line
146+ points>>mapX>>mapY>>pixelX>>pixelY;
142147 }
143148 }
144149
@@ -149,7 +154,13 @@ QgsPointDialog::QgsPointDialog(QString layerPath, QgisIface* theQgisInterface,
149154
150155 // set adding points as default tool
151156 addPoint ();
152-
157+
158+ // set the currently supported transforms
159+ cmbTransformType->addItem (tr (" Linear" ));
160+ cmbTransformType->addItem (tr (" Helmert" ));
161+
162+ enableModifiedRasterControls (false );
163+
153164 mCanvas ->refresh ();
154165}
155166
@@ -203,11 +214,14 @@ void QgsPointDialog::on_pbnGenerateAndLoad_clicked()
203214 mLayer = 0 ;
204215
205216 // load raster to the main map canvas of QGIS
206- if (cmbTransformType->currentItem () == 0 )
217+ if (cmbTransformType->currentText () == tr ( " Linear " ) )
207218 mIface ->addRasterLayer (source);
208219 else
209220 mIface ->addRasterLayer (leSelectModifiedRaster->text ());
210221
222+ // This should cause a map refresh, but it doesn't...
223+ mCanvas ->refresh ();
224+
211225 accept ();
212226 }
213227}
@@ -231,6 +245,28 @@ void QgsPointDialog::on_pbnSelectModifiedRaster_clicked()
231245 leSelectWorldFile->setText (guessWorldFileName (filename));
232246}
233247
248+ void QgsPointDialog::on_cmbTransformType_currentIndexChanged (const QString& value)
249+ {
250+ if (value == tr (" Helmert" ))
251+ {
252+ enableModifiedRasterControls (true );
253+ // Make up a modified raster field name based on the layer file name
254+ QString filename (mLayer ->source ());
255+ QFileInfo file (mLayer ->source ());
256+ int pos = filename.size ()-file.suffix ().size ()-1 ;
257+ filename.insert (pos, tr (" -modified" , " Georeferencer:QgsPointDialog.cpp - used to modify a user given filename" ));
258+
259+ leSelectModifiedRaster->setText (filename);
260+ leSelectWorldFile->setText (guessWorldFileName (filename));
261+ }
262+ else
263+ {
264+ // Reset to the default filenames
265+ leSelectModifiedRaster->setText (" " );
266+ enableModifiedRasterControls (false );
267+ leSelectWorldFile->setText (guessWorldFileName (mLayer ->source ()));
268+ }
269+ }
234270
235271bool QgsPointDialog::generateWorldFile ()
236272{
@@ -251,11 +287,11 @@ bool QgsPointDialog::generateWorldFile()
251287 // (might throw std::domain_error)
252288 try
253289 {
254- if (cmbTransformType->currentItem () == 0 )
290+ if (cmbTransformType->currentText () == tr ( " Linear " ) )
255291 {
256292 QgsLeastSquares::linear (mapCoords, pixelCoords, origin, pixelSize);
257293 }
258- else if (cmbTransformType->currentItem () == 1 )
294+ else if (cmbTransformType->currentText () == tr ( " Helmert " ) )
259295 {
260296 int res = QMessageBox::warning (this , tr (" Warning" ),
261297 tr (" <p>A Helmert transform requires modifications in "
@@ -266,16 +302,25 @@ bool QgsPointDialog::generateWorldFile()
266302 QMessageBox::No, QMessageBox::Yes);
267303 if (res == QMessageBox::No)
268304 return false ;
305+
269306 QgsLeastSquares::helmert (mapCoords, pixelCoords, origin, pixelSize, rotation);
270307 }
271- else if (cmbTransformType->currentItem () == 2 )
308+ else if (cmbTransformType->currentText () == tr ( " Affine " ) )
272309 {
273310 QMessageBox::critical (this , tr (" Not implemented!" ),
274311 tr (" <p>An affine transform requires changing the "
275312 " original raster file. This is not yet "
276313 " supported.</p>" ));
277314 return false ;
278315 }
316+ else
317+ {
318+ QMessageBox::critical (this , tr (" Not implemented!" ),
319+ tr (" <p>The " ) +
320+ cmbTransformType->currentText () +
321+ tr (" transform is not yet supported.</p>" ));
322+ return false ;
323+ }
279324 }
280325 catch (std::domain_error& e)
281326 {
@@ -287,6 +332,7 @@ bool QgsPointDialog::generateWorldFile()
287332 double xOffset, yOffset;
288333 if (rotation != 0 )
289334 {
335+
290336 QgsGeorefWarpOptionsDialog d (this );
291337 d.exec ();
292338 bool useZeroForTrans;
@@ -296,7 +342,7 @@ bool QgsPointDialog::generateWorldFile()
296342 warper.warp (mLayer ->source (), leSelectModifiedRaster->text (),
297343 xOffset, yOffset, resampling, useZeroForTrans);
298344 }
299-
345+
300346 // write the world file
301347 QFile file (leSelectWorldFile->text ());
302348 if (!file.open (QIODevice::WriteOnly))
@@ -312,7 +358,6 @@ bool QgsPointDialog::generateWorldFile()
312358 <<-pixelSize<<endl
313359 <<(origin.x () - xOffset * pixelSize)<<endl
314360 <<(origin.y () + yOffset * pixelSize)<<endl;
315-
316361 // write the data points in case we need them later
317362 QFile pointFile (mLayer ->source () + " .points" );
318363 if (pointFile.open (QIODevice::WriteOnly))
@@ -414,7 +459,7 @@ void QgsPointDialog::deleteDataPoint(QgsPoint& coords)
414459
415460void QgsPointDialog::enableRelevantControls ()
416461{
417- if (cmbTransformType->currentItem () == 0 )
462+ if (cmbTransformType->currentText () == tr ( " Linear " ) )
418463 {
419464 leSelectModifiedRaster->setEnabled (false );
420465 pbnSelectModifiedRaster->setEnabled (false );
@@ -425,7 +470,7 @@ void QgsPointDialog::enableRelevantControls()
425470 pbnSelectModifiedRaster->setEnabled (true );
426471 }
427472
428- if ((cmbTransformType->currentItem () == 0 &&
473+ if ((cmbTransformType->currentText () == tr ( " Linear " ) &&
429474 !leSelectWorldFile->text ().isEmpty ()) ||
430475 (!leSelectWorldFile->text ().isEmpty () &&
431476 !leSelectModifiedRaster->text ().isEmpty ()))
@@ -453,3 +498,10 @@ QString QgsPointDialog::guessWorldFileName(const QString& raster)
453498 }
454499 return worldfile;
455500}
501+
502+ void QgsPointDialog::enableModifiedRasterControls (bool state)
503+ {
504+ lblSelectModifiedRaster->setEnabled (state);
505+ pbnSelectModifiedRaster->setEnabled (state);
506+ leSelectModifiedRaster->setEnabled (state);
507+ }
0 commit comments