Skip to content

Commit a7cf5e4

Browse files
committed
[FEATURE] Merge branch 'rules' - new rule-based rendering
Conflicts: src/gui/symbology-ng/qgsgraduatedsymbolrendererv2widget.cpp
2 parents 0b1fd34 + 1c3c02f commit a7cf5e4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

41 files changed

+2849
-969
lines changed

python/core/symbology-ng-core.sip

Lines changed: 10 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,8 @@ class QgsRuleBasedRendererV2 : QgsFeatureRendererV2
390390

391391
public:
392392

393+
//typedef QList<QgsRuleBasedRendererV2::Rule*> RuleList;
394+
393395
/**
394396
This class keeps data about a rules for rule-based renderer.
395397
A rule consists of a symbol, filter expression and range of scales.
@@ -403,10 +405,10 @@ class QgsRuleBasedRendererV2 : QgsFeatureRendererV2
403405
public:
404406
//! Constructor takes ownership of the symbol
405407
Rule( QgsSymbolV2* symbol /Transfer/, int scaleMinDenom = 0, int scaleMaxDenom = 0, QString filterExp = QString() );
406-
Rule( const QgsRuleBasedRendererV2::Rule& other );
408+
//Rule( const QgsRuleBasedRendererV2::Rule& other );
407409
~Rule();
408410
QString dump() const;
409-
QStringList needsFields() const;
411+
//QStringList needsFields() const;
410412
bool isFilterOK( QgsFeature& f ) const;
411413
bool isScaleOK( double scale ) const;
412414

@@ -428,7 +430,9 @@ class QgsRuleBasedRendererV2 : QgsFeatureRendererV2
428430

429431
static QgsFeatureRendererV2* create( QDomElement& element ) /Factory/;
430432

431-
//! Constructor. Takes ownership of the defult symbol.
433+
//! Constructs the renderer from given tree of rules
434+
QgsRuleBasedRendererV2( QgsRuleBasedRendererV2::Rule* root /Transfer/ );
435+
//! Constructor for convenience. Creates a root rule and adds a default rule with symbol
432436
QgsRuleBasedRendererV2( QgsSymbolV2* defaultSymbol /Transfer/ );
433437

434438
//! return symbol for current feature. Should not be used individually: there could be more symbols for a feature
@@ -454,27 +458,15 @@ class QgsRuleBasedRendererV2 : QgsFeatureRendererV2
454458

455459
/////
456460

457-
//! return the total number of rules
458-
int ruleCount();
459-
//! get reference to rule at index (valid indexes: 0...count-1)
460-
QgsRuleBasedRendererV2::Rule& ruleAt( int index );
461-
//! add rule to the end of the list of rules
462-
void addRule( const QgsRuleBasedRendererV2::Rule& rule );
463-
//! insert rule to a specific position of the list of rules
464-
void insertRule( int index, const QgsRuleBasedRendererV2::Rule& rule );
465-
//! modify the rule at a specific position of the list of rules
466-
void updateRuleAt( int index, const QgsRuleBasedRendererV2::Rule& rule );
467-
//! remove the rule at the specified index
468-
void removeRuleAt( int index );
469461

470462
//////
471463

472464
//! take a rule and create a list of new rules based on the categories from categorized symbol renderer
473-
static QList<QgsRuleBasedRendererV2::Rule> refineRuleCategories( QgsRuleBasedRendererV2::Rule& initialRule, QgsCategorizedSymbolRendererV2* r );
465+
//static QgsRuleBasedRendererV2::RuleList refineRuleCategories( QgsRuleBasedRendererV2::Rule* initialRule, QgsCategorizedSymbolRendererV2* r );
474466
//! take a rule and create a list of new rules based on the ranges from graduated symbol renderer
475-
static QList<QgsRuleBasedRendererV2::Rule> refineRuleRanges( QgsRuleBasedRendererV2::Rule& initialRule, QgsGraduatedSymbolRendererV2* r );
467+
//static QgsRuleBasedRendererV2::RuleList refineRuleRanges( QgsRuleBasedRendererV2::Rule* initialRule, QgsGraduatedSymbolRendererV2* r );
476468
//! take a rule and create a list of new rules with intervals of scales given by the passed scale denominators
477-
static QList<QgsRuleBasedRendererV2::Rule> refineRuleScales( QgsRuleBasedRendererV2::Rule& initialRule, QList<int> scales );
469+
//static QgsRuleBasedRendererV2::RuleList refineRuleScales( QgsRuleBasedRendererV2::Rule* initialRule, QList<int> scales );
478470

479471
};
480472

python/gui/symbology-ng-gui.sip

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,6 @@ public slots:
4242
void apply();
4343
void onOK();
4444

45-
void showSymbolLevels();
46-
4745
protected:
4846

4947
//! Reimplements dialog keyPress event so we can ignore it

src/core/qgsvectorlayer.cpp

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -776,6 +776,8 @@ void QgsVectorLayer::drawRendererV2( QgsRenderContext& rendererContext, bool lab
776776
#endif //Q_WS_MAC
777777
}
778778

779+
stopRendererV2( rendererContext, NULL );
780+
779781
#ifndef Q_WS_MAC
780782
QgsDebugMsg( QString( "Total features processed %1" ).arg( featureCount ) );
781783
#endif
@@ -977,7 +979,8 @@ bool QgsVectorLayer::draw( QgsRenderContext& rendererContext )
977979

978980
select( attributes, rendererContext.extent() );
979981

980-
if ( mRendererV2->usingSymbolLevels() )
982+
if ( ( mRendererV2->capabilities() & QgsFeatureRendererV2::SymbolLevels )
983+
&& mRendererV2->usingSymbolLevels() )
981984
drawRendererV2Levels( rendererContext, labeling );
982985
else
983986
drawRendererV2( rendererContext, labeling );

src/core/symbology-ng/qgscategorizedsymbolrendererv2.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,10 @@ class CORE_EXPORT QgsCategorizedSymbolRendererV2 : public QgsFeatureRendererV2
6060

6161
virtual QgsFeatureRendererV2* clone();
6262

63+
//! returns bitwise OR-ed capabilities of the renderer
64+
//! \note added in 2.0
65+
virtual int capabilities() { return SymbolLevels; }
66+
6367
virtual QgsSymbolV2List symbols();
6468

6569
const QgsCategoryList& categories() { return mCategories; }

src/core/symbology-ng/qgsgraduatedsymbolrendererv2.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,10 @@ class CORE_EXPORT QgsGraduatedSymbolRendererV2 : public QgsFeatureRendererV2
5555

5656
virtual QgsFeatureRendererV2* clone();
5757

58+
//! returns bitwise OR-ed capabilities of the renderer
59+
//! \note added in 2.0
60+
virtual int capabilities() { return SymbolLevels; }
61+
5862
virtual QgsSymbolV2List symbols();
5963

6064
QString classAttribute() const { return mAttrName; }

src/core/symbology-ng/qgsrendererv2.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,11 @@ void QgsFeatureRendererV2::renderFeature( QgsFeature& feature, QgsRenderContext&
194194
if ( symbol == NULL )
195195
return;
196196

197+
renderFeatureWithSymbol( feature, symbol, context, layer, selected, drawVertexMarker );
198+
}
199+
200+
void QgsFeatureRendererV2::renderFeatureWithSymbol( QgsFeature& feature, QgsSymbolV2* symbol, QgsRenderContext& context, int layer, bool selected, bool drawVertexMarker )
201+
{
197202
QgsSymbolV2::SymbolType symbolType = symbol->type();
198203

199204
QgsGeometry* geom = feature.geometry();
@@ -356,7 +361,6 @@ QgsFeatureRendererV2* QgsFeatureRendererV2::load( QDomElement& element )
356361
if ( r )
357362
{
358363
r->setUsingSymbolLevels( element.attribute( "symbollevels", "0" ).toInt() );
359-
r->setUsingFirstRule( element.attribute( "firstrule", "0" ).toInt() );
360364
}
361365
return r;
362366
}

src/core/symbology-ng/qgsrendererv2.h

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,20 @@ class CORE_EXPORT QgsFeatureRendererV2
7878
//! for debugging
7979
virtual QString dump();
8080

81+
enum Capabilities {
82+
SymbolLevels = 1 // rendering with symbol levels (i.e. implements symbols(), symbolForFeature())
83+
};
84+
85+
//! returns bitwise OR-ed capabilities of the renderer
86+
//! \note added in 2.0
87+
virtual int capabilities() { return 0; }
88+
8189
//! for symbol levels
8290
virtual QgsSymbolV2List symbols() = 0;
8391

8492
bool usingSymbolLevels() const { return mUsingSymbolLevels; }
8593
void setUsingSymbolLevels( bool usingSymbolLevels ) { mUsingSymbolLevels = usingSymbolLevels; }
8694

87-
bool usingFirstRule() const { return mUsingFirstRule; }
88-
void setUsingFirstRule( bool usingFirstRule ) { mUsingFirstRule = usingFirstRule; }
89-
90-
9195
//! create a renderer from XML element
9296
static QgsFeatureRendererV2* load( QDomElement& symbologyElem );
9397

@@ -107,6 +111,13 @@ class CORE_EXPORT QgsFeatureRendererV2
107111
protected:
108112
QgsFeatureRendererV2( QString type );
109113

114+
void renderFeatureWithSymbol( QgsFeature& feature,
115+
QgsSymbolV2* symbol,
116+
QgsRenderContext& context,
117+
int layer,
118+
bool selected,
119+
bool drawVertexMarker );
120+
110121
//! render editing vertex marker at specified point
111122
void renderVertexMarker( QPointF& pt, QgsRenderContext& context );
112123
//! render editing vertex marker for a polyline
@@ -121,7 +132,6 @@ class CORE_EXPORT QgsFeatureRendererV2
121132
QString mType;
122133

123134
bool mUsingSymbolLevels;
124-
bool mUsingFirstRule;
125135

126136
/** The current type of editing marker */
127137
int mCurrentVertexMarkerType;

0 commit comments

Comments
 (0)