void QgsMapToolCapture::validateGeometry() { QSettings settings; if ( settings.value( "/qgis/digitizing/validate_geometries", 1 ).toInt() == 0 ) return; if ( mValidator ) { mValidator->deleteLater(); mValidator = 0; } mTip = ""; mGeomErrors.clear(); while ( !mGeomErrorMarkers.isEmpty() ) { delete mGeomErrorMarkers.takeFirst(); } QgsGeometry *g = 0; switch ( mCaptureMode ) { case CaptureNone: case CapturePoint: return; case CaptureLine: if ( size() < 2 ) return; g = new QgsGeometry( mCaptureCurve.curveToLine() ); break; case CapturePolygon: if ( size() < 3 ) return; QgsLineStringV2* exteriorRing = mCaptureCurve.curveToLine(); exteriorRing->close(); QgsPolygonV2* polygon = new QgsPolygonV2(); polygon->setExteriorRing( exteriorRing ); g = new QgsGeometry( polygon ); break; } if ( !g ) return; mValidator = new QgsGeometryValidator( g ); connect( mValidator, SIGNAL( errorFound( QgsGeometry::Error ) ), this, SLOT( addError( QgsGeometry::Error ) ) ); connect( mValidator, SIGNAL( finished() ), this, SLOT( validationFinished() ) ); mValidator->start(); QStatusBar *sb = QgisApp::instance()->statusBar(); sb->showMessage( tr( "Validation started." ) ); delete g; }
QgsAbstractGeometryV2* QgsGeometryImport::fromPolygon( const QgsPolygon& polygon ) { QgsPolygonV2* poly = new QgsPolygonV2(); QList<QgsCurveV2*> holes; for ( int i = 0; i < polygon.size(); ++i ) { QgsLineStringV2* l = linestringFromPolyline( polygon.at( i ) ); l->close(); if ( i == 0 ) { poly->setExteriorRing( l ); } else { holes.push_back( l ); } } poly->setInteriorRings( holes ); return poly; }