[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [marble] src/lib/marble: Decide early to not render stuff that is too small
From:       Torsten Rahn <torsten.rahn () lge ! com>
Date:       2015-11-01 1:45:41
Message-ID: E1ZshiH-00025H-7z () scm ! kde ! org
[Download RAW message or body]

Git commit a8a427ab4a61a640c40e693dc0f36f005700cedf by Torsten Rahn.
Committed on 01/11/2015 at 01:44.
Pushed by rahn into branch 'master'.

Decide early to not render stuff that is too small
to be relevant.

M  +5    -6    src/lib/marble/ViewportParams.cpp
M  +2    -2    src/lib/marble/ViewportParams.h
M  +4    -0    src/lib/marble/geodata/graphicsitem/GeoLineStringGraphicsItem.cpp
M  +6    -0    src/lib/marble/geodata/graphicsitem/GeoPolygonGraphicsItem.cpp

http://commits.kde.org/marble/a8a427ab4a61a640c40e693dc0f36f005700cedf

diff --git a/src/lib/marble/ViewportParams.cpp b/src/lib/marble/ViewportParams.cpp
index a8b06d2..a3ae0fa 100644
--- a/src/lib/marble/ViewportParams.cpp
+++ b/src/lib/marble/ViewportParams.cpp
@@ -352,17 +352,16 @@ qreal ViewportParams::angularResolution() const
     return d->m_angularResolution;
 }
 
-bool ViewportParams::resolves ( const GeoDataLatLonBox &latLonBox ) const
+bool ViewportParams::resolves ( const GeoDataLatLonBox &latLonBox, qreal pixel ) \
const  {
-    return latLonBox.width() + latLonBox.height() > 2.0 * angularResolution();
+    return latLonBox.width() + latLonBox.height() > pixel * angularResolution();
 }
 
 
-bool ViewportParams::resolves ( const GeoDataLatLonAltBox &latLonAltBox ) const
+bool ViewportParams::resolves ( const GeoDataLatLonAltBox &latLonAltBox, qreal \
pixel, qreal altitude ) const  {
-    return    latLonAltBox.width() + latLonAltBox.height() > 2.0 * \
                angularResolution()
-           || latLonAltBox.maxAltitude() - latLonAltBox.minAltitude() > 10000;
-           
+    return    latLonAltBox.width() + latLonAltBox.height() > pixel * \
angularResolution() +           || latLonAltBox.maxAltitude() - \
latLonAltBox.minAltitude() > altitude;  }
 
 bool ViewportParams::resolves ( const GeoDataCoordinates &coord1, 
diff --git a/src/lib/marble/ViewportParams.h b/src/lib/marble/ViewportParams.h
index 09aeecb..3a9a3b5 100644
--- a/src/lib/marble/ViewportParams.h
+++ b/src/lib/marble/ViewportParams.h
@@ -76,9 +76,9 @@ class MARBLE_EXPORT ViewportParams
     // represent a single point on the screen already.
     // See angularResolution()
 
-    bool resolves ( const GeoDataLatLonBox &latLonBox ) const;
+    bool resolves ( const GeoDataLatLonBox &latLonBox, qreal pixel = 2.0 ) const;
 
-    bool resolves ( const GeoDataLatLonAltBox &latLonAltBox ) const;
+    bool resolves ( const GeoDataLatLonAltBox &latLonAltBox, qreal pixel = 2.0, \
qreal altitude = 10000.0 ) const;  
     // Determines whether two points are located enough apart so that it makes 
     // sense to display them as distinct points. If this is not the case
diff --git a/src/lib/marble/geodata/graphicsitem/GeoLineStringGraphicsItem.cpp \
b/src/lib/marble/geodata/graphicsitem/GeoLineStringGraphicsItem.cpp index \
                acbbc9f..b5a1ad7 100644
--- a/src/lib/marble/geodata/graphicsitem/GeoLineStringGraphicsItem.cpp
+++ b/src/lib/marble/geodata/graphicsitem/GeoLineStringGraphicsItem.cpp
@@ -54,6 +54,10 @@ const GeoDataLatLonAltBox& \
GeoLineStringGraphicsItem::latLonAltBox() const  
 void GeoLineStringGraphicsItem::paint( GeoPainter* painter, const ViewportParams* \
viewport )  {
+    if ( ( !viewport->resolves( m_lineString->latLonAltBox(), 2) ) ) {
+        return;
+    }
+
     LabelPositionFlags labelPositionFlags = NoLabel;
 
     painter->save();
diff --git a/src/lib/marble/geodata/graphicsitem/GeoPolygonGraphicsItem.cpp \
b/src/lib/marble/geodata/graphicsitem/GeoPolygonGraphicsItem.cpp index \
                1b94a92..d9d781e 100644
--- a/src/lib/marble/geodata/graphicsitem/GeoPolygonGraphicsItem.cpp
+++ b/src/lib/marble/geodata/graphicsitem/GeoPolygonGraphicsItem.cpp
@@ -249,6 +249,12 @@ void GeoPolygonGraphicsItem::paint( GeoPainter* painter, const \
ViewportParams* v  
     if ( isBuildingFrame || isBuildingRoof ) {
 
+        if ((m_polygon && \
!viewport->resolves(m_polygon->outerBoundary().latLonAltBox(), 4)) +            || \
(m_ring && !viewport->resolves(m_ring->latLonAltBox(), 4))) { +            \
painter->restore(); +            return;
+        }
+
         bool drawAccurate3D = false;
         bool isCameraAboveBuilding = false;
 


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic