test_geometryutils.cpp 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /***************************************************************************
  2. test_geometryutils.h
  3. --------------------
  4. begin : Jun 2020
  5. copyright : (C) 2020 by Ivan Ivanov
  6. email : ivan@opengis.ch
  7. ***************************************************************************/
  8. /***************************************************************************
  9. * *
  10. * This program is free software; you can redistribute it and/or modify *
  11. * it under the terms of the GNU General Public License as published by *
  12. * the Free Software Foundation; either version 2 of the License, or *
  13. * (at your option) any later version. *
  14. * *
  15. ***************************************************************************/
  16. #define CATCH_CONFIG_MAIN
  17. #include "rubberbandmodel.h"
  18. #include "utils/geometryutils.h"
  19. #include <qgis.h>
  20. #include <qgsvectorlayer.h>
  21. #include "catch2.h"
  22. TEST_CASE( "GeometryUtils" )
  23. {
  24. std::unique_ptr<RubberbandModel> model = std::make_unique<RubberbandModel>();
  25. std::unique_ptr<QgsVectorLayer> mLayer = std::make_unique<QgsVectorLayer>( QStringLiteral( "Polygon?crs=epsg:3946" ), QStringLiteral( "vl" ), QStringLiteral( "memory" ) );
  26. QgsFeature f( mLayer->fields(), 1 );
  27. f.setGeometry( QgsGeometry::fromWkt( QStringLiteral( "Polygon ((8 8, 9 8, 8 9, 8 8))" ) ) );
  28. REQUIRE( mLayer->startEditing() );
  29. REQUIRE( mLayer->addFeature( f ) );
  30. REQUIRE( mLayer->commitChanges() );
  31. model->setGeometryType( mLayer->geometryType() );
  32. SECTION( "PolygonFromRubberband" )
  33. {
  34. const QgsCoordinateReferenceSystem crs = QgsCoordinateReferenceSystem::fromEpsgId( 3946 );
  35. model->addVertexFromPoint( QgsPoint( 0, 0 ) );
  36. model->addVertexFromPoint( QgsPoint( 2, 1 ) );
  37. model->addVertexFromPoint( QgsPoint( 1, 2 ) );
  38. QgsGeometry geom = GeometryUtils::polygonFromRubberband( model.get(), crs );
  39. REQUIRE( geom.asWkt() == QStringLiteral( "Polygon ((0 0, 2 1, 1 2, 1 2, 0 0))" ) );
  40. }
  41. SECTION( " AddRingFromRubberband" )
  42. {
  43. REQUIRE( mLayer->startEditing() );
  44. REQUIRE( GeometryUtils::addRingFromRubberband( mLayer.get(), 100, model.get() ) == GeometryUtils::GeometryOperationResult::AddRingNotInExistingFeature );
  45. model->addVertexFromPoint( QgsPoint( 8.1, 8.1 ) );
  46. model->addVertexFromPoint( QgsPoint( 8.9, 8.1 ) );
  47. model->addVertexFromPoint( QgsPoint( 8.1, 8.9 ) );
  48. mLayer->select( 1 );
  49. REQUIRE( GeometryUtils::addRingFromRubberband( mLayer.get(), 1, model.get() ) == GeometryUtils::GeometryOperationResult::Success );
  50. REQUIRE( mLayer->rollBack() );
  51. }
  52. SECTION( "SplitFeatureFromRubberband" )
  53. {
  54. REQUIRE( mLayer->startEditing() );
  55. REQUIRE( GeometryUtils::splitFeatureFromRubberband( mLayer.get(), model.get() ) == GeometryUtils::GeometryOperationResult::NothingHappened );
  56. model->addVertexFromPoint( QgsPoint( 7.5, 8.5 ) );
  57. model->addVertexFromPoint( QgsPoint( 9.5, 8.5 ) );
  58. mLayer->select( 1 );
  59. REQUIRE( GeometryUtils::splitFeatureFromRubberband( mLayer.get(), model.get() ) == GeometryUtils::GeometryOperationResult::Success );
  60. REQUIRE( mLayer->rollBack() );
  61. }
  62. }