mirror of
https://github.com/qgis/QGIS.git
synced 2025-12-30 00:29:39 -05:00
add basic tests for QgsMapToolAdvancedDigitizing
This commit is contained in:
parent
a1597982b2
commit
2e59094602
@ -973,6 +973,8 @@ class GUI_EXPORT QgsAdvancedDigitizingDockWidget : public QgsDockWidget, private
|
||||
#endif
|
||||
//! Convenient method to convert a 2D Point to a QgsPoint
|
||||
QgsPoint pointXYToPoint( const QgsPointXY &point ) const;
|
||||
|
||||
friend class TestQgsAdvancedDigitizing;
|
||||
};
|
||||
|
||||
Q_DECLARE_OPERATORS_FOR_FLAGS( QgsAdvancedDigitizingDockWidget::CadCapacities )
|
||||
|
||||
@ -13,6 +13,7 @@ set(TESTS
|
||||
testqgsappbrowserproviders.cpp
|
||||
testqgisappclipboard.cpp
|
||||
testqgisappdockwidgets.cpp
|
||||
testqgsadvanceddigitizing.cpp
|
||||
testqgsattributetable.cpp
|
||||
testqgsapplocatorfilters.cpp
|
||||
testqgsdecorationscalebar.cpp
|
||||
|
||||
557
tests/src/app/testqgsadvanceddigitizing.cpp
Normal file
557
tests/src/app/testqgsadvanceddigitizing.cpp
Normal file
@ -0,0 +1,557 @@
|
||||
/***************************************************************************
|
||||
testqgsadvanceddigitizing.cpp
|
||||
----------------------
|
||||
Date : December 2021
|
||||
Copyright : (C) 2021 Antoine Facchini
|
||||
Email : antoine dot facchini at oslandia dot com
|
||||
***************************************************************************
|
||||
* *
|
||||
* This program is free software; you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation; either version 2 of the License, or *
|
||||
* (at your option) any later version. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
#include "qgstest.h"
|
||||
|
||||
#include "qgsadvanceddigitizingdockwidget.h"
|
||||
#include "qgsguiutils.h"
|
||||
#include "qgsapplication.h"
|
||||
#include "qgsmapcanvas.h"
|
||||
#include "qgsvectorlayer.h"
|
||||
#include "qgsmaptooladdfeature.h"
|
||||
#include "qgssettingsregistrycore.h"
|
||||
|
||||
#include "testqgsmaptoolutils.h"
|
||||
|
||||
|
||||
class TestQgsAdvancedDigitizing: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
private slots:
|
||||
void initTestCase(); // will be called before the first testfunction is executed.
|
||||
void cleanupTestCase(); // will be called after the last testfunction was executed.
|
||||
void init(); // will be called before each testfunction is executed.
|
||||
void cleanup(); // will be called after every testfunction.
|
||||
|
||||
TestQgsMapToolAdvancedDigitizingUtils getMapToolDigitizingUtils( QgsVectorLayer *layer );
|
||||
QString getWktFromLastAddedFeature( TestQgsMapToolAdvancedDigitizingUtils utils, QSet<QgsFeatureId> oldFeatures );
|
||||
void setCanvasCrs( QString crsString );
|
||||
|
||||
void distance();
|
||||
void distanceDiffCrs();
|
||||
void angle();
|
||||
void angleWithGeographicCrs();
|
||||
void distanceWithAngle();
|
||||
void coordinates();
|
||||
void coordinatesWithZM();
|
||||
void valuesWhenSnapping();
|
||||
|
||||
private:
|
||||
QgisApp *mQgisApp = nullptr;
|
||||
QgsMapToolAddFeature *mCaptureTool = nullptr;
|
||||
QgsMapCanvas *mCanvas = nullptr;
|
||||
QgsVectorLayer *mLayer3950 = nullptr;
|
||||
QgsVectorLayer *mLayer3950ZM = nullptr;
|
||||
QgsVectorLayer *mLayer4326 = nullptr;
|
||||
QgsVectorLayer *mLayer4326ZM = nullptr;
|
||||
QgsAdvancedDigitizingDockWidget *mAdvancedDigitizingDockWidget = nullptr;
|
||||
QgsSnappingUtils *mSnappingUtils = nullptr;
|
||||
|
||||
const double WKT_PRECISION = 2;
|
||||
};
|
||||
|
||||
void TestQgsAdvancedDigitizing::initTestCase()
|
||||
{
|
||||
QgsApplication::init();
|
||||
QgsApplication::initQgis();
|
||||
|
||||
mQgisApp = new QgisApp();
|
||||
|
||||
mCanvas = new QgsMapCanvas();
|
||||
setCanvasCrs( QStringLiteral( "EPSG:3950" ) );
|
||||
|
||||
QgsSettingsRegistryCore::settingsDigitizingDefaultZValue.setValue( 33 );
|
||||
QgsSettingsRegistryCore::settingsDigitizingDefaultMValue.setValue( 66 );
|
||||
|
||||
// make test layers
|
||||
QList<QgsMapLayer *> layers;
|
||||
|
||||
mLayer3950 = new QgsVectorLayer( QStringLiteral( "LineString?crs=EPSG:3950" ),
|
||||
QStringLiteral( "line layer" ), QStringLiteral( "memory" ) );
|
||||
QVERIFY( mLayer3950->isValid() );
|
||||
layers << mLayer3950;
|
||||
|
||||
mLayer3950ZM = new QgsVectorLayer( QStringLiteral( "LineStringZM?crs=EPSG:3950" ),
|
||||
QStringLiteral( "ZM line layer" ), QStringLiteral( "memory" ) );
|
||||
QVERIFY( mLayer3950ZM->isValid() );
|
||||
layers << mLayer3950ZM;
|
||||
|
||||
mLayer4326 = new QgsVectorLayer( QStringLiteral( "LineString?crs=EPSG:4326" ),
|
||||
QStringLiteral( "line layer diff crs" ), QStringLiteral( "memory" ) );
|
||||
QVERIFY( mLayer4326->isValid() );
|
||||
layers << mLayer4326;
|
||||
|
||||
mLayer4326ZM = new QgsVectorLayer( QStringLiteral( "LineStringZM?crs=EPSG:4326" ),
|
||||
QStringLiteral( "ZM line layer diff crs" ), QStringLiteral( "memory" ) );
|
||||
QVERIFY( mLayer4326ZM->isValid() );
|
||||
layers << mLayer4326ZM;
|
||||
|
||||
// set layers in canvas
|
||||
QgsProject::instance()->addMapLayers( layers );
|
||||
mCanvas->setLayers( layers );
|
||||
mCanvas->setCurrentLayer( mLayer3950 );
|
||||
|
||||
// create advanced digitizing dock widget
|
||||
mAdvancedDigitizingDockWidget = new QgsAdvancedDigitizingDockWidget( mCanvas );
|
||||
|
||||
// create snapping
|
||||
QgsSnappingConfig snapConfig;
|
||||
snapConfig.setEnabled( false );
|
||||
snapConfig.setMode( QgsSnappingConfig::AllLayers );
|
||||
snapConfig.setTypeFlag( QgsSnappingConfig::VertexFlag );
|
||||
snapConfig.setTolerance( 1.0 );
|
||||
|
||||
QgsMapSettings mapSettings;
|
||||
mapSettings.setExtent( QgsRectangle( 0, 0, 8, 8 ) );
|
||||
mapSettings.setOutputSize( QSize( 512, 512 ) );
|
||||
mapSettings.setLayers( layers );
|
||||
|
||||
mSnappingUtils = new QgsSnappingUtils;
|
||||
mSnappingUtils->setConfig( snapConfig );
|
||||
mSnappingUtils->setMapSettings( mapSettings );
|
||||
|
||||
mSnappingUtils->locatorForLayer( mLayer3950 )->init();
|
||||
mSnappingUtils->locatorForLayer( mLayer3950ZM )->init();
|
||||
mSnappingUtils->locatorForLayer( mLayer4326 )->init();
|
||||
mSnappingUtils->locatorForLayer( mLayer4326ZM )->init();
|
||||
|
||||
// create base map tool
|
||||
mCaptureTool = new QgsMapToolAddFeature( mCanvas, mAdvancedDigitizingDockWidget, QgsMapToolCapture::CaptureLine );
|
||||
mCanvas->setMapTool( mCaptureTool );
|
||||
}
|
||||
|
||||
void TestQgsAdvancedDigitizing::cleanupTestCase()
|
||||
{
|
||||
QgsSettingsRegistryCore::settingsDigitizingDefaultZValue.setValue( 0 );
|
||||
QgsSettingsRegistryCore::settingsDigitizingDefaultMValue.setValue( 0 );
|
||||
|
||||
delete mAdvancedDigitizingDockWidget;
|
||||
delete mSnappingUtils;
|
||||
delete mCaptureTool;
|
||||
delete mCanvas;
|
||||
QgsApplication::exitQgis();
|
||||
}
|
||||
|
||||
void TestQgsAdvancedDigitizing::init()
|
||||
{
|
||||
}
|
||||
|
||||
void TestQgsAdvancedDigitizing::cleanup()
|
||||
{
|
||||
mAdvancedDigitizingDockWidget->releaseLocks();
|
||||
mAdvancedDigitizingDockWidget->enableAction()->trigger();
|
||||
QVERIFY( !mAdvancedDigitizingDockWidget->cadEnabled() );
|
||||
|
||||
QgsSnappingConfig snapConfig = mSnappingUtils->config();
|
||||
snapConfig.setEnabled( false );
|
||||
mSnappingUtils->setConfig( snapConfig );
|
||||
|
||||
mLayer3950->rollBack();
|
||||
mLayer3950ZM->rollBack();
|
||||
mLayer4326->rollBack();
|
||||
mLayer4326ZM->rollBack();
|
||||
}
|
||||
|
||||
TestQgsMapToolAdvancedDigitizingUtils TestQgsAdvancedDigitizing::getMapToolDigitizingUtils( QgsVectorLayer *layer )
|
||||
{
|
||||
mCanvas->setCurrentLayer( layer );
|
||||
layer->startEditing();
|
||||
mCaptureTool->setLayer( layer );
|
||||
|
||||
mAdvancedDigitizingDockWidget->enableAction()->trigger();
|
||||
|
||||
return TestQgsMapToolAdvancedDigitizingUtils( mCaptureTool );
|
||||
}
|
||||
|
||||
QString TestQgsAdvancedDigitizing::getWktFromLastAddedFeature( TestQgsMapToolAdvancedDigitizingUtils utils, QSet<QgsFeatureId> oldFeatures )
|
||||
{
|
||||
const QgsFeatureId newFid = utils.newFeatureId( oldFeatures );
|
||||
auto layer = qobject_cast<const QgsVectorLayer *>( mCanvas->currentLayer() );
|
||||
|
||||
const QgsCoordinateTransform transform( layer->sourceCrs(), mCanvas->mapSettings().destinationCrs(),
|
||||
QgsProject::instance() );
|
||||
|
||||
QgsGeometry geom = layer->getFeature( newFid ).geometry();
|
||||
geom.transform( transform, Qgis::TransformDirection::Forward );
|
||||
|
||||
return geom.asWkt( WKT_PRECISION );
|
||||
}
|
||||
|
||||
void TestQgsAdvancedDigitizing::setCanvasCrs( QString crsString )
|
||||
{
|
||||
const QgsCoordinateReferenceSystem crs( crsString );
|
||||
QVERIFY( crs.isValid() );
|
||||
|
||||
mCanvas->setDestinationCrs( crs );
|
||||
mCanvas->setFrameStyle( QFrame::NoFrame );
|
||||
mCanvas->resize( 512, 512 );
|
||||
mCanvas->setExtent( QgsRectangle( 0, 0, 8, 8 ) );
|
||||
mCanvas->show(); // to make the canvas resize
|
||||
mCanvas->hide();
|
||||
}
|
||||
|
||||
void TestQgsAdvancedDigitizing::distance()
|
||||
{
|
||||
auto utils = getMapToolDigitizingUtils( mLayer3950 );
|
||||
QVERIFY( mAdvancedDigitizingDockWidget->cadEnabled() );
|
||||
|
||||
QSet<QgsFeatureId> oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
// with no digitized vertex
|
||||
auto capacities = mAdvancedDigitizingDockWidget->capacities();
|
||||
QVERIFY( !capacities.testFlag( QgsAdvancedDigitizingDockWidget::Distance ) );
|
||||
|
||||
QVERIFY( !mAdvancedDigitizingDockWidget->mAngleLineEdit->isEnabled() );
|
||||
QVERIFY( !mAdvancedDigitizingDockWidget->mDistanceLineEdit->isEnabled() );
|
||||
|
||||
// activate contrainst on seconde point (one digitized vertex)
|
||||
utils.mouseClick( 1, 1, Qt::LeftButton );
|
||||
|
||||
capacities = mAdvancedDigitizingDockWidget->capacities();
|
||||
QVERIFY( capacities.testFlag( QgsAdvancedDigitizingDockWidget::Distance ) );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setDistance( QStringLiteral( "10" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
|
||||
utils.mouseClick( 2, 2, Qt::LeftButton );
|
||||
utils.mouseClick( 1, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (1 1, 8.07 8.07)" ) );
|
||||
|
||||
// activate contrainst on third point
|
||||
oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
utils.mouseClick( 1, 1, Qt::LeftButton );
|
||||
utils.mouseClick( 2, 2, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setDistance( QStringLiteral( "5" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
|
||||
utils.mouseClick( 3, 2, Qt::LeftButton );
|
||||
utils.mouseClick( 1, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (1 1, 2 2, 7 2)" ) );
|
||||
|
||||
capacities = mAdvancedDigitizingDockWidget->capacities();
|
||||
QVERIFY( !capacities.testFlag( QgsAdvancedDigitizingDockWidget::Distance ) );
|
||||
}
|
||||
|
||||
void TestQgsAdvancedDigitizing::distanceDiffCrs()
|
||||
{
|
||||
auto utils = getMapToolDigitizingUtils( mLayer4326 );
|
||||
QSet<QgsFeatureId> oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
QVERIFY( mAdvancedDigitizingDockWidget->cadEnabled() );
|
||||
|
||||
utils.mouseClick( 1, 1, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setDistance( QStringLiteral( "10" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
|
||||
utils.mouseClick( 2, 2, Qt::LeftButton );
|
||||
utils.mouseClick( 1, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (1 1, 8.07 8.07)" ) );
|
||||
|
||||
// activate contrainst on third point
|
||||
oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
utils.mouseClick( 1, 1, Qt::LeftButton );
|
||||
utils.mouseClick( 2, 2, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setDistance( QStringLiteral( "5" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
|
||||
utils.mouseClick( 3, 2, Qt::LeftButton );
|
||||
utils.mouseClick( 1, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (1 1, 2 2, 7 2)" ) );
|
||||
}
|
||||
|
||||
void TestQgsAdvancedDigitizing::angle()
|
||||
{
|
||||
auto utils = getMapToolDigitizingUtils( mLayer3950 );
|
||||
QSet<QgsFeatureId> oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
QVERIFY( mAdvancedDigitizingDockWidget->cadEnabled() );
|
||||
|
||||
// with no digitized vertex
|
||||
auto capacities = mAdvancedDigitizingDockWidget->capacities();
|
||||
QVERIFY( !capacities.testFlag( QgsAdvancedDigitizingDockWidget::AbsoluteAngle ) );
|
||||
|
||||
// try angle hard lock in a side
|
||||
utils.mouseClick( 1, 1, Qt::LeftButton );
|
||||
|
||||
capacities = mAdvancedDigitizingDockWidget->capacities();
|
||||
QVERIFY( capacities.testFlag( QgsAdvancedDigitizingDockWidget::AbsoluteAngle ) );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setAngle( QStringLiteral( "90" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
|
||||
utils.mouseClick( 2, 2, Qt::LeftButton );
|
||||
utils.mouseClick( 2, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (1 1, 1 2)" ) );
|
||||
|
||||
// and in the other side
|
||||
oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
utils.mouseClick( 1, 1, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setAngle( QStringLiteral( "90" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
|
||||
utils.mouseClick( 2, -2, Qt::LeftButton );
|
||||
utils.mouseClick( 2, -2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (1 1, 1 -2)" ) );
|
||||
|
||||
// try with an angle of 45°
|
||||
oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
utils.mouseClick( 0, 0, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setAngle( QStringLiteral( "45" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
|
||||
utils.mouseClick( 0, 2, Qt::LeftButton );
|
||||
utils.mouseClick( 0, 2, Qt::RightButton );
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (0 0, 1 1)" ) );
|
||||
}
|
||||
|
||||
void TestQgsAdvancedDigitizing::angleWithGeographicCrs()
|
||||
{
|
||||
setCanvasCrs( QStringLiteral( "EPSG:4326" ) );
|
||||
|
||||
QVERIFY( mCanvas->mapSettings().destinationCrs().isGeographic() );
|
||||
|
||||
auto utils = getMapToolDigitizingUtils( mLayer3950 );
|
||||
QSet<QgsFeatureId> oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
QVERIFY( mAdvancedDigitizingDockWidget->cadEnabled() );
|
||||
|
||||
utils.mouseClick( 1, 1, Qt::LeftButton );
|
||||
|
||||
auto capacities = mAdvancedDigitizingDockWidget->capacities();
|
||||
QVERIFY( !capacities.testFlag( QgsAdvancedDigitizingDockWidget::AbsoluteAngle ) );
|
||||
|
||||
QVERIFY( !mAdvancedDigitizingDockWidget->constraintAngle()->isLocked() );
|
||||
|
||||
utils.mouseClick( 0, 2, Qt::RightButton );
|
||||
|
||||
utils.mouseClick( 1, 1, Qt::LeftButton );
|
||||
|
||||
// constraint angle can be forced even with geographical
|
||||
// should be normal ?
|
||||
mAdvancedDigitizingDockWidget->setAngle( QStringLiteral( "90" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
QVERIFY( mAdvancedDigitizingDockWidget->constraintAngle()->isLocked() );
|
||||
|
||||
utils.mouseClick( 2, 2, Qt::LeftButton );
|
||||
utils.mouseClick( 2, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (1 1, 1 2)" ) );
|
||||
|
||||
setCanvasCrs( QStringLiteral( "EPSG:3950" ) );
|
||||
}
|
||||
|
||||
void TestQgsAdvancedDigitizing::distanceWithAngle()
|
||||
{
|
||||
auto utils = getMapToolDigitizingUtils( mLayer3950 );
|
||||
QSet<QgsFeatureId> oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
QVERIFY( mAdvancedDigitizingDockWidget->cadEnabled() );
|
||||
|
||||
// with these 2 next locks, there are only 2 posssibilities
|
||||
// first
|
||||
utils.mouseClick( 0, 0, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setDistance( QStringLiteral( "10" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
mAdvancedDigitizingDockWidget->setAngle( QStringLiteral( "45" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
|
||||
utils.mouseClick( 0, 2, Qt::LeftButton );
|
||||
utils.mouseClick( 0, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (0 0, 7.07 7.07)" ) );
|
||||
|
||||
// second
|
||||
oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
utils.mouseClick( 0, 0, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setDistance( QStringLiteral( "10" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
mAdvancedDigitizingDockWidget->setAngle( QStringLiteral( "45" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
|
||||
utils.mouseClick( -1000, 59, Qt::LeftButton );
|
||||
utils.mouseClick( 0, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (0 0, -7.07 -7.07)" ) );
|
||||
}
|
||||
|
||||
|
||||
void TestQgsAdvancedDigitizing::coordinates()
|
||||
{
|
||||
auto utils = getMapToolDigitizingUtils( mLayer3950 );
|
||||
QSet<QgsFeatureId> oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
QVERIFY( mAdvancedDigitizingDockWidget->cadEnabled() );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setX( QStringLiteral( "5" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
utils.mouseClick( 0, 0, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setY( QStringLiteral( "5" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
utils.mouseClick( 3, 9, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setX( QStringLiteral( "6" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
mAdvancedDigitizingDockWidget->setY( QStringLiteral( "7" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
utils.mouseClick( 0, 0, Qt::LeftButton );
|
||||
|
||||
utils.mouseClick( 0, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (5 0, 3 5, 6 7)" ) );
|
||||
|
||||
// set Z/M constraints should have no effect
|
||||
oldFeatures = utils.existingFeatureIds();
|
||||
utils.mouseClick( 0, 0, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setZ( QStringLiteral( "3" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
mAdvancedDigitizingDockWidget->setM( QStringLiteral( "3" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
utils.mouseClick( 0, 2, Qt::LeftButton );
|
||||
|
||||
utils.mouseClick( 0, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (5 0, 0 2)" ) );
|
||||
}
|
||||
|
||||
|
||||
void TestQgsAdvancedDigitizing::coordinatesWithZM()
|
||||
{
|
||||
auto utils = getMapToolDigitizingUtils( mLayer3950ZM );
|
||||
QSet<QgsFeatureId> oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
QVERIFY( mAdvancedDigitizingDockWidget->cadEnabled() );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setX( QStringLiteral( "5" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
utils.mouseClick( 0, 0, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setY( QStringLiteral( "5" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
utils.mouseClick( 3, 9, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setZ( QStringLiteral( "5" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
utils.mouseClick( 4, 4, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setM( QStringLiteral( "5" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
utils.mouseClick( 6, 6, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setX( QStringLiteral( "9" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
mAdvancedDigitizingDockWidget->setY( QStringLiteral( "9" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
mAdvancedDigitizingDockWidget->setZ( QStringLiteral( "9" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
mAdvancedDigitizingDockWidget->setM( QStringLiteral( "9" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
utils.mouseClick( 0, 0, Qt::LeftButton );
|
||||
|
||||
utils.mouseClick( 0, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineStringZM (5 0 33 66, 3 5 33 66, 4 4 5 66, 6 6 33 5, 9 9 9 9)" ) );
|
||||
}
|
||||
|
||||
void TestQgsAdvancedDigitizing::valuesWhenSnapping()
|
||||
{
|
||||
auto utils = getMapToolDigitizingUtils( mLayer3950 );
|
||||
|
||||
QSet<QgsFeatureId> oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
QVERIFY( mAdvancedDigitizingDockWidget->cadEnabled() );
|
||||
|
||||
utils.mouseClick( 1, 1, Qt::LeftButton );
|
||||
utils.mouseClick( 2, 2, Qt::LeftButton );
|
||||
utils.mouseClick( 2, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (1 1, 2 2)" ) );
|
||||
|
||||
oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
QgsSnappingConfig snapConfig = mSnappingUtils->config();
|
||||
snapConfig.setEnabled( true );
|
||||
mSnappingUtils->setConfig( snapConfig );
|
||||
|
||||
mSnappingUtils->setCurrentLayer( mLayer3950 );
|
||||
mCanvas->setSnappingUtils( mSnappingUtils );
|
||||
|
||||
utils.mouseClick( 0, 2, Qt::LeftButton );
|
||||
utils.mouseClick( 2.02, 2, Qt::LeftButton );
|
||||
utils.mouseClick( 2, 2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (0 2, 2 2)" ) );
|
||||
|
||||
oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
utils.mouseClick( 0, -2, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setX( QStringLiteral( "0" ),
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
utils.mouseClick( 2.02, 2, Qt::LeftButton ); // shouldn't snap to (2 2)
|
||||
utils.mouseClick( -2, -2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (0 -2, 0 2)" ) );
|
||||
|
||||
oldFeatures = utils.existingFeatureIds();
|
||||
|
||||
utils.mouseClick( 0, -2, Qt::LeftButton );
|
||||
|
||||
mAdvancedDigitizingDockWidget->setX( QStringLiteral( "2.02" ), // shouldn't snap to (2 2)
|
||||
QgsAdvancedDigitizingDockWidget::ReturnPressed );
|
||||
utils.mouseClick( 0, 2, Qt::LeftButton );
|
||||
utils.mouseClick( -2, -2, Qt::RightButton );
|
||||
|
||||
QCOMPARE( getWktFromLastAddedFeature( utils, oldFeatures ),
|
||||
QStringLiteral( "LineString (0 -2, 2.02 2)" ) );
|
||||
}
|
||||
|
||||
QGSTEST_MAIN( TestQgsAdvancedDigitizing )
|
||||
#include "testqgsadvanceddigitizing.moc"
|
||||
Loading…
x
Reference in New Issue
Block a user