mirror of
https://github.com/qgis/QGIS.git
synced 2025-10-07 00:15:48 -04:00
Merge branch 'export_symbols'
This commit is contained in:
commit
03b5ea4d79
@ -106,6 +106,10 @@ class QgsSymbolV2
|
||||
//! @note customContext parameter added in 2.6
|
||||
void drawPreviewIcon( QPainter* painter, QSize size, QgsRenderContext* customContext = 0 );
|
||||
|
||||
//! export symbol as image format. PNG and SVG supported
|
||||
void exportImage( QString path, QString format, QSize size );
|
||||
|
||||
//! Generate symbol as image
|
||||
QImage asImage( QSize size, QgsRenderContext* customContext = 0 );
|
||||
|
||||
QImage bigSymbolPreviewImage();
|
||||
|
@ -34,6 +34,7 @@
|
||||
#include <QImage>
|
||||
#include <QPainter>
|
||||
#include <QSize>
|
||||
#include <QSvgGenerator>
|
||||
|
||||
#include <cmath>
|
||||
|
||||
@ -352,6 +353,26 @@ void QgsSymbolV2::drawPreviewIcon( QPainter* painter, QSize size, QgsRenderConte
|
||||
}
|
||||
}
|
||||
|
||||
void QgsSymbolV2::exportImage( QString path, QString format, QSize size )
|
||||
{
|
||||
if ( format.toLower() == "svg" )
|
||||
{
|
||||
QSvgGenerator generator;
|
||||
generator.setFileName( path );
|
||||
generator.setSize( size );
|
||||
generator.setViewBox( QRect( 0, 0, size.height(), size.height() ) );
|
||||
|
||||
QPainter painter( &generator );
|
||||
drawPreviewIcon( &painter, size );
|
||||
painter.end();
|
||||
}
|
||||
else
|
||||
{
|
||||
QImage image = asImage( size );
|
||||
image.save( path );
|
||||
}
|
||||
}
|
||||
|
||||
QImage QgsSymbolV2::asImage( QSize size, QgsRenderContext* customContext )
|
||||
{
|
||||
QImage image( size, QImage::Format_ARGB32_Premultiplied );
|
||||
|
@ -87,7 +87,7 @@ class CORE_EXPORT QgsSymbolV2
|
||||
|
||||
// symbol layers handling
|
||||
|
||||
/**Returns list of symbol layers contained in the symbol.
|
||||
/** Returns list of symbol layers contained in the symbol.
|
||||
* @returns symbol layers list
|
||||
* @note added in QGIS 2.7
|
||||
* @see symbolLayer
|
||||
@ -95,7 +95,7 @@ class CORE_EXPORT QgsSymbolV2
|
||||
*/
|
||||
QgsSymbolLayerV2List symbolLayers() { return mLayers; }
|
||||
|
||||
/**Returns a specific symbol layers contained in the symbol.
|
||||
/** Returns a specific symbol layers contained in the symbol.
|
||||
* @param layer layer number
|
||||
* @returns corresponding symbol layer
|
||||
* @note added in QGIS 2.7
|
||||
@ -104,7 +104,7 @@ class CORE_EXPORT QgsSymbolV2
|
||||
*/
|
||||
QgsSymbolLayerV2* symbolLayer( int layer );
|
||||
|
||||
/**Returns total number of symbol layers contained in the symbol.
|
||||
/** Returns total number of symbol layers contained in the symbol.
|
||||
* @returns count of symbol layers
|
||||
* @note added in QGIS 2.7
|
||||
* @see symbolLayers
|
||||
@ -138,6 +138,10 @@ class CORE_EXPORT QgsSymbolV2
|
||||
//! @note customContext parameter added in 2.6
|
||||
void drawPreviewIcon( QPainter* painter, QSize size, QgsRenderContext* customContext = 0 );
|
||||
|
||||
//! export symbol as image format. PNG and SVG supported
|
||||
void exportImage( QString path, QString format, QSize size );
|
||||
|
||||
//! Generate symbol as image
|
||||
QImage asImage( QSize size, QgsRenderContext* customContext = 0 );
|
||||
|
||||
QImage bigSymbolPreviewImage();
|
||||
@ -162,7 +166,7 @@ class CORE_EXPORT QgsSymbolV2
|
||||
void setRenderHints( int hints ) { mRenderHints = hints; }
|
||||
int renderHints() const { return mRenderHints; }
|
||||
|
||||
/**Sets whether features drawn by the symbol should be clipped to the render context's
|
||||
/** Sets whether features drawn by the symbol should be clipped to the render context's
|
||||
* extent. If this option is enabled then features which are partially outside the extent
|
||||
* will be clipped. This speeds up rendering of the feature, but may have undesirable
|
||||
* side effects for certain symbol types.
|
||||
@ -172,7 +176,7 @@ class CORE_EXPORT QgsSymbolV2
|
||||
*/
|
||||
void setClipFeaturesToExtent( bool clipFeaturesToExtent ) { mClipFeaturesToExtent = clipFeaturesToExtent; }
|
||||
|
||||
/**Returns whether features drawn by the symbol will be clipped to the render context's
|
||||
/** Returns whether features drawn by the symbol will be clipped to the render context's
|
||||
* extent. If this option is enabled then features which are partially outside the extent
|
||||
* will be clipped. This speeds up rendering of the feature, but may have undesirable
|
||||
* side effects for certain symbol types.
|
||||
@ -200,7 +204,7 @@ class CORE_EXPORT QgsSymbolV2
|
||||
SymbolType mType;
|
||||
QgsSymbolLayerV2List mLayers;
|
||||
|
||||
/**Symbol opacity (in the range 0 - 1)*/
|
||||
/** Symbol opacity (in the range 0 - 1)*/
|
||||
qreal mAlpha;
|
||||
|
||||
int mRenderHints;
|
||||
@ -397,9 +401,9 @@ class CORE_EXPORT QgsFillSymbolV2 : public QgsSymbolV2
|
||||
private:
|
||||
|
||||
void renderPolygonUsingLayer( QgsSymbolLayerV2* layer, const QPolygonF &points, QList<QPolygonF> *rings, QgsSymbolV2RenderContext &context );
|
||||
/**Calculates the bounds of a polygon including rings*/
|
||||
/** Calculates the bounds of a polygon including rings*/
|
||||
QRectF polygonBounds( const QPolygonF &points, const QList<QPolygonF> *rings ) const;
|
||||
/**Translates the rings in a polygon by a set distance*/
|
||||
/** Translates the rings in a polygon by a set distance*/
|
||||
QList<QPolygonF>* translateRings( const QList<QPolygonF> *rings, double dx, double dy ) const;
|
||||
};
|
||||
|
||||
|
@ -40,7 +40,6 @@
|
||||
#include "qgsapplication.h"
|
||||
#include "qgslogger.h"
|
||||
|
||||
|
||||
QgsStyleV2ManagerDialog::QgsStyleV2ManagerDialog( QgsStyleV2* style, QWidget* parent )
|
||||
: QDialog( parent ), mStyle( style ), mModified( false )
|
||||
{
|
||||
@ -66,10 +65,16 @@ QgsStyleV2ManagerDialog::QgsStyleV2ManagerDialog( QgsStyleV2* style, QWidget* pa
|
||||
connect( btnRemoveItem, SIGNAL( clicked() ), this, SLOT( removeItem() ) );
|
||||
|
||||
QMenu *shareMenu = new QMenu( tr( "Share Menu" ), this );
|
||||
QAction *exportAsPNGAction = shareMenu->addAction( tr( "Export as PNG" ) );
|
||||
QAction *exportAsSVGAction = shareMenu->addAction( tr( "Export as SVG" ) );
|
||||
QAction *exportAction = shareMenu->addAction( tr( "Export" ) );
|
||||
QAction *importAction = shareMenu->addAction( tr( "Import" ) );
|
||||
exportAsPNGAction->setIcon( QIcon( QgsApplication::iconPath( "mActionSharingExport.svg" ) ) );
|
||||
exportAsSVGAction->setIcon( QIcon( QgsApplication::iconPath( "mActionSharingExport.svg" ) ) );
|
||||
exportAction->setIcon( QIcon( QgsApplication::iconPath( "mActionSharingExport.svg" ) ) );
|
||||
importAction->setIcon( QIcon( QgsApplication::iconPath( "mActionSharingImport.svg" ) ) );
|
||||
connect( exportAsPNGAction, SIGNAL( triggered() ), this, SLOT( exportItemsPNG() ) );
|
||||
connect( exportAsSVGAction, SIGNAL( triggered() ), this, SLOT( exportItemsSVG() ) );
|
||||
connect( exportAction, SIGNAL( triggered() ), this, SLOT( exportItems() ) );
|
||||
connect( importAction, SIGNAL( triggered() ), this, SLOT( importItems() ) );
|
||||
btnShare->setMenu( shareMenu );
|
||||
@ -730,6 +735,40 @@ void QgsStyleV2ManagerDialog::itemChanged( QStandardItem* item )
|
||||
}
|
||||
}
|
||||
|
||||
void QgsStyleV2ManagerDialog::exportItemsPNG()
|
||||
{
|
||||
QString dir = QFileDialog::getExistingDirectory( this, tr( "Exported selected symbols as PNG" ),
|
||||
QDir::home().absolutePath(),
|
||||
QFileDialog::ShowDirsOnly
|
||||
| QFileDialog::DontResolveSymlinks );
|
||||
exportSelectedItemsImages( dir, "png", QSize( 32, 32 ) );
|
||||
}
|
||||
|
||||
void QgsStyleV2ManagerDialog::exportItemsSVG()
|
||||
{
|
||||
QString dir = QFileDialog::getExistingDirectory( this, tr( "Exported selected symbols as SVG" ),
|
||||
QDir::home().absolutePath(),
|
||||
QFileDialog::ShowDirsOnly
|
||||
| QFileDialog::DontResolveSymlinks );
|
||||
exportSelectedItemsImages( dir, "svg", QSize( 32, 32 ) );
|
||||
}
|
||||
|
||||
|
||||
void QgsStyleV2ManagerDialog::exportSelectedItemsImages( QString dir, QString format, QSize size )
|
||||
{
|
||||
if ( dir.isEmpty() )
|
||||
return;
|
||||
|
||||
QModelIndexList indexes = listItems->selectionModel()->selection().indexes();
|
||||
foreach ( QModelIndex index, indexes )
|
||||
{
|
||||
QString name = index.data().toString();
|
||||
QString path = dir + "/" + name + "." + format;
|
||||
QgsSymbolV2 *sym = mStyle->symbol( name );
|
||||
sym->exportImage( path, format, size );
|
||||
}
|
||||
}
|
||||
|
||||
void QgsStyleV2ManagerDialog::exportItems()
|
||||
{
|
||||
QgsStyleV2ExportImportDialog dlg( mStyle, this, QgsStyleV2ExportImportDialog::Export );
|
||||
|
@ -41,6 +41,9 @@ class GUI_EXPORT QgsStyleV2ManagerDialog : public QDialog, private Ui::QgsStyleV
|
||||
void addItem();
|
||||
void editItem();
|
||||
void removeItem();
|
||||
void exportItemsSVG();
|
||||
void exportItemsPNG();
|
||||
void exportSelectedItemsImages( QString dir, QString format, QSize size );
|
||||
void exportItems();
|
||||
void importItems();
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user