void checkDock::validate( ValidateType type ) { mErrorList.clear(); QList<QgsRubberBand*>::const_iterator it; for ( it = mRbErrorMarkers.begin(); it != mRbErrorMarkers.end(); ++it ) { QgsRubberBand* rb = *it; rb->reset(); delete rb; } mRbErrorMarkers.clear(); runTests( type ); mComment->setText( tr( "%1 errors were found" ).arg( mErrorList.count() ) ); mRBFeature1->reset(); mRBFeature2->reset(); mRBConflict->reset(); clearVertexMarkers(); mErrorTableView->resizeColumnsToContents(); mToggleRubberband->setChecked( true ); }
void checkDock::fix() { int row = mErrorTableView->currentIndex().row(); QString fixName = mFixBox->currentText(); if ( row == -1 ) return; mRBFeature1->reset(); mRBFeature2->reset(); mRBConflict->reset(); clearVertexMarkers(); if ( mErrorList[row]->fix( fixName ) ) { mErrorList.removeAt( row ); mErrorListModel->resetModel(); //parseErrorListByFeature(); mComment->setText( tr( "%1 errors were found" ).arg( mErrorList.count() ) ); qgsInterface->mapCanvas()->refresh(); } else QMessageBox::information( this, tr( "Topology fix error" ), tr( "Fixing failed!" ) ); }
checkDock::~checkDock() { delete mConfigureDialog; mRbErrorMarkers.clear(); clearVertexMarkers(); // delete errors in list deleteErrors(); delete mErrorListModel; }
void checkDock::updateRubberBands( bool visible ) { if ( !visible ) { mRBConflict->reset(); mRBFeature1->reset(); mRBFeature2->reset(); clearVertexMarkers(); } }
checkDock::~checkDock() { delete mRBConflict, mRBFeature1, mRBFeature2; delete mConfigureDialog; delete mErrorListModel; clearVertexMarkers(); // delete errors in list deleteErrors(); }
void checkDock::validate(ValidateType type) { mErrorList.clear(); runTests(type); mComment->setText(QString("%1 errors were found").arg(mErrorList.count())); mRBFeature1->reset(); mRBFeature2->reset(); mRBConflict->reset(); clearVertexMarkers(); mErrorTableView->resizeColumnsToContents(); }
void checkDock::validate( ValidateType type ) { mErrorList.clear(); qDeleteAll( mRbErrorMarkers ); mRbErrorMarkers.clear(); runTests( type ); mComment->setText( tr( "%1 errors were found" ).arg( mErrorList.count() ) ); mRBFeature1->reset(); mRBFeature2->reset(); mRBConflict->reset(); clearVertexMarkers(); mErrorTableView->resizeColumnsToContents(); mToggleRubberband->setChecked( true ); }
checkDock::~checkDock() { delete mConfigureDialog; delete mErrorListModel; QList<QgsRubberBand*>::const_iterator it; for ( it = mRbErrorMarkers.begin(); it != mRbErrorMarkers.end(); ++it ) { QgsRubberBand* rb = *it; rb->reset(); delete rb; } clearVertexMarkers(); // delete errors in list deleteErrors(); }
void checkDock::errorListClicked( const QModelIndex& index ) { int row = index.row(); QgsRectangle r = mErrorList[row]->boundingBox(); r.scale( 1.5 ); QgsMapCanvas* canvas = qgsInterface->mapCanvas(); canvas->setExtent( r ); canvas->refresh(); mFixBox->clear(); mFixBox->addItems( mErrorList[row]->fixNames() ); mFixBox->setCurrentIndex( mFixBox->findText( tr( "Select automatic fix" ) ) ); QgsFeature f; QgsGeometry* g; FeatureLayer fl = mErrorList[row]->featurePairs().first(); if ( !fl.layer ) { QgsMessageLog::logMessage( tr( "Invalid first layer" ), tr( "Topology plugin" ) ); return; } //fl1.layer->getFeatures( QgsFeatureRequest().setFilterFid( fl1.feature.id() ) ).nextFeature( f1 ); fl.layer->getFeatures( QgsFeatureRequest().setFilterFid( fl.feature.id() ) ).nextFeature( f ); g = f.geometry(); if ( !g ) { QgsMessageLog::logMessage( tr( "Invalid first geometry" ), tr( "Topology plugin" ) ); QMessageBox::information( this, tr( "Topology test" ), tr( "Feature not found in the layer.\nThe layer has probably changed.\nRun topology check again." ) ); return; } clearVertexMarkers(); // use vertex marker when highlighting a point // and rubber band otherwise if ( g->type() == QGis::Point ) { mVMFeature1 = new QgsVertexMarker( canvas ); mVMFeature1->setIconType( QgsVertexMarker::ICON_X ); mVMFeature1->setPenWidth( 5 ); mVMFeature1->setIconSize( 5 ); mVMFeature1->setColor( "blue" ); mVMFeature1->setCenter( g->asPoint() ); } else mRBFeature1->setToGeometry( g, fl.layer ); fl = mErrorList[row]->featurePairs()[1]; if ( !fl.layer ) { QgsMessageLog::logMessage( tr( "Invalid second layer" ), tr( "Topology plugin" ) ); return; } fl.layer->getFeatures( QgsFeatureRequest().setFilterFid( fl.feature.id() ) ).nextFeature( f ); g = f.geometry(); if ( !g ) { QgsMessageLog::logMessage( tr( "Invalid second geometry" ), tr( "Topology plugin" ) ); QMessageBox::information( this, tr( "Topology test" ), tr( "Feature not found in the layer.\nThe layer has probably changed.\nRun topology check again." ) ); return; } if ( g->type() == QGis::Point ) { mVMFeature2 = new QgsVertexMarker( canvas ); mVMFeature2->setIconType( QgsVertexMarker::ICON_BOX ); mVMFeature2->setPenWidth( 5 ); mVMFeature2->setIconSize( 5 ); mVMFeature2->setColor( "green" ); mVMFeature2->setCenter( g->asPoint() ); } else mRBFeature2->setToGeometry( g, fl.layer ); if ( !mErrorList[row]->conflict() ) { QgsMessageLog::logMessage( tr( "Invalid conflict" ), tr( "Topology plugin" ) ); return; } if ( mErrorList[row]->conflict()->type() == QGis::Point ) { mVMConflict = new QgsVertexMarker( canvas ); mVMConflict->setIconType( QgsVertexMarker::ICON_BOX ); mVMConflict->setPenWidth( 5 ); mVMConflict->setIconSize( 5 ); mVMConflict->setColor( "red" ); mVMConflict->setCenter( mErrorList[row]->conflict()->asPoint() ); } else mRBConflict->setToGeometry( mErrorList[row]->conflict(), fl.layer ); }
void checkDock::errorListClicked(const QModelIndex& index) { int row = index.row(); QgsRectangle r = mErrorList[row]->boundingBox(); r.scale(1.5); mQgisApp->mapCanvas()->setExtent(r); mQgisApp->mapCanvas()->refresh(); mFixBox->clear(); mFixBox->addItems(mErrorList[row]->fixNames()); mFixBox->setCurrentIndex(mFixBox->findText("Select automatic fix")); QgsFeature f; QgsGeometry* g; FeatureLayer fl = mErrorList[row]->featurePairs().first(); if (!fl.layer) { std::cout << "invalid layer 1\n"; return; } fl.layer->featureAtId(fl.feature.id(), f, true, false); g = f.geometry(); if (!g) { std::cout << "invalid geometry 1\n"<<std::flush; QMessageBox::information(this, "Topology test", "Feature not found in the layer.\nThe layer has probably changed.\nRun topology check again."); return; } clearVertexMarkers(); // use vertex marker when highlighting a point // and rubber band otherwise if (g->type() == QGis::Point) { mVMFeature1 = new QgsVertexMarker(mQgisApp->mapCanvas()); mVMFeature1->setIconType(QgsVertexMarker::ICON_BOX); mVMConflict->setPenWidth(5); mVMFeature1->setIconSize(5); mVMFeature1->setColor("blue"); mVMFeature1->setCenter(g->asPoint()); } else mRBFeature1->setToGeometry(g, fl.layer); fl = mErrorList[row]->featurePairs()[1]; if (!fl.layer) { std::cout << "invalid layer 2\n"; return; } fl.layer->featureAtId(fl.feature.id(), f, true, false); g = f.geometry(); if (!g) { std::cout << "invalid geometry 2\n" << std::flush; QMessageBox::information(this, "Topology test", "Feature not found in the layer.\nThe layer has probably changed.\nRun topology check again."); return; } if (g->type() == QGis::Point) { mVMFeature2 = new QgsVertexMarker(mQgisApp->mapCanvas()); mVMFeature2->setIconType(QgsVertexMarker::ICON_BOX); mVMConflict->setPenWidth(5); mVMConflict->setIconSize(5); mVMFeature2->setColor("red"); mVMFeature2->setCenter(g->asPoint()); } else mRBFeature2->setToGeometry(g, fl.layer); if (!mErrorList[row]->conflict()) { std::cout << "invalid conflict\n" << std::flush; return; } if (mErrorList[row]->conflict()->type() == QGis::Point) { mVMConflict = new QgsVertexMarker(mQgisApp->mapCanvas()); mVMConflict->setIconType(QgsVertexMarker::ICON_BOX); mVMConflict->setPenWidth(5); mVMConflict->setIconSize(5); mVMConflict->setColor("gold"); mVMConflict->setCenter(mErrorList[row]->conflict()->asPoint()); } else mRBConflict->setToGeometry(mErrorList[row]->conflict(), fl.layer); }