1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107 | /* ============================================================
*
* This file is a part of digiKam project
* https://www.digikam.org
*
* Date : 2023-05-15
* Description : geolocation engine based on Marble.
* (c) 2007-2022 Marble Team
* https://invent.kde.org/education/marble/-/raw/master/data/credits_authors.html
*
* SPDX-FileCopyrightText: 2023-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
*
* SPDX-License-Identifier: LGPL-2.1-or-later
*
* ============================================================ */
#pragma once
// Local includes
#include "GeoDataGeometry_p.h"
#include "GeoDataTypes.h"
namespace Marble
{
class Q_DECL_HIDDEN GeoDataLineStringPrivate : public GeoDataGeometryPrivate
{
public:
explicit GeoDataLineStringPrivate(TessellationFlags f)
: m_rangeCorrected(nullptr),
m_dirtyRange(true),
m_dirtyBox(true),
m_tessellationFlags(f),
m_previousResolution(-1),
m_level(-1)
{
}
GeoDataLineStringPrivate()<--- Member variable 'GeoDataLineStringPrivate::m_previousResolution' is not initialized in the constructor. [+]Member variable 'GeoDataLineStringPrivate::m_previousResolution' is not initialized in the constructor. Member variables of native types, pointers, or references are left uninitialized when the class is instantiated. That may cause bugs or undefined behavior. <--- Member variable 'GeoDataLineStringPrivate::m_level' is not initialized in the constructor. [+]Member variable 'GeoDataLineStringPrivate::m_level' is not initialized in the constructor. Member variables of native types, pointers, or references are left uninitialized when the class is instantiated. That may cause bugs or undefined behavior.
: m_rangeCorrected(nullptr),
m_dirtyRange(true),
m_dirtyBox(true)
{
}
~GeoDataLineStringPrivate() override
{
delete m_rangeCorrected;
}
GeoDataLineStringPrivate& operator=(const GeoDataLineStringPrivate& other)<--- Member variable 'GeoDataLineStringPrivate::m_previousResolution' is not assigned a value in 'GeoDataLineStringPrivate::operator='.<--- Member variable 'GeoDataLineStringPrivate::m_level' is not assigned a value in 'GeoDataLineStringPrivate::operator='.
{
GeoDataGeometryPrivate::operator=(other);
m_vector = other.m_vector;
m_rangeCorrected = nullptr;
m_dirtyRange = true;
m_dirtyBox = other.m_dirtyBox;
m_tessellationFlags = other.m_tessellationFlags;
return *this;
}
GeoDataGeometryPrivate* copy() const override
{
GeoDataLineStringPrivate* copy = new GeoDataLineStringPrivate;
*copy = *this;
return copy;
}
void toPoleCorrected(const GeoDataLineString& q, GeoDataLineString& poleCorrected) const;
void toDateLineCorrected(const GeoDataLineString& q,
QVector<GeoDataLineString*>& lineStrings) const;
void interpolateDateLine(const GeoDataCoordinates& previousCoords,
const GeoDataCoordinates& currentCoords,
GeoDataCoordinates& previousAtDateline,
GeoDataCoordinates& currentAtDateline,
TessellationFlags f) const;
GeoDataCoordinates findDateLine(const GeoDataCoordinates& previousCoords,
const GeoDataCoordinates& currentCoords,
int recursionCounter) const;
quint8 levelForResolution(qreal resolution) const;
static qreal resolutionForLevel(int level);
void optimize(GeoDataLineString& lineString) const;
public:
QVector<GeoDataCoordinates> m_vector;
mutable GeoDataLineString* m_rangeCorrected = nullptr;
mutable bool m_dirtyRange;
mutable bool m_dirtyBox; // tells whether there have been changes to the
// GeoDataPoints since the LatLonAltBox has
// been calculated. Saves performance.
TessellationFlags m_tessellationFlags;
mutable qreal m_previousResolution;
mutable quint8 m_level;
};
} // namespace Marble
|