Skip to content

Commit d27e556

Browse files
committed
Keep as many settings as possible when changing between displacement and cluster renderer
1 parent 3f590f0 commit d27e556

File tree

2 files changed

+44
-12
lines changed

2 files changed

+44
-12
lines changed

src/core/symbology-ng/qgspointclusterrenderer.cpp

+22-6
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
***************************************************************************/
1717

1818
#include "qgspointclusterrenderer.h"
19+
#include "qgspointdisplacementrenderer.h"
1920
#include "qgssymbollayerutils.h"
2021
#include "qgspainteffectregistry.h"
2122
#include "qgspainteffect.h"
@@ -189,15 +190,30 @@ QgsPointClusterRenderer* QgsPointClusterRenderer::convertFromRenderer( const Qgs
189190
{
190191
return dynamic_cast<QgsPointClusterRenderer*>( renderer->clone() );
191192
}
192-
193-
if ( renderer->type() == "singleSymbol" ||
194-
renderer->type() == "categorizedSymbol" ||
195-
renderer->type() == "graduatedSymbol" ||
196-
renderer->type() == "RuleRenderer" )
193+
else if ( renderer->type() == "singleSymbol" ||
194+
renderer->type() == "categorizedSymbol" ||
195+
renderer->type() == "graduatedSymbol" ||
196+
renderer->type() == "RuleRenderer" )
197197
{
198198
QgsPointClusterRenderer* pointRenderer = new QgsPointClusterRenderer();
199199
pointRenderer->setEmbeddedRenderer( renderer->clone() );
200200
return pointRenderer;
201201
}
202-
return nullptr;
202+
else if ( renderer->type() == "pointDisplacement" )
203+
{
204+
QgsPointClusterRenderer* pointRenderer = new QgsPointClusterRenderer();
205+
const QgsPointDisplacementRenderer* displacementRenderer = static_cast< const QgsPointDisplacementRenderer* >( renderer );
206+
if ( displacementRenderer->embeddedRenderer() )
207+
pointRenderer->setEmbeddedRenderer( displacementRenderer->embeddedRenderer()->clone() );
208+
pointRenderer->setTolerance( displacementRenderer->tolerance() );
209+
pointRenderer->setToleranceUnit( displacementRenderer->toleranceUnit() );
210+
pointRenderer->setToleranceMapUnitScale( displacementRenderer->toleranceMapUnitScale() );
211+
if ( const_cast< QgsPointDisplacementRenderer* >( displacementRenderer )->centerSymbol() )
212+
pointRenderer->setClusterSymbol( const_cast< QgsPointDisplacementRenderer* >( displacementRenderer )->centerSymbol()->clone() );
213+
return pointRenderer;
214+
}
215+
else
216+
{
217+
return nullptr;
218+
}
203219
}

src/core/symbology-ng/qgspointdisplacementrenderer.cpp

+22-6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
#include "qgsfontutils.h"
2121
#include "qgspainteffectregistry.h"
2222
#include "qgspainteffect.h"
23+
#include "qgspointclusterrenderer.h"
2324

2425
#include <QPainter>
2526
#include <cmath>
@@ -328,15 +329,30 @@ QgsPointDisplacementRenderer* QgsPointDisplacementRenderer::convertFromRenderer(
328329
{
329330
return dynamic_cast<QgsPointDisplacementRenderer*>( renderer->clone() );
330331
}
331-
332-
if ( renderer->type() == "singleSymbol" ||
333-
renderer->type() == "categorizedSymbol" ||
334-
renderer->type() == "graduatedSymbol" ||
335-
renderer->type() == "RuleRenderer" )
332+
else if ( renderer->type() == "singleSymbol" ||
333+
renderer->type() == "categorizedSymbol" ||
334+
renderer->type() == "graduatedSymbol" ||
335+
renderer->type() == "RuleRenderer" )
336336
{
337337
QgsPointDisplacementRenderer* pointRenderer = new QgsPointDisplacementRenderer();
338338
pointRenderer->setEmbeddedRenderer( renderer->clone() );
339339
return pointRenderer;
340340
}
341-
return nullptr;
341+
else if ( renderer->type() == "pointCluster" )
342+
{
343+
QgsPointDisplacementRenderer* pointRenderer = new QgsPointDisplacementRenderer();
344+
const QgsPointClusterRenderer* clusterRenderer = static_cast< const QgsPointClusterRenderer* >( renderer );
345+
if ( clusterRenderer->embeddedRenderer() )
346+
pointRenderer->setEmbeddedRenderer( clusterRenderer->embeddedRenderer()->clone() );
347+
pointRenderer->setTolerance( clusterRenderer->tolerance() );
348+
pointRenderer->setToleranceUnit( clusterRenderer->toleranceUnit() );
349+
pointRenderer->setToleranceMapUnitScale( clusterRenderer->toleranceMapUnitScale() );
350+
if ( const_cast< QgsPointClusterRenderer* >( clusterRenderer )->clusterSymbol() )
351+
pointRenderer->setCenterSymbol( const_cast< QgsPointClusterRenderer* >( clusterRenderer )->clusterSymbol()->clone() );
352+
return pointRenderer;
353+
}
354+
else
355+
{
356+
return nullptr;
357+
}
342358
}

0 commit comments

Comments
 (0)