bool QgsMapRenderer::setExtent( const QgsRectangle& extent ) { //remember the previous extent mLastExtent = mExtent; // Don't allow zooms where the current extent is so small that it // can't be accurately represented using a double (which is what // currentExtent uses). Excluding 0 avoids a divide by zero and an // infinite loop when rendering to a new canvas. Excluding extents // greater than 1 avoids doing unnecessary calculations. // The scheme is to compare the width against the mean x coordinate // (and height against mean y coordinate) and only allow zooms where // the ratio indicates that there is more than about 12 significant // figures (there are about 16 significant figures in a double). if ( extent.width() > 0 && extent.height() > 0 && extent.width() < 1 && extent.height() < 1 ) { // Use abs() on the extent to avoid the case where the extent is // symmetrical about 0. double xMean = ( qAbs( extent.xMinimum() ) + qAbs( extent.xMaximum() ) ) * 0.5; double yMean = ( qAbs( extent.yMinimum() ) + qAbs( extent.yMaximum() ) ) * 0.5; double xRange = extent.width() / xMean; double yRange = extent.height() / yMean; static const double minProportion = 1e-12; if ( xRange < minProportion || yRange < minProportion ) return false; } mExtent = extent; if ( !extent.isEmpty() ) adjustExtentToSize(); emit extentsChanged(); return true; }
void QgsMapRenderer::setOutputSize( QSizeF size, double dpi ) { mSize = size; mScaleCalculator->setDpi( dpi ); adjustExtentToSize(); }
void QgsMapRenderer::setOutputSize( QSize size, int dpi ) { mSize = QSizeF( size.width(), size.height() ); mScaleCalculator->setDpi( dpi ); adjustExtentToSize(); }