Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Keep as many settings as possible when changing between displacement …
…and cluster renderer
  • Loading branch information
nyalldawson committed Sep 29, 2016
1 parent 3f590f0 commit d27e556
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 12 deletions.
28 changes: 22 additions & 6 deletions src/core/symbology-ng/qgspointclusterrenderer.cpp
Expand Up @@ -16,6 +16,7 @@
***************************************************************************/

#include "qgspointclusterrenderer.h"
#include "qgspointdisplacementrenderer.h"
#include "qgssymbollayerutils.h"
#include "qgspainteffectregistry.h"
#include "qgspainteffect.h"
Expand Down Expand Up @@ -189,15 +190,30 @@ QgsPointClusterRenderer* QgsPointClusterRenderer::convertFromRenderer( const Qgs
{
return dynamic_cast<QgsPointClusterRenderer*>( renderer->clone() );
}

if ( renderer->type() == "singleSymbol" ||
renderer->type() == "categorizedSymbol" ||
renderer->type() == "graduatedSymbol" ||
renderer->type() == "RuleRenderer" )
else if ( renderer->type() == "singleSymbol" ||
renderer->type() == "categorizedSymbol" ||
renderer->type() == "graduatedSymbol" ||
renderer->type() == "RuleRenderer" )
{
QgsPointClusterRenderer* pointRenderer = new QgsPointClusterRenderer();
pointRenderer->setEmbeddedRenderer( renderer->clone() );
return pointRenderer;
}
return nullptr;
else if ( renderer->type() == "pointDisplacement" )
{
QgsPointClusterRenderer* pointRenderer = new QgsPointClusterRenderer();
const QgsPointDisplacementRenderer* displacementRenderer = static_cast< const QgsPointDisplacementRenderer* >( renderer );
if ( displacementRenderer->embeddedRenderer() )
pointRenderer->setEmbeddedRenderer( displacementRenderer->embeddedRenderer()->clone() );
pointRenderer->setTolerance( displacementRenderer->tolerance() );
pointRenderer->setToleranceUnit( displacementRenderer->toleranceUnit() );
pointRenderer->setToleranceMapUnitScale( displacementRenderer->toleranceMapUnitScale() );
if ( const_cast< QgsPointDisplacementRenderer* >( displacementRenderer )->centerSymbol() )
pointRenderer->setClusterSymbol( const_cast< QgsPointDisplacementRenderer* >( displacementRenderer )->centerSymbol()->clone() );
return pointRenderer;
}
else
{
return nullptr;
}
}
28 changes: 22 additions & 6 deletions src/core/symbology-ng/qgspointdisplacementrenderer.cpp
Expand Up @@ -20,6 +20,7 @@
#include "qgsfontutils.h"
#include "qgspainteffectregistry.h"
#include "qgspainteffect.h"
#include "qgspointclusterrenderer.h"

#include <QPainter>
#include <cmath>
Expand Down Expand Up @@ -328,15 +329,30 @@ QgsPointDisplacementRenderer* QgsPointDisplacementRenderer::convertFromRenderer(
{
return dynamic_cast<QgsPointDisplacementRenderer*>( renderer->clone() );
}

if ( renderer->type() == "singleSymbol" ||
renderer->type() == "categorizedSymbol" ||
renderer->type() == "graduatedSymbol" ||
renderer->type() == "RuleRenderer" )
else if ( renderer->type() == "singleSymbol" ||
renderer->type() == "categorizedSymbol" ||
renderer->type() == "graduatedSymbol" ||
renderer->type() == "RuleRenderer" )
{
QgsPointDisplacementRenderer* pointRenderer = new QgsPointDisplacementRenderer();
pointRenderer->setEmbeddedRenderer( renderer->clone() );
return pointRenderer;
}
return nullptr;
else if ( renderer->type() == "pointCluster" )
{
QgsPointDisplacementRenderer* pointRenderer = new QgsPointDisplacementRenderer();
const QgsPointClusterRenderer* clusterRenderer = static_cast< const QgsPointClusterRenderer* >( renderer );
if ( clusterRenderer->embeddedRenderer() )
pointRenderer->setEmbeddedRenderer( clusterRenderer->embeddedRenderer()->clone() );
pointRenderer->setTolerance( clusterRenderer->tolerance() );
pointRenderer->setToleranceUnit( clusterRenderer->toleranceUnit() );
pointRenderer->setToleranceMapUnitScale( clusterRenderer->toleranceMapUnitScale() );
if ( const_cast< QgsPointClusterRenderer* >( clusterRenderer )->clusterSymbol() )
pointRenderer->setCenterSymbol( const_cast< QgsPointClusterRenderer* >( clusterRenderer )->clusterSymbol()->clone() );
return pointRenderer;
}
else
{
return nullptr;
}
}

0 comments on commit d27e556

Please sign in to comment.