double QgsTolerance::computeMapUnitPerPixel( QgsMapLayer* layer, const QgsMapSettings& mapSettings ) { if ( ! mapSettings.hasCrsTransformEnabled() ) { // if the on-the-fly projections are not enabled, layer units pre pixel are the same as map units per pixel return mapSettings.mapUnitsPerPixel(); } // the layer is projected. Find out how many pixels are in one map unit - either horizontal and vertical direction // this check might not work correctly in some cases // (on a large area the pixels projected around "0,0" can have different properties from the actual point) QgsPoint p1 = toLayerCoordinates( layer, mapSettings, QPoint( 0, 1 ) ); QgsPoint p2 = toLayerCoordinates( layer, mapSettings, QPoint( 0, 2 ) ); QgsPoint p3 = toLayerCoordinates( layer, mapSettings, QPoint( 1, 0 ) ); QgsPoint p4 = toLayerCoordinates( layer, mapSettings, QPoint( 2, 0 ) ); double x = p1.sqrDist( p2 ); double y = p3.sqrDist( p4 ); if ( x > y ) { return sqrt( x ); } else { return sqrt( y ); } }
void QgsMapRendererJob::drawOldLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext ) { // render all labels for vector layers in the stack, starting at the base QListIterator<QString> li( settings.layers() ); li.toBack(); while ( li.hasPrevious() ) { if ( renderContext.renderingStopped() ) { break; } QString layerId = li.previous(); QgsMapLayer *ml = QgsMapLayerRegistry::instance()->mapLayer( layerId ); if ( !ml || ( ml->type() != QgsMapLayer::VectorLayer ) ) continue; // only make labels if the layer is visible // after scale dep viewing settings are checked if ( ml->hasScaleBasedVisibility() && ( settings.scale() < ml->minimumScale() || settings.scale() > ml->maximumScale() ) ) continue; bool split = false; const QgsCoordinateTransform* ct = 0; QgsRectangle r1 = settings.visibleExtent(), r2; if ( settings.hasCrsTransformEnabled() ) { ct = QgsCoordinateTransformCache::instance()->transform( ml->crs().authid(), settings.destinationCrs().authid() ); split = reprojectToLayerExtent( ct, ml->crs().geographicFlag(), r1, r2 ); } renderContext.setCoordinateTransform( ct ); renderContext.setExtent( r1 ); ml->drawLabels( renderContext ); if ( split ) { renderContext.setExtent( r2 ); ml->drawLabels( renderContext ); } } }
void QgsMapRendererJob::drawOldLabeling( const QgsMapSettings& settings, QgsRenderContext& renderContext ) { // render all labels for vector layers in the stack, starting at the base QListIterator<QString> li( settings.layers() ); li.toBack(); while ( li.hasPrevious() ) { if ( renderContext.renderingStopped() ) { break; } QString layerId = li.previous(); QgsMapLayer *ml = QgsMapLayerRegistry::instance()->mapLayer( layerId ); if ( !ml || ( ml->type() != QgsMapLayer::VectorLayer ) ) continue; // only make labels if the layer is visible // after scale dep viewing settings are checked if ( !ml->isInScaleRange( settings.scale() ) ) continue; const QgsCoordinateTransform* ct = nullptr; QgsRectangle r1 = settings.visibleExtent(), r2; if ( settings.hasCrsTransformEnabled() ) { ct = settings.layerTransform( ml ); if ( ct ) reprojectToLayerExtent( ml, ct, r1, r2 ); } renderContext.setCoordinateTransform( ct ); renderContext.setExtent( r1 ); ml->drawLabels( renderContext ); } }
void QgsMapCanvas::readProject( const QDomDocument & doc ) { QDomNodeList nodes = doc.elementsByTagName( "mapcanvas" ); if ( nodes.count() ) { QDomNode node = nodes.item( 0 ); QgsMapSettings tmpSettings; tmpSettings.readXML( node ); setMapUnits( tmpSettings.mapUnits() ); setCrsTransformEnabled( tmpSettings.hasCrsTransformEnabled() ); setDestinationCrs( tmpSettings.destinationCrs() ); setExtent( tmpSettings.extent() ); setRotation( tmpSettings.rotation() ); mSettings.datumTransformStore() = tmpSettings.datumTransformStore(); clearExtentHistory(); // clear the extent history on project load } else { QgsDebugMsg( "Couldn't read mapcanvas information from project" ); } }