mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-16 00:05:45 -04:00
use smart pointer internally and remove unnecessary code
This commit is contained in:
parent
1efdbc5c20
commit
c42af60dfe
@ -70,6 +70,7 @@ IF(WITH_APIDOC)
|
|||||||
${CMAKE_SOURCE_DIR}/src/core/layout
|
${CMAKE_SOURCE_DIR}/src/core/layout
|
||||||
${CMAKE_SOURCE_DIR}/src/core/locator
|
${CMAKE_SOURCE_DIR}/src/core/locator
|
||||||
${CMAKE_SOURCE_DIR}/src/core/metadata
|
${CMAKE_SOURCE_DIR}/src/core/metadata
|
||||||
|
${CMAKE_SOURCE_DIR}/src/core/mesh
|
||||||
${CMAKE_SOURCE_DIR}/src/core/pal
|
${CMAKE_SOURCE_DIR}/src/core/pal
|
||||||
${CMAKE_SOURCE_DIR}/src/core/processing
|
${CMAKE_SOURCE_DIR}/src/core/processing
|
||||||
${CMAKE_SOURCE_DIR}/src/core/providers
|
${CMAKE_SOURCE_DIR}/src/core/providers
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class QgsMeshLayer : QgsMapLayer
|
class QgsMeshLayer : QgsMapLayer
|
||||||
{
|
{
|
||||||
%Docstring
|
%Docstring
|
||||||
|
@ -38,7 +38,7 @@ QgsMeshLayer::QgsMeshLayer( const QString &meshLayerPath,
|
|||||||
|
|
||||||
QgsSymbolLayerList l1;
|
QgsSymbolLayerList l1;
|
||||||
l1 << new QgsSimpleFillSymbolLayer( Qt::white, Qt::NoBrush, Qt::black, Qt::SolidLine, 1.0 );
|
l1 << new QgsSimpleFillSymbolLayer( Qt::white, Qt::NoBrush, Qt::black, Qt::SolidLine, 1.0 );
|
||||||
mNativeMeshSymbol = new QgsFillSymbol( l1 );
|
mNativeMeshSymbol.reset( new QgsFillSymbol( l1 ) );
|
||||||
|
|
||||||
|
|
||||||
toggleTriangularMeshRendering( false );
|
toggleTriangularMeshRendering( false );
|
||||||
@ -49,16 +49,8 @@ QgsMeshLayer::QgsMeshLayer( const QString &meshLayerPath,
|
|||||||
|
|
||||||
QgsMeshLayer::~QgsMeshLayer()
|
QgsMeshLayer::~QgsMeshLayer()
|
||||||
{
|
{
|
||||||
clearMeshes();
|
|
||||||
|
|
||||||
if ( mDataProvider )
|
if ( mDataProvider )
|
||||||
delete mDataProvider;
|
delete mDataProvider;
|
||||||
|
|
||||||
if ( mNativeMeshSymbol )
|
|
||||||
delete mNativeMeshSymbol;
|
|
||||||
|
|
||||||
if ( mTriangularMeshSymbol )
|
|
||||||
delete mTriangularMeshSymbol;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QgsMeshDataProvider *QgsMeshLayer::dataProvider()
|
QgsMeshDataProvider *QgsMeshLayer::dataProvider()
|
||||||
@ -95,31 +87,41 @@ QString QgsMeshLayer::providerType() const
|
|||||||
return mProviderKey;
|
return mProviderKey;
|
||||||
}
|
}
|
||||||
|
|
||||||
QgsMesh *QgsMeshLayer::nativeMesh() SIP_SKIP {return mNativeMesh;}
|
QgsMesh *QgsMeshLayer::nativeMesh() SIP_SKIP
|
||||||
|
{
|
||||||
|
return mNativeMesh.get();
|
||||||
|
}
|
||||||
|
|
||||||
QgsTriangularMesh *QgsMeshLayer::triangularMesh() SIP_SKIP {return mTriangularMesh;}
|
|
||||||
|
|
||||||
QgsSymbol *QgsMeshLayer::nativeMeshSymbol() {return mNativeMeshSymbol;}
|
QgsTriangularMesh *QgsMeshLayer::triangularMesh() SIP_SKIP
|
||||||
|
{
|
||||||
|
return mTriangularMesh.get();
|
||||||
|
}
|
||||||
|
|
||||||
QgsSymbol *QgsMeshLayer::triangularMeshSymbol() {return mTriangularMeshSymbol;}
|
QgsSymbol *QgsMeshLayer::nativeMeshSymbol()
|
||||||
|
{
|
||||||
|
return mNativeMeshSymbol.get();
|
||||||
|
}
|
||||||
|
|
||||||
|
QgsSymbol *QgsMeshLayer::triangularMeshSymbol()
|
||||||
|
{
|
||||||
|
return mTriangularMeshSymbol.get();
|
||||||
|
}
|
||||||
|
|
||||||
void QgsMeshLayer::toggleTriangularMeshRendering( bool toggle )
|
void QgsMeshLayer::toggleTriangularMeshRendering( bool toggle )
|
||||||
{
|
{
|
||||||
if ( toggle && mTriangularMeshSymbol )
|
if ( toggle && mTriangularMeshSymbol )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if ( mTriangularMeshSymbol )
|
|
||||||
delete mTriangularMeshSymbol;
|
|
||||||
|
|
||||||
if ( toggle )
|
if ( toggle )
|
||||||
{
|
{
|
||||||
QgsSymbolLayerList l2;
|
QgsSymbolLayerList l2;
|
||||||
l2 << new QgsSimpleFillSymbolLayer( Qt::white, Qt::NoBrush, Qt::red, Qt::SolidLine, 0.26 );
|
l2 << new QgsSimpleFillSymbolLayer( Qt::white, Qt::NoBrush, Qt::red, Qt::SolidLine, 0.26 );
|
||||||
mTriangularMeshSymbol = new QgsFillSymbol( l2 );
|
mTriangularMeshSymbol.reset( new QgsFillSymbol( l2 ) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
mTriangularMeshSymbol = nullptr;
|
mTriangularMeshSymbol.reset();
|
||||||
}
|
}
|
||||||
triggerRepaint();
|
triggerRepaint();
|
||||||
}
|
}
|
||||||
@ -128,7 +130,7 @@ void QgsMeshLayer::fillNativeMesh()
|
|||||||
{
|
{
|
||||||
Q_ASSERT( !mNativeMesh );
|
Q_ASSERT( !mNativeMesh );
|
||||||
|
|
||||||
mNativeMesh = new QgsMesh();
|
mNativeMesh.reset( new QgsMesh() );
|
||||||
|
|
||||||
if ( !( dataProvider() && dataProvider()->isValid() ) )
|
if ( !( dataProvider() && dataProvider()->isValid() ) )
|
||||||
return;
|
return;
|
||||||
@ -150,13 +152,14 @@ QgsMapLayerRenderer *QgsMeshLayer::createMapRenderer( QgsRenderContext &renderer
|
|||||||
{
|
{
|
||||||
if ( !mNativeMesh )
|
if ( !mNativeMesh )
|
||||||
{
|
{
|
||||||
|
// lazy loading of mesh data
|
||||||
fillNativeMesh();
|
fillNativeMesh();
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !mTriangularMesh )
|
if ( !mTriangularMesh )
|
||||||
mTriangularMesh = new QgsTriangularMesh();
|
mTriangularMesh.reset( new QgsTriangularMesh() );
|
||||||
|
|
||||||
triangularMesh()->update( mNativeMesh, &rendererContext );
|
mTriangularMesh->update( mNativeMesh.get(), &rendererContext );
|
||||||
return new QgsMeshLayerRenderer( this, rendererContext );
|
return new QgsMeshLayerRenderer( this, rendererContext );
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,26 +180,13 @@ bool QgsMeshLayer::writeSymbology( QDomNode &node, QDomDocument &doc, QString &e
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsMeshLayer::clearMeshes()
|
|
||||||
{
|
|
||||||
if ( mTriangularMesh )
|
|
||||||
delete mTriangularMesh;
|
|
||||||
|
|
||||||
if ( mNativeMesh )
|
|
||||||
delete mNativeMesh;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
bool QgsMeshLayer::setDataProvider( QString const &provider )
|
bool QgsMeshLayer::setDataProvider( QString const &provider )
|
||||||
{
|
{
|
||||||
clearMeshes();
|
Q_ASSERT( !mDataProvider ); //called from ctor
|
||||||
|
|
||||||
mProviderKey = provider;
|
mProviderKey = provider;
|
||||||
QString dataSource = mDataSource;
|
QString dataSource = mDataSource;
|
||||||
|
|
||||||
if ( mDataProvider )
|
|
||||||
delete mDataProvider;
|
|
||||||
|
|
||||||
mDataProvider = qobject_cast<QgsMeshDataProvider *>( QgsProviderRegistry::instance()->createProvider( provider, dataSource ) );
|
mDataProvider = qobject_cast<QgsMeshDataProvider *>( QgsProviderRegistry::instance()->createProvider( provider, dataSource ) );
|
||||||
if ( !mDataProvider )
|
if ( !mDataProvider )
|
||||||
{
|
{
|
||||||
|
@ -18,6 +18,8 @@
|
|||||||
#ifndef QGSMESHLAYER_H
|
#ifndef QGSMESHLAYER_H
|
||||||
#define QGSMESHLAYER_H
|
#define QGSMESHLAYER_H
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include "qgis_core.h"
|
#include "qgis_core.h"
|
||||||
#include "qgsmaplayer.h"
|
#include "qgsmaplayer.h"
|
||||||
#include "qgsrendercontext.h"
|
#include "qgsrendercontext.h"
|
||||||
@ -152,28 +154,26 @@ class CORE_EXPORT QgsMeshLayer : public QgsMapLayer
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//! Clear native and triangular mesh
|
|
||||||
void clearMeshes();
|
|
||||||
void fillNativeMesh();
|
void fillNativeMesh();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
//! Pointer to native mesh structure, used as cache for rendering
|
|
||||||
QgsMesh *mNativeMesh = nullptr;
|
|
||||||
|
|
||||||
//! Pointer to derived mesh structure
|
|
||||||
QgsTriangularMesh *mTriangularMesh = nullptr;
|
|
||||||
|
|
||||||
//! Pointer to data provider derived from the abastract base class QgsMeshDataProvider
|
//! Pointer to data provider derived from the abastract base class QgsMeshDataProvider
|
||||||
QgsMeshDataProvider *mDataProvider = nullptr;
|
QgsMeshDataProvider *mDataProvider = nullptr;
|
||||||
|
|
||||||
//! Data provider key
|
//! Data provider key
|
||||||
QString mProviderKey;
|
QString mProviderKey;
|
||||||
|
|
||||||
|
//! Pointer to native mesh structure, used as cache for rendering
|
||||||
|
std::unique_ptr<QgsMesh> mNativeMesh;
|
||||||
|
|
||||||
|
//! Pointer to derived mesh structure
|
||||||
|
std::unique_ptr<QgsTriangularMesh> mTriangularMesh;
|
||||||
|
|
||||||
//! rendering native mesh
|
//! rendering native mesh
|
||||||
QgsSymbol *mNativeMeshSymbol = nullptr;
|
std::unique_ptr<QgsSymbol> mNativeMeshSymbol;
|
||||||
|
|
||||||
//! rendering triangular mesh
|
//! rendering triangular mesh
|
||||||
QgsSymbol *mTriangularMeshSymbol = nullptr;
|
std::unique_ptr<QgsSymbol> mTriangularMeshSymbol;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif //QGSMESHLAYER_H
|
#endif //QGSMESHLAYER_H
|
||||||
|
@ -40,27 +40,15 @@ QgsMeshLayerRenderer::QgsMeshLayerRenderer( QgsMeshLayer *layer, QgsRenderContex
|
|||||||
// make copies for symbols
|
// make copies for symbols
|
||||||
if ( layer->nativeMeshSymbol() )
|
if ( layer->nativeMeshSymbol() )
|
||||||
{
|
{
|
||||||
mNativeMeshSymbol = layer->nativeMeshSymbol()->clone();
|
mNativeMeshSymbol.reset( layer->nativeMeshSymbol()->clone() );
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( layer->triangularMeshSymbol() )
|
if ( layer->triangularMeshSymbol() )
|
||||||
{
|
{
|
||||||
mTriangularMeshSymbol = layer->triangularMeshSymbol()->clone();
|
mTriangularMeshSymbol.reset( layer->triangularMeshSymbol()->clone() );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QgsMeshLayerRenderer::~QgsMeshLayerRenderer()
|
|
||||||
{
|
|
||||||
if ( mNativeMeshSymbol )
|
|
||||||
delete mNativeMeshSymbol;
|
|
||||||
|
|
||||||
if ( mTriangularMeshSymbol )
|
|
||||||
delete mTriangularMeshSymbol;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool QgsMeshLayerRenderer::render()
|
bool QgsMeshLayerRenderer::render()
|
||||||
{
|
{
|
||||||
renderMesh( mNativeMeshSymbol, mNativeMesh.faces ); // native mesh
|
renderMesh( mNativeMeshSymbol, mNativeMesh.faces ); // native mesh
|
||||||
@ -69,7 +57,7 @@ bool QgsMeshLayerRenderer::render()
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsMeshLayerRenderer::renderMesh( QgsSymbol *symbol, const QVector<QgsMeshFace> &faces )
|
void QgsMeshLayerRenderer::renderMesh( const std::unique_ptr<QgsSymbol> &symbol, const QVector<QgsMeshFace> &faces )
|
||||||
{
|
{
|
||||||
if ( !symbol )
|
if ( !symbol )
|
||||||
return;
|
return;
|
||||||
|
@ -23,6 +23,8 @@ class QgsSymbol;
|
|||||||
|
|
||||||
#define SIP_NO_FILE
|
#define SIP_NO_FILE
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include "qgis.h"
|
#include "qgis.h"
|
||||||
|
|
||||||
#include "qgsmaplayerrenderer.h"
|
#include "qgsmaplayerrenderer.h"
|
||||||
@ -42,11 +44,11 @@ class QgsMeshLayerRenderer : public QgsMapLayerRenderer
|
|||||||
//! Ctor
|
//! Ctor
|
||||||
QgsMeshLayerRenderer( QgsMeshLayer *layer, QgsRenderContext &context );
|
QgsMeshLayerRenderer( QgsMeshLayer *layer, QgsRenderContext &context );
|
||||||
|
|
||||||
~QgsMeshLayerRenderer() override;
|
~QgsMeshLayerRenderer() override = default;
|
||||||
bool render() override;
|
bool render() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void renderMesh( QgsSymbol *symbol, const QVector<QgsMeshFace> &faces );
|
void renderMesh( const std::unique_ptr<QgsSymbol> &symbol, const QVector<QgsMeshFace> &faces );
|
||||||
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@ -57,15 +59,13 @@ class QgsMeshLayerRenderer : public QgsMapLayerRenderer
|
|||||||
QgsTriangularMesh mTriangularMesh;
|
QgsTriangularMesh mTriangularMesh;
|
||||||
|
|
||||||
// copy from mesh layer
|
// copy from mesh layer
|
||||||
QgsSymbol *mNativeMeshSymbol = nullptr;
|
std::unique_ptr<QgsSymbol> mNativeMeshSymbol = nullptr;
|
||||||
|
|
||||||
// copy from mesh layer
|
// copy from mesh layer
|
||||||
QgsSymbol *mTriangularMeshSymbol = nullptr;
|
std::unique_ptr<QgsSymbol> mTriangularMeshSymbol = nullptr;
|
||||||
|
|
||||||
// rendering context
|
// rendering context
|
||||||
QgsRenderContext &mContext;
|
QgsRenderContext &mContext;
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -19,14 +19,6 @@
|
|||||||
#include "qgsrendercontext.h"
|
#include "qgsrendercontext.h"
|
||||||
#include "qgscoordinatetransform.h"
|
#include "qgscoordinatetransform.h"
|
||||||
|
|
||||||
QgsTriangularMesh::QgsTriangularMesh( )
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
QgsTriangularMesh::~QgsTriangularMesh()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void QgsTriangularMesh::update( QgsMesh *nativeMesh, QgsRenderContext *context )
|
void QgsTriangularMesh::update( QgsMesh *nativeMesh, QgsRenderContext *context )
|
||||||
{
|
{
|
||||||
Q_ASSERT( nativeMesh );
|
Q_ASSERT( nativeMesh );
|
||||||
@ -41,7 +33,7 @@ void QgsTriangularMesh::update( QgsMesh *nativeMesh, QgsRenderContext *context )
|
|||||||
mTriangularMesh.vertices.resize( nativeMesh->vertices.size() );
|
mTriangularMesh.vertices.resize( nativeMesh->vertices.size() );
|
||||||
for ( int i = 0; i < nativeMesh->vertices.size(); ++i )
|
for ( int i = 0; i < nativeMesh->vertices.size(); ++i )
|
||||||
{
|
{
|
||||||
QgsMeshVertex vertex = nativeMesh->vertices[i];
|
const QgsMeshVertex &vertex = nativeMesh->vertices.at( i );
|
||||||
if ( transform.isValid() )
|
if ( transform.isValid() )
|
||||||
{
|
{
|
||||||
QgsPointXY mapPoint = transform.transform( QgsPointXY( vertex.x(), vertex.y() ) );
|
QgsPointXY mapPoint = transform.transform( QgsPointXY( vertex.x(), vertex.y() ) );
|
||||||
@ -59,7 +51,7 @@ void QgsTriangularMesh::update( QgsMesh *nativeMesh, QgsRenderContext *context )
|
|||||||
// CREATE TRIANGULAR MESH
|
// CREATE TRIANGULAR MESH
|
||||||
for ( int i = 0; i < nativeMesh->faces.size(); ++i )
|
for ( int i = 0; i < nativeMesh->faces.size(); ++i )
|
||||||
{
|
{
|
||||||
QgsMeshFace face = nativeMesh->faces[i] ;
|
const QgsMeshFace &face = nativeMesh->faces.at( i ) ;
|
||||||
if ( face.size() == 3 )
|
if ( face.size() == 3 )
|
||||||
{
|
{
|
||||||
// triangle
|
// triangle
|
||||||
|
@ -45,9 +45,9 @@ class CORE_EXPORT QgsTriangularMesh
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
//! Ctor
|
//! Ctor
|
||||||
QgsTriangularMesh();
|
QgsTriangularMesh() = default;
|
||||||
//! Dtor
|
//! Dtor
|
||||||
~QgsTriangularMesh();
|
~QgsTriangularMesh() = default;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Construct triangular mesh from layer's native mesh and context
|
* Construct triangular mesh from layer's native mesh and context
|
||||||
|
Loading…
x
Reference in New Issue
Block a user