Skip to content
Permalink
Browse files

[FEATURE] QGIS 3D (pull request #5203)

  • Loading branch information
wonder-sk committed Oct 2, 2017
2 parents 143c4bf + d46c440 commit 68bb68d17682937bb8a9d1b26968303dc0de87fb
Showing with 15,116 additions and 26 deletions.
  1. +17 −1 CMakeLists.txt
  2. +3 −1 cmake_templates/qgsconfig.h.in
  3. +5 −0 doc/CMakeLists.txt
  4. +6 −0 doc/modules.dox
  5. +1 −0 images/images.qrc
  6. +38 −0 images/themes/default/3d.svg
  7. +1 −0 python/CMakeLists.txt
  8. +100 −0 python/core/3d/qgs3drendererregistry.sip
  9. +66 −0 python/core/3d/qgsabstract3drenderer.sip
  10. +2 −0 python/core/core_auto.sip
  11. +10 −0 python/core/qgsapplication.sip
  12. +25 −1 python/core/qgsmaplayer.sip
  13. +1 −1 python/core/qgsvectorlayer.sip
  14. +11 −0 python/gui/qgsmapcanvas.sip
  15. +1 −1 scripts/prepare-commit.sh
  16. +5 −0 scripts/sip_include.sh
  17. +7 −1 scripts/sipify.pl
  18. +1 −1 scripts/spell_check/.agignore
  19. +1 −1 scripts/verify-indentation.sh
  20. +211 −0 src/3d/CMakeLists.txt
  21. +138 −0 src/3d/chunks/qgschunkboundsentity_p.cpp
  22. +55 −0 src/3d/chunks/qgschunkboundsentity_p.h
  23. +395 −0 src/3d/chunks/qgschunkedentity_p.cpp
  24. +137 −0 src/3d/chunks/qgschunkedentity_p.h
  25. +136 −0 src/3d/chunks/qgschunklist_p.cpp
  26. +103 −0 src/3d/chunks/qgschunklist_p.h
  27. +70 −0 src/3d/chunks/qgschunkloader_p.h
  28. +266 −0 src/3d/chunks/qgschunknode_p.cpp
  29. +199 −0 src/3d/chunks/qgschunknode_p.h
  30. +25 −0 src/3d/chunks/qgschunkqueuejob_p.cpp
  31. +93 −0 src/3d/chunks/qgschunkqueuejob_p.h
  32. +365 −0 src/3d/poly2tri/common/shapes.cc
  33. +323 −0 src/3d/poly2tri/common/shapes.h
  34. +127 −0 src/3d/poly2tri/common/utils.h
  35. +38 −0 src/3d/poly2tri/poly2tri.h
  36. +108 −0 src/3d/poly2tri/sweep/advancing_front.cc
  37. +118 −0 src/3d/poly2tri/sweep/advancing_front.h
  38. +71 −0 src/3d/poly2tri/sweep/cdt.cc
  39. +105 −0 src/3d/poly2tri/sweep/cdt.h
  40. +793 −0 src/3d/poly2tri/sweep/sweep.cc
  41. +285 −0 src/3d/poly2tri/sweep/sweep.h
  42. +211 −0 src/3d/poly2tri/sweep/sweep_context.cc
  43. +186 −0 src/3d/poly2tri/sweep/sweep_context.h
  44. +398 −0 src/3d/qgs3dmapscene.cpp
  45. +91 −0 src/3d/qgs3dmapscene.h
  46. +378 −0 src/3d/qgs3dmapsettings.cpp
  47. +200 −0 src/3d/qgs3dmapsettings.h
  48. +237 −0 src/3d/qgs3dutils.cpp
  49. +88 −0 src/3d/qgs3dutils.h
  50. +94 −0 src/3d/qgsaabb.cpp
  51. +78 −0 src/3d/qgsaabb.h
  52. +278 −0 src/3d/qgscameracontroller.cpp
  53. +150 −0 src/3d/qgscameracontroller.h
  54. +35 −0 src/3d/qgsphongmaterialsettings.cpp
  55. +72 −0 src/3d/qgsphongmaterialsettings.h
  56. +88 −0 src/3d/qgstessellatedpolygongeometry.cpp
  57. +56 −0 src/3d/qgstessellatedpolygongeometry.h
  58. +231 −0 src/3d/qgstessellator.cpp
  59. +55 −0 src/3d/qgstessellator.h
  60. +88 −0 src/3d/qgstilingscheme.cpp
  61. +61 −0 src/3d/qgstilingscheme.h
  62. +131 −0 src/3d/qgsvectorlayer3drenderer.cpp
  63. +86 −0 src/3d/qgsvectorlayer3drenderer.h
  64. +7 −0 src/3d/shaders.qrc
  65. +24 −0 src/3d/shaders/instanced.frag
  66. +28 −0 src/3d/shaders/instanced.vert
  67. +225 −0 src/3d/shaders/light.inc.frag
  68. +16 −0 src/3d/symbols/qgsabstract3dsymbol.cpp
  69. +53 −0 src/3d/symbols/qgsabstract3dsymbol.h
  70. +65 −0 src/3d/symbols/qgsline3dsymbol.cpp
  71. +82 −0 src/3d/symbols/qgsline3dsymbol.h
  72. +153 −0 src/3d/symbols/qgsline3dsymbol_p.cpp
  73. +68 −0 src/3d/symbols/qgsline3dsymbol_p.h
  74. +102 −0 src/3d/symbols/qgspoint3dsymbol.cpp
  75. +88 −0 src/3d/symbols/qgspoint3dsymbol.h
  76. +414 −0 src/3d/symbols/qgspoint3dsymbol_p.cpp
  77. +86 −0 src/3d/symbols/qgspoint3dsymbol_p.h
  78. +61 −0 src/3d/symbols/qgspolygon3dsymbol.cpp
  79. +76 −0 src/3d/symbols/qgspolygon3dsymbol.h
  80. +161 −0 src/3d/symbols/qgspolygon3dsymbol_p.cpp
  81. +69 −0 src/3d/symbols/qgspolygon3dsymbol_p.h
  82. +101 −0 src/3d/terrain/qgsdemterraingenerator.cpp
  83. +75 −0 src/3d/terrain/qgsdemterraingenerator.h
  84. +250 −0 src/3d/terrain/qgsdemterraintilegeometry_p.cpp
  85. +72 −0 src/3d/terrain/qgsdemterraintilegeometry_p.h
  86. +246 −0 src/3d/terrain/qgsdemterraintileloader_p.cpp
  87. +129 −0 src/3d/terrain/qgsdemterraintileloader_p.h
  88. +178 −0 src/3d/terrain/qgsflatterraingenerator.cpp
  89. +65 −0 src/3d/terrain/qgsflatterraingenerator.h
  90. +174 −0 src/3d/terrain/qgsterrainentity_p.cpp
  91. +113 −0 src/3d/terrain/qgsterrainentity_p.h
  92. +71 −0 src/3d/terrain/qgsterraingenerator.cpp
  93. +101 −0 src/3d/terrain/qgsterraingenerator.h
  94. +137 −0 src/3d/terrain/qgsterraintexturegenerator_p.cpp
  95. +94 −0 src/3d/terrain/qgsterraintexturegenerator_p.h
  96. +103 −0 src/3d/terrain/qgsterraintextureimage_p.cpp
  97. +73 −0 src/3d/terrain/qgsterraintextureimage_p.h
  98. +62 −0 src/3d/terrain/qgsterraintileentity_p.h
  99. +101 −0 src/3d/terrain/qgsterraintileloader_p.cpp
  100. +71 −0 src/3d/terrain/qgsterraintileloader_p.h
  101. +367 −0 src/3d/terrain/quantizedmeshgeometry.cpp
  102. +80 −0 src/3d/terrain/quantizedmeshgeometry.h
  103. +147 −0 src/3d/terrain/quantizedmeshterraingenerator.cpp
  104. +33 −0 src/3d/terrain/quantizedmeshterraingenerator.h
  105. +4 −0 src/CMakeLists.txt
  106. +80 −0 src/app/3d/qgs3dmapcanvas.cpp
  107. +59 −0 src/app/3d/qgs3dmapcanvas.h
  108. +97 −0 src/app/3d/qgs3dmapcanvasdockwidget.cpp
  109. +50 −0 src/app/3d/qgs3dmapcanvasdockwidget.h
  110. +128 −0 src/app/3d/qgs3dmapconfigwidget.cpp
  111. +49 −0 src/app/3d/qgs3dmapconfigwidget.h
  112. +56 −0 src/app/3d/qgsline3dsymbolwidget.cpp
  113. +41 −0 src/app/3d/qgsline3dsymbolwidget.h
  114. +50 −0 src/app/3d/qgsphongmaterialwidget.cpp
  115. +42 −0 src/app/3d/qgsphongmaterialwidget.h
  116. +249 −0 src/app/3d/qgspoint3dsymbolwidget.cpp
  117. +44 −0 src/app/3d/qgspoint3dsymbolwidget.h
  118. +53 −0 src/app/3d/qgspolygon3dsymbolwidget.cpp
  119. +41 −0 src/app/3d/qgspolygon3dsymbolwidget.h
  120. +179 −0 src/app/3d/qgsvectorlayer3drendererwidget.cpp
  121. +67 −0 src/app/3d/qgsvectorlayer3drendererwidget.h
  122. +46 −0 src/app/CMakeLists.txt
  123. +60 −0 src/app/qgisapp.cpp
  124. +3 −0 src/app/qgisapp.h
  125. +31 −0 src/app/qgslayerstylingwidget.cpp
  126. +5 −0 src/app/qgslayerstylingwidget.h
  127. +56 −0 src/core/3d/qgs3drendererregistry.cpp
  128. +101 −0 src/core/3d/qgs3drendererregistry.h
  129. +22 −0 src/core/3d/qgsabstract3drenderer.cpp
  130. +68 −0 src/core/3d/qgsabstract3drenderer.h
  131. +7 −0 src/core/CMakeLists.txt
  132. +8 −0 src/core/qgsapplication.cpp
  133. +9 −0 src/core/qgsapplication.h
  134. +45 −0 src/core/qgsmaplayer.cpp
  135. +27 −1 src/core/qgsmaplayer.h
  136. +2 −3 src/core/qgsproject.cpp
  137. +1 −0 src/core/qgsvectorlayer.cpp
  138. +1 −1 src/core/qgsvectorlayer.h
  139. +14 −0 src/gui/qgsmapcanvas.cpp
  140. +8 −0 src/gui/qgsmapcanvas.h
  141. +147 −0 src/ui/3d/line3dsymbolwidget.ui
  142. +198 −0 src/ui/3d/map3dconfigwidget.ui
  143. +99 −0 src/ui/3d/phongmaterialwidget.ui
  144. +332 −0 src/ui/3d/point3dsymbolwidget.ui
  145. +126 −0 src/ui/3d/polygon3dsymbolwidget.ui
  146. +13 −1 src/ui/CMakeLists.txt
  147. +12 −0 src/ui/qgisapp.ui
  148. +8 −8 src/ui/symbollayer/widget_simplefill.ui
  149. +3 −4 tests/src/core/testqgsogcutils.cpp
@@ -59,6 +59,8 @@ IF(WITH_CORE)

SET (WITH_DESKTOP TRUE CACHE BOOL "Determines whether QGIS desktop should be built")

SET (WITH_3D FALSE CACHE BOOL "Determines whether QGIS 3D library should be built")

# server disabled default because it needs FastCGI (which is optional dependency)
SET (WITH_SERVER FALSE CACHE BOOL "Determines whether QGIS server should be built")
IF(WITH_SERVER)
@@ -258,7 +260,13 @@ IF(WITH_CORE)
ENDIF(WITH_QTWEBKIT)
#############################################################
# search for Qt5
SET(QT_MIN_VERSION 5.2.0)
IF (WITH_3D)
# for 3D support we strictly require Qt >= 5.8
# (Qt 3D was introduced in 5.7 but it is not stable enough in that branch)
SET(QT_MIN_VERSION 5.8.0)
ELSE ()
SET(QT_MIN_VERSION 5.2.0)
ENDIF()
FIND_PACKAGE(Qt5Core QUIET)
FIND_PACKAGE(Qt5Gui REQUIRED)
FIND_PACKAGE(Qt5Widgets REQUIRED)
@@ -276,6 +284,14 @@ IF(WITH_CORE)
FIND_PACKAGE(Qt5UiTools REQUIRED)
FIND_PACKAGE(Qt5Script REQUIRED)
FIND_PACKAGE(Qt5Sql REQUIRED)
IF (WITH_3D)
FIND_PACKAGE(Qt53DCore REQUIRED)
FIND_PACKAGE(Qt53DRender REQUIRED)
FIND_PACKAGE(Qt53DInput REQUIRED)
FIND_PACKAGE(Qt53DLogic REQUIRED)
FIND_PACKAGE(Qt53DExtras REQUIRED)
SET(HAVE_3D TRUE) # used in qgsconfig.h
ENDIF (WITH_3D)
INCLUDE("cmake/modules/ECMQt4To5Porting.cmake")
MESSAGE(STATUS "Found Qt version: ${Qt5Core_VERSION_STRING}")

@@ -13,7 +13,7 @@
//used in vim src/core/qgis.cpp
//The way below should work but it resolves to a number like 0110 which the compiler treats as octal I think
//because debuggin it out shows the decimal number 72 which results in incorrect version status.
//As a short term fix I (Tim) am defining the version in top level cmake. It would be good to
//As a short term fix I (Tim) am defining the version in top level cmake. It would be good to
//reinstate this more generic approach below at some point though
//#define VERSION_INT ${CPACK_PACKAGE_VERSION_MAJOR}${CPACK_PACKAGE_VERSION_MINOR}${CPACK_PACKAGE_VERSION_PATCH}
#define VERSION_INT ${QGIS_VERSION_INT}
@@ -58,5 +58,7 @@

#cmakedefine ENABLE_MODELTEST

#cmakedefine HAVE_3D

#endif

@@ -53,6 +53,7 @@ IF(WITH_APIDOC)
SET(DOXYGEN_INPUT
${CMAKE_SOURCE_DIR}/doc
${CMAKE_SOURCE_DIR}/src/core
${CMAKE_SOURCE_DIR}/src/core/3d
${CMAKE_SOURCE_DIR}/src/core/annotations
${CMAKE_SOURCE_DIR}/src/core/auth
${CMAKE_SOURCE_DIR}/src/core/composer
@@ -91,6 +92,10 @@ IF(WITH_APIDOC)
${CMAKE_SOURCE_DIR}/src/analysis/openstreetmap
${CMAKE_SOURCE_DIR}/src/analysis/raster
${CMAKE_SOURCE_DIR}/src/analysis/vector
${CMAKE_SOURCE_DIR}/src/3d
${CMAKE_SOURCE_DIR}/src/3d/chunks
${CMAKE_SOURCE_DIR}/src/3d/symbols
${CMAKE_SOURCE_DIR}/src/3d/terrain
${CMAKE_SOURCE_DIR}/src/plugins
)

@@ -25,6 +25,12 @@ components to QGIS.

*/

/** @defgroup 3d 3D library

The 3D library is build on top of the CORE library and Qt 3D framework. It adds support for display of GIS data in 3D scenes.

*/

/** @defgroup plugins plugin classes

Contains classes related to implementation of QGIS plugins.
@@ -570,6 +570,7 @@
<file>themes/default/mGeoPackage.svg</file>
<file>themes/default/mActionAddGeoPackageLayer.svg</file>
<file>icons/qgis_icon.svg</file>
<file>themes/default/3d.svg</file>
</qresource>
<qresource prefix="/images/tips">
<file alias="symbol_levels.png">qgis_tips/symbol_levels.png</file>
@@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
id="svg12"
version="1.1"
width="16"
height="16">
<metadata
id="metadata18">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs16" />
<path
d="M 2.3348556,4.5414044 8.0212426,8.3776059 13.466994,4.7037083 7.7806076,0.86750671 Z"
style="fill:#f79191;fill-opacity:1;fill-rule:evenodd;stroke:#a40000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4535" />
<path
d="M 8.6635732,9.3611399 V 14.964189 L 14.109324,11.290292 V 5.6872423 Z"
style="fill:#fce94f;fill-opacity:1;fill-rule:evenodd;stroke:#c4a000;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4537" />
<path
d="m 1.6730308,5.5249384 5.686387,3.8362015 v 5.6030491 l -5.686387,-3.836201 z"
style="fill:#8ae234;fill-opacity:1;fill-rule:evenodd;stroke:#4e9a06;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
id="path4539" />
</svg>
@@ -102,6 +102,7 @@ ENDIF ()

INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/src/core
${CMAKE_SOURCE_DIR}/src/core/3d
${CMAKE_SOURCE_DIR}/src/core/annotations
${CMAKE_SOURCE_DIR}/src/core/auth
${CMAKE_SOURCE_DIR}/src/core/expression
@@ -0,0 +1,100 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/./3d/qgs3drendererregistry.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/






class Qgs3DRendererAbstractMetadata
{
%Docstring
Base metadata class for 3D renderers. Instances of derived classes may be registered in Qgs3DRendererRegistry.
.. versionadded:: 3.0
%End

%TypeHeaderCode
#include "qgs3drendererregistry.h"
%End
public:

virtual ~Qgs3DRendererAbstractMetadata();

QString type() const;
%Docstring
Returns unique identifier of the 3D renderer class
:rtype: str
%End

virtual QgsAbstract3DRenderer *createRenderer( QDomElement &elem, const QgsReadWriteContext &context ) = 0 /Factory/;
%Docstring
Returns new instance of the renderer given the DOM element. Returns NULL on error.
Pure virtual function: must be implemented in derived classes.
:rtype: QgsAbstract3DRenderer
%End

protected:

explicit Qgs3DRendererAbstractMetadata( const QString &type );
%Docstring
Constructor of the base class
%End

protected:
};


class Qgs3DRendererRegistry
{
%Docstring
Keeps track of available 3D renderers. Should be accessed through QgsApplication.renderer3DRegistry() singleton.
.. versionadded:: 3.0
%End

%TypeHeaderCode
#include "qgs3drendererregistry.h"
%End
public:
Qgs3DRendererRegistry();
%Docstring
Creates registry of 3D renderers
%End

~Qgs3DRendererRegistry();

void addRenderer( Qgs3DRendererAbstractMetadata *metadata /Transfer/ );
%Docstring
Registers a new 3D renderer type. The call takes ownership of the passed metadata object.
%End

void removeRenderer( const QString &type );
%Docstring
Unregisters a 3D renderer type
%End

Qgs3DRendererAbstractMetadata *rendererMetadata( const QString &type ) const;
%Docstring
Returns metadata for a 3D renderer type (may be used to create a new instance of the type)
:rtype: Qgs3DRendererAbstractMetadata
%End

QStringList renderersList() const;
%Docstring
Returns a list of all available 3D renderer types.
:rtype: list of str
%End

};

/************************************************************************
* This file has been generated automatically from *
* *
* src/core/./3d/qgs3drendererregistry.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
@@ -0,0 +1,66 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/./3d/qgsabstract3drenderer.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/






class QgsAbstract3DRenderer /Abstract/
{
%Docstring
Base class for all renderers that may to participate in 3D view.

3D renderers implement the method createEntity() that returns a new 3D entity - that entity
will be added to the 3D scene to represent data in renderer's display style.

Renderers may store some custom properties (e.g. materials, sizes) that are written to and read from
XML. It is therefore not recommended to store large amount of data within a renderer (e.g. arrays of vertices).

.. versionadded:: 3.0
%End

%TypeHeaderCode
#include "qgsabstract3drenderer.h"
%End
public:
virtual ~QgsAbstract3DRenderer();

virtual QString type() const = 0;
%Docstring
Returns unique identifier of the renderer class (used to identify subclass)
:rtype: str
%End
virtual QgsAbstract3DRenderer *clone() const = 0 /Factory/;
%Docstring
Returns a cloned instance
:rtype: QgsAbstract3DRenderer
%End

virtual void writeXml( QDomElement &elem, const QgsReadWriteContext &context ) const = 0;
%Docstring
Writes renderer's properties to given XML element
%End
virtual void readXml( const QDomElement &elem, const QgsReadWriteContext &context ) = 0;
%Docstring
Reads renderer's properties from given XML element
%End
virtual void resolveReferences( const QgsProject &project );
%Docstring
Resolves references to other objects - second phase of loading - after readXml()
%End
};


/************************************************************************
* This file has been generated automatically from *
* *
* src/core/./3d/qgsabstract3drenderer.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
@@ -280,6 +280,8 @@
%Include geometry/qgssurface.sip
%Include geometry/qgswkbptr.sip
%Include geometry/qgswkbtypes.sip
%Include ./3d/qgs3drendererregistry.sip
%Include ./3d/qgsabstract3drenderer.sip
%Include fieldformatter/qgsdatetimefieldformatter.sip
%Include fieldformatter/qgsfallbackfieldformatter.sip
%Include fieldformatter/qgskeyvaluefieldformatter.sip
@@ -711,6 +711,16 @@ Returns path to the build output directory. Valid only when running from build d
:rtype: QgsFieldFormatterRegistry
%End

static Qgs3DRendererRegistry *renderer3DRegistry();
%Docstring
Returns registry of available 3D renderers.
.. note::

not available in Python bindings
.. versionadded:: 3.0
:rtype: Qgs3DRendererRegistry
%End

static QString nullRepresentation();
%Docstring
This string is used to represent the value `NULL` throughout QGIS.
@@ -453,6 +453,12 @@ Invoked by QgsProject.read().
:rtype: bool
%End

virtual void resolveReferences( QgsProject *project );
%Docstring
Resolve references to other layers (kept as layer IDs after reading XML) into layer objects.
.. versionadded:: 3.0
%End

QStringList customPropertyKeys() const;
%Docstring
Returns list of all keys within custom properties. Properties are stored in a map and saved in project file.
@@ -754,6 +760,19 @@ Return pointer to layer's undo stack
:rtype: QgsMapLayerStyleManager
%End

void setRenderer3D( QgsAbstract3DRenderer *renderer /Transfer/ );
%Docstring
Sets 3D renderer for the layer. Takes ownership of the renderer.
.. versionadded:: 3.0
%End

QgsAbstract3DRenderer *renderer3D() const;
%Docstring
Returns 3D renderer associated with the layer. May be null.
.. versionadded:: 3.0
:rtype: QgsAbstract3DRenderer
%End

bool isInScaleRange( double scale ) const;
%Docstring
Tests whether the layer should be visible at the specified ``scale``.
@@ -1047,6 +1066,12 @@ Signal emitted when the blend mode is changed, through QgsMapLayer.setBlendMode(
%Docstring
Signal emitted when legend of the layer has changed
.. versionadded:: 2.6
%End

void renderer3DChanged();
%Docstring
Signal emitted when 3D renderer associated with the layer has changed.
.. versionadded:: 3.0
%End

void configChanged();
@@ -1116,7 +1141,6 @@ Set whether layer is valid or not - should be used in constructor.
:rtype: bool
%End


void readCustomProperties( const QDomNode &layerNode, const QString &keyStartsWith = QString() );
%Docstring
Read custom properties from project file.
@@ -712,7 +712,7 @@ Return the provider type for this layer
:rtype: bool
%End

void resolveReferences( QgsProject *project );
virtual void resolveReferences( QgsProject *project );
%Docstring
Resolve references to other layers (kept as layer IDs after reading XML) into layer objects.
.. versionadded:: 3.0

0 comments on commit 68bb68d

Please sign in to comment.
You can’t perform that action at this time.