QGIS API Documentation 3.99.0-Master (21b3aa880ba)
Loading...
Searching...
No Matches
qgs3daxissettings.cpp
Go to the documentation of this file.
1/***************************************************************************
2 qgs3daxissettings.cpp
3 --------------------------------------
4 Date : April 2022
5 copyright : (C) 2021 B. De Mezzo
6 email : benoit dot de dot mezzo at oslandia dot com
7 ***************************************************************************
8 * *
9 * This program is free software; you can redistribute it and/or modify *
10 * it under the terms of the GNU General Public License as published by *
11 * the Free Software Foundation; either version 2 of the License, or *
12 * (at your option) any later version. *
13 * *
14 ***************************************************************************/
15
16#include "qgs3daxissettings.h"
17
18#include "qgsreadwritecontext.h"
19
20#include <QDomDocument>
21
23{
24 bool out = true;
25 out &= this->mMode == rhs.mMode;
26 out &= this->mHorizontalPosition == rhs.mHorizontalPosition;
27 out &= this->mVerticalPosition == rhs.mVerticalPosition;
28 out &= this->mDefaultViewportSize == rhs.mDefaultViewportSize;
29 out &= this->mMaxViewportRatio == rhs.mMaxViewportRatio;
30 out &= this->mMinViewportRatio == rhs.mMinViewportRatio;
31 return out;
32}
33
35{
36 return !this->operator==( rhs );
37}
38
39void Qgs3DAxisSettings::readXml( const QDomElement &element, const QgsReadWriteContext & )
40{
41 QString sizeStr = element.attribute( QStringLiteral( "defaultViewportSize" ) );
42 if ( !sizeStr.isEmpty() )
43 mDefaultViewportSize = sizeStr.toInt();
44
45 double minViewportRatio = 0.0;
46 double maxViewportRatio = 0.0;
47 sizeStr = element.attribute( QStringLiteral( "minViewportRatio" ) );
48 if ( !sizeStr.isEmpty() && sizeStr.toDouble() != 0.0 )
49 minViewportRatio = sizeStr.toDouble();
50
51 sizeStr = element.attribute( QStringLiteral( "maxViewportRatio" ) );
52 if ( !sizeStr.isEmpty() && sizeStr.toDouble() != 0.0 )
53 maxViewportRatio = sizeStr.toDouble();
54
55 if ( maxViewportRatio > 0.0 )
56 mMaxViewportRatio = maxViewportRatio;
57
58 if ( minViewportRatio > 0.0 && mMaxViewportRatio > minViewportRatio )
59 mMinViewportRatio = minViewportRatio;
60
61 const QString modeStr = element.attribute( QStringLiteral( "mode" ) );
62 if ( modeStr == QLatin1String( "Off" ) )
64 else if ( modeStr == QLatin1String( "Crs" ) )
66 else if ( modeStr == QLatin1String( "Cube" ) )
68
69 const QString horizontalStr = element.attribute( QStringLiteral( "horizontal" ) );
70 if ( horizontalStr == QLatin1String( "Left" ) )
71 mHorizontalPosition = Qt::AnchorPoint::AnchorLeft;
72 else if ( horizontalStr == QLatin1String( "Middle" ) )
73 mHorizontalPosition = Qt::AnchorPoint::AnchorHorizontalCenter;
74 else if ( horizontalStr == QLatin1String( "Right" ) )
75 mHorizontalPosition = Qt::AnchorPoint::AnchorRight;
76
77 const QString verticalStr = element.attribute( QStringLiteral( "vertical" ) );
78 if ( verticalStr == QLatin1String( "Top" ) )
79 mVerticalPosition = Qt::AnchorPoint::AnchorTop;
80 else if ( verticalStr == QLatin1String( "Middle" ) )
81 mVerticalPosition = Qt::AnchorPoint::AnchorVerticalCenter;
82 else if ( verticalStr == QLatin1String( "Bottom" ) )
83 mVerticalPosition = Qt::AnchorPoint::AnchorBottom;
84}
85
86void Qgs3DAxisSettings::writeXml( QDomElement &element, const QgsReadWriteContext & ) const
87{
88 QString str;
89
90 str = QString::number( mDefaultViewportSize );
91 element.setAttribute( QStringLiteral( "defaultViewportSize" ), str );
92
93 str = QString::number( mMinViewportRatio );
94 element.setAttribute( QStringLiteral( "minViewportRatio" ), str );
95
96 str = QString::number( mMaxViewportRatio );
97 element.setAttribute( QStringLiteral( "maxViewportRatio" ), str );
98
99 switch ( mMode )
100 {
102 str = QLatin1String( "Crs" );
103 break;
105 str = QLatin1String( "Cube" );
106 break;
107
109 default:
110 str = QLatin1String( "Off" );
111 break;
112 }
113 element.setAttribute( QStringLiteral( "mode" ), str );
114
115 switch ( mHorizontalPosition )
116 {
117 case Qt::AnchorPoint::AnchorLeft:
118 str = QLatin1String( "Left" );
119 break;
120 case Qt::AnchorPoint::AnchorHorizontalCenter:
121 str = QLatin1String( "Middle" );
122 break;
123 case Qt::AnchorPoint::AnchorRight:
124 default:
125 str = QLatin1String( "End" );
126 break;
127 }
128 element.setAttribute( QStringLiteral( "horizontal" ), str );
129
130 switch ( mVerticalPosition )
131 {
132 case Qt::AnchorPoint::AnchorBottom:
133 str = QLatin1String( "Bottom" );
134 break;
135 case Qt::AnchorPoint::AnchorVerticalCenter:
136 str = QLatin1String( "Middle" );
137 break;
138 case Qt::AnchorPoint::AnchorTop:
139 default:
140 str = QLatin1String( "Top" );
141 break;
142 }
143 element.setAttribute( QStringLiteral( "vertical" ), str );
144}
145
147{
148 if ( ratio < mMaxViewportRatio )
149 {
150 mMinViewportRatio = std::clamp( ratio, 0.0, 1.0 );
151 }
152}
153
155{
156 if ( ratio > mMinViewportRatio )
157 {
158 mMaxViewportRatio = std::clamp( ratio, 0.0, 1.0 );
159 }
160}
double minViewportRatio() const
Returns the minimal axis viewport ratio (see Qt3DRender::QViewport::normalizedRect()).
Qgs3DAxisSettings()=default
double maxViewportRatio() const
Returns the maximal axis viewport ratio (see Qt3DRender::QViewport::normalizedRect()).
void readXml(const QDomElement &element, const QgsReadWriteContext &context)
Reads settings from a DOM element.
@ Crs
Respect CRS directions.
@ Cube
Abstract cube mode.
bool operator!=(Qgs3DAxisSettings const &rhs) const
void setMinViewportRatio(double ratio)
Sets the minimal axis viewport ratio between 0-1.
bool operator==(Qgs3DAxisSettings const &rhs) const
void setMaxViewportRatio(double ratio)
Sets the maximal axis viewport ratio between 0-1.
void writeXml(QDomElement &element, const QgsReadWriteContext &context) const
Writes settings to a DOM element.
A container for the context for various read/write operations on objects.