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