void testEdgesInTolerance() { QgsPointLocator loc( mVL ); QgsPointLocator::MatchList lst = loc.edgesInRect( QgsPointXY( 0, 0 ), 2 ); QCOMPARE( lst.count(), 3 ); QgsPointLocator::MatchList lst2 = loc.edgesInRect( QgsPointXY( 0, 0 ), 0.9 ); QCOMPARE( lst2.count(), 1 ); // test match filtering FilterExcludeEdge myFilter( QgsPointXY( 1, 0 ), QgsPointXY( 0, 1 ) ); QgsPointLocator::MatchList lst3 = loc.edgesInRect( QgsPointXY( 0, 0 ), 2, &myFilter ); QCOMPARE( lst3.count(), 2 ); }
void testSnapModeCurrent() { QgsMapSettings mapSettings; mapSettings.setOutputSize( QSize( 100, 100 ) ); mapSettings.setExtent( QgsRectangle( 0, 0, 1, 1 ) ); QVERIFY( mapSettings.hasValidSettings() ); QgsSnappingUtils u; u.setMapSettings( mapSettings ); u.setCurrentLayer( mVL ); // first try with no snapping enabled QgsSnappingConfig snappingConfig = u.config(); snappingConfig.setEnabled( false ); snappingConfig.setTolerance( 10 ); snappingConfig.setUnits( QgsTolerance::Pixels ); snappingConfig.setMode( QgsSnappingConfig::ActiveLayer ); u.setConfig( snappingConfig ); QgsPointLocator::Match m0 = u.snapToMap( QPoint( 100, 100 ) ); QVERIFY( !m0.isValid() ); QVERIFY( !m0.hasVertex() ); // now enable snapping snappingConfig.setEnabled( true ); snappingConfig.setType( QgsSnappingConfig::Vertex ); u.setConfig( snappingConfig ); QgsPointLocator::Match m = u.snapToMap( QPoint( 100, 100 ) ); QVERIFY( m.isValid() ); QVERIFY( m.hasVertex() ); QCOMPARE( m.point(), QgsPoint( 1, 0 ) ); QgsPointLocator::Match m2 = u.snapToMap( QPoint( 0, 100 ) ); QVERIFY( !m2.isValid() ); QVERIFY( !m2.hasVertex() ); // do not consider edges in the following test - on 32-bit platforms // result was an edge match very close to (1,0) instead of being exactly (1,0) snappingConfig.setType( QgsSnappingConfig::Vertex ); u.setConfig( snappingConfig ); // test with filtering FilterExcludePoint myFilter( QgsPoint( 1, 0 ) ); QgsPointLocator::Match m3 = u.snapToMap( QPoint( 100, 100 ), &myFilter ); QVERIFY( !m3.isValid() ); }
void testVerticesInRect() { QgsPointLocator loc( mVL ); QgsPointLocator::MatchList lst = loc.verticesInRect( QgsPointXY( 1, 0 ), 2 ); QCOMPARE( lst.count(), 4 ); QCOMPARE( lst[0].point(), QgsPointXY( 1, 0 ) ); QCOMPARE( lst[0].distance(), 0. ); QCOMPARE( lst[1].point(), QgsPointXY( 1, 1 ) ); QCOMPARE( lst[1].distance(), 1. ); QCOMPARE( lst[2].point(), QgsPointXY( 0, 1 ) ); QCOMPARE( lst[2].distance(), std::sqrt( 2 ) ); QgsPointLocator::MatchList lst2 = loc.verticesInRect( QgsPointXY( 1, 0 ), 1 ); QCOMPARE( lst2.count(), 2 ); // test match filtering FilterExcludePoint myFilter( QgsPointXY( 1, 0 ) ); QgsPointLocator::MatchList lst3 = loc.verticesInRect( QgsPointXY( 1, 0 ), 1, &myFilter ); QCOMPARE( lst3.count(), 1 ); QCOMPARE( lst3[0].point(), QgsPointXY( 1, 1 ) ); }
void testSnapModeAdvanced() { QgsMapSettings mapSettings; mapSettings.setOutputSize( QSize( 100, 100 ) ); mapSettings.setExtent( QgsRectangle( 0, 0, 1, 1 ) ); QVERIFY( mapSettings.hasValidSettings() ); QgsSnappingUtils u; u.setMapSettings( mapSettings ); u.setSnapToMapMode( QgsSnappingUtils::SnapAdvanced ); QList<QgsSnappingUtils::LayerConfig> layers; layers << QgsSnappingUtils::LayerConfig( mVL, QgsPointLocator::Vertex, 10, QgsTolerance::Pixels ); u.setLayers( layers ); QgsPointLocator::Match m = u.snapToMap( QPoint( 100, 100 ) ); QVERIFY( m.isValid() ); QVERIFY( m.hasVertex() ); QCOMPARE( m.point(), QgsPoint( 1, 0 ) ); // test with filtering FilterExcludePoint myFilter( QgsPoint( 1, 0 ) ); QgsPointLocator::Match m2 = u.snapToMap( QPoint( 100, 100 ), &myFilter ); QVERIFY( !m2.isValid() ); }
void testSnapModeAdvanced() { QgsMapSettings mapSettings; mapSettings.setOutputSize( QSize( 100, 100 ) ); mapSettings.setExtent( QgsRectangle( 0, 0, 1, 1 ) ); QVERIFY( mapSettings.hasValidSettings() ); QgsSnappingUtils u; QgsSnappingConfig snappingConfig = u.config(); u.setMapSettings( mapSettings ); snappingConfig.setMode( QgsSnappingConfig::AdvancedConfiguration ); snappingConfig.setIndividualLayerSettings( mVL, QgsSnappingConfig::IndividualLayerSettings( true, QgsSnappingConfig::Vertex, 10, QgsTolerance::Pixels ) ); u.setConfig( snappingConfig ); QgsPointLocator::Match m = u.snapToMap( QPoint( 100, 100 ) ); QVERIFY( m.isValid() ); QVERIFY( m.hasVertex() ); QCOMPARE( m.point(), QgsPoint( 1, 0 ) ); // test with filtering FilterExcludePoint myFilter( QgsPoint( 1, 0 ) ); QgsPointLocator::Match m2 = u.snapToMap( QPoint( 100, 100 ), &myFilter ); QVERIFY( !m2.isValid() ); }
void FilterOnePoleCascade::test() { // make a filter, how fast does it run: float rise = 1.0; FilterOnePoleCascade myFilter( rise ); // first, test the filter speed ... long nLoops = 1000; Serial.print( "testing filter with a rise time of "); Serial.print( rise ); Serial.print( "s" ); Serial.print( "\n running filter speed loop ... "); float startTime, stopTime; startTime = millis()*1e-3; for( long i=0; i<nLoops; ++i ) { myFilter.input( PI ); // use pi, so it will actually do a full calculation } stopTime = millis()*1e-3; Serial.print( "done, filter runs at " ); Serial.print( float(nLoops) / (stopTime - startTime) ); Serial.print( " hz " ); Serial.print( "\n filter value: " ); Serial.print( myFilter.output() ); myFilter.setToNewValue( 0.0 ); Serial.print( "\n after reset to 0: "); Serial.print( myFilter.output() ); Serial.print( "\n testing rise time (10% to 90%) ..."); bool crossedTenPercent = false; while( myFilter.output() < 0.9 ) { myFilter.input( 1.0 ); if( myFilter.output() > 0.1 && !crossedTenPercent ) { // filter first crossed the 10% point startTime = millis()*1e-3; crossedTenPercent = true; } } stopTime = millis()*1e-3; Serial.print( "done, rise time: " ); Serial.print( stopTime-startTime ); Serial.print( "testing attenuation at f = 1/risetime" ); myFilter.setToNewValue( 0.0 ); float maxVal = 0; float valWasOutputThisCycle = true; float lastFilterVal = 0; while( true ) { float now = 1e-3*millis(); float currentFilterVal = myFilter.input( sin( TWO_PI*now) ); if( currentFilterVal < 0.0 ) { if( !valWasOutputThisCycle ) { // just crossed below zero, output the max Serial.print( maxVal*100 ); Serial.print( " %\n" ); valWasOutputThisCycle = true; } } } }