QgsRubberBand* QgsMapToolEdit::createRubberBand( QGis::GeometryType geometryType, bool alternativeBand ) { QSettings settings; QgsRubberBand* rb = new QgsRubberBand( mCanvas, geometryType ); rb->setWidth( settings.value( "/qgis/digitizing/line_width", 1 ).toInt() ); QColor color( settings.value( "/qgis/digitizing/line_color_red", 255 ).toInt(), settings.value( "/qgis/digitizing/line_color_green", 0 ).toInt(), settings.value( "/qgis/digitizing/line_color_blue", 0 ).toInt() ); double myAlpha = settings.value( "/qgis/digitizing/line_color_alpha", 200 ).toInt() / 255.0; if ( alternativeBand ) { myAlpha = myAlpha * settings.value( "/qgis/digitizing/line_color_alpha_scale", 0.75 ).toDouble(); rb->setLineStyle( Qt::DotLine ); } if ( geometryType == QGis::Polygon ) { color.setAlphaF( myAlpha ); } color.setAlphaF( myAlpha ); rb->setColor( color ); QColor fillColor( settings.value( "/qgis/digitizing/fill_color_red", 255 ).toInt(), settings.value( "/qgis/digitizing/fill_color_green", 0 ).toInt(), settings.value( "/qgis/digitizing/fill_color_blue", 0 ).toInt() ); myAlpha = settings.value( "/qgis/digitizing/fill_color_alpha", 30 ).toInt() / 255.0 ; fillColor.setAlphaF( myAlpha ); rb->setFillColor( fillColor ); rb->show(); return rb; }
void checkDock::runTests( ValidateType type ) { for ( int i = 0; i < mTestTable->rowCount(); ++i ) { QString testName = mTestTable->item( i, 0 )->text(); QString layer1Str = mTestTable->item( i, 3 )->text(); QString layer2Str = mTestTable->item( i, 4 )->text(); // test if layer1 is in the registry if ( !( ( QgsVectorLayer * )QgsProject::instance()->mapLayers().contains( layer1Str ) ) ) { QgsMessageLog::logMessage( tr( "Layer %1 not found in registry." ).arg( layer1Str ), tr( "Topology plugin" ) ); return; } QgsVectorLayer *layer1 = ( QgsVectorLayer * )QgsProject::instance()->mapLayer( layer1Str ); QgsVectorLayer *layer2 = nullptr; if ( ( QgsVectorLayer * )QgsProject::instance()->mapLayers().contains( layer2Str ) ) layer2 = ( QgsVectorLayer * )QgsProject::instance()->mapLayer( layer2Str ); QProgressDialog progress( testName, tr( "Abort" ), 0, layer1->featureCount(), this ); progress.setWindowModality( Qt::WindowModal ); connect( &progress, &QProgressDialog::canceled, mTest, &topolTest::setTestCanceled ); connect( mTest, &topolTest::progress, &progress, &QProgressDialog::setValue ); // run the test ErrorList errors = mTest->runTest( testName, layer1, layer2, type ); QList<TopolError *>::Iterator it; QgsRubberBand *rb = nullptr; for ( it = errors.begin(); it != errors.end(); ++it ) { TopolError *te = *it; te->conflict(); QgsSettings settings; if ( te->conflict().type() == QgsWkbTypes::PolygonGeometry ) { rb = new QgsRubberBand( qgsInterface->mapCanvas(), QgsWkbTypes::PolygonGeometry ); } else { rb = new QgsRubberBand( qgsInterface->mapCanvas(), te->conflict().type() ); } rb->setColor( "red" ); rb->setWidth( 4 ); rb->setToGeometry( te->conflict(), layer1 ); rb->show(); mRbErrorMarkers << rb; } disconnect( &progress, &QProgressDialog::canceled, mTest, &topolTest::setTestCanceled ); disconnect( mTest, &topolTest::progress, &progress, &QProgressDialog::setValue ); mErrorList << errors; } mToggleRubberband->setChecked( true ); mErrorListModel->resetModel(); }
QgsRubberBand* QgsMapToolEdit::createRubberBand( QGis::GeometryType geometryType ) { QSettings settings; QgsRubberBand* rb = new QgsRubberBand( mCanvas, geometryType ); QColor color( settings.value( "/qgis/digitizing/line_color_red", 255 ).toInt(), settings.value( "/qgis/digitizing/line_color_green", 0 ).toInt(), settings.value( "/qgis/digitizing/line_color_blue", 0 ).toInt() ); rb->setColor( color ); rb->setWidth( settings.value( "/qgis/digitizing/line_width", 1 ).toInt() ); rb->show(); return rb; }
void checkDock::toggleErrorMarker() { QList<QgsRubberBand*>::const_iterator it; for ( it = mRbErrorMarkers.begin(); it != mRbErrorMarkers.end(); ++it ) { QgsRubberBand* rb = *it; if ( mToggleRubberband->isChecked() ) { rb->show(); } else { rb->hide(); } } }
void QgsMapToolPinLabels::highlightLabel( const QgsLabelPosition &labelpos, const QString &id, const QColor &color ) { QgsRectangle rect = labelpos.labelRect; QgsRubberBand *rb = new QgsRubberBand( mCanvas, QgsWkbTypes::PolygonGeometry ); rb->addPoint( QgsPointXY( rect.xMinimum(), rect.yMinimum() ) ); rb->addPoint( QgsPointXY( rect.xMinimum(), rect.yMaximum() ) ); rb->addPoint( QgsPointXY( rect.xMaximum(), rect.yMaximum() ) ); rb->addPoint( QgsPointXY( rect.xMaximum(), rect.yMinimum() ) ); rb->addPoint( QgsPointXY( rect.xMinimum(), rect.yMinimum() ) ); rb->setColor( color ); rb->setWidth( 0 ); rb->show(); mHighlights.insert( id, rb ); }
void checkDock::toggleErrorMarkers() { QList<QgsRubberBand*>::const_iterator it; for ( it = mRbErrorMarkers.begin(); it != mRbErrorMarkers.end(); ++it ) { QgsRubberBand* rb = *it; if ( mMarkersVisible == true ) { rb->hide(); } else { rb->show(); } } mMarkersVisible = !mMarkersVisible; }
void checkDock::runTests( ValidateType type ) { for ( int i = 0; i < mTestTable->rowCount(); ++i ) { QString testName = mTestTable->item( i, 0 )->text(); QString toleranceStr = mTestTable->item( i, 3 )->text(); QString layer1Str = mTestTable->item( i, 4 )->text(); QString layer2Str = mTestTable->item( i, 5 )->text(); // test if layer1 is in the registry if ( !(( QgsVectorLayer* )mLayerRegistry->mapLayers().contains( layer1Str ) ) ) { QgsMessageLog::logMessage( tr( "Layer %1 not found in registry." ).arg( layer1Str ), tr( "Topology plugin" ) ); return; } QgsVectorLayer* layer1 = ( QgsVectorLayer* )mLayerRegistry->mapLayers()[layer1Str]; QgsVectorLayer* layer2 = 0; if (( QgsVectorLayer* )mLayerRegistry->mapLayers().contains( layer2Str ) ) layer2 = ( QgsVectorLayer* )mLayerRegistry->mapLayers()[layer2Str]; QProgressDialog progress( testName, tr( "Abort" ), 0, layer1->featureCount(), this ); progress.setWindowModality( Qt::WindowModal ); connect( &progress, SIGNAL( canceled() ), mTest, SLOT( setTestCancelled() ) ); connect( mTest, SIGNAL( progress( int ) ), &progress, SLOT( setValue( int ) ) ); // run the test ErrorList errors = mTest->runTest( testName, layer1, layer2, type, toleranceStr.toDouble() ); QList<TopolError*>::Iterator it; QgsRubberBand* rb = 0; for ( it = errors.begin(); it != errors.end(); ++it ) { TopolError* te = *it; te->conflict(); QSettings settings; if ( te->conflict()->type() == QGis::Polygon ) { rb = new QgsRubberBand( qgsInterface->mapCanvas(), true ); } else { rb = new QgsRubberBand( qgsInterface->mapCanvas(), te->conflict()->type() ); } rb->setColor( "red" ); rb->setWidth( 4 ); rb->setToGeometry( te->conflict(), layer1 ); rb->show(); mRbErrorMarkers << rb; } disconnect( &progress, SIGNAL( canceled() ), mTest, SLOT( setTestCancelled() ) ); disconnect( mTest, SIGNAL( progress( int ) ), &progress, SLOT( setValue( int ) ) ); mErrorList << errors; } mMarkersVisible = true; mErrorListModel->resetModel(); }