QGIS API Documentation 3.39.0-Master (e8f1b343c48)
Loading...
Searching...
No Matches
qgscamerapose.h
Go to the documentation of this file.
1/***************************************************************************
2 qgscamerapose.h
3 --------------------------------------
4 Date : July 2018
5 Copyright : (C) 2018 by Martin Dobias
6 Email : wonder dot sk at gmail 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#ifndef QGSCAMERAPOSE_H
17#define QGSCAMERAPOSE_H
18
19#include "qgis_3d.h"
20
21#include "qgsvector3d.h"
22
23#ifndef SIP_RUN
24namespace Qt3DRender
25{
26 class QCamera;
27}
28#endif
29
30class QDomDocument;
31class QDomElement;
32
46class _3D_EXPORT QgsCameraPose
47{
48 public:
49
51 QgsVector3D centerPoint() const { return mCenterPoint; }
53 void setCenterPoint( const QgsVector3D &point );
54
56 float distanceFromCenterPoint() const { return mDistanceFromCenterPoint; }
58 void setDistanceFromCenterPoint( float distance );
59
61 float pitchAngle() const { return mPitchAngle; }
63 void setPitchAngle( float pitch );
64
66 float headingAngle() const { return mHeadingAngle; }
68 void setHeadingAngle( float heading ) { mHeadingAngle = heading; }
69
71 void updateCamera( Qt3DRender::QCamera *camera ) SIP_SKIP;
72
74 QDomElement writeXml( QDomDocument &doc ) const;
76 void readXml( const QDomElement &elem );
77
78 // TODO c++20 - replace with = default
79 bool operator==( const QgsCameraPose &other ) const
80 {
81 return mCenterPoint == other.mCenterPoint &&
82 mDistanceFromCenterPoint == other.mDistanceFromCenterPoint &&
83 mPitchAngle == other.mPitchAngle &&
84 mHeadingAngle == other.mHeadingAngle;
85 }
86 bool operator!=( const QgsCameraPose &other ) const
87 {
88 return !operator==( other );
89 }
90
91 private:
93 QgsVector3D mCenterPoint;
95 float mDistanceFromCenterPoint = 1000;
97 // prevent bug in QgsCameraPose::updateCamera when updating camera rotation.
98 // With a mPitchAngle < 0.2 or > 179.8, QQuaternion::fromEulerAngles( mPitchAngle, mHeadingAngle, 0 )
99 // will return bad rotation angle.
100 // See https://bugreports.qt.io/browse/QTBUG-72103
101#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0)
102 float mPitchAngle = 0.2f;
103#else
104 float mPitchAngle = 0.0f;
105#endif
106
108 float mHeadingAngle = 0;
109};
110
111
112#endif // QGSCAMERAPOSE_H
float headingAngle() const
Returns heading (yaw) angle in degrees.
bool operator==(const QgsCameraPose &other) const
QgsVector3D centerPoint() const
Returns center point (towards which point the camera is looking)
float pitchAngle() const
Returns pitch angle in degrees.
bool operator!=(const QgsCameraPose &other) const
float distanceFromCenterPoint() const
Returns distance of the camera from the center point.
void setHeadingAngle(float heading)
Sets heading (yaw) angle in degrees.
Class for storage of 3D vectors similar to QVector3D, with the difference that it uses double precisi...
Definition qgsvector3d.h:31
#define SIP_SKIP
Definition qgis_sip.h:126
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)