Example #1
0
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 );
}
Example #2
0
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!" ) );
}
Example #3
0
checkDock::~checkDock()
{
  delete mConfigureDialog;
  mRbErrorMarkers.clear();
  clearVertexMarkers();
  // delete errors in list
  deleteErrors();
  delete mErrorListModel;
}
Example #4
0
void checkDock::updateRubberBands( bool visible )
{
  if ( !visible )
  {
    mRBConflict->reset();
    mRBFeature1->reset();
    mRBFeature2->reset();

    clearVertexMarkers();
  }
}
Example #5
0
checkDock::~checkDock()
{
    delete mRBConflict, mRBFeature1, mRBFeature2;
    delete mConfigureDialog;
    delete mErrorListModel;

    clearVertexMarkers();

    // delete errors in list
    deleteErrors();
}
Example #6
0
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();
}
Example #7
0
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 );
}
Example #8
0
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();
}
Example #9
0
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 );
}
Example #10
0
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);
}