From c7b6a115df1b25d1fc623dd3d7a15e2ceb3428a9 Mon Sep 17 00:00:00 2001 From: Nyall Dawson Date: Wed, 15 Jul 2020 11:14:28 +1000 Subject: [PATCH] Better initialization of 3d framework, usable outside of app --- python/3d/auto_generated/qgs3d.sip.in | 5 +++++ src/3d/qgs3d.cpp | 21 +++++++++++++++++++++ src/3d/qgs3d.h | 7 +++++++ src/app/qgisapp.cpp | 12 +++--------- 4 files changed, 36 insertions(+), 9 deletions(-) diff --git a/python/3d/auto_generated/qgs3d.sip.in b/python/3d/auto_generated/qgs3d.sip.in index 180660b15499..5f9315bc59d6 100644 --- a/python/3d/auto_generated/qgs3d.sip.in +++ b/python/3d/auto_generated/qgs3d.sip.in @@ -32,6 +32,11 @@ Returns a pointer to the singleton instance. ~Qgs3D(); + static void initialize(); +%Docstring +Initializes the 3D framework. +%End + private: Qgs3D( const Qgs3D &other ); }; diff --git a/src/3d/qgs3d.cpp b/src/3d/qgs3d.cpp index 507ba886c90f..78e8ebfc2b67 100644 --- a/src/3d/qgs3d.cpp +++ b/src/3d/qgs3d.cpp @@ -17,6 +17,15 @@ #include "qgs3d.h" +#include "qgsapplication.h" +#include "qgs3drendererregistry.h" + +#include "qgsabstract3drenderer.h" +#include "qgs3drendererregistry.h" +#include "qgsrulebased3drenderer.h" +#include "qgsvectorlayer3drenderer.h" +#include "qgsmeshlayer3drenderer.h" + Qgs3D *Qgs3D::instance() { static Qgs3D *sInstance( new Qgs3D() ); @@ -27,6 +36,18 @@ Qgs3D::~Qgs3D() { } +void Qgs3D::initialize() +{ + if ( instance()->mInitialized ) + return; + + instance()->mInitialized = true; + + QgsApplication::renderer3DRegistry()->addRenderer( new QgsVectorLayer3DRendererMetadata ); + QgsApplication::renderer3DRegistry()->addRenderer( new QgsRuleBased3DRendererMetadata ); + QgsApplication::renderer3DRegistry()->addRenderer( new QgsMeshLayer3DRendererMetadata ); +} + Qgs3D::Qgs3D() { } diff --git a/src/3d/qgs3d.h b/src/3d/qgs3d.h index 97346bb8a99b..81c0590ac144 100644 --- a/src/3d/qgs3d.h +++ b/src/3d/qgs3d.h @@ -45,6 +45,11 @@ class _3D_EXPORT Qgs3D ~Qgs3D(); + /** + * Initializes the 3D framework. + */ + static void initialize(); + private: Qgs3D(); @@ -53,6 +58,8 @@ class _3D_EXPORT Qgs3D Qgs3D( const Qgs3D &other ); #endif + bool mInitialized = false; + }; #endif // QGS3D_H diff --git a/src/app/qgisapp.cpp b/src/app/qgisapp.cpp index 82d3dc0e744e..4890f24469d6 100644 --- a/src/app/qgisapp.cpp +++ b/src/app/qgisapp.cpp @@ -97,19 +97,15 @@ #include "qgsgeometrycheckregistry.h" #ifdef HAVE_3D -#include "qgsabstract3drenderer.h" +#include "qgs3d.h" #include "qgs3danimationsettings.h" #include "qgs3danimationwidget.h" #include "qgs3dmapcanvasdockwidget.h" -#include "qgs3drendererregistry.h" #include "qgs3dmapcanvas.h" #include "qgs3dmapsettings.h" #include "qgscameracontroller.h" #include "qgsflatterraingenerator.h" #include "qgslayoutitem3dmap.h" -#include "qgsrulebased3drenderer.h" -#include "qgsvectorlayer3drenderer.h" -#include "qgsmeshlayer3drenderer.h" #include "processing/qgs3dalgorithms.h" #include "qgs3dmaptoolmeasureline.h" #include "layout/qgslayout3dmapwidget.h" @@ -12655,10 +12651,8 @@ void QgisApp::newMapCanvas() void QgisApp::init3D() { #ifdef HAVE_3D - // register 3D renderers - QgsApplication::instance()->renderer3DRegistry()->addRenderer( new QgsVectorLayer3DRendererMetadata ); - QgsApplication::instance()->renderer3DRegistry()->addRenderer( new QgsRuleBased3DRendererMetadata ); - QgsApplication::instance()->renderer3DRegistry()->addRenderer( new QgsMeshLayer3DRendererMetadata ); + // initialize 3D registries + Qgs3D::initialize(); #else mActionNew3DMapCanvas->setVisible( false ); #endif