mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-14 00:07:35 -04:00
Remove QgsGeometryCache class
The geometry cache was only used for few geometry editing operations anyway. In earlier versions of QGIS the geometry cache was also used by old snapping classes which have been replaced by QgsPointLocator that also keeps a spatial index of geometries and it is not rebuilt on every re-render. Reasons for removal: - geometry cache was repopulated on every redraw of layers in editing mode, slowing down rendering - data structure for the cache was a simple map with features accessed by their ID (no spatial index) - the cache was only getting refreshed for the current view of the main map canvas (not a generic cache) - not used for snapping anymore where caching was important to avoid roundtrips to data provider
This commit is contained in:
parent
5e3c6e54be
commit
0a0c33dcf2
@ -264,6 +264,7 @@ should now call QgsCoordinateReferenceSystem::invalidateCache() and QgsCoordinat
|
||||
- QgsHtmlAnnotationItem. Use QgsHtmlAnnotation instead.
|
||||
- QgsHttpTransaction. This class was outdated and code should be ported to native Qt or Python implementations.
|
||||
- QgsGenericProjectionSelector. Use QgsProjectionSelectionTreeWidget instead.
|
||||
- QgsGeometryCache. It got redundant after removal of old snapping classes (QgsSnapper + friends).
|
||||
- QgsLabel and QgsLabelAttributes. Replaced by labeling based on PAL library, see QgsLabelingEngine.
|
||||
- QgsLabelingEngineInterface. Replaced by QgsLabelingEngine.
|
||||
- QgsLegendInterface was removed. It was replaced by layer tree API (QgsLayerTreeNode class and others).
|
||||
@ -1446,6 +1447,7 @@ and subclasses are not designed to be subclassed in PyQGIS.
|
||||
be used instead of a null pointer if no transformation is required.
|
||||
- prepareJobs() and drawLabeling() (neither available in PyQGIS) do not take QgsPalLabeling parameter anymore. All drawing of labels is done by QgsLabelingEngine.
|
||||
- drawOldLabeling(), drawNewLabeling() were removed. The method drawLabeling() should be used instead.
|
||||
- setRequestedGeometryCacheForLayers() was removed. There is no extra caching done during rendering job.
|
||||
|
||||
|
||||
QgsMapTool {#qgis_api_break_3_0_QgsMapTool}
|
||||
@ -2146,6 +2148,7 @@ QgsVectorLayerEditUtils {#qgis_api_break_3_0_QgsVectorLayerEditUtils}
|
||||
|
||||
- addTopologicalPoints() now accepts a geometry reference, not a pointer.
|
||||
- insertSegmentVerticesForSnap() has been removed.
|
||||
- cache() has been removed.
|
||||
|
||||
|
||||
QgsVectorLayerImport {#qgis_api_break_3_0_QgsVectorLayerImport}
|
||||
@ -2168,6 +2171,7 @@ QgsVectorLayerUndoCommand {#qgis_api_break_3_0_QgsVectorLayerUndoCommand}
|
||||
-------------------------
|
||||
|
||||
- QgsVectorLayerUndoCommandChangeGeometry constructor now accepts a geometry reference, not a pointer.
|
||||
- cache() has been removed.
|
||||
|
||||
|
||||
QgsVisibilityPresetCollection {#qgis_api_break_3_0_QgsVisibilityPresetCollection}
|
||||
|
@ -176,7 +176,6 @@
|
||||
%Include qgscacheindex.sip
|
||||
%Include qgscacheindexfeatureid.sip
|
||||
%Include qgsfeaturestore.sip
|
||||
%Include qgsgeometrycache.sip
|
||||
%Include qgslayerdefinition.sip
|
||||
%Include qgsprojectfiletransform.sip
|
||||
%Include qgsvectorlayereditutils.sip
|
||||
|
@ -1,26 +0,0 @@
|
||||
class QgsGeometryCache
|
||||
{
|
||||
%TypeHeaderCode
|
||||
#include <qgsgeometrycache.h>
|
||||
%End
|
||||
public:
|
||||
QgsGeometryCache();
|
||||
|
||||
QgsGeometryMap &cachedGeometries();
|
||||
|
||||
//! fetch geometry from cache, return true if successful
|
||||
bool geometry( QgsFeatureId fid, QgsGeometry &geometry );
|
||||
|
||||
//! store a geometry in the cache
|
||||
void cacheGeometry( QgsFeatureId fid, const QgsGeometry &geom );
|
||||
|
||||
//! get rid of the cached geometry
|
||||
void removeGeometry( QgsFeatureId fid );
|
||||
|
||||
/** Deletes the geometries in mCachedGeometries */
|
||||
void deleteCachedGeometries();
|
||||
|
||||
void setCachedGeometriesRect( const QgsRectangle &extent );
|
||||
const QgsRectangle &cachedGeometriesRect();
|
||||
|
||||
};
|
@ -61,10 +61,6 @@ class QgsMapRendererJob : QObject
|
||||
//! Does not take ownership of the object.
|
||||
void setCache( QgsMapRendererCache *cache );
|
||||
|
||||
//! Set which vector layers should be cached while rendering
|
||||
//! @note The way how geometries are cached is really suboptimal - this method may be removed in future releases
|
||||
void setRequestedGeometryCacheForLayers( const QStringList &layerIds );
|
||||
|
||||
//! Find out how long it took to finish the job (in milliseconds)
|
||||
int renderingTime() const;
|
||||
|
||||
|
@ -1590,7 +1590,6 @@ Returns the current transparency for the vector layer
|
||||
virtual QString htmlMetadata() const;
|
||||
|
||||
|
||||
|
||||
void setSimplifyMethod( const QgsVectorSimplifyMethod &simplifyMethod );
|
||||
%Docstring
|
||||
Set the simplification settings for fast rendering of features
|
||||
|
@ -6,9 +6,6 @@ class QgsVectorLayerEditUtils
|
||||
public:
|
||||
QgsVectorLayerEditUtils( QgsVectorLayer *layer );
|
||||
|
||||
QgsGeometryCache *cache();
|
||||
|
||||
|
||||
/** Insert a new vertex before the given vertex number,
|
||||
* in the given ring, item (first number is index 0), and feature
|
||||
* Not meaningful for Point geometries
|
||||
|
@ -17,7 +17,6 @@ class QgsVectorLayerUndoCommand : QUndoCommand
|
||||
|
||||
//! Returns the layer associated with the undo command
|
||||
QgsVectorLayer *layer();
|
||||
QgsGeometryCache *cache();
|
||||
|
||||
virtual int id() const;
|
||||
virtual bool mergeWith( QUndoCommand * );
|
||||
|
@ -155,7 +155,6 @@ SET(QGIS_CORE_SRCS
|
||||
qgsfieldproxymodel.cpp
|
||||
qgsfields.cpp
|
||||
qgsfontutils.cpp
|
||||
qgsgeometrycache.cpp
|
||||
qgsgeometrysimplifier.cpp
|
||||
qgsgeometryvalidator.cpp
|
||||
qgsgml.cpp
|
||||
@ -735,7 +734,6 @@ SET(QGIS_CORE_HDRS
|
||||
qgsfield_p.h
|
||||
qgsfields.h
|
||||
qgsfontutils.h
|
||||
qgsgeometrycache.h
|
||||
qgshistogram.h
|
||||
qgsindexedfeature.h
|
||||
qgsinterval.h
|
||||
|
@ -1,46 +0,0 @@
|
||||
/***************************************************************************
|
||||
qgsgeometrycache.cpp
|
||||
---------------------
|
||||
begin : March 2013
|
||||
copyright : (C) 2013 by Matthias Kuhn
|
||||
email : matthias at opengis dot ch
|
||||
***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
#include "qgsgeometrycache.h"
|
||||
#include "qgsvectorlayereditbuffer.h"
|
||||
#include "qgsgeometry.h"
|
||||
|
||||
QgsGeometryCache::QgsGeometryCache()
|
||||
{
|
||||
}
|
||||
|
||||
bool QgsGeometryCache::geometry( QgsFeatureId fid, QgsGeometry &geometry )
|
||||
{
|
||||
// no need to check changed geometries because all changed geometries are also cached
|
||||
|
||||
// first time this geometry has changed since last commit
|
||||
if ( !mCachedGeometries.contains( fid ) )
|
||||
return false;
|
||||
|
||||
geometry = mCachedGeometries[fid];
|
||||
return true;
|
||||
}
|
||||
|
||||
void QgsGeometryCache::cacheGeometry( QgsFeatureId fid, const QgsGeometry &geom )
|
||||
{
|
||||
mCachedGeometries[fid] = geom;
|
||||
}
|
||||
|
||||
|
||||
void QgsGeometryCache::deleteCachedGeometries()
|
||||
{
|
||||
// Destroy any cached geometries
|
||||
mCachedGeometries.clear();
|
||||
mCachedGeometriesRect = QgsRectangle();
|
||||
}
|
@ -1,60 +0,0 @@
|
||||
/***************************************************************************
|
||||
qgsgeometrycache.h
|
||||
---------------------
|
||||
begin : March 2013
|
||||
copyright : (C) 2013 by Matthias Kuhn
|
||||
email : matthias at opengis dot ch
|
||||
***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
#ifndef QGSGEOMETRYCACHE_H
|
||||
#define QGSGEOMETRYCACHE_H
|
||||
|
||||
#include "qgis_core.h"
|
||||
#include "qgsgeometry.h"
|
||||
#include "qgsfeature.h"
|
||||
#include "qgsrectangle.h"
|
||||
|
||||
#include <QMap>
|
||||
|
||||
/** \ingroup core
|
||||
* \class QgsGeometryCache
|
||||
*/
|
||||
class CORE_EXPORT QgsGeometryCache
|
||||
{
|
||||
public:
|
||||
QgsGeometryCache();
|
||||
|
||||
inline QgsGeometryMap &cachedGeometries() { return mCachedGeometries; }
|
||||
|
||||
//! fetch geometry from cache, return true if successful
|
||||
bool geometry( QgsFeatureId fid, QgsGeometry &geometry );
|
||||
|
||||
//! store a geometry in the cache
|
||||
void cacheGeometry( QgsFeatureId fid, const QgsGeometry &geom );
|
||||
|
||||
//! get rid of the cached geometry
|
||||
void removeGeometry( QgsFeatureId fid ) { mCachedGeometries.remove( fid ); }
|
||||
|
||||
//! Deletes the geometries in mCachedGeometries
|
||||
void deleteCachedGeometries();
|
||||
|
||||
void setCachedGeometriesRect( const QgsRectangle &extent ) { mCachedGeometriesRect = extent; }
|
||||
const QgsRectangle &cachedGeometriesRect() { return mCachedGeometriesRect; }
|
||||
|
||||
protected:
|
||||
|
||||
//! Cache of the committed geometries retrieved *for the current display*
|
||||
QgsGeometryMap mCachedGeometries;
|
||||
|
||||
//! Extent for which there are cached geometries
|
||||
QgsRectangle mCachedGeometriesRect;
|
||||
|
||||
};
|
||||
|
||||
#endif // QGSGEOMETRYCACHE_H
|
@ -341,19 +341,6 @@ void QgsMapRendererJob::drawLabeling( const QgsMapSettings &settings, QgsRenderC
|
||||
}
|
||||
|
||||
|
||||
void QgsMapRendererJob::updateLayerGeometryCaches()
|
||||
{
|
||||
QMap<QString, QgsGeometryCache>::const_iterator it = mGeometryCaches.constBegin();
|
||||
for ( ; it != mGeometryCaches.constEnd(); ++it )
|
||||
{
|
||||
const QgsGeometryCache &cache = it.value();
|
||||
if ( QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( QgsProject::instance()->mapLayer( it.key() ) ) )
|
||||
* vl->cache() = cache;
|
||||
}
|
||||
mGeometryCaches.clear();
|
||||
}
|
||||
|
||||
|
||||
bool QgsMapRendererJob::needTemporaryImage( QgsMapLayer *ml )
|
||||
{
|
||||
if ( ml->type() == QgsMapLayer::VectorLayer )
|
||||
|
@ -226,8 +226,6 @@ LayerRenderJobs QgsMapRendererJob::prepareJobs( QPainter *painter, QgsLabelingEn
|
||||
|
||||
bool requiresLabelRedraw = !( mCache && mCache->hasCacheImage( LABEL_CACHE_ID ) );
|
||||
|
||||
mGeometryCaches.clear();
|
||||
|
||||
while ( li.hasPrevious() )
|
||||
{
|
||||
QgsMapLayer *ml = li.previous();
|
||||
@ -341,14 +339,6 @@ LayerRenderJobs QgsMapRendererJob::prepareJobs( QPainter *painter, QgsLabelingEn
|
||||
if ( hasStyleOverride )
|
||||
ml->styleManager()->restoreOverrideStyle();
|
||||
|
||||
if ( mRequestedGeomCacheForLayers.contains( ml->id() ) )
|
||||
{
|
||||
if ( QgsVectorLayerRenderer *vlr = dynamic_cast<QgsVectorLayerRenderer *>( job.renderer ) )
|
||||
{
|
||||
vlr->setGeometryCachePointer( &mGeometryCaches[ ml->id()] );
|
||||
}
|
||||
}
|
||||
|
||||
} // while (li.hasPrevious())
|
||||
|
||||
return layerJobs;
|
||||
@ -428,8 +418,6 @@ void QgsMapRendererJob::cleanupJobs( LayerRenderJobs &jobs )
|
||||
|
||||
|
||||
jobs.clear();
|
||||
|
||||
updateLayerGeometryCaches();
|
||||
}
|
||||
|
||||
void QgsMapRendererJob::cleanupLabelJob( LabelRenderJob &job )
|
||||
|
@ -30,7 +30,6 @@
|
||||
|
||||
#include "qgsmapsettings.h"
|
||||
|
||||
#include "qgsgeometrycache.h"
|
||||
|
||||
class QgsLabelingEngine;
|
||||
class QgsLabelingResults;
|
||||
@ -186,10 +185,6 @@ class CORE_EXPORT QgsMapRendererJob : public QObject
|
||||
//! Does not take ownership of the object.
|
||||
void setCache( QgsMapRendererCache *cache );
|
||||
|
||||
//! Set which vector layers should be cached while rendering
|
||||
//! \note The way how geometries are cached is really suboptimal - this method may be removed in future releases
|
||||
void setRequestedGeometryCacheForLayers( const QStringList &layerIds ) { mRequestedGeomCacheForLayers = layerIds; }
|
||||
|
||||
//! Find out how long it took to finish the job (in milliseconds)
|
||||
int renderingTime() const { return mRenderingTime; }
|
||||
|
||||
@ -279,14 +274,6 @@ class CORE_EXPORT QgsMapRendererJob : public QObject
|
||||
|
||||
bool needTemporaryImage( QgsMapLayer *ml );
|
||||
|
||||
//! called when rendering has finished to update all layers' geometry caches
|
||||
void updateLayerGeometryCaches();
|
||||
|
||||
//! list of layer IDs for which the geometry cache should be updated
|
||||
QStringList mRequestedGeomCacheForLayers;
|
||||
//! map of geometry caches
|
||||
QMap<QString, QgsGeometryCache> mGeometryCaches;
|
||||
|
||||
const QgsFeatureFilterProvider *mFeatureFilterProvider = nullptr;
|
||||
};
|
||||
|
||||
|
@ -49,7 +49,6 @@
|
||||
#include "qgsfeature.h"
|
||||
#include "qgsfeaturerequest.h"
|
||||
#include "qgsfields.h"
|
||||
#include "qgsgeometrycache.h"
|
||||
#include "qgsgeometry.h"
|
||||
#include "qgslogger.h"
|
||||
#include "qgsmaplayerlegend.h"
|
||||
@ -142,7 +141,6 @@ QgsVectorLayer::QgsVectorLayer( const QString &vectorLayerPath,
|
||||
, mFeatureBlendMode( QPainter::CompositionMode_SourceOver ) // Default to normal feature blending
|
||||
, mLayerTransparency( 0 )
|
||||
, mVertexMarkerOnlyForSelection( false )
|
||||
, mCache( new QgsGeometryCache() )
|
||||
, mEditBuffer( nullptr )
|
||||
, mJoinBuffer( nullptr )
|
||||
, mExpressionFieldBuffer( nullptr )
|
||||
@ -190,7 +188,6 @@ QgsVectorLayer::~QgsVectorLayer()
|
||||
delete mEditBuffer;
|
||||
delete mJoinBuffer;
|
||||
delete mExpressionFieldBuffer;
|
||||
delete mCache;
|
||||
delete mLabeling;
|
||||
delete mDiagramLayerSettings;
|
||||
delete mDiagramRenderer;
|
||||
@ -2438,11 +2435,6 @@ bool QgsVectorLayer::commitChanges()
|
||||
QgsMessageLog::logMessage( tr( "Commit errors:\n %1" ).arg( mCommitErrors.join( QStringLiteral( "\n " ) ) ) );
|
||||
}
|
||||
|
||||
if ( mCache )
|
||||
{
|
||||
mCache->deleteCachedGeometries();
|
||||
}
|
||||
|
||||
updateFields();
|
||||
mDataProvider->updateExtents();
|
||||
|
||||
@ -2490,11 +2482,6 @@ bool QgsVectorLayer::rollBack( bool deleteBuffer )
|
||||
}
|
||||
emit editingStopped();
|
||||
|
||||
if ( mCache )
|
||||
{
|
||||
mCache->deleteCachedGeometries();
|
||||
}
|
||||
|
||||
if ( rollbackExtent )
|
||||
updateExtents();
|
||||
|
||||
|
@ -54,7 +54,6 @@ class QgsEditorWidgetWrapper;
|
||||
class QgsExpressionFieldBuffer;
|
||||
class QgsFeatureRenderer;
|
||||
class QgsGeometry;
|
||||
class QgsGeometryCache;
|
||||
class QgsGeometryVertexIndex;
|
||||
class QgsMapToPixel;
|
||||
class QgsRectangle;
|
||||
@ -1487,9 +1486,6 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
|
||||
|
||||
QString htmlMetadata() const override;
|
||||
|
||||
//! \note not available in Python bindings
|
||||
inline QgsGeometryCache *cache() SIP_SKIP { return mCache; }
|
||||
|
||||
/** Set the simplification settings for fast rendering of features
|
||||
* \since QGIS 2.2
|
||||
*/
|
||||
@ -1971,9 +1967,6 @@ class CORE_EXPORT QgsVectorLayer : public QgsMapLayer, public QgsExpressionConte
|
||||
//! Annotation form for this layer
|
||||
QString mAnnotationForm;
|
||||
|
||||
//! cache for some vector layer data - currently only geometries for faster editing
|
||||
QgsGeometryCache *mCache = nullptr;
|
||||
|
||||
//! stores information about uncommitted changes to layer
|
||||
QgsVectorLayerEditBuffer *mEditBuffer = nullptr;
|
||||
friend class QgsVectorLayerEditBuffer;
|
||||
|
@ -16,7 +16,6 @@
|
||||
|
||||
#include "qgsvectordataprovider.h"
|
||||
#include "qgsfeatureiterator.h"
|
||||
#include "qgsgeometrycache.h"
|
||||
#include "qgsvectorlayereditbuffer.h"
|
||||
#include "qgslinestring.h"
|
||||
#include "qgslogger.h"
|
||||
@ -39,16 +38,11 @@ bool QgsVectorLayerEditUtils::insertVertex( double x, double y, QgsFeatureId atF
|
||||
if ( !L->hasGeometryType() )
|
||||
return false;
|
||||
|
||||
QgsGeometry geometry;
|
||||
if ( !cache()->geometry( atFeatureId, geometry ) )
|
||||
{
|
||||
// it's not in cache: let's fetch it from layer
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( atFeatureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.hasGeometry() )
|
||||
return false; // geometry not found
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( atFeatureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.hasGeometry() )
|
||||
return false; // geometry not found
|
||||
|
||||
geometry = f.geometry();
|
||||
}
|
||||
QgsGeometry geometry = f.geometry();
|
||||
|
||||
geometry.insertVertex( x, y, beforeVertex );
|
||||
|
||||
@ -61,16 +55,11 @@ bool QgsVectorLayerEditUtils::insertVertex( const QgsPointV2 &point, QgsFeatureI
|
||||
if ( !L->hasGeometryType() )
|
||||
return false;
|
||||
|
||||
QgsGeometry geometry;
|
||||
if ( !cache()->geometry( atFeatureId, geometry ) )
|
||||
{
|
||||
// it's not in cache: let's fetch it from layer
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( atFeatureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.hasGeometry() )
|
||||
return false; // geometry not found
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( atFeatureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.hasGeometry() )
|
||||
return false; // geometry not found
|
||||
|
||||
geometry = f.geometry();
|
||||
}
|
||||
QgsGeometry geometry = f.geometry();
|
||||
|
||||
geometry.insertVertex( point, beforeVertex );
|
||||
|
||||
@ -89,16 +78,11 @@ bool QgsVectorLayerEditUtils::moveVertex( const QgsPointV2 &p, QgsFeatureId atFe
|
||||
if ( !L->hasGeometryType() )
|
||||
return false;
|
||||
|
||||
QgsGeometry geometry;
|
||||
if ( !cache()->geometry( atFeatureId, geometry ) )
|
||||
{
|
||||
// it's not in cache: let's fetch it from layer
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( atFeatureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.hasGeometry() )
|
||||
return false; // geometry not found
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( atFeatureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.hasGeometry() )
|
||||
return false; // geometry not found
|
||||
|
||||
geometry = f.geometry();
|
||||
}
|
||||
QgsGeometry geometry = f.geometry();
|
||||
|
||||
geometry.moveVertex( p, atVertex );
|
||||
|
||||
@ -112,16 +96,11 @@ QgsVectorLayer::EditResult QgsVectorLayerEditUtils::deleteVertex( QgsFeatureId f
|
||||
if ( !L->hasGeometryType() )
|
||||
return QgsVectorLayer::InvalidLayer;
|
||||
|
||||
QgsGeometry geometry;
|
||||
if ( !cache()->geometry( featureId, geometry ) )
|
||||
{
|
||||
// it's not in cache: let's fetch it from layer
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.hasGeometry() )
|
||||
return QgsVectorLayer::FetchFeatureFailed; // geometry not found
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.hasGeometry() )
|
||||
return QgsVectorLayer::FetchFeatureFailed; // geometry not found
|
||||
|
||||
geometry = f.geometry();
|
||||
}
|
||||
QgsGeometry geometry = f.geometry();
|
||||
|
||||
if ( !geometry.deleteVertex( vertex ) )
|
||||
return QgsVectorLayer::EditFailed;
|
||||
@ -208,22 +187,18 @@ int QgsVectorLayerEditUtils::addPart( const QgsPointSequence &points, QgsFeature
|
||||
|
||||
QgsGeometry geometry;
|
||||
bool firstPart = false;
|
||||
if ( !cache()->geometry( featureId, geometry ) ) // maybe it's in cache
|
||||
{
|
||||
// it's not in cache: let's fetch it from layer
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) )
|
||||
return 6; //not found
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) )
|
||||
return 6; //not found
|
||||
|
||||
if ( !f.hasGeometry() )
|
||||
{
|
||||
//no existing geometry, so adding first part to null geometry
|
||||
firstPart = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
geometry = f.geometry();
|
||||
}
|
||||
if ( !f.hasGeometry() )
|
||||
{
|
||||
//no existing geometry, so adding first part to null geometry
|
||||
firstPart = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
geometry = f.geometry();
|
||||
}
|
||||
|
||||
int errorCode = geometry.addPart( points, L->geometryType() ) ;
|
||||
@ -247,22 +222,18 @@ int QgsVectorLayerEditUtils::addPart( QgsCurve *ring, QgsFeatureId featureId )
|
||||
|
||||
QgsGeometry geometry;
|
||||
bool firstPart = false;
|
||||
if ( !cache()->geometry( featureId, geometry ) ) // maybe it's in cache
|
||||
{
|
||||
// it's not in cache: let's fetch it from layer
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) )
|
||||
return 6; //not found
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) )
|
||||
return 6; //not found
|
||||
|
||||
if ( !f.hasGeometry() )
|
||||
{
|
||||
//no existing geometry, so adding first part to null geometry
|
||||
firstPart = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
geometry = f.geometry();
|
||||
}
|
||||
if ( !f.hasGeometry() )
|
||||
{
|
||||
//no existing geometry, so adding first part to null geometry
|
||||
firstPart = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
geometry = f.geometry();
|
||||
}
|
||||
|
||||
int errorCode = geometry.addPart( ring, L->geometryType() ) ;
|
||||
@ -285,16 +256,11 @@ int QgsVectorLayerEditUtils::translateFeature( QgsFeatureId featureId, double dx
|
||||
if ( !L->hasGeometryType() )
|
||||
return 1;
|
||||
|
||||
QgsGeometry geometry;
|
||||
if ( !cache()->geometry( featureId, geometry ) ) // maybe it's in cache
|
||||
{
|
||||
// it's not in cache: let's fetch it from layer
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.hasGeometry() )
|
||||
return 1; //geometry not found
|
||||
QgsFeature f;
|
||||
if ( !L->getFeatures( QgsFeatureRequest().setFilterFid( featureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.hasGeometry() )
|
||||
return 1; //geometry not found
|
||||
|
||||
geometry = f.geometry();
|
||||
}
|
||||
QgsGeometry geometry = f.geometry();
|
||||
|
||||
int errorCode = geometry.translate( dx, dy );
|
||||
if ( errorCode == 0 )
|
||||
|
@ -23,7 +23,6 @@
|
||||
#include "qgsvectorlayer.h"
|
||||
#include "qgsgeometry.h"
|
||||
|
||||
class QgsGeometryCache;
|
||||
class QgsCurve;
|
||||
|
||||
/** \ingroup core
|
||||
@ -34,9 +33,6 @@ class CORE_EXPORT QgsVectorLayerEditUtils
|
||||
public:
|
||||
QgsVectorLayerEditUtils( QgsVectorLayer *layer );
|
||||
|
||||
inline QgsGeometryCache *cache() { return L->cache(); }
|
||||
|
||||
|
||||
/** Insert a new vertex before the given vertex number,
|
||||
* in the given ring, item (first number is index 0), and feature
|
||||
* Not meaningful for Point geometries
|
||||
|
@ -18,7 +18,6 @@
|
||||
#include "diagram/qgsdiagram.h"
|
||||
|
||||
#include "qgsdiagramrenderer.h"
|
||||
#include "qgsgeometrycache.h"
|
||||
#include "qgsmessagelog.h"
|
||||
#include "qgspallabeling.h"
|
||||
#include "qgsrenderer.h"
|
||||
@ -39,9 +38,6 @@
|
||||
|
||||
#include <QPicture>
|
||||
|
||||
// TODO:
|
||||
// - passing of cache to QgsVectorLayer
|
||||
|
||||
|
||||
QgsVectorLayerRenderer::QgsVectorLayerRenderer( QgsVectorLayer *layer, QgsRenderContext &context )
|
||||
: QgsMapLayerRenderer( layer->id() )
|
||||
@ -50,7 +46,6 @@ QgsVectorLayerRenderer::QgsVectorLayerRenderer( QgsVectorLayer *layer, QgsRender
|
||||
, mLayer( layer )
|
||||
, mFields( layer->fields() )
|
||||
, mRenderer( nullptr )
|
||||
, mCache( nullptr )
|
||||
, mLabeling( false )
|
||||
, mDiagrams( false )
|
||||
, mLabelProvider( nullptr )
|
||||
@ -265,18 +260,6 @@ bool QgsVectorLayerRenderer::render()
|
||||
return true;
|
||||
}
|
||||
|
||||
void QgsVectorLayerRenderer::setGeometryCachePointer( QgsGeometryCache *cache )
|
||||
{
|
||||
mCache = cache;
|
||||
|
||||
if ( mCache )
|
||||
{
|
||||
// Destroy all cached geometries and clear the references to them
|
||||
mCache->setCachedGeometriesRect( mContext.extent() );
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void QgsVectorLayerRenderer::drawRenderer( QgsFeatureIterator &fit )
|
||||
{
|
||||
@ -302,12 +285,6 @@ void QgsVectorLayerRenderer::drawRenderer( QgsFeatureIterator &fit )
|
||||
bool sel = mContext.showSelection() && mSelectedFeatureIds.contains( fet.id() );
|
||||
bool drawMarker = ( mDrawVertexMarkers && mContext.drawEditingInformation() && ( !mVertexMarkerOnlyForSelection || sel ) );
|
||||
|
||||
if ( mCache )
|
||||
{
|
||||
// Cache this for the use of (e.g.) modifying the feature's uncommitted geometry.
|
||||
mCache->cacheGeometry( fet.id(), fet.geometry() );
|
||||
}
|
||||
|
||||
// render feature
|
||||
bool rendered = mRenderer->renderFeature( fet, mContext, -1, sel, drawMarker );
|
||||
|
||||
@ -398,12 +375,6 @@ void QgsVectorLayerRenderer::drawRendererLevels( QgsFeatureIterator &fit )
|
||||
}
|
||||
features[sym].append( fet );
|
||||
|
||||
if ( mCache )
|
||||
{
|
||||
// Cache this for the use of (e.g.) modifying the feature's uncommitted geometry.
|
||||
mCache->cacheGeometry( fet.id(), fet.geometry() );
|
||||
}
|
||||
|
||||
// new labeling engine
|
||||
if ( mContext.labelingEngine() )
|
||||
{
|
||||
|
@ -24,7 +24,6 @@ class QgsVectorLayerFeatureSource;
|
||||
class QgsDiagramRenderer;
|
||||
class QgsDiagramLayerSettings;
|
||||
|
||||
class QgsGeometryCache;
|
||||
class QgsFeatureIterator;
|
||||
class QgsSingleSymbolRenderer;
|
||||
|
||||
@ -72,10 +71,6 @@ class QgsVectorLayerRenderer : public QgsMapLayerRenderer
|
||||
|
||||
virtual bool render() override;
|
||||
|
||||
//! where to save the cached geometries
|
||||
//! \note The way how geometries are cached is really suboptimal - this method may be removed in future releases
|
||||
void setGeometryCachePointer( QgsGeometryCache *cache );
|
||||
|
||||
private:
|
||||
|
||||
/** Registers label and diagram layer
|
||||
@ -114,8 +109,6 @@ class QgsVectorLayerRenderer : public QgsMapLayerRenderer
|
||||
|
||||
QgsFeatureRenderer *mRenderer = nullptr;
|
||||
|
||||
QgsGeometryCache *mCache = nullptr;
|
||||
|
||||
bool mDrawVertexMarkers;
|
||||
bool mVertexMarkerOnlyForSelection;
|
||||
int mVertexMarkerStyle, mVertexMarkerSize;
|
||||
|
@ -19,7 +19,6 @@
|
||||
#include "qgsgeometry.h"
|
||||
#include "qgsfeature.h"
|
||||
#include "qgsvectorlayer.h"
|
||||
#include "qgsgeometrycache.h"
|
||||
#include "qgsvectorlayereditbuffer.h"
|
||||
|
||||
#include "qgslogger.h"
|
||||
@ -51,9 +50,6 @@ void QgsVectorLayerUndoCommandAddFeature::undo()
|
||||
#endif
|
||||
mBuffer->mAddedFeatures.remove( mFeature.id() );
|
||||
|
||||
if ( mFeature.hasGeometry() )
|
||||
cache()->removeGeometry( mFeature.id() );
|
||||
|
||||
emit mBuffer->featureDeleted( mFeature.id() );
|
||||
}
|
||||
|
||||
@ -61,9 +57,6 @@ void QgsVectorLayerUndoCommandAddFeature::redo()
|
||||
{
|
||||
mBuffer->mAddedFeatures.insert( mFeature.id(), mFeature );
|
||||
|
||||
if ( mFeature.hasGeometry() )
|
||||
cache()->cacheGeometry( mFeature.id(), mFeature.geometry() );
|
||||
|
||||
emit mBuffer->featureAdded( mFeature.id() );
|
||||
}
|
||||
|
||||
@ -127,8 +120,7 @@ QgsVectorLayerUndoCommandChangeGeometry::QgsVectorLayerUndoCommandChangeGeometry
|
||||
{
|
||||
bool changedAlready = mBuffer->mChangedGeometries.contains( mFid );
|
||||
QgsGeometry geom;
|
||||
bool cachedGeom = cache()->geometry( mFid, geom );
|
||||
mOldGeom = ( changedAlready && cachedGeom ) ? geom : QgsGeometry();
|
||||
mOldGeom = changedAlready ? geom : QgsGeometry();
|
||||
}
|
||||
}
|
||||
|
||||
@ -164,7 +156,6 @@ void QgsVectorLayerUndoCommandChangeGeometry::undo()
|
||||
Q_ASSERT( it != mBuffer->mAddedFeatures.end() );
|
||||
it.value().setGeometry( mOldGeom );
|
||||
|
||||
cache()->cacheGeometry( mFid, mOldGeom );
|
||||
emit mBuffer->geometryChanged( mFid, mOldGeom );
|
||||
}
|
||||
else
|
||||
@ -178,14 +169,12 @@ void QgsVectorLayerUndoCommandChangeGeometry::undo()
|
||||
QgsFeature f;
|
||||
if ( layer()->getFeatures( QgsFeatureRequest().setFilterFid( mFid ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) && f.hasGeometry() )
|
||||
{
|
||||
cache()->cacheGeometry( mFid, f.geometry() );
|
||||
emit mBuffer->geometryChanged( mFid, f.geometry() );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mBuffer->mChangedGeometries[mFid] = mOldGeom;
|
||||
cache()->cacheGeometry( mFid, mOldGeom );
|
||||
emit mBuffer->geometryChanged( mFid, mOldGeom );
|
||||
}
|
||||
}
|
||||
@ -205,7 +194,6 @@ void QgsVectorLayerUndoCommandChangeGeometry::redo()
|
||||
{
|
||||
mBuffer->mChangedGeometries[ mFid ] = mNewGeom;
|
||||
}
|
||||
cache()->cacheGeometry( mFid, mNewGeom );
|
||||
emit mBuffer->geometryChanged( mFid, mNewGeom );
|
||||
}
|
||||
|
||||
|
@ -28,7 +28,6 @@
|
||||
#include "qgsfeature.h"
|
||||
|
||||
class QgsGeometry;
|
||||
class QgsGeometryCache;
|
||||
|
||||
#include "qgsvectorlayer.h"
|
||||
#include "qgsvectorlayereditbuffer.h"
|
||||
@ -52,7 +51,6 @@ class CORE_EXPORT QgsVectorLayerUndoCommand : public QUndoCommand
|
||||
|
||||
//! Returns the layer associated with the undo command
|
||||
inline QgsVectorLayer *layer() { return mBuffer->L; }
|
||||
inline QgsGeometryCache *cache() { return mBuffer->L->cache(); }
|
||||
|
||||
virtual int id() const override { return -1; }
|
||||
virtual bool mergeWith( const QUndoCommand * ) override { return false; }
|
||||
|
@ -526,17 +526,6 @@ void QgsMapCanvas::refreshMap()
|
||||
connect( mJob, &QgsMapRendererJob::finished, this, &QgsMapCanvas::rendererJobFinished );
|
||||
mJob->setCache( mCache );
|
||||
|
||||
QStringList layersForGeometryCache;
|
||||
Q_FOREACH ( QgsMapLayer *layer, mSettings.layers() )
|
||||
{
|
||||
if ( QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( layer ) )
|
||||
{
|
||||
if ( vl->isEditable() )
|
||||
layersForGeometryCache << vl->id();
|
||||
}
|
||||
}
|
||||
mJob->setRequestedGeometryCacheForLayers( layersForGeometryCache );
|
||||
|
||||
mJob->start();
|
||||
|
||||
// from now on we can accept refresh requests again
|
||||
|
Loading…
x
Reference in New Issue
Block a user