Fixed indentation

This commit is contained in:
Martin Dobias 2014-06-10 11:10:42 +07:00
parent 3853fc232a
commit 25346fe98f
5 changed files with 255 additions and 231 deletions

View File

@ -5,76 +5,76 @@ class QgsInvertedPolygonRenderer : public QgsFeatureRendererV2
%End
public:
/** Constructor
* @param embeddedRenderer optional embeddedRenderer. If null, a default one will be assigned
*/
QgsInvertedPolygonRenderer( const QgsFeatureRendererV2* embeddedRenderer = 0 );
virtual ~QgsInvertedPolygonRenderer();
/** Constructor
* @param embeddedRenderer optional embeddedRenderer. If null, a default one will be assigned
*/
QgsInvertedPolygonRenderer( const QgsFeatureRendererV2* embeddedRenderer = 0 );
virtual ~QgsInvertedPolygonRenderer();
/** Used to clone this feature renderer.*/
virtual QgsFeatureRendererV2* clone();
/** Used to clone this feature renderer.*/
virtual QgsFeatureRendererV2* clone();
virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
/** Renders a given feature.
* This will here collect features. The actual rendering will be postponed to stopRender()
* @param feature the feature to render
* @param context the rendering context
* @param layer the symbol layer to render, if that makes sense
* @param selected whether this feature has been selected (this will add decorations)
* @param drawVertexMarker whether this feature has vertex markers (in edit mode usually)
* @returns true if the rendering was ok
*/
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
/** Renders a given feature.
* This will here collect features. The actual rendering will be postponed to stopRender()
* @param feature the feature to render
* @param context the rendering context
* @param layer the symbol layer to render, if that makes sense
* @param selected whether this feature has been selected (this will add decorations)
* @param drawVertexMarker whether this feature has vertex markers (in edit mode usually)
* @returns true if the rendering was ok
*/
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
/**
* The actual rendering will take place here.
* Features collected during renderFeature() are rendered using the embedded feature renderer
*/
virtual void stopRender( QgsRenderContext& context );
/**
* The actual rendering will take place here.
* Features collected during renderFeature() are rendered using the embedded feature renderer
*/
virtual void stopRender( QgsRenderContext& context );
/** @returns a textual reprensation of the renderer */
virtual QString dump() const;
/** @returns a textual reprensation of the renderer */
virtual QString dump() const;
/** Proxy that will call this method on the embedded renderer. */
virtual QList<QString> usedAttributes();
/** Proxy that will call this method on the embedded renderer. */
virtual int capabilities();
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2List symbols();
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2List symbolsForFeature( QgsFeature& feat );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
/** Proxy that will call this method on the embedded renderer. */
virtual bool willRenderFeature( QgsFeature& feat );
/** Proxy that will call this method on the embedded renderer. */
virtual QList<QString> usedAttributes();
/** Proxy that will call this method on the embedded renderer. */
virtual int capabilities();
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2List symbols();
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2List symbolsForFeature( QgsFeature& feat );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
/** Proxy that will call this method on the embedded renderer. */
virtual bool willRenderFeature( QgsFeature& feat );
/** Creates a renderer out of an XML, for loading*/
static QgsFeatureRendererV2* create( QDomElement& element );
/** Creates a renderer out of an XML, for loading*/
static QgsFeatureRendererV2* create( QDomElement& element );
/** Creates an XML representation of the renderer. Used for saving purpose
* @param doc the XML document where to create the XML subtree
* @returns the created XML subtree
*/
virtual QDomElement save( QDomDocument& doc );
/** Creates an XML representation of the renderer. Used for saving purpose
* @param doc the XML document where to create the XML subtree
* @returns the created XML subtree
*/
virtual QDomElement save( QDomDocument& doc );
/** sets the embedded renderer
* @param subRenderer the embedded renderer (will be cloned)
*/
void setEmbeddedRenderer( const QgsFeatureRendererV2* subRenderer );
/** @returns the current embedded renderer
*/
const QgsFeatureRendererV2* embeddedRenderer() const;
/** @returns true if the geometries are to be preprocessed (merged with an union) before rendering.*/
/** sets the embedded renderer
* @param subRenderer the embedded renderer (will be cloned)
*/
void setEmbeddedRenderer( const QgsFeatureRendererV2* subRenderer );
/** @returns the current embedded renderer
*/
const QgsFeatureRendererV2* embeddedRenderer() const;
/** @returns true if the geometries are to be preprocessed (merged with an union) before rendering.*/
bool preprocessingEnabled() const;
/**
@param enabled enables or disables the preprocessing.
When enabled, geometries will be merged with an union before being rendered.
It allows to fix some rendering artefacts (when rendering overlapping polygons for instance).
This will involve some CPU-demanding computations and is thus disabled by default.
*/
void setPreprocessingEnabled( bool enabled );
bool preprocessingEnabled() const;
/**
@param enabled enables or disables the preprocessing.
When enabled, geometries will be merged with an union before being rendered.
It allows to fix some rendering artefacts (when rendering overlapping polygons for instance).
This will involve some CPU-demanding computations and is thus disabled by default.
*/
void setPreprocessingEnabled( bool enabled );
};

View File

@ -28,12 +28,14 @@
#include <QDomElement>
QgsInvertedPolygonRenderer::QgsInvertedPolygonRenderer( const QgsFeatureRendererV2* subRenderer )
: QgsFeatureRendererV2( "invertedPolygonRenderer" ), mPreprocessingEnabled( false )
: QgsFeatureRendererV2( "invertedPolygonRenderer" ), mPreprocessingEnabled( false )
{
if ( subRenderer ) {
if ( subRenderer )
{
setEmbeddedRenderer( subRenderer );
}
else {
else
{
mSubRenderer.reset( QgsFeatureRendererV2::defaultRenderer( QGis::Polygon ) );
}
}
@ -44,10 +46,12 @@ QgsInvertedPolygonRenderer::~QgsInvertedPolygonRenderer()
void QgsInvertedPolygonRenderer::setEmbeddedRenderer( const QgsFeatureRendererV2* subRenderer )
{
if ( subRenderer ) {
mSubRenderer.reset( const_cast<QgsFeatureRendererV2*>(subRenderer)->clone() );
if ( subRenderer )
{
mSubRenderer.reset( const_cast<QgsFeatureRendererV2*>( subRenderer )->clone() );
}
else {
else
{
mSubRenderer.reset( 0 );
}
}
@ -59,7 +63,8 @@ const QgsFeatureRendererV2* QgsInvertedPolygonRenderer::embeddedRenderer() const
void QgsInvertedPolygonRenderer::startRender( QgsRenderContext& context, const QgsFields& fields )
{
if ( !mSubRenderer ) {
if ( !mSubRenderer )
{
return;
}
@ -99,7 +104,7 @@ void QgsInvertedPolygonRenderer::startRender( QgsRenderContext& context, const Q
if ( context.coordinateTransform() )
{
// disable projection
mContext.setCoordinateTransform(0);
mContext.setCoordinateTransform( 0 );
// recompute extent so that polygon clipping is correct
QRect v( context.painter()->viewport() );
mContext.setExtent( QgsRectangle( mtp.toMapCoordinates( v.topLeft() ), mtp.toMapCoordinates( v.bottomRight() ) ) );
@ -107,7 +112,7 @@ void QgsInvertedPolygonRenderer::startRender( QgsRenderContext& context, const Q
}
mExtentPolygon.clear();
mExtentPolygon.append(exteriorRing);
mExtentPolygon.append( exteriorRing );
mSubRenderer->startRender( mContext, fields );
}
@ -122,7 +127,7 @@ bool QgsInvertedPolygonRenderer::renderFeature( QgsFeature& feature, QgsRenderCo
// store this feature as a feature to render with decoration if needed
if ( selected || drawVertexMarker )
{
mFeatureDecorations.append( FeatureDecoration( feature, selected, drawVertexMarker, layer) );
mFeatureDecorations.append( FeatureDecoration( feature, selected, drawVertexMarker, layer ) );
}
// Features are grouped by category of symbols (returned by symbol(s)ForFeature)
@ -131,7 +136,7 @@ bool QgsInvertedPolygonRenderer::renderFeature( QgsFeature& feature, QgsRenderCo
// that have transparency.
//
// In order to assign a unique category to a set of symbols
// during each rendering session (between startRender() and stopRender()),
// during each rendering session (between startRender() and stopRender()),
// we build an unique id as a QByteArray that is the concatenation
// of each symbol's memory address.
// The only assumption made here is that symbol(s)ForFeature will
@ -140,19 +145,21 @@ bool QgsInvertedPolygonRenderer::renderFeature( QgsFeature& feature, QgsRenderCo
// This QByteArray can then be used as a key for a QMap where the list of
// features for this category is stored
QByteArray catId;
if ( capabilities() & MoreSymbolsPerFeature ) {
if ( capabilities() & MoreSymbolsPerFeature )
{
QgsSymbolV2List syms( mSubRenderer->symbolsForFeature( feature ) );
foreach ( QgsSymbolV2* sym, syms )
{
// append the memory address
catId.append( reinterpret_cast<const char*>(&sym), sizeof(sym) );
catId.append( reinterpret_cast<const char*>( &sym ), sizeof( sym ) );
}
}
else
{
QgsSymbolV2* sym = mSubRenderer->symbolForFeature( feature );
if (sym) {
catId.append( reinterpret_cast<const char*>(&sym), sizeof(sym) );
if ( sym )
{
catId.append( reinterpret_cast<const char*>( &sym ), sizeof( sym ) );
}
}
@ -161,7 +168,7 @@ bool QgsInvertedPolygonRenderer::renderFeature( QgsFeature& feature, QgsRenderCo
return false;
}
if ( ! mSymbolCategories.contains(catId) )
if ( ! mSymbolCategories.contains( catId ) )
{
// the exterior ring must be a square in the destination CRS
CombinedFeature cFeat;
@ -187,12 +194,14 @@ bool QgsInvertedPolygonRenderer::renderFeature( QgsFeature& feature, QgsRenderCo
geom->transform( *xform );
}
if ( (geom->wkbType() == QGis::WKBPolygon) ||
(geom->wkbType() == QGis::WKBPolygon25D) ) {
multi.append(geom->asPolygon() );
if (( geom->wkbType() == QGis::WKBPolygon ) ||
( geom->wkbType() == QGis::WKBPolygon25D ) )
{
multi.append( geom->asPolygon() );
}
else if ( (geom->wkbType() == QGis::WKBMultiPolygon) ||
(geom->wkbType() == QGis::WKBMultiPolygon25D) ) {
else if (( geom->wkbType() == QGis::WKBMultiPolygon ) ||
( geom->wkbType() == QGis::WKBMultiPolygon25D ) )
{
multi = geom->asMultiPolygon();
}
@ -202,7 +211,7 @@ bool QgsInvertedPolygonRenderer::renderFeature( QgsFeature& feature, QgsRenderCo
if ( ! cFeat.feature.geometry() )
{
// first feature: add the current geometry
cFeat.feature.setGeometry( new QgsGeometry(*geom) );
cFeat.feature.setGeometry( new QgsGeometry( *geom ) );
}
else
{
@ -227,12 +236,14 @@ bool QgsInvertedPolygonRenderer::renderFeature( QgsFeature& feature, QgsRenderCo
// No validity check is done, on purpose, it will be very slow and painting
// operations do not need geometries to be valid
for ( int i = 0; i < multi.size(); i++ ) {
for ( int i = 0; i < multi.size(); i++ )
{
// add the exterior ring as interior ring to the first polygon
cFeat.multiPolygon[0].append( multi[i][0] );
// add interior rings as new polygons
for ( int j = 1; j < multi[i].size(); j++ ) {
for ( int j = 1; j < multi[i].size(); j++ )
{
QgsPolygon new_poly;
new_poly.append( multi[i][j] );
cFeat.multiPolygon.append( new_poly );
@ -244,7 +255,8 @@ bool QgsInvertedPolygonRenderer::renderFeature( QgsFeature& feature, QgsRenderCo
void QgsInvertedPolygonRenderer::stopRender( QgsRenderContext& context )
{
if ( !mSubRenderer ) {
if ( !mSubRenderer )
{
return;
}
if ( !context.painter() )
@ -252,7 +264,7 @@ void QgsInvertedPolygonRenderer::stopRender( QgsRenderContext& context )
return;
}
for ( FeatureCategoryMap::iterator cit = mFeaturesCategoryMap.begin(); cit != mFeaturesCategoryMap.end(); ++cit)
for ( FeatureCategoryMap::iterator cit = mFeaturesCategoryMap.begin(); cit != mFeaturesCategoryMap.end(); ++cit )
{
QgsFeature feat( cit->feature );
if ( !mPreprocessingEnabled )
@ -289,7 +301,7 @@ void QgsInvertedPolygonRenderer::stopRender( QgsRenderContext& context )
}
// draw feature decorations
foreach (FeatureDecoration deco, mFeatureDecorations )
foreach ( FeatureDecoration deco, mFeatureDecorations )
{
mSubRenderer->renderFeature( deco.feature, mContext, deco.layer, deco.selected, deco.drawMarkers );
}
@ -299,7 +311,8 @@ void QgsInvertedPolygonRenderer::stopRender( QgsRenderContext& context )
QString QgsInvertedPolygonRenderer::dump() const
{
if ( !mSubRenderer ) {
if ( !mSubRenderer )
{
return "INVERTED: NULL";
}
return "INVERTED [" + mSubRenderer->dump() + "]";
@ -350,7 +363,8 @@ QDomElement QgsInvertedPolygonRenderer::save( QDomDocument& doc )
QgsSymbolV2* QgsInvertedPolygonRenderer::symbolForFeature( QgsFeature& feature )
{
if ( !mSubRenderer ) {
if ( !mSubRenderer )
{
return 0;
}
return mSubRenderer->symbolForFeature( feature );
@ -358,7 +372,8 @@ QgsSymbolV2* QgsInvertedPolygonRenderer::symbolForFeature( QgsFeature& feature )
QgsSymbolV2List QgsInvertedPolygonRenderer::symbolsForFeature( QgsFeature& feature )
{
if ( !mSubRenderer ) {
if ( !mSubRenderer )
{
return QgsSymbolV2List();
}
return mSubRenderer->symbolsForFeature( feature );
@ -366,7 +381,8 @@ QgsSymbolV2List QgsInvertedPolygonRenderer::symbolsForFeature( QgsFeature& featu
QgsSymbolV2List QgsInvertedPolygonRenderer::symbols()
{
if ( !mSubRenderer ) {
if ( !mSubRenderer )
{
return QgsSymbolV2List();
}
return mSubRenderer->symbols();
@ -374,7 +390,8 @@ QgsSymbolV2List QgsInvertedPolygonRenderer::symbols()
int QgsInvertedPolygonRenderer::capabilities()
{
if ( !mSubRenderer ) {
if ( !mSubRenderer )
{
return 0;
}
return mSubRenderer->capabilities();
@ -382,7 +399,8 @@ int QgsInvertedPolygonRenderer::capabilities()
QList<QString> QgsInvertedPolygonRenderer::usedAttributes()
{
if ( !mSubRenderer ) {
if ( !mSubRenderer )
{
return QList<QString>();
}
return mSubRenderer->usedAttributes();
@ -390,7 +408,8 @@ QList<QString> QgsInvertedPolygonRenderer::usedAttributes()
QgsLegendSymbologyList QgsInvertedPolygonRenderer::legendSymbologyItems( QSize iconSize )
{
if ( !mSubRenderer ) {
if ( !mSubRenderer )
{
return QgsLegendSymbologyList();
}
return mSubRenderer->legendSymbologyItems( iconSize );
@ -398,7 +417,8 @@ QgsLegendSymbologyList QgsInvertedPolygonRenderer::legendSymbologyItems( QSize i
QgsLegendSymbolList QgsInvertedPolygonRenderer::legendSymbolItems( double scaleDenominator, QString rule )
{
if ( !mSubRenderer ) {
if ( !mSubRenderer )
{
return QgsLegendSymbolList();
}
return mSubRenderer->legendSymbolItems( scaleDenominator, rule );
@ -406,8 +426,10 @@ QgsLegendSymbolList QgsInvertedPolygonRenderer::legendSymbolItems( double scaleD
bool QgsInvertedPolygonRenderer::willRenderFeature( QgsFeature& feat )
{
if ( !mSubRenderer ) {
if ( !mSubRenderer )
{
return false;
}
return mSubRenderer->willRenderFeature( feat );
}

View File

@ -31,7 +31,7 @@
*
* It is designed on top of another feature renderer, which is called "embedded"
* Most of the methods are then only proxies to the embedded renderer.
*
*
* Features are collected to form one "inverted" polygon
* during renderFeature() and rendered on stopRender().
*/
@ -39,128 +39,128 @@ class CORE_EXPORT QgsInvertedPolygonRenderer : public QgsFeatureRendererV2
{
public:
/** Constructor
* @param embeddedRenderer optional embeddedRenderer. If null, a default one will be assigned
*/
QgsInvertedPolygonRenderer( const QgsFeatureRendererV2* embeddedRenderer = 0 );
virtual ~QgsInvertedPolygonRenderer();
/** Constructor
* @param embeddedRenderer optional embeddedRenderer. If null, a default one will be assigned
*/
QgsInvertedPolygonRenderer( const QgsFeatureRendererV2* embeddedRenderer = 0 );
virtual ~QgsInvertedPolygonRenderer();
/** Used to clone this feature renderer.*/
virtual QgsFeatureRendererV2* clone();
/** Used to clone this feature renderer.*/
virtual QgsFeatureRendererV2* clone();
virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
virtual void startRender( QgsRenderContext& context, const QgsFields& fields );
/** Renders a given feature.
* This will here collect features. The actual rendering will be postponed to stopRender()
* @param feature the feature to render
* @param context the rendering context
* @param layer the symbol layer to render, if that makes sense
* @param selected whether this feature has been selected (this will add decorations)
* @param drawVertexMarker whether this feature has vertex markers (in edit mode usually)
* @returns true if the rendering was ok
*/
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
/** Renders a given feature.
* This will here collect features. The actual rendering will be postponed to stopRender()
* @param feature the feature to render
* @param context the rendering context
* @param layer the symbol layer to render, if that makes sense
* @param selected whether this feature has been selected (this will add decorations)
* @param drawVertexMarker whether this feature has vertex markers (in edit mode usually)
* @returns true if the rendering was ok
*/
virtual bool renderFeature( QgsFeature& feature, QgsRenderContext& context, int layer = -1, bool selected = false, bool drawVertexMarker = false );
/**
* The actual rendering will take place here.
* Features collected during renderFeature() are rendered using the embedded feature renderer
*/
virtual void stopRender( QgsRenderContext& context );
/**
* The actual rendering will take place here.
* Features collected during renderFeature() are rendered using the embedded feature renderer
*/
virtual void stopRender( QgsRenderContext& context );
/** @returns a textual reprensation of the renderer */
virtual QString dump() const;
/** @returns a textual reprensation of the renderer */
virtual QString dump() const;
/** Proxy that will call this method on the embedded renderer. */
virtual QList<QString> usedAttributes();
/** Proxy that will call this method on the embedded renderer. */
virtual int capabilities();
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2List symbols();
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2List symbolsForFeature( QgsFeature& feat );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsLegendSymbolList legendSymbolItems( double scaleDenominator = -1, QString rule = "" );
/** Proxy that will call this method on the embedded renderer. */
virtual bool willRenderFeature( QgsFeature& feat );
/** Proxy that will call this method on the embedded renderer. */
virtual QList<QString> usedAttributes();
/** Proxy that will call this method on the embedded renderer. */
virtual int capabilities();
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2List symbols();
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2* symbolForFeature( QgsFeature& feature );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsSymbolV2List symbolsForFeature( QgsFeature& feat );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsLegendSymbologyList legendSymbologyItems( QSize iconSize );
/** Proxy that will call this method on the embedded renderer. */
virtual QgsLegendSymbolList legendSymbolItems( double scaleDenominator = -1, QString rule = "" );
/** Proxy that will call this method on the embedded renderer. */
virtual bool willRenderFeature( QgsFeature& feat );
/** Creates a renderer out of an XML, for loading*/
static QgsFeatureRendererV2* create( QDomElement& element );
/** Creates a renderer out of an XML, for loading*/
static QgsFeatureRendererV2* create( QDomElement& element );
/** Creates an XML representation of the renderer. Used for saving purpose
* @param doc the XML document where to create the XML subtree
* @returns the created XML subtree
*/
virtual QDomElement save( QDomDocument& doc );
/** Creates an XML representation of the renderer. Used for saving purpose
* @param doc the XML document where to create the XML subtree
* @returns the created XML subtree
*/
virtual QDomElement save( QDomDocument& doc );
/** sets the embedded renderer
* @param subRenderer the embedded renderer (will be cloned)
*/
void setEmbeddedRenderer( const QgsFeatureRendererV2* subRenderer );
/** @returns the current embedded renderer
*/
const QgsFeatureRendererV2* embeddedRenderer() const;
/** sets the embedded renderer
* @param subRenderer the embedded renderer (will be cloned)
*/
void setEmbeddedRenderer( const QgsFeatureRendererV2* subRenderer );
/** @returns the current embedded renderer
*/
const QgsFeatureRendererV2* embeddedRenderer() const;
/** @returns true if the geometries are to be preprocessed (merged with an union) before rendering.*/
bool preprocessingEnabled() const { return mPreprocessingEnabled; }
/**
@param enabled enables or disables the preprocessing.
When enabled, geometries will be merged with an union before being rendered.
It allows to fix some rendering artefacts (when rendering overlapping polygons for instance).
This will involve some CPU-demanding computations and is thus disabled by default.
*/
void setPreprocessingEnabled( bool enabled ) { mPreprocessingEnabled = enabled; }
/** @returns true if the geometries are to be preprocessed (merged with an union) before rendering.*/
bool preprocessingEnabled() const { return mPreprocessingEnabled; }
/**
@param enabled enables or disables the preprocessing.
When enabled, geometries will be merged with an union before being rendered.
It allows to fix some rendering artefacts (when rendering overlapping polygons for instance).
This will involve some CPU-demanding computations and is thus disabled by default.
*/
void setPreprocessingEnabled( bool enabled ) { mPreprocessingEnabled = enabled; }
private:
/** Private copy constructor. @see clone() */
QgsInvertedPolygonRenderer( const QgsInvertedPolygonRenderer& );
/** Private assignment operator. @see clone() */
QgsInvertedPolygonRenderer& operator=( const QgsInvertedPolygonRenderer& );
private:
/** Private copy constructor. @see clone() */
QgsInvertedPolygonRenderer( const QgsInvertedPolygonRenderer& );
/** Private assignment operator. @see clone() */
QgsInvertedPolygonRenderer& operator=( const QgsInvertedPolygonRenderer& );
/** Embedded renderer */
QScopedPointer<QgsFeatureRendererV2> mSubRenderer;
/** Embedded renderer */
QScopedPointer<QgsFeatureRendererV2> mSubRenderer;
/** Structure where the reversed geometry is built during renderFeature */
struct CombinedFeature
{
QgsMultiPolygon multiPolygon; //< the final combined geometry
QgsFeature feature; //< one feature (for attriute-based rendering)
};
typedef QVector<CombinedFeature> FeatureCategoryMap;
/** where features are stored, based on the index of their symbol category @see mSymbolCategories */
FeatureCategoryMap mFeaturesCategoryMap;
/** Structure where the reversed geometry is built during renderFeature */
struct CombinedFeature
{
QgsMultiPolygon multiPolygon; //< the final combined geometry
QgsFeature feature; //< one feature (for attriute-based rendering)
};
typedef QVector<CombinedFeature> FeatureCategoryMap;
/** where features are stored, based on the index of their symbol category @see mSymbolCategories */
FeatureCategoryMap mFeaturesCategoryMap;
/** maps a category to an index */
QMap<QByteArray, int> mSymbolCategories;
/** maps a category to an index */
QMap<QByteArray, int> mSymbolCategories;
/** the polygon used as exterior ring that covers the current extent */
QgsPolygon mExtentPolygon;
/** the polygon used as exterior ring that covers the current extent */
QgsPolygon mExtentPolygon;
/** the context used for rendering */
QgsRenderContext mContext;
/** the context used for rendering */
QgsRenderContext mContext;
/** fields of each feature*/
QgsFields mFields;
/** fields of each feature*/
QgsFields mFields;
/** Class used to represent features that must be rendered
with decorations (selection, vertex markers)
*/
struct FeatureDecoration
{
QgsFeature feature;
bool selected;
bool drawMarkers;
int layer;
FeatureDecoration( QgsFeature& a_feature, bool a_selected, bool a_drawMarkers, int a_layer ) :
feature(a_feature),selected(a_selected), drawMarkers(a_drawMarkers), layer(a_layer) {}
};
QList<FeatureDecoration> mFeatureDecorations;
/** Class used to represent features that must be rendered
with decorations (selection, vertex markers)
*/
struct FeatureDecoration
{
QgsFeature feature;
bool selected;
bool drawMarkers;
int layer;
FeatureDecoration( QgsFeature& a_feature, bool a_selected, bool a_drawMarkers, int a_layer ) :
feature( a_feature ), selected( a_selected ), drawMarkers( a_drawMarkers ), layer( a_layer ) {}
};
QList<FeatureDecoration> mFeatureDecorations;
/** whether to preprocess (merge) geometries before rendering*/
bool mPreprocessingEnabled;
/** whether to preprocess (merge) geometries before rendering*/
bool mPreprocessingEnabled;
};

View File

@ -29,7 +29,8 @@ QgsRendererV2Widget* QgsInvertedPolygonRendererWidget::create( QgsVectorLayer* l
QgsInvertedPolygonRendererWidget::QgsInvertedPolygonRendererWidget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer )
: QgsRendererV2Widget( layer, style )
{
if ( !layer ) {
if ( !layer )
{
return;
}
@ -66,7 +67,7 @@ QgsInvertedPolygonRendererWidget::QgsInvertedPolygonRendererWidget( QgsVectorLay
else
{
// an existing inverted renderer
mRenderer.reset( static_cast<QgsInvertedPolygonRenderer*>(renderer) );
mRenderer.reset( static_cast<QgsInvertedPolygonRenderer*>( renderer ) );
mMergePolygonsCheckBox->blockSignals( true );
mMergePolygonsCheckBox->setCheckState( mRenderer->preprocessingEnabled() ? Qt::Checked : Qt::Unchecked );
mMergePolygonsCheckBox->blockSignals( false );
@ -81,7 +82,7 @@ QgsInvertedPolygonRendererWidget::QgsInvertedPolygonRendererWidget( QgsVectorLay
for ( ; it != rendererList.constEnd(); ++it, ++idx )
{
if (( *it != "invertedPolygonRenderer" ) && //< an inverted renderer cannot contain another inverted renderer
( *it != "pointDisplacement" )) //< an inverted renderer can only contain a polygon renderer
( *it != "pointDisplacement" ) ) //< an inverted renderer can only contain a polygon renderer
{
QgsRendererV2AbstractMetadata* m = QgsRendererV2Registry::instance()->rendererMetadata( *it );
mRendererComboBox->addItem( m->icon(), m->visibleName(), /* data */ *it );
@ -123,9 +124,10 @@ void QgsInvertedPolygonRendererWidget::on_mRendererComboBox_currentIndexChanged(
QgsRendererV2AbstractMetadata* m = QgsRendererV2Registry::instance()->rendererMetadata( rendererId );
if ( m )
{
mEmbeddedRendererWidget.reset( m->createRendererWidget( mLayer, mStyle, const_cast<QgsFeatureRendererV2*>(mRenderer->embeddedRenderer())->clone() ) );
mEmbeddedRendererWidget.reset( m->createRendererWidget( mLayer, mStyle, const_cast<QgsFeatureRendererV2*>( mRenderer->embeddedRenderer() )->clone() ) );
if ( mLayout->count() > 2 ) {
if ( mLayout->count() > 2 )
{
// remove the current renderer widget
mLayout->takeAt( 2 );
}

View File

@ -26,35 +26,35 @@ class QMenu;
*/
class GUI_EXPORT QgsInvertedPolygonRendererWidget : public QgsRendererV2Widget, private Ui::QgsInvertedPolygonRendererWidgetBase
{
Q_OBJECT
Q_OBJECT
public:
/** static creation method
* @param layer the layer where this renderer is applied
* @param style
* @param renderer the mask renderer (will take ownership)
*/
static QgsRendererV2Widget* create( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer );
public:
/** static creation method
* @param layer the layer where this renderer is applied
* @param style
* @param renderer the mask renderer (will take ownership)
*/
static QgsRendererV2Widget* create( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer );
/** Constructor
* @param layer the layer where this renderer is applied
* @param style
* @param renderer the mask renderer (will take ownership)
*/
QgsInvertedPolygonRendererWidget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer );
/** Constructor
* @param layer the layer where this renderer is applied
* @param style
* @param renderer the mask renderer (will take ownership)
*/
QgsInvertedPolygonRendererWidget( QgsVectorLayer* layer, QgsStyleV2* style, QgsFeatureRendererV2* renderer );
/** @returns the current feature renderer */
virtual QgsFeatureRendererV2* renderer();
/** @returns the current feature renderer */
virtual QgsFeatureRendererV2* renderer();
protected:
/** the mask renderer */
QScopedPointer<QgsInvertedPolygonRenderer> mRenderer;
/** the widget used to represent the mask's embedded renderer */
QScopedPointer<QgsRendererV2Widget> mEmbeddedRendererWidget;
protected:
/** the mask renderer */
QScopedPointer<QgsInvertedPolygonRenderer> mRenderer;
/** the widget used to represent the mask's embedded renderer */
QScopedPointer<QgsRendererV2Widget> mEmbeddedRendererWidget;
private slots:
void on_mRendererComboBox_currentIndexChanged( int index );
void on_mMergePolygonsCheckBox_stateChanged( int state );
private slots:
void on_mRendererComboBox_currentIndexChanged( int index );
void on_mMergePolygonsCheckBox_stateChanged( int state );
};