mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-11 00:04:27 -04:00
194 lines
7.5 KiB
C++
194 lines
7.5 KiB
C++
/***************************************************************************
|
|
qgslayoutmeasurementconverter.cpp
|
|
---------------------------------
|
|
begin : June 2017
|
|
copyright : (C) 2017 by Nyall Dawson
|
|
email : nyall dot dawson at gmail dot com
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
#include "qgslayoutmeasurementconverter.h"
|
|
|
|
|
|
QgsLayoutMeasurement QgsLayoutMeasurementConverter::convert( const QgsLayoutMeasurement &measurement, const QgsUnitTypes::LayoutUnit targetUnits ) const
|
|
{
|
|
if ( measurement.units() == targetUnits )
|
|
{
|
|
return measurement;
|
|
}
|
|
|
|
switch ( targetUnits )
|
|
{
|
|
case QgsUnitTypes::LayoutMillimeters:
|
|
return QgsLayoutMeasurement( convertToMillimeters( measurement ), QgsUnitTypes::LayoutMillimeters );
|
|
case QgsUnitTypes::LayoutCentimeters:
|
|
return QgsLayoutMeasurement( convertToCentimeters( measurement ), QgsUnitTypes::LayoutCentimeters );
|
|
case QgsUnitTypes::LayoutMeters:
|
|
return QgsLayoutMeasurement( convertToMeters( measurement ), QgsUnitTypes::LayoutMeters );
|
|
case QgsUnitTypes::LayoutInches:
|
|
return QgsLayoutMeasurement( convertToInches( measurement ), QgsUnitTypes::LayoutInches );
|
|
case QgsUnitTypes::LayoutFeet:
|
|
return QgsLayoutMeasurement( convertToFeet( measurement ), QgsUnitTypes::LayoutFeet );
|
|
case QgsUnitTypes::LayoutPoints:
|
|
return QgsLayoutMeasurement( convertToPoints( measurement ), QgsUnitTypes::LayoutPoints );
|
|
case QgsUnitTypes::LayoutPicas:
|
|
return QgsLayoutMeasurement( convertToPicas( measurement ), QgsUnitTypes::LayoutPicas );
|
|
case QgsUnitTypes::LayoutPixels:
|
|
return QgsLayoutMeasurement( convertToPixels( measurement ), QgsUnitTypes::LayoutPixels );
|
|
}
|
|
|
|
//will never be reached, but required to prevent warnings
|
|
return QgsLayoutMeasurement( convertToMillimeters( measurement ), QgsUnitTypes::LayoutMillimeters );
|
|
}
|
|
|
|
QgsLayoutSize QgsLayoutMeasurementConverter::convert( const QgsLayoutSize &size, const QgsUnitTypes::LayoutUnit targetUnits ) const
|
|
{
|
|
if ( size.units() == targetUnits )
|
|
{
|
|
return size;
|
|
}
|
|
|
|
QgsLayoutSize result( size );
|
|
result.setUnits( targetUnits );
|
|
QgsLayoutMeasurement width = QgsLayoutMeasurement( size.width(), size.units() );
|
|
QgsLayoutMeasurement height = QgsLayoutMeasurement( size.height(), size.units() );
|
|
switch ( targetUnits )
|
|
{
|
|
case QgsUnitTypes::LayoutMillimeters:
|
|
result.setSize( convertToMillimeters( width ), convertToMillimeters( height ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutCentimeters:
|
|
result.setSize( convertToCentimeters( width ), convertToCentimeters( height ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutMeters:
|
|
result.setSize( convertToMeters( width ), convertToMeters( height ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutInches:
|
|
result.setSize( convertToInches( width ), convertToInches( height ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutFeet:
|
|
result.setSize( convertToFeet( width ), convertToFeet( height ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutPoints:
|
|
result.setSize( convertToPoints( width ), convertToPoints( height ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutPicas:
|
|
result.setSize( convertToPicas( width ), convertToPicas( height ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutPixels:
|
|
result.setSize( convertToPixels( width ), convertToPixels( height ) );
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
QgsLayoutPoint QgsLayoutMeasurementConverter::convert( const QgsLayoutPoint &point, const QgsUnitTypes::LayoutUnit targetUnits ) const
|
|
{
|
|
if ( point.units() == targetUnits )
|
|
{
|
|
return point;
|
|
}
|
|
|
|
QgsLayoutPoint result( point );
|
|
result.setUnits( targetUnits );
|
|
QgsLayoutMeasurement x = QgsLayoutMeasurement( point.x(), point.units() );
|
|
QgsLayoutMeasurement y = QgsLayoutMeasurement( point.y(), point.units() );
|
|
switch ( targetUnits )
|
|
{
|
|
case QgsUnitTypes::LayoutMillimeters:
|
|
result.setPoint( convertToMillimeters( x ), convertToMillimeters( y ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutCentimeters:
|
|
result.setPoint( convertToCentimeters( x ), convertToCentimeters( y ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutMeters:
|
|
result.setPoint( convertToMeters( x ), convertToMeters( y ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutInches:
|
|
result.setPoint( convertToInches( x ), convertToInches( y ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutFeet:
|
|
result.setPoint( convertToFeet( x ), convertToFeet( y ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutPoints:
|
|
result.setPoint( convertToPoints( x ), convertToPoints( y ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutPicas:
|
|
result.setPoint( convertToPicas( x ), convertToPicas( y ) );
|
|
break;
|
|
case QgsUnitTypes::LayoutPixels:
|
|
result.setPoint( convertToPixels( x ), convertToPixels( y ) );
|
|
break;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
double QgsLayoutMeasurementConverter::convertToMillimeters( const QgsLayoutMeasurement &measurement ) const
|
|
{
|
|
switch ( measurement.units() )
|
|
{
|
|
case QgsUnitTypes::LayoutMillimeters:
|
|
return measurement.length();
|
|
case QgsUnitTypes::LayoutCentimeters:
|
|
return measurement.length() * 10.0;
|
|
case QgsUnitTypes::LayoutMeters:
|
|
return measurement.length() * 1000.0;
|
|
case QgsUnitTypes::LayoutInches:
|
|
return measurement.length() * 25.4;
|
|
case QgsUnitTypes::LayoutFeet:
|
|
return measurement.length() * 304.8;
|
|
case QgsUnitTypes::LayoutPoints:
|
|
return measurement.length() * 0.352777778;
|
|
case QgsUnitTypes::LayoutPicas:
|
|
return measurement.length() * 4.23333333;
|
|
case QgsUnitTypes::LayoutPixels:
|
|
return measurement.length() * 25.4 / mDpi;
|
|
}
|
|
|
|
//will never be reached, but required to prevent warnings
|
|
return measurement.length();
|
|
}
|
|
|
|
double QgsLayoutMeasurementConverter::convertToCentimeters( const QgsLayoutMeasurement &measurement ) const
|
|
{
|
|
return convertToMillimeters( measurement ) / 10.0;
|
|
}
|
|
|
|
double QgsLayoutMeasurementConverter::convertToMeters( const QgsLayoutMeasurement &measurement ) const
|
|
{
|
|
return convertToMillimeters( measurement ) / 1000.0;
|
|
}
|
|
|
|
double QgsLayoutMeasurementConverter::convertToInches( const QgsLayoutMeasurement &measurement ) const
|
|
{
|
|
return convertToMillimeters( measurement ) / 25.4;
|
|
}
|
|
|
|
double QgsLayoutMeasurementConverter::convertToFeet( const QgsLayoutMeasurement &measurement ) const
|
|
{
|
|
return convertToMillimeters( measurement ) / 304.8;
|
|
}
|
|
|
|
double QgsLayoutMeasurementConverter::convertToPoints( const QgsLayoutMeasurement &measurement ) const
|
|
{
|
|
return convertToMillimeters( measurement ) * 2.83464567;
|
|
}
|
|
|
|
double QgsLayoutMeasurementConverter::convertToPicas( const QgsLayoutMeasurement &measurement ) const
|
|
{
|
|
return convertToMillimeters( measurement ) * 0.236220472;
|
|
}
|
|
|
|
double QgsLayoutMeasurementConverter::convertToPixels( const QgsLayoutMeasurement &measurement ) const
|
|
{
|
|
return convertToMillimeters( measurement ) * mDpi / 25.4;
|
|
}
|