Skip to content

Commit e33c194

Browse files
committed
Optimise some coordinate transforms
1 parent 0c7df17 commit e33c194

1 file changed

Lines changed: 36 additions & 13 deletions

File tree

‎src/core/qgscoordinatetransform.cpp‎

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -339,13 +339,17 @@ void QgsCoordinateTransform::transformPolygon( QPolygonF &poly, TransformDirecti
339339
QVector<double> x( nVertices );
340340
QVector<double> y( nVertices );
341341
QVector<double> z( nVertices );
342+
double *destX = x.data();
343+
double *destY = y.data();
344+
double *destZ = z.data();
342345

346+
const QPointF *polyData = poly.constData();
343347
for ( int i = 0; i < nVertices; ++i )
344348
{
345-
const QPointF &pt = poly.at( i );
346-
x[i] = pt.x();
347-
y[i] = pt.y();
348-
z[i] = 0;
349+
*destX++ = polyData->x();
350+
*destY++ = polyData->y();
351+
*destZ++ = 0;
352+
polyData++;
349353
}
350354

351355
try
@@ -359,11 +363,14 @@ void QgsCoordinateTransform::transformPolygon( QPolygonF &poly, TransformDirecti
359363
throw;
360364
}
361365

366+
QPointF *destPoint = poly.data();
367+
const double *srcX = x.constData();
368+
const double *srcY = y.constData();
362369
for ( int i = 0; i < nVertices; ++i )
363370
{
364-
QPointF &pt = poly[i];
365-
pt.rx() = x[i];
366-
pt.ry() = y[i];
371+
destPoint->rx() = *srcX++;
372+
destPoint->ry() = *srcY++;
373+
destPoint++;
367374
}
368375
}
369376

@@ -416,20 +423,36 @@ void QgsCoordinateTransform::transformInPlace(
416423
QVector<double> xd( x.size() );
417424
QVector<double> yd( y.size() );
418425
QVector<double> zd( z.size() );
426+
427+
double *destX = xd.data();
428+
double *destY = yd.data();
429+
double *destZ = zd.data();
430+
431+
const float *srcX = x.constData();
432+
const float *srcY = y.constData();
433+
const float *srcZ = z.constData();
434+
419435
for ( int i = 0; i < vectorSize; ++i )
420436
{
421-
xd[i] = x[i];
422-
yd[i] = y[i];
423-
zd[i] = z[i];
437+
*destX++ = static_cast< double >( *srcX++ );
438+
*destY++ = static_cast< double >( *srcY++ );
439+
*destZ++ = static_cast< double >( *srcZ++ );
424440
}
441+
425442
transformCoords( x.size(), &xd[0], &yd[0], &zd[0], direction );
426443

427444
//copy back
445+
float *destFX = x.data();
446+
float *destFY = y.data();
447+
float *destFZ = z.data();
448+
const double *srcXD = xd.constData();
449+
const double *srcYD = yd.constData();
450+
const double *srcZD = zd.constData();
428451
for ( int i = 0; i < vectorSize; ++i )
429452
{
430-
x[i] = xd[i];
431-
y[i] = yd[i];
432-
z[i] = zd[i];
453+
*destFX++ = static_cast< float >( *srcXD++ );
454+
*destFY++ = static_cast< float >( *srcYD++ );
455+
*destFZ++ = static_cast< float >( *srcZD++ );
433456
}
434457
}
435458
catch ( QgsCsException & )

0 commit comments

Comments
 (0)