bool QgsVectorLayerEditUtils::insertVertex( double x, double y, QgsFeatureId atFeatureId, int beforeVertex ) { if ( !L->hasGeometryType() ) return false; QgsGeometry geometry; if ( !cache()->geometry( atFeatureId, geometry ) ) return false; // TODO: support also uncached geometries geometry.insertVertex( x, y, beforeVertex ); L->editBuffer()->changeGeometry( atFeatureId, &geometry ); return true; }
bool QgsVectorLayerEditUtils::insertVertex( const QgsPoint &point, QgsFeatureId atFeatureId, int beforeVertex ) { if ( !mLayer->isSpatial() ) return false; QgsFeature f; if ( !mLayer->getFeatures( QgsFeatureRequest().setFilterFid( atFeatureId ).setSubsetOfAttributes( QgsAttributeList() ) ).nextFeature( f ) || !f.hasGeometry() ) return false; // geometry not found QgsGeometry geometry = f.geometry(); geometry.insertVertex( point, beforeVertex ); mLayer->editBuffer()->changeGeometry( atFeatureId, geometry ); return true; }
bool QgsVectorLayerEditUtils::insertVertex( double x, double y, QgsFeatureId atFeatureId, int beforeVertex ) { 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.constGeometry() ) return false; // geometry not found geometry = *f.constGeometry(); } geometry.insertVertex( x, y, beforeVertex ); L->editBuffer()->changeGeometry( atFeatureId, &geometry ); return true; }