QGIS API Documentation 3.43.0-Master (c67cf405802)
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#include "qgsreadwritecontext.h"
18
19#include <QDomDocument>
20
22{
23 bool out = true;
24 out &= this->mMode == rhs.mMode;
25 out &= this->mHorizontalPosition == rhs.mHorizontalPosition;
26 out &= this->mVerticalPosition == rhs.mVerticalPosition;
27 out &= this->mDefaultViewportSize == rhs.mDefaultViewportSize;
28 out &= this->mMaxViewportRatio == rhs.mMaxViewportRatio;
29 out &= this->mMinViewportRatio == rhs.mMinViewportRatio;
30 return out;
31}
32
34{
35 return !this->operator==( rhs );
36}
37
38void Qgs3DAxisSettings::readXml( const QDomElement &element, const QgsReadWriteContext & )
39{
40 QString sizeStr = element.attribute( QStringLiteral( "defaultViewportSize" ) );
41 if ( !sizeStr.isEmpty() )
42 mDefaultViewportSize = sizeStr.toInt();
43
44 double minViewportRatio = 0.0;
45 double maxViewportRatio = 0.0;
46 sizeStr = element.attribute( QStringLiteral( "minViewportRatio" ) );
47 if ( !sizeStr.isEmpty() && sizeStr.toDouble() != 0.0 )
48 minViewportRatio = sizeStr.toDouble();
49
50 sizeStr = element.attribute( QStringLiteral( "maxViewportRatio" ) );
51 if ( !sizeStr.isEmpty() && sizeStr.toDouble() != 0.0 )
52 maxViewportRatio = sizeStr.toDouble();
53
54 if ( maxViewportRatio > 0.0 )
55 mMaxViewportRatio = maxViewportRatio;
56
57 if ( minViewportRatio > 0.0 && mMaxViewportRatio > minViewportRatio )
58 mMinViewportRatio = minViewportRatio;
59
60 const QString modeStr = element.attribute( QStringLiteral( "mode" ) );
61 if ( modeStr == QLatin1String( "Off" ) )
63 else if ( modeStr == QLatin1String( "Crs" ) )
65 else if ( modeStr == QLatin1String( "Cube" ) )
67
68 const QString horizontalStr = element.attribute( QStringLiteral( "horizontal" ) );
69 if ( horizontalStr == QLatin1String( "Left" ) )
70 mHorizontalPosition = Qt::AnchorPoint::AnchorLeft;
71 else if ( horizontalStr == QLatin1String( "Middle" ) )
72 mHorizontalPosition = Qt::AnchorPoint::AnchorHorizontalCenter;
73 else if ( horizontalStr == QLatin1String( "Right" ) )
74 mHorizontalPosition = Qt::AnchorPoint::AnchorRight;
75
76 const QString verticalStr = element.attribute( QStringLiteral( "vertical" ) );
77 if ( verticalStr == QLatin1String( "Top" ) )
78 mVerticalPosition = Qt::AnchorPoint::AnchorTop;
79 else if ( verticalStr == QLatin1String( "Middle" ) )
80 mVerticalPosition = Qt::AnchorPoint::AnchorVerticalCenter;
81 else if ( verticalStr == QLatin1String( "Bottom" ) )
82 mVerticalPosition = Qt::AnchorPoint::AnchorBottom;
83}
84
85void Qgs3DAxisSettings::writeXml( QDomElement &element, const QgsReadWriteContext & ) const
86{
87 QString str;
88
89 str = QString::number( mDefaultViewportSize );
90 element.setAttribute( QStringLiteral( "defaultViewportSize" ), str );
91
92 str = QString::number( mMinViewportRatio );
93 element.setAttribute( QStringLiteral( "minViewportRatio" ), str );
94
95 str = QString::number( mMaxViewportRatio );
96 element.setAttribute( QStringLiteral( "maxViewportRatio" ), str );
97
98 switch ( mMode )
99 {
101 str = QLatin1String( "Crs" );
102 break;
104 str = QLatin1String( "Cube" );
105 break;
106
108 default:
109 str = QLatin1String( "Off" );
110 break;
111 }
112 element.setAttribute( QStringLiteral( "mode" ), str );
113
114 switch ( mHorizontalPosition )
115 {
116 case Qt::AnchorPoint::AnchorLeft:
117 str = QLatin1String( "Left" );
118 break;
119 case Qt::AnchorPoint::AnchorHorizontalCenter:
120 str = QLatin1String( "Middle" );
121 break;
122 case Qt::AnchorPoint::AnchorRight:
123 default:
124 str = QLatin1String( "End" );
125 break;
126 }
127 element.setAttribute( QStringLiteral( "horizontal" ), str );
128
129 switch ( mVerticalPosition )
130 {
131 case Qt::AnchorPoint::AnchorBottom:
132 str = QLatin1String( "Bottom" );
133 break;
134 case Qt::AnchorPoint::AnchorVerticalCenter:
135 str = QLatin1String( "Middle" );
136 break;
137 case Qt::AnchorPoint::AnchorTop:
138 default:
139 str = QLatin1String( "Top" );
140 break;
141 }
142 element.setAttribute( QStringLiteral( "vertical" ), str );
143}
144
146{
147 if ( ratio < mMaxViewportRatio )
148 {
149 mMinViewportRatio = std::clamp( ratio, 0.0, 1.0 );
150 }
151}
152
154{
155 if ( ratio > mMinViewportRatio )
156 {
157 mMaxViewportRatio = std::clamp( ratio, 0.0, 1.0 );
158 }
159}
Contains the configuration of a 3d axis.
double minViewportRatio() const
Returns the minimal axis viewport ratio (see Qt3DRender::QViewport::normalizedRect())
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.