Better initialization of 3d framework, usable outside of app

This commit is contained in:
Nyall Dawson 2020-07-15 11:14:28 +10:00
parent a34eabd1fb
commit c7b6a115df
4 changed files with 36 additions and 9 deletions

View File

@ -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 );
};

View File

@ -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()
{
}

View File

@ -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

View File

@ -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