Skip to content

Commit aceddae

Browse files
committed
QgsFeature cleanup, part 1
Deprecate some QgsFeature methods which take or return pointers, update other classes as required
1 parent 429fe2d commit aceddae

File tree

136 files changed

+869
-840
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

136 files changed

+869
-840
lines changed

doc/api_break.dox

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,15 @@ attributeIndexes(), pkAttributeIndexes(), isSaveAndLoadStyleToDBSupported()</li>
212212
</li>
213213
</ul>
214214

215+
\subsection qgis_api_break_3_0_QgsFeature QgsFeature
216+
217+
<ul>
218+
<li>geometryAndOwnership() has been removed. Use geometry() instead.</li>
219+
<li>setGeometryAndOwnership() has been removed. Use setGeometry() instead.</li>
220+
<li>The setGeometry( QgsGeometry* ) method has been removed, use setGeometry( const QgsGeometry& ) instead.</li>
221+
<li>setFields( const QgsFields*, bool ) has been removed, use setFields( const QgsFields&, bool ) instead.</li>
222+
</ul>
223+
215224
\subsection qgis_api_break_3_0_QgsGroupWMSDataDialog QgsGroupWMSDataDialog
216225

217226
<ul>
@@ -384,6 +393,12 @@ be returned instead of a null pointer if no transformation is required.</li>
384393
<li>setCoordinateTransform() now takes a QgsCoordinateTransform reference, not a pointer. An invalid QgsCoordinateTransform should be used instead of a null pointer if no transformation is required.</li>
385394
</ul>
386395

396+
\subsection qgis_api_break_3_0_QgsRubberBand QgsRubberBand
397+
398+
<ul>
399+
<li>setToGeometry() and addGeometry() now take geometry references, not pointers.</li>
400+
</ul>
401+
387402
\subsection qgis_api_break_3_0_QgsPalLayerSettings QgsPalLayerSettings
388403

389404
<ul>
@@ -418,6 +433,15 @@ plugins calling this method will need to be updated.</li>
418433
setExcludeAttributesWms()</li>
419434
<li>excludeAttributesWFS() and setExcludeAttributesWFS() have been renamed to excludeAttributesWfs() and
420435
setExcludeAttributesWfs()</li>
436+
<li>changeGeometry() now accepts a geometry reference, not a pointer.</li>
437+
<li>The geometryChanged() signal now uses a const QgsGeometry reference.</li>
438+
</ul>
439+
440+
\subsection qgis_api_break_3_0_QgsVectorLayerEditBuffer QgsVectorLayerEditBuffer
441+
442+
<ul>
443+
<li>changeGeometry() now accepts a geometry reference, not a pointer.</li>
444+
<li>The geometryChanged() signal now uses a const QgsGeometry reference.</li>
421445
</ul>
422446

423447
\subsection qgis_api_break_3_0_QgsVectorLayerImport QgsVectorLayerImport
@@ -429,6 +453,13 @@ pointers makes for more robust, safer code. Use an invalid (default constructed)
429453
in code which previously passed a null pointer to QgsVectorLayerImport.</li>
430454
</ul>
431455

456+
\subsection qgis_api_break_3_0_QgsVectorLayerUndoCommand QgsVectorLayerUndoCommand
457+
458+
<ul>
459+
<li>QgsVectorLayerUndoCommandChangeGeometry constructor now accepts a geometry reference, not a pointer.</li>
460+
</ul>
461+
462+
432463
\subsection qgis_api_break_3_0_QgsPointLocator QgsPointLocator
433464

434465
<ul>

python/core/qgsfeature.sip

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -333,7 +333,6 @@ class QgsFeature
333333
*
334334
* @returns pointer to feature's geometry
335335
* @see constGeometry
336-
* @see geometryAndOwnership
337336
* @see setGeometry
338337
*/
339338
QgsGeometry* geometry();
@@ -351,58 +350,14 @@ class QgsFeature
351350
*/
352351
const QgsGeometry* constGeometry() const;
353352

354-
/** Get the geometry object associated with this feature, and transfer ownership of the
355-
* geometry to the caller. The caller assumes responsibility for the QgsGeometry*'s destruction.
356-
* @returns pointer to feature's geometry
357-
* @see geometry
358-
* @see setGeometry
359-
* @deprecated use constGeometry() instead
360-
*/
361-
QgsGeometry *geometryAndOwnership() /Factory,Deprecated/;
362-
363353
/** Set this feature's geometry from another QgsGeometry object. This method performs a deep copy
364354
* of the geometry.
365355
* @param geom new feature geometry
366356
* @see geometry
367357
* @see constGeometry
368-
* @see geometryAndOwnership
369-
* @see setGeometryAndOwnership
370358
*/
371359
void setGeometry( const QgsGeometry& geom );
372360

373-
/** Set this feature's geometry from a QgsGeometry pointer. Ownership of the geometry is transferred
374-
* to the feature.
375-
* @param geom new feature geometry
376-
* @note not available in python bindings
377-
* @see geometry
378-
* @see constGeometry
379-
* @see geometryAndOwnership
380-
* @see setGeometryAndOwnership
381-
*/
382-
// void setGeometry( QgsGeometry* geom /Transfer/ );
383-
384-
/** Set this feature's geometry from WKB. This feature assumes responsibility for destroying the
385-
* created geometry.
386-
* @param geom geometry as WKB
387-
* @param length size of WKB
388-
* @see setGeometry
389-
* @see geometry
390-
* @see constGeometry
391-
* @see geometryAndOwnership
392-
* @deprecated will be removed in QGIS 3.0
393-
*/
394-
void setGeometryAndOwnership( unsigned char * geom /Transfer/, int length ) /Deprecated/;
395-
396-
/** Assign a field map with the feature to allow attribute access by attribute name.
397-
* @param fields The attribute fields which this feature holds
398-
* @param initAttributes If true, attributes are initialized. Clears any data previously assigned.
399-
* C++: Defaults to false
400-
* Python: Defaults to true
401-
* @deprecated use setFields( const QgsFields& fields, bool initAttributes = false ) instead
402-
* @note not available in Python bindings
403-
*/
404-
//void setFields( const QgsFields* fields, bool initAttributes = true );
405-
406361
/** Assign a field map with the feature to allow attribute access by attribute name.
407362
* @param fields The attribute fields which this feature holds
408363
* @param initAttributes If true, attributes are initialized. Clears any data previously assigned.

python/core/qgsvectorlayer.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -911,7 +911,7 @@ class QgsVectorLayer : QgsMapLayer
911911
bool setReadOnly( bool readonly = true );
912912

913913
/** Change feature's geometry */
914-
bool changeGeometry( QgsFeatureId fid, QgsGeometry* geom );
914+
bool changeGeometry( QgsFeatureId fid, const QgsGeometry& geom );
915915

916916
/**
917917
* Changes an attribute value (but does not commit it)
@@ -1615,7 +1615,7 @@ class QgsVectorLayer : QgsMapLayer
16151615
* @param fid The id of the changed feature
16161616
* @param geometry The new geometry
16171617
*/
1618-
void geometryChanged( QgsFeatureId fid, QgsGeometry& geometry );
1618+
void geometryChanged( QgsFeatureId fid, const QgsGeometry& geometry );
16191619

16201620
/** This signal is emitted, when attributes are deleted from the provider */
16211621
void committedAttributesDeleted( const QString& layerId, const QgsAttributeList& deletedAttributes );

python/core/qgsvectorlayereditbuffer.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class QgsVectorLayerEditBuffer : QObject
3131
virtual bool deleteFeatures( const QgsFeatureIds& fid );
3232

3333
/** Change feature's geometry */
34-
virtual bool changeGeometry( QgsFeatureId fid, QgsGeometry* geom );
34+
virtual bool changeGeometry( QgsFeatureId fid, QgsGeometry geom );
3535

3636
/** Changed an attribute value (but does not commit it) */
3737
virtual bool changeAttributeValue( QgsFeatureId fid, int field, const QVariant &newValue, const QVariant &oldValue = QVariant() );
@@ -145,7 +145,7 @@ class QgsVectorLayerEditBuffer : QObject
145145

146146
void featureAdded( QgsFeatureId fid );
147147
void featureDeleted( QgsFeatureId fid );
148-
void geometryChanged( QgsFeatureId fid, QgsGeometry &geom );
148+
void geometryChanged( QgsFeatureId fid, const QgsGeometry &geom );
149149
void attributeValueChanged( QgsFeatureId fid, int idx, const QVariant & );
150150
void attributeAdded( int idx );
151151
void attributeDeleted( int idx );

python/core/qgsvectorlayereditpassthrough.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ class QgsVectorLayerEditPassthrough : QgsVectorLayerEditBuffer
1010
bool addFeatures( QgsFeatureList& features );
1111
bool deleteFeature( QgsFeatureId fid );
1212
bool deleteFeatures( const QgsFeatureIds& fids );
13-
bool changeGeometry( QgsFeatureId fid, QgsGeometry* geom );
13+
bool changeGeometry( QgsFeatureId fid, QgsGeometry geom );
1414
bool changeAttributeValue( QgsFeatureId fid, int field, const QVariant &newValue, const QVariant &oldValue = QVariant() );
1515
bool addAttribute( const QgsField &field );
1616
bool deleteAttribute( int attr );

python/core/qgsvectorlayerundocommand.sip

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class QgsVectorLayerUndoCommandChangeGeometry : QgsVectorLayerUndoCommand
8787
* @param fid feature ID of feature to modify geometry of
8888
* @param newGeom new geometry for feature
8989
*/
90-
QgsVectorLayerUndoCommandChangeGeometry( QgsVectorLayerEditBuffer* buffer /Transfer/, QgsFeatureId fid, QgsGeometry* newGeom /Transfer/ );
90+
QgsVectorLayerUndoCommandChangeGeometry( QgsVectorLayerEditBuffer* buffer /Transfer/, QgsFeatureId fid, QgsGeometry newGeom );
9191
~QgsVectorLayerUndoCommandChangeGeometry();
9292

9393
virtual void undo();

python/gui/qgsrubberband.sip

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ class QgsRubberBand: QgsMapCanvasItem
170170
* @param layer the layer containing the feature, used for coord transformation to map
171171
* crs. In case of 0 pointer, the coordinates are not going to be transformed.
172172
*/
173-
void setToGeometry( const QgsGeometry *geom, QgsVectorLayer* layer );
173+
void setToGeometry( const QgsGeometry& geom, QgsVectorLayer* layer );
174174

175175
/**
176176
* Sets this rubber band to a map canvas rectangle
@@ -189,7 +189,7 @@ class QgsRubberBand: QgsMapCanvasItem
189189
* @param layer the layer containing the feature, used for coord transformation to map
190190
* crs. In case of 0 pointer, the coordinates are not going to be transformed.
191191
*/
192-
void addGeometry( const QgsGeometry *geom, QgsVectorLayer* layer );
192+
void addGeometry( const QgsGeometry& geom, QgsVectorLayer* layer );
193193

194194
/**
195195
* Adds translation to original coordinates (all in map coordinates)

src/analysis/interpolation/DualEdgeTriangulation.cc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3139,7 +3139,8 @@ bool DualEdgeTriangulation::saveAsShapefile( const QString& fileName ) const
31393139
lineGeom.push_back( QgsPoint( p1->getX(), p1->getY() ) );
31403140
lineGeom.push_back( QgsPoint( p2->getX(), p2->getY() ) );
31413141
QgsGeometry* geom = QgsGeometry::fromPolyline( lineGeom );
3142-
edgeLineFeature.setGeometry( geom );
3142+
edgeLineFeature.setGeometry( *geom );
3143+
delete geom;
31433144
edgeLineFeature.initAttributes( 1 );
31443145

31453146
//attributes

src/analysis/vector/qgsgeometryanalyzer.cpp

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,8 @@ void QgsGeometryAnalyzer::simplifyFeature( QgsFeature& f, QgsVectorFileWriter* v
138138
tmpGeometry = featureGeometry->simplify( tolerance );
139139

140140
QgsFeature newFeature;
141-
newFeature.setGeometry( tmpGeometry );
141+
newFeature.setGeometry( *tmpGeometry );
142+
delete tmpGeometry;
142143
newFeature.setAttributes( f.attributes() );
143144

144145
//add it to vector file writer
@@ -254,7 +255,8 @@ void QgsGeometryAnalyzer::centroidFeature( QgsFeature& f, QgsVectorFileWriter* v
254255
tmpGeometry = featureGeometry->centroid();
255256

256257
QgsFeature newFeature;
257-
newFeature.setGeometry( tmpGeometry );
258+
newFeature.setGeometry( *tmpGeometry );
259+
delete tmpGeometry;
258260
newFeature.setAttributes( f.attributes() );
259261

260262
//add it to vector file writer
@@ -331,7 +333,9 @@ bool QgsGeometryAnalyzer::extent( QgsVectorLayer* layer,
331333
attrs[8] = QVariant( height );
332334
attrs[9] = QVariant( width );
333335
feat.setAttributes( attrs );
334-
feat.setGeometry( QgsGeometry::fromRect( rect ) );
336+
QgsGeometry* g = QgsGeometry::fromRect( rect );
337+
feat.setGeometry( *g );
338+
delete g;
335339
vWriter.addFeature( feat );
336340
return true;
337341
}
@@ -493,7 +497,8 @@ bool QgsGeometryAnalyzer::convexHull( QgsVectorLayer* layer, const QString& shap
493497
attributes[2] = values.at( 1 );
494498
QgsFeature dissolveFeature;
495499
dissolveFeature.setAttributes( attributes );
496-
dissolveFeature.setGeometry( dissolveGeometry );
500+
dissolveFeature.setGeometry( *dissolveGeometry );
501+
delete dissolveGeometry;
497502
vWriter.addFeature( dissolveFeature );
498503
}
499504
//take all features
@@ -540,7 +545,8 @@ bool QgsGeometryAnalyzer::convexHull( QgsVectorLayer* layer, const QString& shap
540545
attributes[2] = QVariant( values[ 1 ] );
541546
QgsFeature dissolveFeature;
542547
dissolveFeature.setAttributes( attributes );
543-
dissolveFeature.setGeometry( dissolveGeometry );
548+
dissolveFeature.setGeometry( *dissolveGeometry );
549+
delete dissolveGeometry;
544550
vWriter.addFeature( dissolveFeature );
545551
}
546552
}
@@ -702,7 +708,8 @@ bool QgsGeometryAnalyzer::dissolve( QgsVectorLayer* layer, const QString& shapef
702708
++jt;
703709
}
704710
}
705-
outputFeature.setGeometry( dissolveGeometry );
711+
outputFeature.setGeometry( *dissolveGeometry );
712+
delete dissolveGeometry;
706713
vWriter.addFeature( outputFeature );
707714
}
708715
return true;
@@ -831,7 +838,8 @@ bool QgsGeometryAnalyzer::buffer( QgsVectorLayer* layer, const QString& shapefil
831838
QgsDebugMsg( "no dissolved geometry - should not happen" );
832839
return false;
833840
}
834-
dissolveFeature.setGeometry( dissolveGeometry );
841+
dissolveFeature.setGeometry( *dissolveGeometry );
842+
delete dissolveGeometry;
835843
vWriter.addFeature( dissolveFeature );
836844
}
837845
return true;
@@ -878,7 +886,8 @@ void QgsGeometryAnalyzer::bufferFeature( QgsFeature& f, int nProcessedFeatures,
878886
else //dissolve
879887
{
880888
QgsFeature newFeature;
881-
newFeature.setGeometry( bufferGeometry );
889+
newFeature.setGeometry( *bufferGeometry );
890+
delete bufferGeometry;
882891
newFeature.setAttributes( f.attributes() );
883892

884893
//add it to vector file writer
@@ -990,7 +999,8 @@ bool QgsGeometryAnalyzer::eventLayer( QgsVectorLayer* lineLayer, QgsVectorLayer*
990999
if ( lrsGeom )
9911000
{
9921001
++nOutputFeatures;
993-
addEventLayerFeature( fet, lrsGeom, featureIdIt->geometry(), fileWriter, memoryProviderFeatures, offsetField, offsetScale, forceSingleGeometry );
1002+
addEventLayerFeature( fet, lrsGeom, featureIdIt->constGeometry() ? *featureIdIt->constGeometry() :
1003+
QgsGeometry(), fileWriter, memoryProviderFeatures, offsetField, offsetScale, forceSingleGeometry );
9941004
}
9951005
}
9961006
if ( nOutputFeatures < 1 )
@@ -1012,7 +1022,7 @@ bool QgsGeometryAnalyzer::eventLayer( QgsVectorLayer* lineLayer, QgsVectorLayer*
10121022
return true;
10131023
}
10141024

1015-
void QgsGeometryAnalyzer::addEventLayerFeature( QgsFeature& feature, QgsGeometry* geom, QgsGeometry* lineGeom, QgsVectorFileWriter* fileWriter, QgsFeatureList& memoryFeatures,
1025+
void QgsGeometryAnalyzer::addEventLayerFeature( QgsFeature& feature, QgsGeometry* geom, const QgsGeometry& lineGeom, QgsVectorFileWriter* fileWriter, QgsFeatureList& memoryFeatures,
10161026
int offsetField, double offsetScale, bool forceSingleType )
10171027
{
10181028
if ( !geom )
@@ -1045,7 +1055,7 @@ void QgsGeometryAnalyzer::addEventLayerFeature( QgsFeature& feature, QgsGeometry
10451055
}
10461056
}
10471057

1048-
feature.setGeometry( *geomIt );
1058+
feature.setGeometry( **geomIt );
10491059
if ( fileWriter )
10501060
{
10511061
fileWriter->addFeature( feature );
@@ -1062,9 +1072,9 @@ void QgsGeometryAnalyzer::addEventLayerFeature( QgsFeature& feature, QgsGeometry
10621072
}
10631073
}
10641074

1065-
bool QgsGeometryAnalyzer::createOffsetGeometry( QgsGeometry* geom, QgsGeometry* lineGeom, double offset )
1075+
bool QgsGeometryAnalyzer::createOffsetGeometry( QgsGeometry* geom, const QgsGeometry& lineGeom, double offset )
10661076
{
1067-
if ( !geom || !lineGeom )
1077+
if ( !geom || lineGeom.isEmpty() )
10681078
{
10691079
return false;
10701080
}
@@ -1147,16 +1157,16 @@ bool QgsGeometryAnalyzer::createOffsetGeometry( QgsGeometry* geom, QgsGeometry*
11471157
return true;
11481158
}
11491159

1150-
QgsPoint QgsGeometryAnalyzer::createPointOffset( double x, double y, double dist, QgsGeometry* lineGeom ) const
1160+
QgsPoint QgsGeometryAnalyzer::createPointOffset( double x, double y, double dist, const QgsGeometry& lineGeom ) const
11511161
{
11521162
QgsPoint p( x, y );
11531163
QgsPoint minDistPoint;
11541164
int afterVertexNr;
1155-
lineGeom->closestSegmentWithContext( p, minDistPoint, afterVertexNr );
1165+
lineGeom.closestSegmentWithContext( p, minDistPoint, afterVertexNr );
11561166

11571167
int beforeVertexNr = afterVertexNr - 1;
1158-
QgsPoint beforeVertex = lineGeom->vertexAt( beforeVertexNr );
1159-
QgsPoint afterVertex = lineGeom->vertexAt( afterVertexNr );
1168+
QgsPoint beforeVertex = lineGeom.vertexAt( beforeVertexNr );
1169+
QgsPoint afterVertex = lineGeom.vertexAt( afterVertexNr );
11601170

11611171
//get normal vector
11621172
double dx = afterVertex.x() - beforeVertex.x();

src/analysis/vector/qgsgeometryanalyzer.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,14 @@ class ANALYSIS_EXPORT QgsGeometryAnalyzer
142142
void dissolveFeature( QgsFeature& f, int nProcessedFeatures, QgsGeometry** dissolveGeometry );
143143

144144
//helper functions for event layer
145-
void addEventLayerFeature( QgsFeature& feature, QgsGeometry* geom, QgsGeometry* lineGeom, QgsVectorFileWriter* fileWriter, QgsFeatureList& memoryFeatures, int offsetField = -1, double offsetScale = 1.0,
145+
void addEventLayerFeature( QgsFeature& feature, QgsGeometry* geom, const QgsGeometry& lineGeom, QgsVectorFileWriter* fileWriter, QgsFeatureList& memoryFeatures, int offsetField = -1, double offsetScale = 1.0,
146146
bool forceSingleType = false );
147147
/** Create geometry offset relative to line geometry.
148148
@param geom the geometry to modify
149149
@param lineGeom the line geometry to which the feature is referenced
150150
@param offset the offset value in layer unit. Negative values mean offset towards left, positive values offset to the right side*/
151-
bool createOffsetGeometry( QgsGeometry* geom, QgsGeometry* lineGeom, double offset );
152-
QgsPoint createPointOffset( double x, double y, double dist, QgsGeometry* lineGeom ) const;
151+
bool createOffsetGeometry( QgsGeometry* geom, const QgsGeometry& lineGeom, double offset );
152+
QgsPoint createPointOffset( double x, double y, double dist, const QgsGeometry& lineGeom ) const;
153153
QgsConstWkbPtr locateBetweenWkbString( QgsConstWkbPtr ptr, QgsMultiPolyline& result, double fromMeasure, double toMeasure );
154154
QgsConstWkbPtr locateAlongWkbString( QgsConstWkbPtr ptr, QgsMultiPoint& result, double measure );
155155
static bool clipSegmentByRange( double x1, double y1, double m1, double x2, double y2, double m2, double range1, double range2, QgsPoint& pt1, QgsPoint& pt2, bool& secondPointClipped );

src/analysis/vector/qgsoverlayanalyzer.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,8 @@ void QgsOverlayAnalyzer::intersectFeature( QgsFeature& f, QgsVectorFileWriter* v
169169
{
170170
intersectGeometry = featureGeometry->intersection( overlayFeature.constGeometry() );
171171

172-
outFeature.setGeometry( intersectGeometry );
172+
outFeature.setGeometry( *intersectGeometry );
173+
delete intersectGeometry;
173174
QgsAttributes attributesA = f.attributes();
174175
QgsAttributes attributesB = overlayFeature.attributes();
175176
combineAttributeMaps( attributesA, attributesB );

src/analysis/vector/qgspointsample.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -127,7 +127,8 @@ void QgsPointSample::addSamplePoints( QgsFeature& inputFeature, QgsVectorFileWri
127127
f.setAttribute( "id", mNCreatedPoints + 1 );
128128
f.setAttribute( "station_id", points + 1 );
129129
f.setAttribute( "stratum_id", inputFeature.id() );
130-
f.setGeometry( ptGeom );
130+
f.setGeometry( *ptGeom );
131+
delete ptGeom;
131132
writer.addFeature( f );
132133
sIndex.insertFeature( f );
133134
pointMapForFeature.insert( mNCreatedPoints, randPoint );

0 commit comments

Comments
 (0)