Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgslayoutmeasurementconverter.cpp 3 : : --------------------------------- 4 : : begin : June 2017 5 : : copyright : (C) 2017 by Nyall Dawson 6 : : email : nyall dot dawson at gmail dot com 7 : : ***************************************************************************/ 8 : : 9 : : /*************************************************************************** 10 : : * * 11 : : * This program is free software; you can redistribute it and/or modify * 12 : : * it under the terms of the GNU General Public License as published by * 13 : : * the Free Software Foundation; either version 2 of the License, or * 14 : : * (at your option) any later version. * 15 : : * * 16 : : ***************************************************************************/ 17 : : 18 : : #include "qgslayoutmeasurementconverter.h" 19 : : 20 : : 21 : 0 : QgsLayoutMeasurement QgsLayoutMeasurementConverter::convert( const QgsLayoutMeasurement measurement, const QgsUnitTypes::LayoutUnit targetUnits ) const 22 : : { 23 : 0 : if ( measurement.units() == targetUnits ) 24 : : { 25 : 0 : return measurement; 26 : : } 27 : : 28 : 0 : switch ( targetUnits ) 29 : : { 30 : : case QgsUnitTypes::LayoutMillimeters: 31 : 0 : return QgsLayoutMeasurement( convertToMillimeters( measurement ), QgsUnitTypes::LayoutMillimeters ); 32 : : case QgsUnitTypes::LayoutCentimeters: 33 : 0 : return QgsLayoutMeasurement( convertToCentimeters( measurement ), QgsUnitTypes::LayoutCentimeters ); 34 : : case QgsUnitTypes::LayoutMeters: 35 : 0 : return QgsLayoutMeasurement( convertToMeters( measurement ), QgsUnitTypes::LayoutMeters ); 36 : : case QgsUnitTypes::LayoutInches: 37 : 0 : return QgsLayoutMeasurement( convertToInches( measurement ), QgsUnitTypes::LayoutInches ); 38 : : case QgsUnitTypes::LayoutFeet: 39 : 0 : return QgsLayoutMeasurement( convertToFeet( measurement ), QgsUnitTypes::LayoutFeet ); 40 : : case QgsUnitTypes::LayoutPoints: 41 : 0 : return QgsLayoutMeasurement( convertToPoints( measurement ), QgsUnitTypes::LayoutPoints ); 42 : : case QgsUnitTypes::LayoutPicas: 43 : 0 : return QgsLayoutMeasurement( convertToPicas( measurement ), QgsUnitTypes::LayoutPicas ); 44 : : case QgsUnitTypes::LayoutPixels: 45 : 0 : return QgsLayoutMeasurement( convertToPixels( measurement ), QgsUnitTypes::LayoutPixels ); 46 : : } 47 : : 48 : : //will never be reached, but required to prevent warnings 49 : 0 : return QgsLayoutMeasurement( convertToMillimeters( measurement ), QgsUnitTypes::LayoutMillimeters ); 50 : 0 : } 51 : : 52 : 0 : QgsLayoutSize QgsLayoutMeasurementConverter::convert( const QgsLayoutSize &size, const QgsUnitTypes::LayoutUnit targetUnits ) const 53 : : { 54 : 0 : if ( size.units() == targetUnits ) 55 : : { 56 : 0 : return size; 57 : : } 58 : : 59 : 0 : QgsLayoutSize result( size ); 60 : 0 : result.setUnits( targetUnits ); 61 : 0 : QgsLayoutMeasurement width = QgsLayoutMeasurement( size.width(), size.units() ); 62 : 0 : QgsLayoutMeasurement height = QgsLayoutMeasurement( size.height(), size.units() ); 63 : 0 : switch ( targetUnits ) 64 : : { 65 : : case QgsUnitTypes::LayoutMillimeters: 66 : 0 : result.setSize( convertToMillimeters( width ), convertToMillimeters( height ) ); 67 : 0 : break; 68 : : case QgsUnitTypes::LayoutCentimeters: 69 : 0 : result.setSize( convertToCentimeters( width ), convertToCentimeters( height ) ); 70 : 0 : break; 71 : : case QgsUnitTypes::LayoutMeters: 72 : 0 : result.setSize( convertToMeters( width ), convertToMeters( height ) ); 73 : 0 : break; 74 : : case QgsUnitTypes::LayoutInches: 75 : 0 : result.setSize( convertToInches( width ), convertToInches( height ) ); 76 : 0 : break; 77 : : case QgsUnitTypes::LayoutFeet: 78 : 0 : result.setSize( convertToFeet( width ), convertToFeet( height ) ); 79 : 0 : break; 80 : : case QgsUnitTypes::LayoutPoints: 81 : 0 : result.setSize( convertToPoints( width ), convertToPoints( height ) ); 82 : 0 : break; 83 : : case QgsUnitTypes::LayoutPicas: 84 : 0 : result.setSize( convertToPicas( width ), convertToPicas( height ) ); 85 : 0 : break; 86 : : case QgsUnitTypes::LayoutPixels: 87 : 0 : result.setSize( convertToPixels( width ), convertToPixels( height ) ); 88 : 0 : break; 89 : : } 90 : 0 : return result; 91 : 0 : } 92 : : 93 : 0 : QgsLayoutPoint QgsLayoutMeasurementConverter::convert( const QgsLayoutPoint &point, const QgsUnitTypes::LayoutUnit targetUnits ) const 94 : : { 95 : 0 : if ( point.units() == targetUnits ) 96 : : { 97 : 0 : return point; 98 : : } 99 : : 100 : 0 : QgsLayoutPoint result( point ); 101 : 0 : result.setUnits( targetUnits ); 102 : 0 : QgsLayoutMeasurement x = QgsLayoutMeasurement( point.x(), point.units() ); 103 : 0 : QgsLayoutMeasurement y = QgsLayoutMeasurement( point.y(), point.units() ); 104 : 0 : switch ( targetUnits ) 105 : : { 106 : : case QgsUnitTypes::LayoutMillimeters: 107 : 0 : result.setPoint( convertToMillimeters( x ), convertToMillimeters( y ) ); 108 : 0 : break; 109 : : case QgsUnitTypes::LayoutCentimeters: 110 : 0 : result.setPoint( convertToCentimeters( x ), convertToCentimeters( y ) ); 111 : 0 : break; 112 : : case QgsUnitTypes::LayoutMeters: 113 : 0 : result.setPoint( convertToMeters( x ), convertToMeters( y ) ); 114 : 0 : break; 115 : : case QgsUnitTypes::LayoutInches: 116 : 0 : result.setPoint( convertToInches( x ), convertToInches( y ) ); 117 : 0 : break; 118 : : case QgsUnitTypes::LayoutFeet: 119 : 0 : result.setPoint( convertToFeet( x ), convertToFeet( y ) ); 120 : 0 : break; 121 : : case QgsUnitTypes::LayoutPoints: 122 : 0 : result.setPoint( convertToPoints( x ), convertToPoints( y ) ); 123 : 0 : break; 124 : : case QgsUnitTypes::LayoutPicas: 125 : 0 : result.setPoint( convertToPicas( x ), convertToPicas( y ) ); 126 : 0 : break; 127 : : case QgsUnitTypes::LayoutPixels: 128 : 0 : result.setPoint( convertToPixels( x ), convertToPixels( y ) ); 129 : 0 : break; 130 : : } 131 : 0 : return result; 132 : 0 : } 133 : : 134 : 0 : double QgsLayoutMeasurementConverter::convertToMillimeters( const QgsLayoutMeasurement measurement ) const 135 : : { 136 : 0 : switch ( measurement.units() ) 137 : : { 138 : : case QgsUnitTypes::LayoutMillimeters: 139 : 0 : return measurement.length(); 140 : : case QgsUnitTypes::LayoutCentimeters: 141 : 0 : return measurement.length() * 10.0; 142 : : case QgsUnitTypes::LayoutMeters: 143 : 0 : return measurement.length() * 1000.0; 144 : : case QgsUnitTypes::LayoutInches: 145 : 0 : return measurement.length() * 25.4; 146 : : case QgsUnitTypes::LayoutFeet: 147 : 0 : return measurement.length() * 304.8; 148 : : case QgsUnitTypes::LayoutPoints: 149 : 0 : return measurement.length() * 0.352777778; 150 : : case QgsUnitTypes::LayoutPicas: 151 : 0 : return measurement.length() * 4.23333333; 152 : : case QgsUnitTypes::LayoutPixels: 153 : 0 : return measurement.length() * 25.4 / mDpi; 154 : : } 155 : : 156 : : //will never be reached, but required to prevent warnings 157 : 0 : return measurement.length(); 158 : 0 : } 159 : : 160 : 0 : double QgsLayoutMeasurementConverter::convertToCentimeters( const QgsLayoutMeasurement measurement ) const 161 : : { 162 : 0 : return convertToMillimeters( measurement ) / 10.0; 163 : : } 164 : : 165 : 0 : double QgsLayoutMeasurementConverter::convertToMeters( const QgsLayoutMeasurement measurement ) const 166 : : { 167 : 0 : return convertToMillimeters( measurement ) / 1000.0; 168 : : } 169 : : 170 : 0 : double QgsLayoutMeasurementConverter::convertToInches( const QgsLayoutMeasurement measurement ) const 171 : : { 172 : 0 : return convertToMillimeters( measurement ) / 25.4; 173 : : } 174 : : 175 : 0 : double QgsLayoutMeasurementConverter::convertToFeet( const QgsLayoutMeasurement measurement ) const 176 : : { 177 : 0 : return convertToMillimeters( measurement ) / 304.8; 178 : : } 179 : : 180 : 0 : double QgsLayoutMeasurementConverter::convertToPoints( const QgsLayoutMeasurement measurement ) const 181 : : { 182 : 0 : return convertToMillimeters( measurement ) * 2.83464567; 183 : : } 184 : : 185 : 0 : double QgsLayoutMeasurementConverter::convertToPicas( const QgsLayoutMeasurement measurement ) const 186 : : { 187 : 0 : return convertToMillimeters( measurement ) * 0.236220472; 188 : : } 189 : : 190 : 0 : double QgsLayoutMeasurementConverter::convertToPixels( const QgsLayoutMeasurement measurement ) const 191 : : { 192 : 0 : return convertToMillimeters( measurement ) * mDpi / 25.4; 193 : : }