Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Q
qgroundcontrol
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Valentin Platzgummer
qgroundcontrol
Commits
06d57289
Commit
06d57289
authored
Dec 03, 2010
by
pixhawk
Browse files
Options
Browse Files
Download
Plain Diff
Merged
parents
a8e94b3f
64a56635
Changes
13
Show whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
305 additions
and
401 deletions
+305
-401
qgroundcontrol.pro
qgroundcontrol.pro
+29
-28
Imagery.cc
src/ui/map3D/Imagery.cc
+46
-38
Imagery.h
src/ui/map3D/Imagery.h
+9
-11
Pixhawk3DWidget.cc
src/ui/map3D/Pixhawk3DWidget.cc
+124
-21
Pixhawk3DWidget.h
src/ui/map3D/Pixhawk3DWidget.h
+6
-11
Texture.cc
src/ui/map3D/Texture.cc
+62
-153
Texture.h
src/ui/map3D/Texture.h
+3
-20
TextureCache.cc
src/ui/map3D/TextureCache.cc
+7
-10
TextureCache.h
src/ui/map3D/TextureCache.h
+2
-3
WebImage.cc
src/ui/map3D/WebImage.cc
+6
-72
WebImage.h
src/ui/map3D/WebImage.h
+7
-13
WebImageCache.cc
src/ui/map3D/WebImageCache.cc
+3
-19
WebImageCache.h
src/ui/map3D/WebImageCache.h
+1
-2
No files found.
qgroundcontrol.pro
View file @
06d57289
...
@@ -242,23 +242,25 @@ contains(DEPENDENCIES_PRESENT, osg) {
...
@@ -242,23 +242,25 @@ contains(DEPENDENCIES_PRESENT, osg) {
src
/
ui
/
map3D
/
QOSGWidget
.
h
\
src
/
ui
/
map3D
/
QOSGWidget
.
h
\
src
/
ui
/
map3D
/
PixhawkCheetahGeode
.
h
\
src
/
ui
/
map3D
/
PixhawkCheetahGeode
.
h
\
src
/
ui
/
map3D
/
Pixhawk3DWidget
.
h
\
src
/
ui
/
map3D
/
Pixhawk3DWidget
.
h
\
src
/
ui
/
map3D
/
Q3DWidgetFactory
.
h
src
/
ui
/
map3D
/
Q3DWidgetFactory
.
h
\
src
/
ui
/
map3D
/
WebImageCache
.
h
\
contains
(
DEPENDENCIES_PRESENT
,
osgearth
)
{
src
/
ui
/
map3D
/
WebImage
.
h
\
message
(
"Including headers for osgEarth"
)
src
/
ui
/
map3D
/
TextureCache
.
h
\
src
/
ui
/
map3D
/
Texture
.
h
\
src
/
ui
/
map3D
/
Imagery
.
h
contains
(
DEPENDENCIES_PRESENT
,
osgearth
)
{
message
(
"Including headers for OSGEARTH"
)
#
Enable
only
if
OpenSceneGraph
is
available
#
Enable
only
if
OpenSceneGraph
is
available
HEADERS
+=
src
/
ui
/
map3D
/
QMap3D
.
h
HEADERS
+=
src
/
ui
/
map3D
/
QMap3D
.
h
}
}
}
}
contains
(
DEPENDENCIES_PRESENT
,
libfreenect
)
{
contains
(
DEPENDENCIES_PRESENT
,
libfreenect
)
{
message
(
"Including headers for libfreenect"
)
message
(
"Including headers for libfreenect"
)
#
Enable
only
if
libfreenect
is
available
#
Enable
only
if
libfreenect
is
available
HEADERS
+=
src
/
input
/
Freenect
.
h
HEADERS
+=
src
/
input
/
Freenect
.
h
}
}
SOURCES
+=
src
/
main
.
cc
\
SOURCES
+=
src
/
main
.
cc
\
src
/
Core
.
cc
\
src
/
Core
.
cc
\
src
/
uas
/
UASManager
.
cc
\
src
/
uas
/
UASManager
.
cc
\
...
@@ -328,7 +330,6 @@ SOURCES += src/main.cc \
...
@@ -328,7 +330,6 @@ SOURCES += src/main.cc \
src
/
ui
/
RadioCalibration
/
CurveCalibrator
.
cc
\
src
/
ui
/
RadioCalibration
/
CurveCalibrator
.
cc
\
src
/
ui
/
RadioCalibration
/
AbstractCalibrator
.
cc
\
src
/
ui
/
RadioCalibration
/
AbstractCalibrator
.
cc
\
src
/
ui
/
RadioCalibration
/
RadioCalibrationData
.
cc
src
/
ui
/
RadioCalibration
/
RadioCalibrationData
.
cc
contains
(
DEPENDENCIES_PRESENT
,
osg
)
{
contains
(
DEPENDENCIES_PRESENT
,
osg
)
{
message
(
"Including sources for OpenSceneGraph"
)
message
(
"Including sources for OpenSceneGraph"
)
...
@@ -339,25 +340,25 @@ contains(DEPENDENCIES_PRESENT, osg) {
...
@@ -339,25 +340,25 @@ contains(DEPENDENCIES_PRESENT, osg) {
src
/
ui
/
map3D
/
QOSGWidget
.
cc
\
src
/
ui
/
map3D
/
QOSGWidget
.
cc
\
src
/
ui
/
map3D
/
PixhawkCheetahGeode
.
cc
\
src
/
ui
/
map3D
/
PixhawkCheetahGeode
.
cc
\
src
/
ui
/
map3D
/
Pixhawk3DWidget
.
cc
\
src
/
ui
/
map3D
/
Pixhawk3DWidget
.
cc
\
src
/
ui
/
map3D
/
Q3DWidgetFactory
.
cc
src
/
ui
/
map3D
/
Q3DWidgetFactory
.
cc
\
src
/
ui
/
map3D
/
WebImageCache
.
cc
\
contains
(
DEPENDENCIES_PRESENT
,
osgearth
)
{
src
/
ui
/
map3D
/
WebImage
.
cc
\
src
/
ui
/
map3D
/
TextureCache
.
cc
\
src
/
ui
/
map3D
/
Texture
.
cc
\
src
/
ui
/
map3D
/
Imagery
.
cc
contains
(
DEPENDENCIES_PRESENT
,
osgearth
)
{
message
(
"Including sources for osgEarth"
)
message
(
"Including sources for osgEarth"
)
#
Enable
only
if
OpenSceneGraph
is
available
#
Enable
only
if
OpenSceneGraph
is
available
SOURCES
+=
src
/
ui
/
map3D
/
QMap3D
.
cc
SOURCES
+=
src
/
ui
/
map3D
/
QMap3D
.
cc
}
}
}
}
contains
(
DEPENDENCIES_PRESENT
,
libfreenect
)
{
contains
(
DEPENDENCIES_PRESENT
,
libfreenect
)
{
message
(
"Including sources for libfreenect"
)
message
(
"Including sources for libfreenect"
)
#
Enable
only
if
libfreenect
is
available
#
Enable
only
if
libfreenect
is
available
SOURCES
+=
src
/
input
/
Freenect
.
cc
SOURCES
+=
src
/
input
/
Freenect
.
cc
}
}
RESOURCES
+=
mavground
.
qrc
RESOURCES
+=
mavground
.
qrc
#
Include
RT
-
LAB
Library
#
Include
RT
-
LAB
Library
...
...
src/ui/map3D/Imagery.cc
View file @
06d57289
...
@@ -46,6 +46,12 @@ Imagery::Imagery()
...
@@ -46,6 +46,12 @@ Imagery::Imagery()
}
}
Imagery
::
ImageryType
Imagery
::
getImageryType
(
void
)
const
{
return
currentImageryType
;
}
void
void
Imagery
::
setImageryType
(
ImageryType
type
)
Imagery
::
setImageryType
(
ImageryType
type
)
{
{
...
@@ -62,7 +68,6 @@ Imagery::setOffset(double xOffset, double yOffset)
...
@@ -62,7 +68,6 @@ Imagery::setOffset(double xOffset, double yOffset)
void
void
Imagery
::
prefetch2D
(
double
windowWidth
,
double
windowHeight
,
Imagery
::
prefetch2D
(
double
windowWidth
,
double
windowHeight
,
double
zoom
,
double
xOrigin
,
double
yOrigin
,
double
zoom
,
double
xOrigin
,
double
yOrigin
,
double
viewXOffset
,
double
viewYOffset
,
const
QString
&
utmZone
)
const
QString
&
utmZone
)
{
{
double
tileResolution
;
double
tileResolution
;
...
@@ -88,10 +93,10 @@ Imagery::prefetch2D(double windowWidth, double windowHeight,
...
@@ -88,10 +93,10 @@ Imagery::prefetch2D(double windowWidth, double windowHeight,
int
zoomLevel
;
int
zoomLevel
;
tileBounds
(
tileResolution
,
tileBounds
(
tileResolution
,
xOrigin
+
viewXOffset
-
windowWidth
/
2.0
/
zoom
,
xOrigin
-
windowWidth
/
2.0
/
zoom
*
1.5
,
yOrigin
+
viewYOffset
-
windowHeight
/
2.0
/
zoom
,
yOrigin
-
windowHeight
/
2.0
/
zoom
*
1.5
,
xOrigin
+
viewXOffset
+
windowWidth
/
2.0
/
zoom
,
xOrigin
+
windowWidth
/
2.0
/
zoom
*
1.5
,
yOrigin
+
viewYOffset
+
windowHeight
/
2.0
/
zoom
,
utmZone
,
yOrigin
+
windowHeight
/
2.0
/
zoom
*
1.5
,
utmZone
,
minTileX
,
minTileY
,
maxTileX
,
maxTileY
,
zoomLevel
);
minTileX
,
minTileY
,
maxTileX
,
maxTileY
,
zoomLevel
);
for
(
int
r
=
minTileY
;
r
<=
maxTileY
;
++
r
)
for
(
int
r
=
minTileY
;
r
<=
maxTileY
;
++
r
)
...
@@ -108,7 +113,6 @@ Imagery::prefetch2D(double windowWidth, double windowHeight,
...
@@ -108,7 +113,6 @@ Imagery::prefetch2D(double windowWidth, double windowHeight,
void
void
Imagery
::
draw2D
(
double
windowWidth
,
double
windowHeight
,
Imagery
::
draw2D
(
double
windowWidth
,
double
windowHeight
,
double
zoom
,
double
xOrigin
,
double
yOrigin
,
double
zoom
,
double
xOrigin
,
double
yOrigin
,
double
viewXOffset
,
double
viewYOffset
,
const
QString
&
utmZone
)
const
QString
&
utmZone
)
{
{
double
tileResolution
;
double
tileResolution
;
...
@@ -134,12 +138,17 @@ Imagery::draw2D(double windowWidth, double windowHeight,
...
@@ -134,12 +138,17 @@ Imagery::draw2D(double windowWidth, double windowHeight,
int
zoomLevel
;
int
zoomLevel
;
tileBounds
(
tileResolution
,
tileBounds
(
tileResolution
,
xOrigin
+
viewXOffset
-
windowWidth
/
2.0
/
zoom
*
1.5
,
xOrigin
-
windowWidth
/
2.0
/
zoom
*
1.5
,
yOrigin
+
viewYOffset
-
windowHeight
/
2.0
/
zoom
*
1.5
,
yOrigin
-
windowHeight
/
2.0
/
zoom
*
1.5
,
xOrigin
+
viewXOffset
+
windowWidth
/
2.0
/
zoom
*
1.5
,
xOrigin
+
windowWidth
/
2.0
/
zoom
*
1.5
,
yOrigin
+
viewYOffset
+
windowHeight
/
2.0
/
zoom
*
1.5
,
utmZone
,
yOrigin
+
windowHeight
/
2.0
/
zoom
*
1.5
,
utmZone
,
minTileX
,
minTileY
,
maxTileX
,
maxTileY
,
zoomLevel
);
minTileX
,
minTileY
,
maxTileX
,
maxTileY
,
zoomLevel
);
if
(
getNumDrawables
()
>
0
)
{
removeDrawables
(
0
,
getNumDrawables
());
}
for
(
int
r
=
minTileY
;
r
<=
maxTileY
;
++
r
)
for
(
int
r
=
minTileY
;
r
<=
maxTileY
;
++
r
)
{
{
for
(
int
c
=
minTileX
;
c
<=
maxTileX
;
++
c
)
for
(
int
c
=
minTileX
;
c
<=
maxTileX
;
++
c
)
...
@@ -152,10 +161,11 @@ Imagery::draw2D(double windowWidth, double windowHeight,
...
@@ -152,10 +161,11 @@ Imagery::draw2D(double windowWidth, double windowHeight,
TexturePtr
t
=
textureCache
->
get
(
tileURL
);
TexturePtr
t
=
textureCache
->
get
(
tileURL
);
if
(
!
t
.
isNull
())
if
(
!
t
.
isNull
())
{
{
t
->
draw
(
x1
-
xOrigin
,
y1
-
yOrigin
,
addDrawable
(
t
->
draw
(
y1
-
yOrigin
,
x1
-
xOrigin
,
x2
-
xOrigin
,
y2
-
yOrigin
,
y2
-
yOrigin
,
x2
-
xOrigin
,
x3
-
xOrigin
,
y3
-
yOrigin
,
y3
-
yOrigin
,
x3
-
xOrigin
,
x4
-
xOrigin
,
y4
-
yOrigin
,
true
);
y4
-
yOrigin
,
x4
-
xOrigin
,
true
));
}
}
}
}
}
}
...
@@ -164,17 +174,14 @@ Imagery::draw2D(double windowWidth, double windowHeight,
...
@@ -164,17 +174,14 @@ Imagery::draw2D(double windowWidth, double windowHeight,
void
void
Imagery
::
prefetch3D
(
double
radius
,
double
tileResolution
,
Imagery
::
prefetch3D
(
double
radius
,
double
tileResolution
,
double
xOrigin
,
double
yOrigin
,
double
xOrigin
,
double
yOrigin
,
double
viewXOffset
,
double
viewYOffset
,
const
QString
&
utmZone
)
const
QString
&
utmZone
,
bool
useHeightModel
)
{
{
int
minTileX
,
minTileY
,
maxTileX
,
maxTileY
;
int
minTileX
,
minTileY
,
maxTileX
,
maxTileY
;
int
zoomLevel
;
int
zoomLevel
;
tileBounds
(
tileResolution
,
tileBounds
(
tileResolution
,
xOrigin
+
viewXOffset
-
radius
,
xOrigin
-
radius
,
yOrigin
-
radius
,
yOrigin
+
viewYOffset
-
radius
,
xOrigin
+
radius
,
yOrigin
+
radius
,
utmZone
,
xOrigin
+
viewXOffset
+
radius
,
yOrigin
+
viewYOffset
+
radius
,
utmZone
,
minTileX
,
minTileY
,
maxTileX
,
maxTileY
,
zoomLevel
);
minTileX
,
minTileY
,
maxTileX
,
maxTileY
,
zoomLevel
);
for
(
int
r
=
minTileY
;
r
<=
maxTileY
;
++
r
)
for
(
int
r
=
minTileY
;
r
<=
maxTileY
;
++
r
)
...
@@ -183,7 +190,7 @@ Imagery::prefetch3D(double radius, double tileResolution,
...
@@ -183,7 +190,7 @@ Imagery::prefetch3D(double radius, double tileResolution,
{
{
QString
url
=
getTileLocation
(
c
,
r
,
zoomLevel
,
tileResolution
);
QString
url
=
getTileLocation
(
c
,
r
,
zoomLevel
,
tileResolution
);
TexturePtr
t
=
textureCache
->
get
(
url
,
useHeightModel
);
TexturePtr
t
=
textureCache
->
get
(
url
);
}
}
}
}
}
}
...
@@ -191,19 +198,21 @@ Imagery::prefetch3D(double radius, double tileResolution,
...
@@ -191,19 +198,21 @@ Imagery::prefetch3D(double radius, double tileResolution,
void
void
Imagery
::
draw3D
(
double
radius
,
double
tileResolution
,
Imagery
::
draw3D
(
double
radius
,
double
tileResolution
,
double
xOrigin
,
double
yOrigin
,
double
xOrigin
,
double
yOrigin
,
double
viewXOffset
,
double
viewYOffset
,
const
QString
&
utmZone
)
const
QString
&
utmZone
,
bool
useHeightModel
)
{
{
int
minTileX
,
minTileY
,
maxTileX
,
maxTileY
;
int
minTileX
,
minTileY
,
maxTileX
,
maxTileY
;
int
zoomLevel
;
int
zoomLevel
;
tileBounds
(
tileResolution
,
tileBounds
(
tileResolution
,
xOrigin
+
viewXOffset
-
radius
,
xOrigin
-
radius
,
yOrigin
-
radius
,
yOrigin
+
viewYOffset
-
radius
,
xOrigin
+
radius
,
yOrigin
+
radius
,
utmZone
,
xOrigin
+
viewXOffset
+
radius
,
yOrigin
+
viewYOffset
+
radius
,
utmZone
,
minTileX
,
minTileY
,
maxTileX
,
maxTileY
,
zoomLevel
);
minTileX
,
minTileY
,
maxTileX
,
maxTileY
,
zoomLevel
);
if
(
getNumDrawables
()
>
0
)
{
removeDrawables
(
0
,
getNumDrawables
());
}
for
(
int
r
=
minTileY
;
r
<=
maxTileY
;
++
r
)
for
(
int
r
=
minTileY
;
r
<=
maxTileY
;
++
r
)
{
{
for
(
int
c
=
minTileX
;
c
<=
maxTileX
;
++
c
)
for
(
int
c
=
minTileX
;
c
<=
maxTileX
;
++
c
)
...
@@ -213,14 +222,15 @@ Imagery::draw3D(double radius, double tileResolution,
...
@@ -213,14 +222,15 @@ Imagery::draw3D(double radius, double tileResolution,
double
x1
,
y1
,
x2
,
y2
,
x3
,
y3
,
x4
,
y4
;
double
x1
,
y1
,
x2
,
y2
,
x3
,
y3
,
x4
,
y4
;
imageBounds
(
c
,
r
,
tileResolution
,
x1
,
y1
,
x2
,
y2
,
x3
,
y3
,
x4
,
y4
);
imageBounds
(
c
,
r
,
tileResolution
,
x1
,
y1
,
x2
,
y2
,
x3
,
y3
,
x4
,
y4
);
TexturePtr
t
=
textureCache
->
get
(
tileURL
,
useHeightModel
);
TexturePtr
t
=
textureCache
->
get
(
tileURL
);
if
(
!
t
.
isNull
())
if
(
!
t
.
isNull
())
{
{
t
->
draw
(
x1
-
xOrigin
,
y1
-
yOrigin
,
addDrawable
(
t
->
draw
(
y1
-
yOrigin
,
x1
-
xOrigin
,
x2
-
xOrigin
,
y2
-
yOrigin
,
y2
-
yOrigin
,
x2
-
xOrigin
,
x3
-
xOrigin
,
y3
-
yOrigin
,
y3
-
yOrigin
,
x3
-
xOrigin
,
x4
-
xOrigin
,
y4
-
yOrigin
,
true
);
y4
-
yOrigin
,
x4
-
xOrigin
,
true
));
}
}
}
}
}
}
...
@@ -257,8 +267,7 @@ Imagery::imageBounds(int tileX, int tileY, double tileResolution,
...
@@ -257,8 +267,7 @@ Imagery::imageBounds(int tileX, int tileY, double tileResolution,
LLtoUTM
(
lat2
,
lon2
,
x3
,
y3
,
utmZone
);
LLtoUTM
(
lat2
,
lon2
,
x3
,
y3
,
utmZone
);
LLtoUTM
(
lat2
,
lon1
,
x4
,
y4
,
utmZone
);
LLtoUTM
(
lat2
,
lon1
,
x4
,
y4
,
utmZone
);
}
}
else
if
(
currentImageryType
==
SWISSTOPO_SATELLITE
||
else
if
(
currentImageryType
==
SWISSTOPO_SATELLITE
)
currentImageryType
==
SWISSTOPO_SATELLITE_3D
)
{
{
double
utmMultiplier
=
tileResolution
*
200.0
;
double
utmMultiplier
=
tileResolution
*
200.0
;
double
minX
=
tileX
*
utmMultiplier
;
double
minX
=
tileX
*
utmMultiplier
;
...
@@ -295,8 +304,7 @@ Imagery::tileBounds(double tileResolution,
...
@@ -295,8 +304,7 @@ Imagery::tileBounds(double tileResolution,
UTMtoTile
(
maxUtmX
,
maxUtmY
,
utmZone
,
tileResolution
,
UTMtoTile
(
maxUtmX
,
maxUtmY
,
utmZone
,
tileResolution
,
maxTileX
,
minTileY
,
zoomLevel
);
maxTileX
,
minTileY
,
zoomLevel
);
}
}
else
if
(
currentImageryType
==
SWISSTOPO_SATELLITE
||
else
if
(
currentImageryType
==
SWISSTOPO_SATELLITE
)
currentImageryType
==
SWISSTOPO_SATELLITE_3D
)
{
{
double
utmMultiplier
=
tileResolution
*
200
;
double
utmMultiplier
=
tileResolution
*
200
;
...
@@ -555,7 +563,7 @@ Imagery::UTMtoLL(double utmNorthing, double utmEasting, const QString& utmZone,
...
@@ -555,7 +563,7 @@ Imagery::UTMtoLL(double utmNorthing, double utmEasting, const QString& utmZone,
*
D
*
D
*
D
*
D
*
D
/
120.0
)
/
cos
(
phi1Rad
);
*
D
*
D
*
D
*
D
*
D
/
120.0
)
/
cos
(
phi1Rad
);
longitude
=
LongOrigin
+
longitude
/
M_PI
*
180.0
;
longitude
=
LongOrigin
+
longitude
/
M_PI
*
180.0
;
}
}
#include <QDebug>
QString
QString
Imagery
::
getTileLocation
(
int
tileX
,
int
tileY
,
int
zoomLevel
,
Imagery
::
getTileLocation
(
int
tileX
,
int
tileY
,
int
zoomLevel
,
double
tileResolution
)
const
double
tileResolution
)
const
...
@@ -572,7 +580,7 @@ Imagery::getTileLocation(int tileX, int tileY, int zoomLevel,
...
@@ -572,7 +580,7 @@ Imagery::getTileLocation(int tileX, int tileY, int zoomLevel,
oss
<<
"http://khm.google.com/vt/lbw/lyrs=y&x="
<<
tileX
oss
<<
"http://khm.google.com/vt/lbw/lyrs=y&x="
<<
tileX
<<
"&y="
<<
tileY
<<
"&z="
<<
zoomLevel
;
<<
"&y="
<<
tileY
<<
"&z="
<<
zoomLevel
;
break
;
break
;
case
SWISSTOPO_SATELLITE
:
case
SWISSTOPO_SATELLITE_3D
:
case
SWISSTOPO_SATELLITE
:
oss
<<
"../map/eth_zurich_swissimage_025/200/color/"
<<
tileY
oss
<<
"../map/eth_zurich_swissimage_025/200/color/"
<<
tileY
<<
"/tile-"
;
<<
"/tile-"
;
if
(
tileResolution
<
1.0
)
if
(
tileResolution
<
1.0
)
...
...
src/ui/map3D/Imagery.h
View file @
06d57289
...
@@ -32,44 +32,42 @@ This file is part of the QGROUNDCONTROL project
...
@@ -32,44 +32,42 @@ This file is part of the QGROUNDCONTROL project
#ifndef IMAGERY_H
#ifndef IMAGERY_H
#define IMAGERY_H
#define IMAGERY_H
#include <osg/Geode>
#include <QScopedPointer>
#include <QScopedPointer>
#include <QString>
#include <QString>
#include "TextureCache.h"
#include "TextureCache.h"
class
Imagery
class
Imagery
:
public
osg
::
Geode
{
{
public:
public:
enum
ImageryType
enum
ImageryType
{
{
GOOGLE
_MAP
=
0
,
BLANK
_MAP
=
0
,
GOOGLE_
SATELLITE
=
1
,
GOOGLE_
MAP
=
1
,
SWISSTOPO
_SATELLITE
=
2
,
GOOGLE
_SATELLITE
=
2
,
SWISSTOPO_SATELLITE
_3D
=
3
SWISSTOPO_SATELLITE
=
3
};
};
Imagery
();
Imagery
();
ImageryType
getImageryType
(
void
)
const
;
void
setImageryType
(
ImageryType
type
);
void
setImageryType
(
ImageryType
type
);
void
setOffset
(
double
xOffset
,
double
yOffset
);
void
setOffset
(
double
xOffset
,
double
yOffset
);
void
prefetch2D
(
double
windowWidth
,
double
windowHeight
,
void
prefetch2D
(
double
windowWidth
,
double
windowHeight
,
double
zoom
,
double
xOrigin
,
double
yOrigin
,
double
zoom
,
double
xOrigin
,
double
yOrigin
,
double
viewXOffset
,
double
viewYOffset
,
const
QString
&
utmZone
);
const
QString
&
utmZone
);
void
draw2D
(
double
windowWidth
,
double
windowHeight
,
void
draw2D
(
double
windowWidth
,
double
windowHeight
,
double
zoom
,
double
xOrigin
,
double
yOrigin
,
double
zoom
,
double
xOrigin
,
double
yOrigin
,
double
viewXOffset
,
double
viewYOffset
,
const
QString
&
utmZone
);
const
QString
&
utmZone
);
void
prefetch3D
(
double
radius
,
double
tileResolution
,
void
prefetch3D
(
double
radius
,
double
tileResolution
,
double
xOrigin
,
double
yOrigin
,
double
xOrigin
,
double
yOrigin
,
double
viewXOffset
,
double
viewYOffset
,
const
QString
&
utmZone
);
const
QString
&
utmZone
,
bool
useHeightModel
);
void
draw3D
(
double
radius
,
double
tileResolution
,
void
draw3D
(
double
radius
,
double
tileResolution
,
double
xOrigin
,
double
yOrigin
,
double
xOrigin
,
double
yOrigin
,
double
viewXOffset
,
double
viewYOffset
,
const
QString
&
utmZone
);
const
QString
&
utmZone
,
bool
useHeightModel
);
bool
update
(
void
);
bool
update
(
void
);
...
...
src/ui/map3D/Pixhawk3DWidget.cc
View file @
06d57289
...
@@ -49,6 +49,7 @@ Pixhawk3DWidget::Pixhawk3DWidget(QWidget* parent)
...
@@ -49,6 +49,7 @@ Pixhawk3DWidget::Pixhawk3DWidget(QWidget* parent)
,
uas
(
NULL
)
,
uas
(
NULL
)
,
displayGrid
(
true
)
,
displayGrid
(
true
)
,
displayTrail
(
false
)
,
displayTrail
(
false
)
,
displayImagery
(
true
)
,
displayTarget
(
false
)
,
displayTarget
(
false
)
,
displayWaypoints
(
true
)
,
displayWaypoints
(
true
)
,
displayRGBD2D
(
false
)
,
displayRGBD2D
(
false
)
...
@@ -74,11 +75,9 @@ Pixhawk3DWidget::Pixhawk3DWidget(QWidget* parent)
...
@@ -74,11 +75,9 @@ Pixhawk3DWidget::Pixhawk3DWidget(QWidget* parent)
trailNode
=
createTrail
();
trailNode
=
createTrail
();
rollingMap
->
addChild
(
trailNode
);
rollingMap
->
addChild
(
trailNode
);
#ifdef QGC_OSGEARTH_ENABLED
// generate map model
// generate map model
mapNode
=
createMap
();
mapNode
=
createMap
();
root
->
addChild
(
mapNode
);
allocentricMap
->
addChild
(
mapNode
);
#endif
// generate target model
// generate target model
allocentricMap
->
addChild
(
createTarget
());
allocentricMap
->
addChild
(
createTarget
());
...
@@ -171,6 +170,12 @@ Pixhawk3DWidget::showWaypoints(int state)
...
@@ -171,6 +170,12 @@ Pixhawk3DWidget::showWaypoints(int state)
}
}
}
}
void
Pixhawk3DWidget
::
selectMapSource
(
int
index
)
{
mapNode
->
setImageryType
(
static_cast
<
Imagery
::
ImageryType
>
(
index
));
}
void
void
Pixhawk3DWidget
::
selectVehicleModel
(
int
index
)
Pixhawk3DWidget
::
selectVehicleModel
(
int
index
)
{
{
...
@@ -205,7 +210,7 @@ Pixhawk3DWidget::toggleFollowCamera(int32_t state)
...
@@ -205,7 +210,7 @@ Pixhawk3DWidget::toggleFollowCamera(int32_t state)
followCamera
=
false
;
followCamera
=
false
;
}
}
}
}
#include <osgDB/WriteFile>
QVector
<
osg
::
ref_ptr
<
osg
::
Node
>
>
QVector
<
osg
::
ref_ptr
<
osg
::
Node
>
>
Pixhawk3DWidget
::
findVehicleModels
(
void
)
Pixhawk3DWidget
::
findVehicleModels
(
void
)
{
{
...
@@ -273,6 +278,12 @@ Pixhawk3DWidget::buildLayout(void)
...
@@ -273,6 +278,12 @@ Pixhawk3DWidget::buildLayout(void)
waypointsCheckBox
->
setText
(
"Waypoints"
);
waypointsCheckBox
->
setText
(
"Waypoints"
);
waypointsCheckBox
->
setChecked
(
displayWaypoints
);
waypointsCheckBox
->
setChecked
(
displayWaypoints
);
QLabel
*
mapLabel
=
new
QLabel
(
"Map"
,
this
);
QComboBox
*
mapComboBox
=
new
QComboBox
(
this
);
mapComboBox
->
addItem
(
"None"
);
mapComboBox
->
addItem
(
"Map (Google)"
);
mapComboBox
->
addItem
(
"Satellite (Google)"
);
QLabel
*
modelLabel
=
new
QLabel
(
"Vehicle Model"
,
this
);
QLabel
*
modelLabel
=
new
QLabel
(
"Vehicle Model"
,
this
);
QComboBox
*
modelComboBox
=
new
QComboBox
(
this
);
QComboBox
*
modelComboBox
=
new
QComboBox
(
this
);
for
(
int
i
=
0
;
i
<
vehicleModels
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
vehicleModels
.
size
();
++
i
)
...
@@ -299,12 +310,14 @@ Pixhawk3DWidget::buildLayout(void)
...
@@ -299,12 +310,14 @@ Pixhawk3DWidget::buildLayout(void)
layout
->
addWidget
(
trailCheckBox
,
1
,
1
);
layout
->
addWidget
(
trailCheckBox
,
1
,
1
);
layout
->
addWidget
(
waypointsCheckBox
,
1
,
2
);
layout
->
addWidget
(
waypointsCheckBox
,
1
,
2
);
layout
->
addItem
(
new
QSpacerItem
(
10
,
0
,
QSizePolicy
::
Expanding
,
QSizePolicy
::
Expanding
),
1
,
3
);
layout
->
addItem
(
new
QSpacerItem
(
10
,
0
,
QSizePolicy
::
Expanding
,
QSizePolicy
::
Expanding
),
1
,
3
);
layout
->
addWidget
(
modelLabel
,
1
,
4
);
layout
->
addWidget
(
mapLabel
,
1
,
4
);
layout
->
addWidget
(
modelComboBox
,
1
,
5
);
layout
->
addWidget
(
mapComboBox
,
1
,
5
);
layout
->
addWidget
(
targetButton
,
1
,
6
);
layout
->
addWidget
(
modelLabel
,
1
,
6
);
layout
->
addItem
(
new
QSpacerItem
(
10
,
0
,
QSizePolicy
::
Expanding
,
QSizePolicy
::
Expanding
),
1
,
7
);
layout
->
addWidget
(
modelComboBox
,
1
,
7
);
layout
->
addWidget
(
recenterButton
,
1
,
8
);
layout
->
addWidget
(
targetButton
,
1
,
8
);
layout
->
addWidget
(
followCameraCheckBox
,
1
,
9
);
layout
->
addItem
(
new
QSpacerItem
(
10
,
0
,
QSizePolicy
::
Expanding
,
QSizePolicy
::
Expanding
),
1
,
9
);
layout
->
addWidget
(
recenterButton
,
1
,
10
);
layout
->
addWidget
(
followCameraCheckBox
,
1
,
11
);
layout
->
setRowStretch
(
0
,
100
);
layout
->
setRowStretch
(
0
,
100
);
layout
->
setRowStretch
(
1
,
1
);
layout
->
setRowStretch
(
1
,
1
);
setLayout
(
layout
);
setLayout
(
layout
);
...
@@ -315,6 +328,8 @@ Pixhawk3DWidget::buildLayout(void)
...
@@ -315,6 +328,8 @@ Pixhawk3DWidget::buildLayout(void)
this
,
SLOT
(
showTrail
(
int
)));
this
,
SLOT
(
showTrail
(
int
)));
connect
(
waypointsCheckBox
,
SIGNAL
(
stateChanged
(
int
)),
connect
(
waypointsCheckBox
,
SIGNAL
(
stateChanged
(
int
)),
this
,
SLOT
(
showWaypoints
(
int
)));
this
,
SLOT
(
showWaypoints
(
int
)));
connect
(
mapComboBox
,
SIGNAL
(
currentIndexChanged
(
int
)),
this
,
SLOT
(
selectMapSource
(
int
)));
connect
(
modelComboBox
,
SIGNAL
(
currentIndexChanged
(
int
)),
connect
(
modelComboBox
,
SIGNAL
(
currentIndexChanged
(
int
)),
this
,
SLOT
(
selectVehicleModel
(
int
)));
this
,
SLOT
(
selectVehicleModel
(
int
)));
connect
(
recenterButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
recenter
()));
connect
(
recenterButton
,
SIGNAL
(
clicked
()),
this
,
SLOT
(
recenter
()));
...
@@ -362,20 +377,42 @@ Pixhawk3DWidget::display(void)
...
@@ -362,20 +377,42 @@ Pixhawk3DWidget::display(void)
robotPitch
,
osg
::
Vec3f
(
1.0
f
,
0.0
f
,
0.0
f
),
robotPitch
,
osg
::
Vec3f
(
1.0
f
,
0.0
f
,
0.0
f
),
robotRoll
,
osg
::
Vec3f
(
0.0
f
,
1.0
f
,
0.0
f
)));
robotRoll
,
osg
::
Vec3f
(
0.0
f
,
1.0
f
,
0.0
f
)));
if
(
displayTrail
)
{
updateTrail
(
robotX
,
robotY
,
robotZ
);
updateTrail
(
robotX
,
robotY
,
robotZ
);
}
if
(
displayImagery
)
{
updateImagery
();
}
if
(
displayTarget
)
{
updateTarget
();
updateTarget
();
}
if
(
displayWaypoints
)
{
updateWaypoints
();
updateWaypoints
();
}
#ifdef QGC_LIBFREENECT_ENABLED
#ifdef QGC_LIBFREENECT_ENABLED
if
(
displayRGBD2D
||
displayRGBD3D
)
{
updateRGBD
();
updateRGBD
();
}
#endif
#endif
updateHUD
(
robotX
,
robotY
,
robotZ
,
robotRoll
,
robotPitch
,
robotYaw
);
updateHUD
(
robotX
,
robotY
,
robotZ
,
robotRoll
,
robotPitch
,
robotYaw
);
// set node visibility
// set node visibility
rollingMap
->
setChildValue
(
gridNode
,
displayGrid
);
rollingMap
->
setChildValue
(
gridNode
,
displayGrid
);
rollingMap
->
setChildValue
(
trailNode
,
displayTrail
);
rollingMap
->
setChildValue
(
trailNode
,
displayTrail
);
rollingMap
->
setChildValue
(
targetNode
,
displayTarget
);
rollingMap
->
setChildValue
(
targetNode
,
displayTarget
);
rollingMap
->
setChildValue
(
waypointsNode
,
displayWaypoints
);
rollingMap
->
setChildValue
(
waypointsNode
,
displayWaypoints
);
egocentricMap
->
setChildValue
(
rgbd3DNode
,
displayRGBD3D
);
egocentricMap
->
setChildValue
(
rgbd3DNode
,
displayRGBD3D
);
allocentricMap
->
setChildValue
(
mapNode
,
displayImagery
);
hudGroup
->
setChildValue
(
rgb2DGeode
,
displayRGBD2D
);
hudGroup
->
setChildValue
(
rgb2DGeode
,
displayRGBD2D
);
hudGroup
->
setChildValue
(
depth2DGeode
,
displayRGBD2D
);
hudGroup
->
setChildValue
(
depth2DGeode
,
displayRGBD2D
);
...
@@ -400,6 +437,9 @@ Pixhawk3DWidget::keyPressEvent(QKeyEvent* event)
...
@@ -400,6 +437,9 @@ Pixhawk3DWidget::keyPressEvent(QKeyEvent* event)
case
'c'
:
case
'C'
:
case
'c'
:
case
'C'
:
enableRGBDColor
=
!
enableRGBDColor
;
enableRGBDColor
=
!
enableRGBDColor
;
break
;
break
;
case
'i'
:
case
'I'
:
displayImagery
=
!
displayImagery
;
break
;
}
}
}
}
...
@@ -512,16 +552,11 @@ Pixhawk3DWidget::createTrail(void)
...
@@ -512,16 +552,11 @@ Pixhawk3DWidget::createTrail(void)
return
geode
;
return
geode
;
}
}
#ifdef QGC_OSGEARTH_ENABLED
osg
::
ref_ptr
<
Imagery
>
osg
::
ref_ptr
<
osgEarth
::
MapNode
>
Pixhawk3DWidget
::
createMap
(
void
)
Pixhawk3DWidget
::
createMap
(
void
)
{
{
osg
::
ref_ptr
<
osg
::
Node
>
model
=
osgDB
::
readNodeFile
(
"map.earth"
);
return
osg
::
ref_ptr
<
Imagery
>
(
new
Imagery
());
osg
::
ref_ptr
<
osgEarth
::
MapNode
>
node
=
osgEarth
::
MapNode
::
findMapNode
(
model
);
return
node
;
}
}
#endif
osg
::
ref_ptr
<
osg
::
Node
>
osg
::
ref_ptr
<
osg
::
Node
>
Pixhawk3DWidget
::
createTarget
(
void
)
Pixhawk3DWidget
::
createTarget
(
void
)
...
@@ -730,6 +765,74 @@ Pixhawk3DWidget::updateTrail(float robotX, float robotY, float robotZ)
...
@@ -730,6 +765,74 @@ Pixhawk3DWidget::updateTrail(float robotX, float robotY, float robotZ)
trailGeometry
->
dirtyBound
();
trailGeometry
->
dirtyBound
();
}
}
void
Pixhawk3DWidget
::
updateImagery
(
void
)
{
char
zone
[
5
]
=
"32T"
;
double
viewingRadius
=
cameraManipulator
->
getDistance
()
*
10.0
;
if
(
viewingRadius
<
100.0
)
{
viewingRadius
=
100.0
;
}
double
minResolution
=
0.25
;
double
centerResolution
=
cameraManipulator
->
getDistance
()
/
25.0
;
double
maxResolution
=
1048576.0
;
Imagery
::
ImageryType
imageryType
=
mapNode
->
getImageryType
();
switch
(
imageryType
)
{
case
Imagery
:
:
GOOGLE_MAP
:
minResolution
=
0.25
;
break
;
case
Imagery
:
:
GOOGLE_SATELLITE
:
minResolution
=
0.5
;
break
;
case
Imagery
:
:
SWISSTOPO_SATELLITE
:
minResolution
=
0.25
;
maxResolution
=
0.25
;
break
;
default:
{}
}
double
resolution
=
minResolution
;
while
(
resolution
*
2.0
<
centerResolution
)
{
resolution
*=
2.0
;
}
if
(
resolution
>
maxResolution
)
{
resolution
=
maxResolution
;
}
mapNode
->
draw3D
(
viewingRadius
,
resolution
,
cameraManipulator
->
getCenter
().
y
(),
cameraManipulator
->
getCenter
().
x
(),
zone
);
// prefetch map tiles
if
(
resolution
/
2.0
>=
minResolution
)
{
mapNode
->
prefetch3D
(
viewingRadius
/
2.0
,
resolution
/
2.0
,
cameraManipulator
->
getCenter
().
y
(),
cameraManipulator
->
getCenter
().
x
(),
zone
);
}
if
(
resolution
*
2.0
<=
maxResolution
)
{
mapNode
->
prefetch3D
(
viewingRadius
*
2.0
,
resolution
*
2.0
,
cameraManipulator
->
getCenter
().
y
(),
cameraManipulator
->
getCenter
().
x
(),
zone
);
}
mapNode
->
update
();
}
void
void
Pixhawk3DWidget
::
updateTarget
(
void
)
Pixhawk3DWidget
::
updateTarget
(
void
)
{
{
...
...
src/ui/map3D/Pixhawk3DWidget.h
View file @
06d57289
...
@@ -33,10 +33,8 @@
...
@@ -33,10 +33,8 @@
#define PIXHAWK3DWIDGET_H
#define PIXHAWK3DWIDGET_H
#include <osgText/Text>
#include <osgText/Text>
#ifdef QGC_OSGEARTH_ENABLED
#include <osgEarth/MapNode>
#endif
#include "Imagery.h"
#include "ImageWindowGeode.h"
#include "ImageWindowGeode.h"
#ifdef QGC_LIBFREENECT_ENABLED
#ifdef QGC_LIBFREENECT_ENABLED
...
@@ -65,6 +63,7 @@ private slots:
...
@@ -65,6 +63,7 @@ private slots:
void
showGrid
(
int
state
);
void
showGrid
(
int
state
);
void
showTrail
(
int
state
);
void
showTrail
(
int
state
);
void
showWaypoints
(
int
state
);
void
showWaypoints
(
int
state
);
void
selectMapSource
(
int
index
);
void
selectVehicleModel
(
int
index
);
void
selectVehicleModel
(
int
index
);
void
recenter
(
void
);
void
recenter
(
void
);
void
toggleFollowCamera
(
int
state
);
void
toggleFollowCamera
(
int
state
);
...
@@ -81,11 +80,7 @@ protected:
...
@@ -81,11 +80,7 @@ protected:
private:
private:
osg
::
ref_ptr
<
osg
::
Geode
>
createGrid
(
void
);
osg
::
ref_ptr
<
osg
::
Geode
>
createGrid
(
void
);
osg
::
ref_ptr
<
osg
::
Geode
>
createTrail
(
void
);
osg
::
ref_ptr
<
osg
::
Geode
>
createTrail
(
void
);
osg
::
ref_ptr
<
Imagery
>
createMap
(
void
);
#ifdef QGC_OSGEARTH_ENABLED
osg
::
ref_ptr
<
osgEarth
::
MapNode
>
createMap
(
void
);
#endif
osg
::
ref_ptr
<
osg
::
Node
>
createTarget
(
void
);
osg
::
ref_ptr
<
osg
::
Node
>
createTarget
(
void
);
osg
::
ref_ptr
<
osg
::
Group
>
createWaypoints
(
void
);
osg
::
ref_ptr
<
osg
::
Group
>
createWaypoints
(
void
);
osg
::
ref_ptr
<
osg
::
Geode
>
createRGBD3D
(
void
);
osg
::
ref_ptr
<
osg
::
Geode
>
createRGBD3D
(
void
);
...
@@ -96,6 +91,7 @@ private:
...
@@ -96,6 +91,7 @@ private:
void
updateHUD
(
float
robotX
,
float
robotY
,
float
robotZ
,
void
updateHUD
(
float
robotX
,
float
robotY
,
float
robotZ
,
float
robotRoll
,
float
robotPitch
,
float
robotYaw
);
float
robotRoll
,
float
robotPitch
,
float
robotYaw
);
void
updateTrail
(
float
robotX
,
float
robotY
,
float
robotZ
);
void
updateTrail
(
float
robotX
,
float
robotY
,
float
robotZ
);
void
updateImagery
(
void
);
void
updateTarget
(
void
);
void
updateTarget
(
void
);
void
updateWaypoints
(
void
);
void
updateWaypoints
(
void
);
#ifdef QGC_LIBFREENECT_ENABLED
#ifdef QGC_LIBFREENECT_ENABLED
...
@@ -106,6 +102,7 @@ private:
...
@@ -106,6 +102,7 @@ private:
bool
displayGrid
;
bool
displayGrid
;
bool
displayTrail
;
bool
displayTrail
;
bool
displayImagery
;
bool
displayTarget
;
bool
displayTarget
;
bool
displayWaypoints
;
bool
displayWaypoints
;
bool
displayRGBD2D
;
bool
displayRGBD2D
;
...
@@ -128,9 +125,7 @@ private:
...
@@ -128,9 +125,7 @@ private:
osg
::
ref_ptr
<
osg
::
Geode
>
trailNode
;
osg
::
ref_ptr
<
osg
::
Geode
>
trailNode
;
osg
::
ref_ptr
<
osg
::
Geometry
>
trailGeometry
;
osg
::
ref_ptr
<
osg
::
Geometry
>
trailGeometry
;
osg
::
ref_ptr
<
osg
::
DrawArrays
>
trailDrawArrays
;
osg
::
ref_ptr
<
osg
::
DrawArrays
>
trailDrawArrays
;
#ifdef QGC_OSGEARTH_ENABLED
osg
::
ref_ptr
<
Imagery
>
mapNode
;
osg
::
ref_ptr
<
osgEarth
::
MapNode
>
mapNode
;
#endif
osg
::
ref_ptr
<
osg
::
Geode
>
targetNode
;
osg
::
ref_ptr
<
osg
::
Geode
>
targetNode
;
osg
::
ref_ptr
<
osg
::
PositionAttitudeTransform
>
targetPosition
;
osg
::
ref_ptr
<
osg
::
PositionAttitudeTransform
>
targetPosition
;
osg
::
ref_ptr
<
osg
::
Group
>
waypointsNode
;
osg
::
ref_ptr
<
osg
::
Group
>
waypointsNode
;
...
...
src/ui/map3D/Texture.cc
View file @
06d57289
...
@@ -33,18 +33,39 @@ This file is part of the QGROUNDCONTROL project
...
@@ -33,18 +33,39 @@ This file is part of the QGROUNDCONTROL project
#include "Texture.h"
#include "Texture.h"
Texture
::
Texture
()
Texture
::
Texture
(
unsigned
int
_id
)
:
_is3D
(
false
)
:
id
(
_id
)
,
texture2D
(
new
osg
::
Texture2D
)
,
geometry
(
new
osg
::
Geometry
)
{
{
texture2D
->
setFilter
(
osg
::
Texture
::
MIN_FILTER
,
osg
::
Texture
::
NEAREST
);
texture2D
->
setFilter
(
osg
::
Texture
::
MIN_FILTER
,
osg
::
Texture
::
NEAREST
);
texture2D
->
setFilter
(
osg
::
Texture
::
MAG_FILTER
,
osg
::
Texture
::
NEAREST
);
texture2D
->
setFilter
(
osg
::
Texture
::
MAG_FILTER
,
osg
::
Texture
::
NEAREST
);
GLuint
id
;
glGenTextures
(
1
,
&
id
);
texture2D
->
setDataVariance
(
osg
::
Object
::
DYNAMIC
);
t
->
setID
(
id
);
texture2D
->
setResizeNonPowerOfTwoHint
(
false
);
glBindTexture
(
GL_TEXTURE_2D
,
id
);
glPixelStorei
(
GL_UNPACK_ALIGNMENT
,
1
);
osg
::
ref_ptr
<
osg
::
Image
>
image
=
new
osg
::
Image
;
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MIN_FILTER
,
GL_NEAREST
);
texture2D
->
setImage
(
image
);
glTexParameteri
(
GL_TEXTURE_2D
,
GL_TEXTURE_MAG_FILTER
,
GL_NEAREST
);
osg
::
ref_ptr
<
osg
::
Vec2Array
>
vertices
(
new
osg
::
Vec2Array
(
4
));
geometry
->
setVertexArray
(
vertices
);
osg
::
ref_ptr
<
osg
::
Vec2Array
>
textureCoords
=
new
osg
::
Vec2Array
;
textureCoords
->
push_back
(
osg
::
Vec2
(
0.0
f
,
1.0
f
));
textureCoords
->
push_back
(
osg
::
Vec2
(
1.0
f
,
1.0
f
));
textureCoords
->
push_back
(
osg
::
Vec2
(
1.0
f
,
0.0
f
));
textureCoords
->
push_back
(
osg
::
Vec2
(
0.0
f
,
0.0
f
));
geometry
->
setTexCoordArray
(
id
,
textureCoords
);
geometry
->
addPrimitiveSet
(
new
osg
::
DrawArrays
(
osg
::
PrimitiveSet
::
LINES
,
0
,
4
));
osg
::
ref_ptr
<
osg
::
Vec4Array
>
colors
(
new
osg
::
Vec4Array
);
colors
->
push_back
(
osg
::
Vec4
(
0.0
f
,
0.0
f
,
1.0
f
,
1.0
f
));
geometry
->
setColorArray
(
colors
);
geometry
->
setColorBinding
(
osg
::
Geometry
::
BIND_OVERALL
);
geometry
->
setUseDisplayList
(
false
);
}
}
const
QString
&
const
QString
&
...
@@ -53,64 +74,33 @@ Texture::getSourceURL(void) const
...
@@ -53,64 +74,33 @@ Texture::getSourceURL(void) const
return
sourceURL
;
return
sourceURL
;
}
}
void
Texture
::
setId
(
unsigned
int
_id
)
{
id
=
_id
;
}
void
void
Texture
::
sync
(
const
WebImagePtr
&
image
)
Texture
::
sync
(
const
WebImagePtr
&
image
)
{
{
state
=
static_cast
<
State
>
(
image
->
getState
());
state
=
static_cast
<
State
>
(
image
->
getState
());
if
(
image
->
getState
()
!=
WebImage
::
UNINITIALIZED
&&
if
(
image
->
getState
()
!=
WebImage
::
UNINITIALIZED
&&
(
sourceURL
!=
image
->
getSourceURL
()
||
sourceURL
!=
image
->
getSourceURL
())
_is3D
!=
image
->
is3D
()))
{
{
sourceURL
=
image
->
getSourceURL
();
sourceURL
=
image
->
getSourceURL
();
_is3D
=
image
->
is3D
();
}
}
if
(
image
->
getState
()
==
WebImage
::
READY
&&
image
->
getSyncFlag
())
if
(
image
->
getState
()
==
WebImage
::
READY
&&
image
->
getSyncFlag
())
{
{
image
->
setSyncFlag
(
false
);
image
->
setSyncFlag
(
false
);
if
(
image
->
getWidth
()
!=
imageWidth
||
if
(
texture2D
->
getImage
()
!=
NULL
)
image
->
getHeight
()
!=
imageHeight
)
{
imageWidth
=
image
->
getWidth
();
textureWidth
=
32
;
while
(
textureWidth
<
imageWidth
)
{
textureWidth
*=
2
;
}
imageHeight
=
image
->
getHeight
();
textureHeight
=
32
;
while
(
textureHeight
<
imageHeight
)
{
{
textureHeight
*=
2
;
texture2D
->
getImage
()
->
setImage
(
image
->
getWidth
(),
image
->
getHeight
(),
1
,
GL_RGB
,
GL_RGB
,
GL_UNSIGNED_BYTE
,
image
->
getImageData
(),
osg
::
Image
::
NO_DELETE
);
texture2D
->
getImage
()
->
dirty
();
}
}
maxU
=
static_cast
<
double
>
(
imageWidth
)
/
static_cast
<
double
>
(
textureWidth
);
maxV
=
static_cast
<
double
>
(
imageHeight
)
/
static_cast
<
double
>
(
textureHeight
);
osg
::
ref_ptr
<
osg
::
Image
>
image
;
image
->
setImage
(
textureWidth
,
textureHeight
,
8
,
3
,
GL_RGBA
,
GL_UNSIGNED_BYTES
,
NULL
,
osg
::
Image
::
USE_NEW_DELETE
);
texture2D
->
glBindTexture
(
GL_TEXTURE_2D
,
id
);
glTexImage2D
(
GL_TEXTURE_2D
,
0
,
3
,
textureWidth
,
textureHeight
,
0
,
GL_RGBA
,
GL_UNSIGNED_BYTE
,
NULL
);
}
glBindTexture
(
GL_TEXTURE_2D
,
id
);
glTexSubImage2D
(
GL_TEXTURE_2D
,
0
,
0
,
0
,
imageWidth
,
imageHeight
,
GL_RGBA
,
GL_UNSIGNED_BYTE
,
image
->
getImageData
());
heightModel
=
image
->
getHeightModel
();
}
}
}
}
...
@@ -126,126 +116,45 @@ Texture::draw(float x1, float y1, float x2, float y2,
...
@@ -126,126 +116,45 @@ Texture::draw(float x1, float y1, float x2, float y2,
float
x3
,
float
y3
,
float
x4
,
float
y4
,
float
x3
,
float
y3
,
float
x4
,
float
y4
,
bool
smoothInterpolation
)
const
bool
smoothInterpolation
)
const
{
{
osg
::
ref_ptr
<
osg
::
Geometry
>
geometry
(
new
osg
::
Geometry
);
osg
::
Vec2Array
*
vertices
=
osg
::
ref_ptr
<
osg
::
StateSet
>
stateset
(
new
osg
::
StateSet
);
static_cast
<
osg
::
Vec2Array
*>
(
geometry
->
getVertexArray
());
(
*
vertices
)[
0
].
set
(
x1
,
y1
);
(
*
vertices
)[
1
].
set
(
x2
,
y2
);
(
*
vertices
)[
2
].
set
(
x3
,
y3
);
(
*
vertices
)[
3
].
set
(
x4
,
y4
);
osg
::
DrawArrays
*
drawarrays
=
static_cast
<
osg
::
DrawArrays
*>
(
geometry
->
getPrimitiveSet
(
0
));
osg
::
Vec4Array
*
colors
=
static_cast
<
osg
::
Vec4Array
*>
(
geometry
->
getColorArray
());
if
(
state
==
REQUESTED
)
if
(
state
==
REQUESTED
)
{
{
osg
::
ref_ptr
<
osg
::
Vec2Array
>
vertices
(
new
osg
::
Vec2Array
);
drawarrays
->
set
(
osg
::
PrimitiveSet
::
LINES
,
0
,
4
);
vertices
->
push_back
(
osg
::
Vec2
(
x1
,
y1
));
(
*
colors
)[
0
].
set
(
0.0
f
,
0.0
f
,
1.0
f
,
1.0
f
);
vertices
->
push_back
(
osg
::
Vec2
(
x2
,
y2
));
vertices
->
push_back
(
osg
::
Vec2
(
x3
,
y3
));
vertices
->
push_back
(
osg
::
Vec2
(
x4
,
y4
));
geometry
->
addPrimitiveSet
(
new
osg
::
DrawArrays
(
osg
::
PrimitiveSet
::
LINES
,
0
,
vertices
->
size
()));
geometry
->
setVertexArray
(
vertices
);
geometry
->
getOrCreateStateSet
()
->
setTextureAttributeAndModes
(
id
,
texture2D
,
osg
::
StateAttribute
::
OFF
);
osg
::
ref_ptr
<
osg
::
Vec4Array
>
color
(
new
osg
::
Vec4Array
);
color
->
push_back
(
osg
::
Vec4
(
0.0
f
,
0.0
f
,
1.0
f
,
1.0
f
));
geometry
->
setColorArray
(
color
);
geometry
->
setColorBinding
(
osg
::
Geometry
::
BIND_OVERALL
);
return
geometry
;
return
geometry
;
}
}
stateset
->
setTextureAttributeAndModes
(
id
,
texture2D
);
float
dx
,
dy
;
if
(
smoothInterpolation
)
if
(
smoothInterpolation
)
{
{
texture2D
->
setFilter
(
osg
::
Texture
::
MIN_FILTER
,
osg
::
Texture
::
LINEAR
);
texture2D
->
setFilter
(
osg
::
Texture
::
MIN_FILTER
,
osg
::
Texture
::
LINEAR
);
texture2D
->
setFilter
(
osg
::
Texture
::
MAG_FILTER
,
osg
::
Texture
::
LINEAR
);
texture2D
->
setFilter
(
osg
::
Texture
::
MAG_FILTER
,
osg
::
Texture
::
LINEAR
);
dx
=
1.0
f
/
(
2.0
f
*
textureWidth
);
dy
=
1.0
f
/
(
2.0
f
*
textureHeight
);
}
}
else
else
{
{
texture2D
->
setFilter
(
osg
::
Texture
::
MIN_FILTER
,
osg
::
Texture
::
NEAREST
);
texture2D
->
setFilter
(
osg
::
Texture
::
MIN_FILTER
,
osg
::
Texture
::
NEAREST
);
texture2D
->
setFilter
(
osg
::
Texture
::
MAG_FILTER
,
osg
::
Texture
::
NEAREST
);
texture2D
->
setFilter
(
osg
::
Texture
::
MAG_FILTER
,
osg
::
Texture
::
NEAREST
);
dx
=
0.0
f
;
dy
=
0.0
f
;
}
}
glColor3f
(
1.0
f
,
1.0
f
,
1.0
f
);
drawarrays
->
set
(
osg
::
PrimitiveSet
::
POLYGON
,
0
,
4
);
if
(
!
_is3D
)
(
*
colors
)[
0
].
set
(
1.0
f
,
1.0
f
,
1.0
f
,
1.0
f
);
{
osg
::
ref_ptr
<
osg
::
Vec2Array
>
tc
=
new
osg
::
Vec2Array
;
geometry
->
setTexCoordArray
(
id
,
tc
);
tc
->
push_back
(
osg
::
Vec2
(
dx
,
maxV
-
dy
));
tc
->
push_back
(
osg
::
Vec2
(
maxU
-
dx
,
maxV
-
dy
));
tc
->
push_back
(
osg
::
Vec2
(
maxU
-
dx
,
dy
));
tc
->
push_back
(
osg
::
Vec2
(
dx
,
dy
));
glBegin
(
GL_QUADS
);
glTexCoord2f
(
dx
,
maxV
-
dy
);
glVertex3f
(
x1
,
y1
,
0.0
f
);
glTexCoord2f
(
maxU
-
dx
,
maxV
-
dy
);
glVertex3f
(
x2
,
y2
,
0.0
f
);
glTexCoord2f
(
maxU
-
dx
,
dy
);
glVertex3f
(
x3
,
y3
,
0.0
f
);
glTexCoord2f
(
dx
,
dy
);
glVertex3f
(
x4
,
y4
,
0.0
f
);
glEnd
();
}
else
{
float
scaleX
=
1.0
f
/
static_cast
<
float
>
(
heightModel
.
size
()
-
1
);
for
(
int32_t
i
=
0
;
i
<
heightModel
.
size
()
-
1
;
++
i
)
{
float
scaleI
=
scaleX
*
static_cast
<
float
>
(
i
);
float
scaleY
=
1.0
f
/
static_cast
<
float
>
(
heightModel
[
i
].
size
()
-
1
);
float
x1i
=
x1
+
scaleI
*
(
x4
-
x1
);
geometry
->
getOrCreateStateSet
()
->
float
x1f
=
x2
+
scaleI
*
(
x3
-
x2
);
setTextureAttributeAndModes
(
id
,
texture2D
,
osg
::
StateAttribute
::
ON
);
float
x2i
=
x1i
+
scaleX
*
(
x4
-
x1
);
float
x2f
=
x1f
+
scaleX
*
(
x3
-
x2
);
for
(
int32_t
j
=
0
;
j
<
heightModel
[
i
].
size
()
-
1
;
++
j
)
return
geometry
;
{
float
scaleJ
=
scaleY
*
static_cast
<
float
>
(
j
);
float
y1i
=
y1
+
scaleJ
*
(
y2
-
y1
);
float
y1f
=
y4
+
scaleJ
*
(
y3
-
y4
);
float
y2i
=
y1i
+
scaleY
*
(
y2
-
y1
);
float
y2f
=
y1f
+
scaleY
*
(
y3
-
y4
);
float
nx1
=
x1i
+
scaleJ
*
(
x1f
-
x1i
);
float
nx2
=
x1i
+
(
scaleJ
+
scaleY
)
*
(
x1f
-
x1i
);
float
nx3
=
x2i
+
(
scaleJ
+
scaleY
)
*
(
x2f
-
x2i
);
float
nx4
=
x2i
+
scaleJ
*
(
x2f
-
x2i
);
float
ny1
=
y1i
+
scaleI
*
(
y1f
-
y1i
);
float
ny2
=
y2i
+
scaleI
*
(
y2f
-
y2i
);
float
ny3
=
y2i
+
(
scaleI
+
scaleX
)
*
(
y2f
-
y2i
);
float
ny4
=
y1i
+
(
scaleI
+
scaleX
)
*
(
y1f
-
y1i
);
glBegin
(
GL_QUADS
);
glTexCoord2f
(
dx
+
scaleJ
*
(
maxU
-
dx
*
2.0
f
),
dy
+
(
1.0
f
-
scaleI
)
*
(
maxV
-
dy
*
2.0
f
));
glVertex3f
(
nx1
,
ny1
,
-
static_cast
<
float
>
(
heightModel
[
i
][
j
]));
glTexCoord2f
(
dx
+
(
scaleJ
+
scaleY
)
*
(
maxU
-
dx
*
2.0
f
),
dy
+
(
1.0
f
-
scaleI
)
*
(
maxV
-
dy
*
2.0
f
));
glVertex3f
(
nx2
,
ny2
,
-
static_cast
<
float
>
(
heightModel
[
i
][
j
+
1
]));
glTexCoord2f
(
dx
+
(
scaleJ
+
scaleY
)
*
(
maxU
-
dx
*
2.0
f
),
dy
+
(
1.0
f
-
scaleI
-
scaleX
)
*
(
maxV
-
dy
*
2.0
f
));
glVertex3f
(
nx3
,
ny3
,
-
static_cast
<
float
>
(
heightModel
[
i
+
1
][
j
+
1
]));
glTexCoord2f
(
dx
+
scaleJ
*
(
maxU
-
dx
*
2.0
f
),
dy
+
(
1.0
f
-
scaleI
-
scaleX
)
*
(
maxV
-
dy
*
2.0
f
));
glVertex3f
(
nx4
,
ny4
,
-
static_cast
<
float
>
(
heightModel
[
i
+
1
][
j
]));
glEnd
();
}
}
}
}
bool
Texture
::
is3D
(
void
)
const
{
return
_is3D
;
}
}
src/ui/map3D/Texture.h
View file @
06d57289
...
@@ -32,14 +32,10 @@ This file is part of the QGROUNDCONTROL project
...
@@ -32,14 +32,10 @@ This file is part of the QGROUNDCONTROL project
#ifndef TEXTURE_H
#ifndef TEXTURE_H
#define TEXTURE_H
#define TEXTURE_H
#if (defined __APPLE__) & (defined __MACH__)
#include <OpenGL/gl.h>
#else
#include <GL/gl.h>
#endif
#include <inttypes.h>
#include <inttypes.h>
#include <osg/ref_ptr>
#include <osg/ref_ptr>
#include <osg/Geometry>
#include <osg/Geometry>
#include <osg/Texture2D>
#include <QSharedPointer>
#include <QSharedPointer>
#include "WebImage.h"
#include "WebImage.h"
...
@@ -47,7 +43,7 @@ This file is part of the QGROUNDCONTROL project
...
@@ -47,7 +43,7 @@ This file is part of the QGROUNDCONTROL project
class
Texture
class
Texture
{
{
public:
public:
Texture
(
);
explicit
Texture
(
unsigned
int
_id
);
const
QString
&
getSourceURL
(
void
)
const
;
const
QString
&
getSourceURL
(
void
)
const
;
...
@@ -61,8 +57,6 @@ public:
...
@@ -61,8 +57,6 @@ public:
float
x3
,
float
y3
,
float
x4
,
float
y4
,
float
x3
,
float
y3
,
float
x4
,
float
y4
,
bool
smoothInterpolation
)
const
;
bool
smoothInterpolation
)
const
;
bool
is3D
(
void
)
const
;
private:
private:
enum
State
enum
State
{
{
...
@@ -75,18 +69,7 @@ private:
...
@@ -75,18 +69,7 @@ private:
QString
sourceURL
;
QString
sourceURL
;
unsigned
int
id
;
unsigned
int
id
;
osg
::
ref_ptr
<
osg
::
Texture2D
>
texture2D
;
osg
::
ref_ptr
<
osg
::
Texture2D
>
texture2D
;
osg
::
ref_ptr
<
osg
::
Geometry
>
geometry
;
int32_t
textureWidth
;
int32_t
textureHeight
;
int32_t
imageWidth
;
int32_t
imageHeight
;
bool
_is3D
;
QVector
<
QVector
<
int32_t
>
>
heightModel
;
float
maxU
;
float
maxV
;
};
};
typedef
QSharedPointer
<
Texture
>
TexturePtr
;
typedef
QSharedPointer
<
Texture
>
TexturePtr
;
...
...
src/ui/map3D/TextureCache.cc
View file @
06d57289
...
@@ -37,28 +37,26 @@ TextureCache::TextureCache(uint32_t _cacheSize)
...
@@ -37,28 +37,26 @@ TextureCache::TextureCache(uint32_t _cacheSize)
{
{
for
(
uint32_t
i
=
0
;
i
<
cacheSize
;
++
i
)
for
(
uint32_t
i
=
0
;
i
<
cacheSize
;
++
i
)
{
{
TexturePtr
t
(
new
Texture
);
TexturePtr
t
(
new
Texture
(
i
));
t
->
setId
(
i
);
textures
.
push_back
(
t
);
textures
.
push_back
(
t
);
}
}
}
}
TexturePtr
TexturePtr
TextureCache
::
get
(
const
QString
&
tileURL
,
bool
useHeightModel
)
TextureCache
::
get
(
const
QString
&
tileURL
)
{
{
QPair
<
TexturePtr
,
int32_t
>
p1
=
lookup
(
tileURL
,
useHeightModel
);
QPair
<
TexturePtr
,
int32_t
>
p1
=
lookup
(
tileURL
);
if
(
!
p1
.
first
.
isNull
())
if
(
!
p1
.
first
.
isNull
())
{
{
return
p1
.
first
;
return
p1
.
first
;
}
}
QPair
<
WebImagePtr
,
int32_t
>
p2
=
QPair
<
WebImagePtr
,
int32_t
>
p2
=
imageCache
->
lookup
(
tileURL
);
imageCache
->
lookup
(
tileURL
,
useHeightModel
);
if
(
!
p2
.
first
.
isNull
())
if
(
!
p2
.
first
.
isNull
())
{
{
textures
[
p2
.
second
]
->
sync
(
p2
.
first
);
textures
[
p2
.
second
]
->
sync
(
p2
.
first
);
p1
=
lookup
(
tileURL
,
useHeightModel
);
p1
=
lookup
(
tileURL
);
return
p1
.
first
;
return
p1
.
first
;
}
}
...
@@ -79,12 +77,11 @@ TextureCache::sync(void)
...
@@ -79,12 +77,11 @@ TextureCache::sync(void)
}
}
QPair
<
TexturePtr
,
int32_t
>
QPair
<
TexturePtr
,
int32_t
>
TextureCache
::
lookup
(
const
QString
&
tileURL
,
bool
useHeightModel
)
TextureCache
::
lookup
(
const
QString
&
tileURL
)
{
{
for
(
int32_t
i
=
0
;
i
<
textures
.
size
();
++
i
)
for
(
int32_t
i
=
0
;
i
<
textures
.
size
();
++
i
)
{
{
if
(
textures
[
i
]
->
getSourceURL
()
==
tileURL
&&
if
(
textures
[
i
]
->
getSourceURL
()
==
tileURL
)
textures
[
i
]
->
is3D
()
==
useHeightModel
)
{
{
return
qMakePair
(
textures
[
i
],
i
);
return
qMakePair
(
textures
[
i
],
i
);
}
}
...
...
src/ui/map3D/TextureCache.h
View file @
06d57289
...
@@ -42,13 +42,12 @@ class TextureCache
...
@@ -42,13 +42,12 @@ class TextureCache
public:
public:
explicit
TextureCache
(
uint32_t
cacheSize
);
explicit
TextureCache
(
uint32_t
cacheSize
);
TexturePtr
get
(
const
QString
&
tileURL
,
bool
useHeightModel
=
false
);
TexturePtr
get
(
const
QString
&
tileURL
);
void
sync
(
void
);
void
sync
(
void
);
private:
private:
QPair
<
TexturePtr
,
int32_t
>
lookup
(
const
QString
&
tileURL
,
QPair
<
TexturePtr
,
int32_t
>
lookup
(
const
QString
&
tileURL
);
bool
useHeightModel
);
bool
requireSync
(
void
)
const
;
bool
requireSync
(
void
)
const
;
...
...
src/ui/map3D/WebImage.cc
View file @
06d57289
...
@@ -39,7 +39,6 @@ WebImage::WebImage()
...
@@ -39,7 +39,6 @@ WebImage::WebImage()
,
sourceURL
(
""
)
,
sourceURL
(
""
)
,
image
(
0
)
,
image
(
0
)
,
lastReference
(
0
)
,
lastReference
(
0
)
,
_is3D
(
false
)
,
syncFlag
(
false
)
,
syncFlag
(
false
)
{
{
...
@@ -52,7 +51,6 @@ WebImage::clear(void)
...
@@ -52,7 +51,6 @@ WebImage::clear(void)
sourceURL
.
clear
();
sourceURL
.
clear
();
state
=
WebImage
::
UNINITIALIZED
;
state
=
WebImage
::
UNINITIALIZED
;
lastReference
=
0
;
lastReference
=
0
;
heightModel
.
clear
();
}
}
WebImage
::
State
WebImage
::
State
...
@@ -79,18 +77,12 @@ WebImage::setSourceURL(const QString& url)
...
@@ -79,18 +77,12 @@ WebImage::setSourceURL(const QString& url)
sourceURL
=
url
;
sourceURL
=
url
;
}
}
const
uint8_t
*
uchar
*
WebImage
::
getImageData
(
void
)
const
WebImage
::
getImageData
(
void
)
const
{
{
return
image
->
scanLine
(
0
);
return
image
->
scanLine
(
0
);
}
}
const
QVector
<
QVector
<
int32_t
>
>&
WebImage
::
getHeightModel
(
void
)
const
{
return
heightModel
;
}
bool
bool
WebImage
::
setData
(
const
QByteArray
&
data
)
WebImage
::
setData
(
const
QByteArray
&
data
)
{
{
...
@@ -131,90 +123,32 @@ WebImage::setData(const QString& filename)
...
@@ -131,90 +123,32 @@ WebImage::setData(const QString& filename)
}
}
}
}
bool
int
WebImage
::
setData
(
const
QString
&
imageFilename
,
const
QString
&
heightFilename
)
{
QFile
heightFile
(
heightFilename
);
QImage
tempImage
;
if
(
tempImage
.
load
(
imageFilename
)
&&
heightFile
.
open
(
QIODevice
::
ReadOnly
))
{
if
(
image
.
isNull
())
{
image
.
reset
(
new
QImage
);
}
*
image
=
QGLWidget
::
convertToGLFormat
(
tempImage
);
QDataStream
heightDataStream
(
&
heightFile
);
// read in width and height values for height map
char
header
[
8
];
heightDataStream
.
readRawData
(
header
,
8
);
int32_t
height
=
*
(
reinterpret_cast
<
int32_t
*>
(
header
));
int32_t
width
=
*
(
reinterpret_cast
<
int32_t
*>
(
header
+
4
));
char
buffer
[
height
*
width
*
sizeof
(
int32_t
)];
heightDataStream
.
readRawData
(
buffer
,
height
*
width
*
sizeof
(
int32_t
));
heightModel
.
clear
();
for
(
int32_t
i
=
0
;
i
<
height
;
++
i
)
{
QVector
<
int32_t
>
scanline
;
for
(
int32_t
j
=
0
;
j
<
width
;
++
j
)
{
int32_t
n
=
*
(
reinterpret_cast
<
int32_t
*>
(
buffer
+
(
i
*
height
+
j
)
*
sizeof
(
int32_t
)));
scanline
.
push_back
(
n
);
}
heightModel
.
push_back
(
scanline
);
}
heightFile
.
close
();
_is3D
=
true
;
return
true
;
}
else
{
return
false
;
}
}
int32_t
WebImage
::
getWidth
(
void
)
const
WebImage
::
getWidth
(
void
)
const
{
{
return
image
->
width
();
return
image
->
width
();
}
}
int
32_t
int
WebImage
::
getHeight
(
void
)
const
WebImage
::
getHeight
(
void
)
const
{
{
return
image
->
height
();
return
image
->
height
();
}
}
int
32_t
int
WebImage
::
getByteCount
(
void
)
const
WebImage
::
getByteCount
(
void
)
const
{
{
return
image
->
byteCount
();
return
image
->
byteCount
();
}
}
bool
ulong
WebImage
::
is3D
(
void
)
const
{
return
_is3D
;
}
uint64_t
WebImage
::
getLastReference
(
void
)
const
WebImage
::
getLastReference
(
void
)
const
{
{
return
lastReference
;
return
lastReference
;
}
}
void
void
WebImage
::
setLastReference
(
u
int64_t
value
)
WebImage
::
setLastReference
(
u
long
value
)
{
{
lastReference
=
value
;
lastReference
=
value
;
}
}
...
...
src/ui/map3D/WebImage.h
View file @
06d57289
...
@@ -57,20 +57,16 @@ public:
...
@@ -57,20 +57,16 @@ public:
const
QString
&
getSourceURL
(
void
)
const
;
const
QString
&
getSourceURL
(
void
)
const
;
void
setSourceURL
(
const
QString
&
url
);
void
setSourceURL
(
const
QString
&
url
);
const
uint8_t
*
getImageData
(
void
)
const
;
uchar
*
getImageData
(
void
)
const
;
const
QVector
<
QVector
<
int32_t
>
>&
getHeightModel
(
void
)
const
;
bool
setData
(
const
QByteArray
&
data
);
bool
setData
(
const
QByteArray
&
data
);
bool
setData
(
const
QString
&
filename
);
bool
setData
(
const
QString
&
filename
);
bool
setData
(
const
QString
&
imageFilename
,
const
QString
&
heightFilename
);
int
32_t
getWidth
(
void
)
const
;
int
getWidth
(
void
)
const
;
int
32_t
getHeight
(
void
)
const
;
int
getHeight
(
void
)
const
;
int
32_t
getByteCount
(
void
)
const
;
int
getByteCount
(
void
)
const
;
bool
is3D
(
void
)
const
;
ulong
getLastReference
(
void
)
const
;
void
setLastReference
(
ulong
value
);
uint64_t
getLastReference
(
void
)
const
;
void
setLastReference
(
uint64_t
value
);
bool
getSyncFlag
(
void
)
const
;
bool
getSyncFlag
(
void
)
const
;
void
setSyncFlag
(
bool
onoff
);
void
setSyncFlag
(
bool
onoff
);
...
@@ -79,9 +75,7 @@ private:
...
@@ -79,9 +75,7 @@ private:
State
state
;
State
state
;
QString
sourceURL
;
QString
sourceURL
;
QScopedPointer
<
QImage
>
image
;
QScopedPointer
<
QImage
>
image
;
QVector
<
QVector
<
int32_t
>
>
heightModel
;
ulong
lastReference
;
uint64_t
lastReference
;
bool
_is3D
;
bool
syncFlag
;
bool
syncFlag
;
};
};
...
...
src/ui/map3D/WebImageCache.cc
View file @
06d57289
...
@@ -52,15 +52,14 @@ WebImageCache::WebImageCache(QObject* parent, uint32_t _cacheSize)
...
@@ -52,15 +52,14 @@ WebImageCache::WebImageCache(QObject* parent, uint32_t _cacheSize)
}
}
QPair
<
WebImagePtr
,
int32_t
>
QPair
<
WebImagePtr
,
int32_t
>
WebImageCache
::
lookup
(
const
QString
&
url
,
bool
useHeightModel
)
WebImageCache
::
lookup
(
const
QString
&
url
)
{
{
QPair
<
WebImagePtr
,
int32_t
>
cacheEntry
;
QPair
<
WebImagePtr
,
int32_t
>
cacheEntry
;
for
(
int32_t
i
=
0
;
i
<
webImages
.
size
();
++
i
)
for
(
int32_t
i
=
0
;
i
<
webImages
.
size
();
++
i
)
{
{
if
(
webImages
[
i
]
->
getState
()
!=
WebImage
::
UNINITIALIZED
&&
if
(
webImages
[
i
]
->
getState
()
!=
WebImage
::
UNINITIALIZED
&&
webImages
[
i
]
->
getSourceURL
()
==
url
&&
webImages
[
i
]
->
getSourceURL
()
==
url
)
webImages
[
i
]
->
is3D
()
==
useHeightModel
)
{
{
cacheEntry
.
first
=
webImages
[
i
];
cacheEntry
.
first
=
webImages
[
i
];
cacheEntry
.
second
=
i
;
cacheEntry
.
second
=
i
;
...
@@ -111,22 +110,7 @@ WebImageCache::lookup(const QString& url, bool useHeightModel)
...
@@ -111,22 +110,7 @@ WebImageCache::lookup(const QString& url, bool useHeightModel)
}
}
else
else
{
{
bool
success
;
if
(
cacheEntry
.
first
->
setData
(
url
))
if
(
useHeightModel
)
{
QString
heightURL
=
url
;
heightURL
.
replace
(
"color"
,
"dom"
);
heightURL
.
replace
(
".jpg"
,
".txt"
);
success
=
cacheEntry
.
first
->
setData
(
url
,
heightURL
);
}
else
{
success
=
cacheEntry
.
first
->
setData
(
url
);
}
if
(
success
)
{
{
cacheEntry
.
first
->
setSyncFlag
(
true
);
cacheEntry
.
first
->
setSyncFlag
(
true
);
cacheEntry
.
first
->
setState
(
WebImage
::
READY
);
cacheEntry
.
first
->
setState
(
WebImage
::
READY
);
...
...
src/ui/map3D/WebImageCache.h
View file @
06d57289
...
@@ -45,8 +45,7 @@ class WebImageCache : public QObject
...
@@ -45,8 +45,7 @@ class WebImageCache : public QObject
public:
public:
WebImageCache
(
QObject
*
parent
,
uint32_t
cacheSize
);
WebImageCache
(
QObject
*
parent
,
uint32_t
cacheSize
);
QPair
<
WebImagePtr
,
int32_t
>
lookup
(
const
QString
&
url
,
QPair
<
WebImagePtr
,
int32_t
>
lookup
(
const
QString
&
url
);
bool
useHeightModel
);
WebImagePtr
at
(
int32_t
index
)
const
;
WebImagePtr
at
(
int32_t
index
)
const
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment