Add class for storing hierarchy tree of QgsTiledMeshTile

This commit is contained in:
Nyall Dawson 2023-08-03 13:01:45 +10:00
parent c22796d6fe
commit 08e739fea7
7 changed files with 248 additions and 0 deletions

View File

@ -0,0 +1,69 @@
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/tiledmesh/qgstiledmeshnode.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/
class QgsTiledMeshNode
{
%Docstring(signature="appended")
Allows representing :py:class:`QgsTiledMeshTiles` in a hierarchical tree.
.. versionadded:: 3.34
%End
%TypeHeaderCode
#include "qgstiledmeshnode.h"
%End
public:
QgsTiledMeshNode( QgsTiledMeshTile *tile /Transfer/ );
%Docstring
Constructor for QgsTiledMeshNode, for the specified ``tile``.
Ownership of ``tile`` is transferred to the node.
%End
~QgsTiledMeshNode();
QgsTiledMeshTile *tile();
%Docstring
Returns the tile associated with the node.
%End
void addChild( QgsTiledMeshNode *child /Transfer/ );
%Docstring
Adds a ``child`` to this node.
Ownership of ``child`` is transferred to this node, and the parent for ``child`` will
automatically be set to this node.
%End
QgsTiledMeshNode *parentNode() const;
%Docstring
Returns the parent of this node.
%End
QList< QgsTiledMeshNode * > children() const;
%Docstring
Returns this node's children.
%End
private:
QgsTiledMeshNode( const QgsTiledMeshNode &other );
};
/************************************************************************
* This file has been generated automatically from *
* *
* src/core/tiledmesh/qgstiledmeshnode.h *
* *
* Do not edit manually ! Edit header and run scripts/sipify.pl again *
************************************************************************/

View File

@ -716,6 +716,7 @@
%Include auto_generated/tiledmesh/qgstiledmeshboundingvolume.sip
%Include auto_generated/tiledmesh/qgstiledmeshdataprovider.sip
%Include auto_generated/tiledmesh/qgstiledmeshlayer.sip
%Include auto_generated/tiledmesh/qgstiledmeshnode.sip
%Include auto_generated/tiledmesh/qgstiledmeshrequest.sip
%Include auto_generated/tiledmesh/qgstiledmeshtile.sip
%Include auto_generated/sensor/qgssensormodel.sip

View File

@ -344,6 +344,7 @@ set(QGIS_CORE_SRCS
tiledmesh/qgstiledmeshdataprovider.cpp
tiledmesh/qgstiledmeshlayer.cpp
tiledmesh/qgstiledmeshlayerrenderer.cpp
tiledmesh/qgstiledmeshnode.cpp
tiledmesh/qgstiledmeshprovidermetadata.cpp
tiledmesh/qgstiledmeshrequest.cpp
tiledmesh/qgstiledmeshtile.cpp
@ -1916,6 +1917,7 @@ set(QGIS_CORE_HDRS
tiledmesh/qgstiledmeshdataitems.h
tiledmesh/qgstiledmeshlayer.h
tiledmesh/qgstiledmeshlayerrenderer.h
tiledmesh/qgstiledmeshnode.h
tiledmesh/qgstiledmeshprovidermetadata.h
tiledmesh/qgstiledmeshrequest.h
tiledmesh/qgstiledmeshtile.h

View File

@ -0,0 +1,38 @@
/***************************************************************************
qgstiledmeshnode.cpp
--------------------
begin : June 2023
copyright : (C) 2023 by Nyall Dawson
email : nyall dot dawson at gmail dot com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#include "qgstiledmeshnode.h"
#include "qgstiledmeshtile.h"
QgsTiledMeshNode::QgsTiledMeshNode( QgsTiledMeshTile *tile )
: mTile( tile )
{
}
QgsTiledMeshNode::~QgsTiledMeshNode() = default;
QgsTiledMeshTile *QgsTiledMeshNode::tile()
{
return mTile.get();
}
void QgsTiledMeshNode::addChild( QgsTiledMeshNode *child )
{
child->mParent = this;
mChildren.append( child );
}

View File

@ -0,0 +1,87 @@
/***************************************************************************
qgstiledmeshnode.h
--------------------
begin : June 2023
copyright : (C) 2023 by Nyall Dawson
email : nyall dot dawson at gmail dot com
******************************************************************
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef QGSTILEDMESHNODE_H
#define QGSTILEDMESHNODE_H
#include "qgis_core.h"
#include "qgis.h"
class QgsTiledMeshTile;
/**
* \ingroup core
* \brief Allows representing QgsTiledMeshTiles in a hierarchical tree.
*
* \since QGIS 3.34
*/
class CORE_EXPORT QgsTiledMeshNode
{
public:
/**
* Constructor for QgsTiledMeshNode, for the specified \a tile.
*
* Ownership of \a tile is transferred to the node.
*/
QgsTiledMeshNode( QgsTiledMeshTile *tile SIP_TRANSFER );
//! QgsTiledMeshNode cannot be copied
QgsTiledMeshNode( const QgsTiledMeshNode &other ) = delete;
//! QgsTiledMeshNode cannot be copied
QgsTiledMeshNode &operator=( const QgsTiledMeshNode &other ) = delete;
~QgsTiledMeshNode();
/**
* Returns the tile associated with the node.
*/
QgsTiledMeshTile *tile();
/**
* Adds a \a child to this node.
*
* Ownership of \a child is transferred to this node, and the parent for \a child will
* automatically be set to this node.
*/
void addChild( QgsTiledMeshNode *child SIP_TRANSFER );
/**
* Returns the parent of this node.
*/
QgsTiledMeshNode *parentNode() const { return mParent; }
/**
* Returns this node's children.
*/
QList< QgsTiledMeshNode * > children() const { return mChildren; }
private:
#ifdef SIP_RUN
QgsTiledMeshNode( const QgsTiledMeshNode &other );
#endif
std::unique_ptr< QgsTiledMeshTile > mTile;
QgsTiledMeshNode *mParent = nullptr;
QList< QgsTiledMeshNode * > mChildren;
};
#endif // QGSTILEDMESHNODE_H

View File

@ -396,6 +396,7 @@ ADD_PYTHON_TEST(PyQgsTextFragment test_qgstextfragment.py)
ADD_PYTHON_TEST(PyQgsTextFormatWidget test_qgstextformatwidget.py)
ADD_PYTHON_TEST(PyQgsTiledMeshBoundingVolume test_qgstiledmeshboundingvolume.py)
ADD_PYTHON_TEST(PyQgsTiledMeshLayer test_qgstiledmeshlayer.py)
ADD_PYTHON_TEST(PyQgsTiledMeshNode test_qgstiledmeshnode.py)
ADD_PYTHON_TEST(PyQgsTiledMeshRequest test_qgstiledmeshrequest.py)
ADD_PYTHON_TEST(PyQgsTiledMeshTile test_qgstiledmeshtile.py)
ADD_PYTHON_TEST(PyQgsTiles test_qgstiles.py)

View File

@ -0,0 +1,50 @@
"""QGIS Unit tests for QgsTiledMeshNode
From build dir, run: ctest -R QgsTiledMeshNode -V
.. note:: This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
"""
__author__ = "(C) 2023 by Nyall Dawson"
__date__ = "26/07/2023"
__copyright__ = "Copyright 2023, The QGIS Project"
import unittest
from qgis.core import (
QgsTiledMeshNode,
QgsTiledMeshTile,
)
from qgis.testing import start_app, QgisTestCase
from utilities import unitTestDataPath
start_app()
TEST_DATA_DIR = unitTestDataPath()
class TestQgsTiledMeshNode(QgisTestCase):
def test_basic(self):
tile = QgsTiledMeshTile("my tile")
node = QgsTiledMeshNode(tile)
self.assertEqual(node.tile().id(), "my tile")
def test_children(self):
node = QgsTiledMeshNode(QgsTiledMeshTile("parent"))
self.assertFalse(node.children())
child_node = QgsTiledMeshNode(QgsTiledMeshTile("child"))
node.addChild(child_node)
self.assertEqual(node.children(), [child_node])
self.assertEqual(child_node.parentNode(), node)
child_node2 = QgsTiledMeshNode(QgsTiledMeshTile("child2"))
node.addChild(child_node2)
self.assertEqual(node.children(), [child_node, child_node2])
self.assertEqual(child_node2.parentNode(), node)
if __name__ == "__main__":
unittest.main()