void QgsComposerScaleBar::applyDefaultSize() { if ( mComposerMap ) { setUnits( Meters ); double widthMeter = mapWidth(); int nUnitsPerSegment = widthMeter / 10.0; //default scalebar width equals half the map width setNumUnitsPerSegment( nUnitsPerSegment ); if ( nUnitsPerSegment > 1000 ) { setNumUnitsPerSegment(( int )( numUnitsPerSegment() / 1000.0 + 0.5 ) * 1000 ); setUnitLabeling( tr( "km" ) ); setNumMapUnitsPerScaleBarUnit( 1000 ); } else { setUnitLabeling( tr( "m" ) ); } setNumSegments( 4 ); setNumSegmentsLeft( 2 ); } refreshSegmentMillimeters(); adjustBoxSize(); emit itemChanged(); }
void QgsComposerScaleBar::applyDefaultSize( QgsComposerScaleBar::ScaleBarUnits u ) { if ( mComposerMap ) { setUnits( u ); double upperMagnitudeMultiplier = 1.0; double widthInSelectedUnits = mapWidth(); double initialUnitsPerSegment = widthInSelectedUnits / 10.0; //default scalebar width equals half the map width setNumUnitsPerSegment( initialUnitsPerSegment ); switch ( mUnits ) { case MapUnits: { upperMagnitudeMultiplier = 1.0; setUnitLabeling( tr( "units" ) ); break; } case Meters: { if ( initialUnitsPerSegment > 1000.0 ) { upperMagnitudeMultiplier = 1000.0; setUnitLabeling( tr( "km" ) ); } else { upperMagnitudeMultiplier = 1.0; setUnitLabeling( tr( "m" ) ); } break; } case Feet: { if ( initialUnitsPerSegment > 5419.95 ) { upperMagnitudeMultiplier = 5419.95; setUnitLabeling( tr( "miles" ) ); } else { upperMagnitudeMultiplier = 1.0; setUnitLabeling( tr( "ft" ) ); } break; } case NauticalMiles: { upperMagnitudeMultiplier = 1; setUnitLabeling( tr( "Nm" ) ); break; } } double segmentWidth = initialUnitsPerSegment / upperMagnitudeMultiplier; int segmentMagnitude = floor( log10( segmentWidth ) ); double unitsPerSegment = upperMagnitudeMultiplier * ( qPow( 10.0, segmentMagnitude ) ); double multiplier = floor(( widthInSelectedUnits / ( unitsPerSegment * 10.0 ) ) / 2.5 ) * 2.5; if ( multiplier > 0 ) { unitsPerSegment = unitsPerSegment * multiplier; } setNumUnitsPerSegment( unitsPerSegment ); setNumMapUnitsPerScaleBarUnit( upperMagnitudeMultiplier ); setNumSegments( 4 ); setNumSegmentsLeft( 2 ); } refreshSegmentMillimeters(); adjustBoxSize(); emit itemChanged(); }