Skip to content

Commit 1e2215a

Browse files
committedMar 26, 2012
Add writeXML method for renderers (needs still to be implemented for most types)
1 parent 99c7a81 commit 1e2215a

15 files changed

+140
-95
lines changed
 

‎src/core/raster/qgsmultibandcolorrenderer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -273,3 +273,8 @@ void QgsMultiBandColorRenderer::draw( QPainter* p, QgsRasterViewPort* viewPort,
273273
stopRasterRead( *bandIt );
274274
}
275275
}
276+
277+
void QgsMultiBandColorRenderer::writeXML( QDomDocument& doc, QDomElement& parentElem ) const
278+
{
279+
//soon...
280+
}

‎src/core/raster/qgsmultibandcolorrenderer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,8 @@ class QgsMultiBandColorRenderer: public QgsRasterRenderer
5555
/**Takes ownership*/
5656
void setBlueContrastEnhancement( QgsContrastEnhancement* ce );
5757

58+
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
59+
5860
private:
5961
int mRedBand;
6062
int mGreenBand;

‎src/core/raster/qgspalettedrasterrenderer.cpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
#include "qgsrastertransparency.h"
2020
#include "qgsrasterviewport.h"
2121
#include <QColor>
22+
#include <QDomDocument>
23+
#include <QDomElement>
2224
#include <QImage>
2325

2426
QgsPalettedRasterRenderer::QgsPalettedRasterRenderer( QgsRasterDataProvider* provider, int bandNumber,
@@ -155,3 +157,22 @@ void QgsPalettedRasterRenderer::draw( QPainter* p, QgsRasterViewPort* viewPort,
155157
stopRasterRead( mAlphaBand );
156158
}
157159
}
160+
161+
void QgsPalettedRasterRenderer::writeXML( QDomDocument& doc, QDomElement& parentElem ) const
162+
{
163+
QDomElement rasterRendererElem = doc.createElement( "rasterrenderer" );
164+
_writeXML( doc, rasterRendererElem );
165+
166+
rasterRendererElem.setAttribute( "band", mBandNumber );
167+
QDomElement colorPaletteElem = doc.createElement( "colorPalette" );
168+
for ( int i = 0; i < mNColors; ++i )
169+
{
170+
QDomElement colorElem = doc.createElement( "paletteEntry" );
171+
colorElem.setAttribute( "value", i );
172+
colorElem.setAttribute( "color", mColors[i].name() );
173+
colorPaletteElem.appendChild( colorElem );
174+
}
175+
rasterRendererElem.appendChild( colorPaletteElem );
176+
177+
parentElem.appendChild( rasterRendererElem );
178+
}

‎src/core/raster/qgspalettedrasterrenderer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class QgsPalettedRasterRenderer: public QgsRasterRenderer
3838
/**Returns copy of color array (caller takes ownership)*/
3939
QColor* colors() const;
4040

41+
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
42+
4143
private:
4244
int mBandNumber;
4345
/**Color array*/

‎src/core/raster/qgsrasterlayer.cpp

Lines changed: 8 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -3400,38 +3400,6 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
34003400
QDomElement rasterPropertiesElement = document.createElement( "rasterproperties" );
34013401
layer_node.appendChild( rasterPropertiesElement );
34023402

3403-
// resampler
3404-
if ( mRenderer )
3405-
{
3406-
//Max oversampling
3407-
QDomElement maxOversamplingElem = document.createElement( "MaxOversampling" );
3408-
QDomText maxOversamplingText = document.createTextNode( QString::number( mRenderer->maxOversampling() ) );
3409-
maxOversamplingElem.appendChild( maxOversamplingText );
3410-
rasterPropertiesElement.appendChild( maxOversamplingElem );
3411-
3412-
QString zoomedInResamplerString = "nearest";
3413-
const QgsRasterResampler* zoomedInResampler = mRenderer->zoomedInResampler();
3414-
if ( zoomedInResampler )
3415-
{
3416-
zoomedInResamplerString = zoomedInResampler->type();
3417-
}
3418-
QDomElement zoomedInResamplerElem = document.createElement( "zoomedInResampler" );
3419-
QDomText zoomedInResamplerText = document.createTextNode( zoomedInResamplerString );
3420-
zoomedInResamplerElem.appendChild( zoomedInResamplerText );
3421-
rasterPropertiesElement.appendChild( zoomedInResamplerElem );
3422-
3423-
QString zoomedOutResamplerString = "nearest";
3424-
const QgsRasterResampler* zoomedOutResampler = mRenderer->zoomedOutResampler();
3425-
if ( zoomedOutResampler )
3426-
{
3427-
zoomedOutResamplerString = zoomedOutResampler->type();
3428-
}
3429-
QDomElement zoomedOutResamplerElem = document.createElement( "zoomedOutResampler" );
3430-
QDomText zoomedOutResamplerText = document.createTextNode( zoomedOutResamplerString );
3431-
zoomedOutResamplerElem.appendChild( zoomedOutResamplerText );
3432-
rasterPropertiesElement.appendChild( zoomedOutResamplerElem );
3433-
}
3434-
34353403
QStringList sl = subLayers();
34363404
QStringList sls = mDataProvider->subLayerStyles();
34373405

@@ -3477,36 +3445,6 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
34773445
rasterPropertiesElement.appendChild( formatElement );
34783446
}
34793447

3480-
// <mDrawingStyle>
3481-
QDomElement drawStyleElement = document.createElement( "mDrawingStyle" );
3482-
QDomText drawStyleText = document.createTextNode( drawingStyleAsString() );
3483-
3484-
drawStyleElement.appendChild( drawStyleText );
3485-
3486-
rasterPropertiesElement.appendChild( drawStyleElement );
3487-
3488-
// <colorShadingAlgorithm>
3489-
QDomElement colorShadingAlgorithmElement = document.createElement( "mColorShadingAlgorithm" );
3490-
QDomText colorShadingAlgorithmText = document.createTextNode( colorShadingAlgorithmAsString() );
3491-
3492-
colorShadingAlgorithmElement.appendChild( colorShadingAlgorithmText );
3493-
3494-
rasterPropertiesElement.appendChild( colorShadingAlgorithmElement );
3495-
3496-
// <mInvertColor>
3497-
QDomElement mInvertColorElement = document.createElement( "mInvertColor" );
3498-
3499-
if ( invertHistogram() )
3500-
{
3501-
mInvertColorElement.setAttribute( "boolean", "true" );
3502-
}
3503-
else
3504-
{
3505-
mInvertColorElement.setAttribute( "boolean", "false" );
3506-
}
3507-
3508-
rasterPropertiesElement.appendChild( mInvertColorElement );
3509-
35103448
// <mRedBandName>
35113449
QDomElement mRedBandNameElement = document.createElement( "mRedBandName" );
35123450
QString writtenRedBandName = redBandName();
@@ -3627,37 +3565,6 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
36273565

36283566
rasterPropertiesElement.appendChild( GrayMinimumMaximumEstimated );
36293567

3630-
// <contrastEnhancementAlgorithm>
3631-
QDomElement contrastEnhancementAlgorithmElement = document.createElement( "mContrastEnhancementAlgorithm" );
3632-
QDomText contrastEnhancementAlgorithmText = document.createTextNode( contrastEnhancementAlgorithmAsString() );
3633-
3634-
contrastEnhancementAlgorithmElement.appendChild( contrastEnhancementAlgorithmText );
3635-
3636-
rasterPropertiesElement.appendChild( contrastEnhancementAlgorithmElement );
3637-
3638-
// <minMaxValues>
3639-
QList<QgsContrastEnhancement>::const_iterator it;
3640-
QDomElement contrastEnhancementMinMaxValuesElement = document.createElement( "contrastEnhancementMinMaxValues" );
3641-
for ( it = mContrastEnhancementList.constBegin(); it != mContrastEnhancementList.constEnd(); ++it )
3642-
{
3643-
QDomElement minMaxEntry = document.createElement( "minMaxEntry" );
3644-
QDomElement minEntry = document.createElement( "min" );
3645-
QDomElement maxEntry = document.createElement( "max" );
3646-
3647-
QDomText minEntryText = document.createTextNode( QString::number( it->minimumValue() ) );
3648-
minEntry.appendChild( minEntryText );
3649-
3650-
QDomText maxEntryText = document.createTextNode( QString::number( it->maximumValue() ) );
3651-
maxEntry.appendChild( maxEntryText );
3652-
3653-
minMaxEntry.appendChild( minEntry );
3654-
minMaxEntry.appendChild( maxEntry );
3655-
3656-
contrastEnhancementMinMaxValuesElement.appendChild( minMaxEntry );
3657-
}
3658-
3659-
rasterPropertiesElement.appendChild( contrastEnhancementMinMaxValuesElement );
3660-
36613568
/*
36623569
* Transparency tab
36633570
*/
@@ -3677,7 +3584,7 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
36773584

36783585
rasterPropertiesElement.appendChild( mNoDataValueElement );
36793586

3680-
3587+
#if 0
36813588
if ( mRasterTransparency.transparentSingleValuePixelList().count() > 0 )
36823589
{
36833590
QDomElement singleValuePixelListElement = document.createElement( "singleValuePixelList" );
@@ -3744,6 +3651,13 @@ bool QgsRasterLayer::writeSymbology( QDomNode & layer_node, QDomDocument & docum
37443651

37453652
rasterPropertiesElement.appendChild( customColorRampElement );
37463653
}
3654+
#endif //0
3655+
3656+
if ( mRenderer )
3657+
{
3658+
QDomElement layerElem = layer_node.toElement();
3659+
mRenderer->writeXML( document, layerElem );
3660+
}
37473661

37483662
return true;
37493663
} // bool QgsRasterLayer::writeSymbology

‎src/core/raster/qgsrasterrenderer.cpp

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121
#include "qgsrastertransparency.h"
2222
#include "qgsrasterviewport.h"
2323
#include "qgsmaptopixel.h"
24+
#include <QDomDocument>
25+
#include <QDomElement>
2426
#include <QImage>
2527
#include <QPainter>
2628

@@ -310,3 +312,31 @@ void QgsRasterRenderer::projectImage( const QImage& srcImg, QImage& dstImage, Qg
310312
}
311313
}
312314
}
315+
316+
void QgsRasterRenderer::_writeXML( QDomDocument& doc, QDomElement& rasterRendererElem ) const
317+
{
318+
if ( rasterRendererElem.isNull() )
319+
{
320+
return;
321+
}
322+
323+
rasterRendererElem.setAttribute( "type", mType );
324+
rasterRendererElem.setAttribute( "opacity", mOpacity );
325+
rasterRendererElem.setAttribute( "alphaBand", mAlphaBand );
326+
rasterRendererElem.setAttribute( "maxOversampling", mMaxOversampling );
327+
rasterRendererElem.setAttribute( "invertColor", mInvertColor );
328+
if ( mZoomedInResampler )
329+
{
330+
rasterRendererElem.setAttribute( "zoomedInResampler", mZoomedInResampler->type() );
331+
}
332+
if ( mZoomedOutResampler )
333+
{
334+
rasterRendererElem.setAttribute( "zoomedOutResampler", mZoomedOutResampler->type() );
335+
}
336+
337+
//todo: write raster transparency
338+
if ( mRasterTransparency )
339+
{
340+
mRasterTransparency->writeXML( doc, rasterRendererElem );
341+
}
342+
}

‎src/core/raster/qgsrasterrenderer.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,8 @@ class QgsRasterProjector;
2727
class QgsRasterTransparency;
2828
class QgsRasterViewPort;
2929

30+
class QDomElement;
31+
3032
class QgsRasterRenderer
3133
{
3234
public:
@@ -74,6 +76,8 @@ class QgsRasterRenderer
7476
void setMaxOversampling( double os ) { mMaxOversampling = os; }
7577
double maxOversampling() const { return mMaxOversampling; }
7678

79+
virtual void writeXML( QDomDocument& doc, QDomElement& parentElem ) const = 0;
80+
7781
protected:
7882
inline double readValue( void *data, QgsRasterDataProvider::DataType type, int index );
7983

@@ -97,6 +101,9 @@ class QgsRasterRenderer
97101
int nCols, int nRows, double oversamplingX, double oversamplingY ) const;
98102
void stopRasterRead( int bandNumber );
99103

104+
/**Write upper class info into <rasterrenderer> element (called by writeXML method of subclasses)*/
105+
void _writeXML( QDomDocument& doc, QDomElement& rasterRendererElem ) const;
106+
100107

101108
QgsRasterDataProvider* mProvider;
102109
QString mType;

‎src/core/raster/qgsrastertransparency.cpp

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,13 @@ email : ersts@amnh.org
1515
* (at your option) any later version. *
1616
* *
1717
***************************************************************************/
18-
#include <QList>
1918

2019
#include "qgsrastertransparency.h"
2120
#include "qgis.h"
2221

22+
#include <QDomDocument>
23+
#include <QDomElement>
24+
2325
QgsRasterTransparency::QgsRasterTransparency()
2426
{
2527

@@ -180,3 +182,38 @@ bool QgsRasterTransparency::isEmpty( double nodataValue ) const
180182
( mTransparentThreeValuePixelList.size() < 4 && doubleNear( mTransparentThreeValuePixelList.at( 0 ).red, nodataValue ) &&
181183
doubleNear( mTransparentThreeValuePixelList.at( 0 ).green, nodataValue ) && doubleNear( mTransparentThreeValuePixelList.at( 0 ).blue, nodataValue ) ) ) );
182184
}
185+
186+
void QgsRasterTransparency::writeXML( QDomDocument& doc, QDomElement& parentElem ) const
187+
{
188+
QDomElement rasterTransparencyElem = doc.createElement( "rasterTransparency" );
189+
if ( mTransparentSingleValuePixelList.count() > 0 )
190+
{
191+
QDomElement singleValuePixelListElement = doc.createElement( "singleValuePixelList" );
192+
QList<QgsRasterTransparency::TransparentSingleValuePixel>::const_iterator it = mTransparentSingleValuePixelList.constBegin();
193+
for ( ; it != mTransparentSingleValuePixelList.constEnd(); ++it )
194+
{
195+
QDomElement pixelListElement = doc.createElement( "pixelListEntry" );
196+
pixelListElement.setAttribute( "pixelValue", QString::number( it->pixelValue, 'f' ) );
197+
pixelListElement.setAttribute( "percentTransparent", QString::number( it->percentTransparent ) );
198+
singleValuePixelListElement.appendChild( pixelListElement );
199+
}
200+
rasterTransparencyElem.appendChild( singleValuePixelListElement );
201+
202+
}
203+
if ( mTransparentThreeValuePixelList.count() > 0 )
204+
{
205+
QDomElement threeValuePixelListElement = doc.createElement( "threeValuePixelList" );
206+
QList<QgsRasterTransparency::TransparentThreeValuePixel>::const_iterator it = mTransparentThreeValuePixelList.constBegin();
207+
for ( ; it != mTransparentThreeValuePixelList.constEnd(); ++it )
208+
{
209+
QDomElement pixelListElement = doc.createElement( "pixelListEntry" );
210+
pixelListElement.setAttribute( "red", QString::number( it->red, 'f' ) );
211+
pixelListElement.setAttribute( "green", QString::number( it->green, 'f' ) );
212+
pixelListElement.setAttribute( "blue", QString::number( it->blue, 'f' ) );
213+
pixelListElement.setAttribute( "percentTransparent", QString::number( it->percentTransparent ) );
214+
threeValuePixelListElement.appendChild( pixelListElement );
215+
}
216+
rasterTransparencyElem.appendChild( threeValuePixelListElement );
217+
}
218+
parentElem.appendChild( rasterTransparencyElem );
219+
}

‎src/core/raster/qgsrastertransparency.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ email : ersts@amnh.org
1818
#ifndef QGSRASTERTRANSPARENCY_H
1919
#define QGSRASTERTRANSPARENCY_H
2020

21+
#include <QList>
22+
class QDomDocument;
23+
class QDomElement;
24+
2125
/** \ingroup core
2226
* Defines the list of pixel values to be considered as transparent or semi
2327
* transparent when rendering rasters.
@@ -75,6 +79,8 @@ class CORE_EXPORT QgsRasterTransparency
7579
/**True if there are no entries in the pixel lists except the nodata value*/
7680
bool isEmpty( double nodataValue ) const;
7781

82+
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
83+
7884
private:
7985
/** \brief The list to hold transparency values for RGB layers */
8086
QList<QgsRasterTransparency::TransparentThreeValuePixel> mTransparentThreeValuePixelList;

‎src/core/raster/qgssinglebandcolordatarenderer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,3 +87,8 @@ void QgsSingleBandColorDataRenderer::draw( QPainter* p, QgsRasterViewPort* viewP
8787

8888
stopRasterRead( mBand );
8989
}
90+
91+
void QgsSingleBandColorDataRenderer::writeXML( QDomDocument& doc, QDomElement& parentElem ) const
92+
{
93+
//soon...
94+
}

‎src/core/raster/qgssinglebandcolordatarenderer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@ class QgsSingleBandColorDataRenderer: public QgsRasterRenderer
3232

3333
virtual void draw( QPainter* p, QgsRasterViewPort* viewPort, const QgsMapToPixel* theQgsMapToPixel );
3434

35+
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
36+
3537
private:
3638
int mBand;
3739
};

‎src/core/raster/qgssinglebandgrayrenderer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,8 @@ void QgsSingleBandGrayRenderer::draw( QPainter* p, QgsRasterViewPort* viewPort,
151151
stopRasterRead( mAlphaBand );
152152
}
153153
}
154+
155+
void QgsSingleBandGrayRenderer::writeXML( QDomDocument& doc, QDomElement& parentElem ) const
156+
{
157+
//soon...
158+
}

‎src/core/raster/qgssinglebandgrayrenderer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ class QgsSingleBandGrayRenderer: public QgsRasterRenderer
3939
/**Takes ownership*/
4040
void setContrastEnhancement( QgsContrastEnhancement* ce );
4141

42+
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
43+
4244
private:
4345
int mGrayBand;
4446
QgsContrastEnhancement* mContrastEnhancement;

‎src/core/raster/qgssinglebandpseudocolorrenderer.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -145,3 +145,8 @@ void QgsSingleBandPseudoColorRenderer::draw( QPainter* p, QgsRasterViewPort* vie
145145
stopRasterRead( mAlphaBand );
146146
}
147147
}
148+
149+
void QgsSingleBandPseudoColorRenderer::writeXML( QDomDocument& doc, QDomElement& parentElem ) const
150+
{
151+
//soon...
152+
}

‎src/core/raster/qgssinglebandpseudocolorrenderer.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ class QgsSingleBandPseudoColorRenderer: public QgsRasterRenderer
3838
void setShader( QgsRasterShader* shader );
3939
QgsRasterShader* shader() { return mShader; }
4040

41+
void writeXML( QDomDocument& doc, QDomElement& parentElem ) const;
42+
4143
private:
4244
QgsRasterShader* mShader;
4345
int mBand;

0 commit comments

Comments
 (0)
Please sign in to comment.