Skip to content

Commit c42af60

Browse files
committedApr 20, 2018
use smart pointer internally and remove unnecessary code
1 parent 1efdbc5 commit c42af60

File tree

8 files changed

+50
-78
lines changed

8 files changed

+50
-78
lines changed
 

‎doc/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ IF(WITH_APIDOC)
7070
${CMAKE_SOURCE_DIR}/src/core/layout
7171
${CMAKE_SOURCE_DIR}/src/core/locator
7272
${CMAKE_SOURCE_DIR}/src/core/metadata
73+
${CMAKE_SOURCE_DIR}/src/core/mesh
7374
${CMAKE_SOURCE_DIR}/src/core/pal
7475
${CMAKE_SOURCE_DIR}/src/core/processing
7576
${CMAKE_SOURCE_DIR}/src/core/providers

‎python/core/mesh/qgsmeshlayer.sip.in

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111

1212

13+
1314
class QgsMeshLayer : QgsMapLayer
1415
{
1516
%Docstring

‎src/core/mesh/qgsmeshlayer.cpp

Lines changed: 25 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ QgsMeshLayer::QgsMeshLayer( const QString &meshLayerPath,
3838

3939
QgsSymbolLayerList l1;
4040
l1 << new QgsSimpleFillSymbolLayer( Qt::white, Qt::NoBrush, Qt::black, Qt::SolidLine, 1.0 );
41-
mNativeMeshSymbol = new QgsFillSymbol( l1 );
41+
mNativeMeshSymbol.reset( new QgsFillSymbol( l1 ) );
4242

4343

4444
toggleTriangularMeshRendering( false );
@@ -49,16 +49,8 @@ QgsMeshLayer::QgsMeshLayer( const QString &meshLayerPath,
4949

5050
QgsMeshLayer::~QgsMeshLayer()
5151
{
52-
clearMeshes();
53-
5452
if ( mDataProvider )
5553
delete mDataProvider;
56-
57-
if ( mNativeMeshSymbol )
58-
delete mNativeMeshSymbol;
59-
60-
if ( mTriangularMeshSymbol )
61-
delete mTriangularMeshSymbol;
6254
}
6355

6456
QgsMeshDataProvider *QgsMeshLayer::dataProvider()
@@ -95,31 +87,41 @@ QString QgsMeshLayer::providerType() const
9587
return mProviderKey;
9688
}
9789

98-
QgsMesh *QgsMeshLayer::nativeMesh() SIP_SKIP {return mNativeMesh;}
90+
QgsMesh *QgsMeshLayer::nativeMesh() SIP_SKIP
91+
{
92+
return mNativeMesh.get();
93+
}
9994

100-
QgsTriangularMesh *QgsMeshLayer::triangularMesh() SIP_SKIP {return mTriangularMesh;}
10195

102-
QgsSymbol *QgsMeshLayer::nativeMeshSymbol() {return mNativeMeshSymbol;}
96+
QgsTriangularMesh *QgsMeshLayer::triangularMesh() SIP_SKIP
97+
{
98+
return mTriangularMesh.get();
99+
}
103100

104-
QgsSymbol *QgsMeshLayer::triangularMeshSymbol() {return mTriangularMeshSymbol;}
101+
QgsSymbol *QgsMeshLayer::nativeMeshSymbol()
102+
{
103+
return mNativeMeshSymbol.get();
104+
}
105+
106+
QgsSymbol *QgsMeshLayer::triangularMeshSymbol()
107+
{
108+
return mTriangularMeshSymbol.get();
109+
}
105110

106111
void QgsMeshLayer::toggleTriangularMeshRendering( bool toggle )
107112
{
108113
if ( toggle && mTriangularMeshSymbol )
109114
return;
110115

111-
if ( mTriangularMeshSymbol )
112-
delete mTriangularMeshSymbol;
113-
114116
if ( toggle )
115117
{
116118
QgsSymbolLayerList l2;
117119
l2 << new QgsSimpleFillSymbolLayer( Qt::white, Qt::NoBrush, Qt::red, Qt::SolidLine, 0.26 );
118-
mTriangularMeshSymbol = new QgsFillSymbol( l2 );
120+
mTriangularMeshSymbol.reset( new QgsFillSymbol( l2 ) );
119121
}
120122
else
121123
{
122-
mTriangularMeshSymbol = nullptr;
124+
mTriangularMeshSymbol.reset();
123125
}
124126
triggerRepaint();
125127
}
@@ -128,7 +130,7 @@ void QgsMeshLayer::fillNativeMesh()
128130
{
129131
Q_ASSERT( !mNativeMesh );
130132

131-
mNativeMesh = new QgsMesh();
133+
mNativeMesh.reset( new QgsMesh() );
132134

133135
if ( !( dataProvider() && dataProvider()->isValid() ) )
134136
return;
@@ -150,13 +152,14 @@ QgsMapLayerRenderer *QgsMeshLayer::createMapRenderer( QgsRenderContext &renderer
150152
{
151153
if ( !mNativeMesh )
152154
{
155+
// lazy loading of mesh data
153156
fillNativeMesh();
154157
}
155158

156159
if ( !mTriangularMesh )
157-
mTriangularMesh = new QgsTriangularMesh();
160+
mTriangularMesh.reset( new QgsTriangularMesh() );
158161

159-
triangularMesh()->update( mNativeMesh, &rendererContext );
162+
mTriangularMesh->update( mNativeMesh.get(), &rendererContext );
160163
return new QgsMeshLayerRenderer( this, rendererContext );
161164
}
162165

@@ -177,26 +180,13 @@ bool QgsMeshLayer::writeSymbology( QDomNode &node, QDomDocument &doc, QString &e
177180
return true;
178181
}
179182

180-
void QgsMeshLayer::clearMeshes()
181-
{
182-
if ( mTriangularMesh )
183-
delete mTriangularMesh;
184-
185-
if ( mNativeMesh )
186-
delete mNativeMesh;
187-
188-
}
189-
190183
bool QgsMeshLayer::setDataProvider( QString const &provider )
191184
{
192-
clearMeshes();
185+
Q_ASSERT( !mDataProvider ); //called from ctor
193186

194187
mProviderKey = provider;
195188
QString dataSource = mDataSource;
196189

197-
if ( mDataProvider )
198-
delete mDataProvider;
199-
200190
mDataProvider = qobject_cast<QgsMeshDataProvider *>( QgsProviderRegistry::instance()->createProvider( provider, dataSource ) );
201191
if ( !mDataProvider )
202192
{

‎src/core/mesh/qgsmeshlayer.h

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
#ifndef QGSMESHLAYER_H
1919
#define QGSMESHLAYER_H
2020

21+
#include <memory>
22+
2123
#include "qgis_core.h"
2224
#include "qgsmaplayer.h"
2325
#include "qgsrendercontext.h"
@@ -152,28 +154,26 @@ class CORE_EXPORT QgsMeshLayer : public QgsMapLayer
152154
#endif
153155

154156
private:
155-
//! Clear native and triangular mesh
156-
void clearMeshes();
157157
void fillNativeMesh();
158158

159159
private:
160-
//! Pointer to native mesh structure, used as cache for rendering
161-
QgsMesh *mNativeMesh = nullptr;
162-
163-
//! Pointer to derived mesh structure
164-
QgsTriangularMesh *mTriangularMesh = nullptr;
165-
166160
//! Pointer to data provider derived from the abastract base class QgsMeshDataProvider
167161
QgsMeshDataProvider *mDataProvider = nullptr;
168162

169163
//! Data provider key
170164
QString mProviderKey;
171165

166+
//! Pointer to native mesh structure, used as cache for rendering
167+
std::unique_ptr<QgsMesh> mNativeMesh;
168+
169+
//! Pointer to derived mesh structure
170+
std::unique_ptr<QgsTriangularMesh> mTriangularMesh;
171+
172172
//! rendering native mesh
173-
QgsSymbol *mNativeMeshSymbol = nullptr;
173+
std::unique_ptr<QgsSymbol> mNativeMeshSymbol;
174174

175175
//! rendering triangular mesh
176-
QgsSymbol *mTriangularMeshSymbol = nullptr;
176+
std::unique_ptr<QgsSymbol> mTriangularMeshSymbol;
177177
};
178178

179179
#endif //QGSMESHLAYER_H

‎src/core/mesh/qgsmeshlayerrenderer.cpp

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -40,27 +40,15 @@ QgsMeshLayerRenderer::QgsMeshLayerRenderer( QgsMeshLayer *layer, QgsRenderContex
4040
// make copies for symbols
4141
if ( layer->nativeMeshSymbol() )
4242
{
43-
mNativeMeshSymbol = layer->nativeMeshSymbol()->clone();
43+
mNativeMeshSymbol.reset( layer->nativeMeshSymbol()->clone() );
4444
}
4545

4646
if ( layer->triangularMeshSymbol() )
4747
{
48-
mTriangularMeshSymbol = layer->triangularMeshSymbol()->clone();
48+
mTriangularMeshSymbol.reset( layer->triangularMeshSymbol()->clone() );
4949
}
5050
}
5151

52-
53-
QgsMeshLayerRenderer::~QgsMeshLayerRenderer()
54-
{
55-
if ( mNativeMeshSymbol )
56-
delete mNativeMeshSymbol;
57-
58-
if ( mTriangularMeshSymbol )
59-
delete mTriangularMeshSymbol;
60-
}
61-
62-
63-
6452
bool QgsMeshLayerRenderer::render()
6553
{
6654
renderMesh( mNativeMeshSymbol, mNativeMesh.faces ); // native mesh
@@ -69,7 +57,7 @@ bool QgsMeshLayerRenderer::render()
6957
return true;
7058
}
7159

72-
void QgsMeshLayerRenderer::renderMesh( QgsSymbol *symbol, const QVector<QgsMeshFace> &faces )
60+
void QgsMeshLayerRenderer::renderMesh( const std::unique_ptr<QgsSymbol> &symbol, const QVector<QgsMeshFace> &faces )
7361
{
7462
if ( !symbol )
7563
return;

‎src/core/mesh/qgsmeshlayerrenderer.h

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ class QgsSymbol;
2323

2424
#define SIP_NO_FILE
2525

26+
#include <memory>
27+
2628
#include "qgis.h"
2729

2830
#include "qgsmaplayerrenderer.h"
@@ -42,11 +44,11 @@ class QgsMeshLayerRenderer : public QgsMapLayerRenderer
4244
//! Ctor
4345
QgsMeshLayerRenderer( QgsMeshLayer *layer, QgsRenderContext &context );
4446

45-
~QgsMeshLayerRenderer() override;
47+
~QgsMeshLayerRenderer() override = default;
4648
bool render() override;
4749

4850
private:
49-
void renderMesh( QgsSymbol *symbol, const QVector<QgsMeshFace> &faces );
51+
void renderMesh( const std::unique_ptr<QgsSymbol> &symbol, const QVector<QgsMeshFace> &faces );
5052

5153

5254
protected:
@@ -57,15 +59,13 @@ class QgsMeshLayerRenderer : public QgsMapLayerRenderer
5759
QgsTriangularMesh mTriangularMesh;
5860

5961
// copy from mesh layer
60-
QgsSymbol *mNativeMeshSymbol = nullptr;
62+
std::unique_ptr<QgsSymbol> mNativeMeshSymbol = nullptr;
6163

6264
// copy from mesh layer
63-
QgsSymbol *mTriangularMeshSymbol = nullptr;
65+
std::unique_ptr<QgsSymbol> mTriangularMeshSymbol = nullptr;
6466

6567
// rendering context
6668
QgsRenderContext &mContext;
67-
68-
6969
};
7070

7171

‎src/core/mesh/qgstriangularmesh.cpp

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,6 @@
1919
#include "qgsrendercontext.h"
2020
#include "qgscoordinatetransform.h"
2121

22-
QgsTriangularMesh::QgsTriangularMesh( )
23-
{
24-
}
25-
26-
QgsTriangularMesh::~QgsTriangularMesh()
27-
{
28-
}
29-
3022
void QgsTriangularMesh::update( QgsMesh *nativeMesh, QgsRenderContext *context )
3123
{
3224
Q_ASSERT( nativeMesh );
@@ -41,7 +33,7 @@ void QgsTriangularMesh::update( QgsMesh *nativeMesh, QgsRenderContext *context )
4133
mTriangularMesh.vertices.resize( nativeMesh->vertices.size() );
4234
for ( int i = 0; i < nativeMesh->vertices.size(); ++i )
4335
{
44-
QgsMeshVertex vertex = nativeMesh->vertices[i];
36+
const QgsMeshVertex &vertex = nativeMesh->vertices.at( i );
4537
if ( transform.isValid() )
4638
{
4739
QgsPointXY mapPoint = transform.transform( QgsPointXY( vertex.x(), vertex.y() ) );
@@ -59,7 +51,7 @@ void QgsTriangularMesh::update( QgsMesh *nativeMesh, QgsRenderContext *context )
5951
// CREATE TRIANGULAR MESH
6052
for ( int i = 0; i < nativeMesh->faces.size(); ++i )
6153
{
62-
QgsMeshFace face = nativeMesh->faces[i] ;
54+
const QgsMeshFace &face = nativeMesh->faces.at( i ) ;
6355
if ( face.size() == 3 )
6456
{
6557
// triangle

‎src/core/mesh/qgstriangularmesh.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,9 +45,9 @@ class CORE_EXPORT QgsTriangularMesh
4545
{
4646
public:
4747
//! Ctor
48-
QgsTriangularMesh();
48+
QgsTriangularMesh() = default;
4949
//! Dtor
50-
~QgsTriangularMesh();
50+
~QgsTriangularMesh() = default;
5151

5252
/**
5353
* Construct triangular mesh from layer's native mesh and context

0 commit comments

Comments
 (0)
Please sign in to comment.