mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-06 00:07:29 -04:00
qgscameracontroller: Make TestQgs3DRendering class a friend
This allows to directly use `QgsCameraController` private member for tests and to remove `QgsCameraController4Test`.
This commit is contained in:
parent
d7db887357
commit
1fccd32782
@ -48,7 +48,6 @@ class QgsCameraPose;
|
|||||||
class QgsVector3D;
|
class QgsVector3D;
|
||||||
class QgsWindow3DEngine;
|
class QgsWindow3DEngine;
|
||||||
class Qgs3DMapScene;
|
class Qgs3DMapScene;
|
||||||
class QgsCameraController4Test;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \ingroup 3d
|
* \ingroup 3d
|
||||||
@ -356,7 +355,8 @@ class _3D_EXPORT QgsCameraController : public QObject
|
|||||||
|
|
||||||
MouseOperation mCurrentOperation = MouseOperation::None;
|
MouseOperation mCurrentOperation = MouseOperation::None;
|
||||||
|
|
||||||
friend QgsCameraController4Test;
|
// To test the cameracontroller
|
||||||
|
friend class TestQgs3DRendering;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // QGSCAMERACONTROLLER_H
|
#endif // QGSCAMERACONTROLLER_H
|
||||||
|
@ -56,8 +56,6 @@
|
|||||||
#include <QDir>
|
#include <QDir>
|
||||||
#include <QSignalSpy>
|
#include <QSignalSpy>
|
||||||
|
|
||||||
class QgsCameraController4Test;
|
|
||||||
|
|
||||||
class TestQgs3DRendering : public QgsTest
|
class TestQgs3DRendering : public QgsTest
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
@ -112,30 +110,6 @@ class TestQgs3DRendering : public QgsTest
|
|||||||
QgsVectorLayer *mLayerBuildings = nullptr;
|
QgsVectorLayer *mLayerBuildings = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* \ingroup UnitTests
|
|
||||||
* Helper class to access QgsCameraController properties
|
|
||||||
*/
|
|
||||||
class QgsCameraController4Test : public QgsCameraController
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
public:
|
|
||||||
QgsCameraController4Test( Qgs3DMapScene *parent = nullptr )
|
|
||||||
: QgsCameraController( parent )
|
|
||||||
{ }
|
|
||||||
|
|
||||||
// wraps protected methods
|
|
||||||
void superOnWheel( Qt3DInput::QWheelEvent *wheel ) { onWheel( wheel ); }
|
|
||||||
void superOnMousePressed( Qt3DInput::QMouseEvent *mouse ) { onMousePressed( mouse ); }
|
|
||||||
double superSampleDepthBuffer( const QImage &buffer, int px, int py ) { return sampleDepthBuffer( buffer, px, py ); }
|
|
||||||
|
|
||||||
// wraps protected member vars
|
|
||||||
QVector3D zoomPoint() { return mZoomPoint; }
|
|
||||||
double cumulatedWheelY() { return mCumulatedWheelY; }
|
|
||||||
Qt3DRender::QCamera *cameraBefore() { return mCameraBefore.get(); }
|
|
||||||
QgsCameraPose *cameraPose() { return &mCameraPose; }
|
|
||||||
};
|
|
||||||
|
|
||||||
QImage TestQgs3DRendering::convertDepthImageToGrayscaleImage( const QImage &depthImage )
|
QImage TestQgs3DRendering::convertDepthImageToGrayscaleImage( const QImage &depthImage )
|
||||||
{
|
{
|
||||||
const int width = depthImage.width();
|
const int width = depthImage.width();
|
||||||
@ -1600,7 +1574,6 @@ void TestQgs3DRendering::testDepthBuffer()
|
|||||||
|
|
||||||
// =============================================
|
// =============================================
|
||||||
// =========== TEST DEPTH
|
// =========== TEST DEPTH
|
||||||
QgsCameraController4Test *testCam = static_cast<QgsCameraController4Test *>( scene->cameraController() );
|
|
||||||
|
|
||||||
// retrieve 3D depth image
|
// retrieve 3D depth image
|
||||||
QImage depthImage = Qgs3DUtils::captureSceneDepthBuffer( engine, scene );
|
QImage depthImage = Qgs3DUtils::captureSceneDepthBuffer( engine, scene );
|
||||||
@ -1612,15 +1585,15 @@ void TestQgs3DRendering::testDepthBuffer()
|
|||||||
// set cameraController mouse pos to middle screen
|
// set cameraController mouse pos to middle screen
|
||||||
QMouseEvent mouseEvent( QEvent::MouseButtonPress, QPointF( midPos.x(), midPos.y() ),
|
QMouseEvent mouseEvent( QEvent::MouseButtonPress, QPointF( midPos.x(), midPos.y() ),
|
||||||
Qt::MiddleButton, Qt::MiddleButton, Qt::NoModifier );
|
Qt::MiddleButton, Qt::MiddleButton, Qt::NoModifier );
|
||||||
testCam->superOnMousePressed( new Qt3DInput::QMouseEvent( mouseEvent ) );
|
scene->cameraController()->onMousePressed( new Qt3DInput::QMouseEvent( mouseEvent ) );
|
||||||
|
|
||||||
// Check first wheel action
|
// Check first wheel action
|
||||||
QWheelEvent wheelEvent( midPos, midPos, QPoint(), QPoint( 0, 120 ),
|
QWheelEvent wheelEvent( midPos, midPos, QPoint(), QPoint( 0, 120 ),
|
||||||
Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase,
|
Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase,
|
||||||
false, Qt::MouseEventSynthesizedByApplication );
|
false, Qt::MouseEventSynthesizedByApplication );
|
||||||
testCam->superOnWheel( new Qt3DInput::QWheelEvent( wheelEvent ) );
|
scene->cameraController()->onWheel( new Qt3DInput::QWheelEvent( wheelEvent ) );
|
||||||
QCOMPARE( testCam->cumulatedWheelY(), wheelEvent.angleDelta().y() * 5 );
|
QCOMPARE( scene->cameraController()->mCumulatedWheelY, wheelEvent.angleDelta().y() * 5 );
|
||||||
QCOMPARE( testCam->cameraBefore()->viewCenter(), testCam->cameraPose()->centerPoint().toVector3D() );
|
QCOMPARE( scene->cameraController()->mCameraBefore->viewCenter(), scene->cameraController()->cameraPose().centerPoint().toVector3D() );
|
||||||
|
|
||||||
depthImage = Qgs3DUtils::captureSceneDepthBuffer( engine, scene );
|
depthImage = Qgs3DUtils::captureSceneDepthBuffer( engine, scene );
|
||||||
grayImage = convertDepthImageToGrayscaleImage( depthImage );
|
grayImage = convertDepthImageToGrayscaleImage( depthImage );
|
||||||
@ -1628,18 +1601,18 @@ void TestQgs3DRendering::testDepthBuffer()
|
|||||||
|
|
||||||
scene->cameraController()->depthBufferCaptured( depthImage );
|
scene->cameraController()->depthBufferCaptured( depthImage );
|
||||||
|
|
||||||
QGSCOMPARENEARVECTOR3D( testCam->zoomPoint(), QVector3D( -32.7, 224.6, 185.5 ), 1.0 );
|
QGSCOMPARENEARVECTOR3D( scene->cameraController()->mZoomPoint, QVector3D( -32.7, 224.6, 185.5 ), 1.0 );
|
||||||
QGSCOMPARENEARVECTOR3D( testCam->cameraPose()->centerPoint(), QVector3D( -32.7, 224.6, 185.5 ), 1.0 );
|
QGSCOMPARENEARVECTOR3D( scene->cameraController()->cameraPose().centerPoint(), QVector3D( -32.7, 224.6, 185.5 ), 1.0 );
|
||||||
QGSCOMPARENEAR( testCam->cameraPose()->distanceFromCenterPoint(), 955.4, 1.0 );
|
QGSCOMPARENEAR( scene->cameraController()->cameraPose().distanceFromCenterPoint(), 955.4, 1.0 );
|
||||||
QCOMPARE( testCam->cumulatedWheelY(), 0 );
|
QCOMPARE( scene->cameraController()->mCumulatedWheelY, 0 );
|
||||||
|
|
||||||
// Checking second wheel action
|
// Checking second wheel action
|
||||||
QWheelEvent wheelEvent2( midPos, midPos, QPoint(), QPoint( 0, 120 ),
|
QWheelEvent wheelEvent2( midPos, midPos, QPoint(), QPoint( 0, 120 ),
|
||||||
Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase,
|
Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase,
|
||||||
false, Qt::MouseEventSynthesizedByApplication );
|
false, Qt::MouseEventSynthesizedByApplication );
|
||||||
testCam->superOnWheel( new Qt3DInput::QWheelEvent( wheelEvent2 ) );
|
scene->cameraController()->onWheel( new Qt3DInput::QWheelEvent( wheelEvent2 ) );
|
||||||
QCOMPARE( testCam->cumulatedWheelY(), wheelEvent2.angleDelta().y() * 5 );
|
QCOMPARE( scene->cameraController()->mCumulatedWheelY, wheelEvent2.angleDelta().y() * 5 );
|
||||||
QCOMPARE( testCam->cameraBefore()->viewCenter(), testCam->cameraPose()->centerPoint().toVector3D() );
|
QCOMPARE( scene->cameraController()->mCameraBefore->viewCenter(), scene->cameraController()->cameraPose().centerPoint().toVector3D() );
|
||||||
|
|
||||||
depthImage = Qgs3DUtils::captureSceneDepthBuffer( engine, scene );
|
depthImage = Qgs3DUtils::captureSceneDepthBuffer( engine, scene );
|
||||||
grayImage = convertDepthImageToGrayscaleImage( depthImage );
|
grayImage = convertDepthImageToGrayscaleImage( depthImage );
|
||||||
@ -1647,18 +1620,18 @@ void TestQgs3DRendering::testDepthBuffer()
|
|||||||
|
|
||||||
scene->cameraController()->depthBufferCaptured( depthImage );
|
scene->cameraController()->depthBufferCaptured( depthImage );
|
||||||
|
|
||||||
QGSCOMPARENEARVECTOR3D( testCam->zoomPoint(), QVector3D( -32.5, 223.5, 184.7 ), 1.0 );
|
QGSCOMPARENEARVECTOR3D( scene->cameraController()->mZoomPoint, QVector3D( -32.5, 223.5, 184.7 ), 1.0 );
|
||||||
QGSCOMPARENEARVECTOR3D( testCam->cameraPose()->centerPoint(), QVector3D( -32.5, 223.5, 184.7 ), 1.0 );
|
QGSCOMPARENEARVECTOR3D( scene->cameraController()->cameraPose().centerPoint(), QVector3D( -32.5, 223.5, 184.7 ), 1.0 );
|
||||||
QGSCOMPARENEAR( testCam->cameraPose()->distanceFromCenterPoint(), 757.4, 1.0 );
|
QGSCOMPARENEAR( scene->cameraController()->cameraPose().distanceFromCenterPoint(), 757.4, 1.0 );
|
||||||
QCOMPARE( testCam->cumulatedWheelY(), 0 );
|
QCOMPARE( scene->cameraController()->mCumulatedWheelY, 0 );
|
||||||
|
|
||||||
// Checking third wheel action
|
// Checking third wheel action
|
||||||
QWheelEvent wheelEvent3( midPos, midPos, QPoint( ), QPoint( 0, 480 ),
|
QWheelEvent wheelEvent3( midPos, midPos, QPoint( ), QPoint( 0, 480 ),
|
||||||
Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase,
|
Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase,
|
||||||
false, Qt::MouseEventSynthesizedByApplication );
|
false, Qt::MouseEventSynthesizedByApplication );
|
||||||
testCam->superOnWheel( new Qt3DInput::QWheelEvent( wheelEvent3 ) );
|
scene->cameraController()->onWheel( new Qt3DInput::QWheelEvent( wheelEvent3 ) );
|
||||||
QCOMPARE( testCam->cumulatedWheelY(), wheelEvent3.angleDelta().y() * 5 );
|
QCOMPARE( scene->cameraController()->mCumulatedWheelY, wheelEvent3.angleDelta().y() * 5 );
|
||||||
QCOMPARE( testCam->cameraBefore()->viewCenter(), testCam->cameraPose()->centerPoint().toVector3D() );
|
QCOMPARE( scene->cameraController()->mCameraBefore->viewCenter(), scene->cameraController()->cameraPose().centerPoint().toVector3D() );
|
||||||
|
|
||||||
depthImage = Qgs3DUtils::captureSceneDepthBuffer( engine, scene );
|
depthImage = Qgs3DUtils::captureSceneDepthBuffer( engine, scene );
|
||||||
grayImage = convertDepthImageToGrayscaleImage( depthImage );
|
grayImage = convertDepthImageToGrayscaleImage( depthImage );
|
||||||
@ -1666,18 +1639,18 @@ void TestQgs3DRendering::testDepthBuffer()
|
|||||||
|
|
||||||
scene->cameraController()->depthBufferCaptured( depthImage );
|
scene->cameraController()->depthBufferCaptured( depthImage );
|
||||||
|
|
||||||
QGSCOMPARENEARVECTOR3D( testCam->zoomPoint(), QVector3D( -32.4, 222.8, 184.1 ), 1.0 );
|
QGSCOMPARENEARVECTOR3D( scene->cameraController()->mZoomPoint, QVector3D( -32.4, 222.8, 184.1 ), 1.0 );
|
||||||
QGSCOMPARENEARVECTOR3D( testCam->cameraPose()->centerPoint(), QVector3D( -32.4, 222.8, 184.1 ), 1.0 );
|
QGSCOMPARENEARVECTOR3D( scene->cameraController()->cameraPose().centerPoint(), QVector3D( -32.4, 222.8, 184.1 ), 1.0 );
|
||||||
QGSCOMPARENEAR( testCam->cameraPose()->distanceFromCenterPoint(), 126.4, 0.1 );
|
QGSCOMPARENEAR( scene->cameraController()->cameraPose().distanceFromCenterPoint(), 126.4, 0.1 );
|
||||||
QCOMPARE( testCam->cumulatedWheelY(), 0 );
|
QCOMPARE( scene->cameraController()->mCumulatedWheelY, 0 );
|
||||||
|
|
||||||
// Checking fourth wheel action
|
// Checking fourth wheel action
|
||||||
QWheelEvent wheelEvent4( midPos, midPos, QPoint(), QPoint( 0, 120 ),
|
QWheelEvent wheelEvent4( midPos, midPos, QPoint(), QPoint( 0, 120 ),
|
||||||
Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase,
|
Qt::NoButton, Qt::NoModifier, Qt::NoScrollPhase,
|
||||||
false, Qt::MouseEventSynthesizedByApplication );
|
false, Qt::MouseEventSynthesizedByApplication );
|
||||||
testCam->superOnWheel( new Qt3DInput::QWheelEvent( wheelEvent4 ) );
|
scene->cameraController()->onWheel( new Qt3DInput::QWheelEvent( wheelEvent4 ) );
|
||||||
QCOMPARE( testCam->cumulatedWheelY(), wheelEvent4.angleDelta().y() * 5 );
|
QCOMPARE( scene->cameraController()->mCumulatedWheelY, wheelEvent4.angleDelta().y() * 5 );
|
||||||
QCOMPARE( testCam->cameraBefore()->viewCenter(), testCam->cameraPose()->centerPoint().toVector3D() );
|
QCOMPARE( scene->cameraController()->mCameraBefore->viewCenter(), scene->cameraController()->cameraPose().centerPoint().toVector3D() );
|
||||||
|
|
||||||
depthImage = Qgs3DUtils::captureSceneDepthBuffer( engine, scene );
|
depthImage = Qgs3DUtils::captureSceneDepthBuffer( engine, scene );
|
||||||
grayImage = convertDepthImageToGrayscaleImage( depthImage );
|
grayImage = convertDepthImageToGrayscaleImage( depthImage );
|
||||||
@ -1685,10 +1658,10 @@ void TestQgs3DRendering::testDepthBuffer()
|
|||||||
|
|
||||||
scene->cameraController()->depthBufferCaptured( depthImage );
|
scene->cameraController()->depthBufferCaptured( depthImage );
|
||||||
|
|
||||||
QGSCOMPARENEARVECTOR3D( testCam->zoomPoint(), QVector3D( -32.3, 221.7, 183.2 ), 1.0 );
|
QGSCOMPARENEARVECTOR3D( scene->cameraController()->mZoomPoint, QVector3D( -32.3, 221.7, 183.2 ), 1.0 );
|
||||||
QGSCOMPARENEARVECTOR3D( testCam->cameraPose()->centerPoint(), QVector3D( -32.3, 221.7, 183.2 ), 1.0 );
|
QGSCOMPARENEARVECTOR3D( scene->cameraController()->cameraPose().centerPoint(), QVector3D( -32.3, 221.7, 183.2 ), 1.0 );
|
||||||
QGSCOMPARENEAR( testCam->cameraPose()->distanceFromCenterPoint(), 101.1, 0.1 );
|
QGSCOMPARENEAR( scene->cameraController()->cameraPose().distanceFromCenterPoint(), 101.1, 0.1 );
|
||||||
QCOMPARE( testCam->cumulatedWheelY(), 0 );
|
QCOMPARE( scene->cameraController()->mCumulatedWheelY, 0 );
|
||||||
|
|
||||||
// Checking camera position
|
// Checking camera position
|
||||||
QVector3D diff = scene->cameraController()->camera()->position() - startPos;
|
QVector3D diff = scene->cameraController()->camera()->position() - startPos;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user