mirror of
https://github.com/qgis/QGIS.git
synced 2025-04-15 00:04:00 -04:00
[dxf] use a struct instead of QPair for layers
there was a crash in Python in QgsDxfExport.addLayers due to a bad conversion
This commit is contained in:
parent
9e79d8a7ad
commit
31e93aecae
@ -20,6 +20,18 @@ class QgsDxfExport
|
|||||||
#include "qgsdxfexport.h"
|
#include "qgsdxfexport.h"
|
||||||
%End
|
%End
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
struct DxfLayer
|
||||||
|
{
|
||||||
|
DxfLayer( QgsVectorLayer *vl, int layerOutputAttributeIndex = -1 );
|
||||||
|
|
||||||
|
QgsVectorLayer *layer() const;
|
||||||
|
int layerOutputAttributeIndex() const;
|
||||||
|
|
||||||
|
QgsVectorLayer *mLayer;
|
||||||
|
int mLayerOutputAttributeIndex;
|
||||||
|
};
|
||||||
|
|
||||||
enum SymbologyExport
|
enum SymbologyExport
|
||||||
{
|
{
|
||||||
NoSymbology,
|
NoSymbology,
|
||||||
@ -64,7 +76,7 @@ Returns the export flags.
|
|||||||
.. seealso:: :py:func:`setFlags`
|
.. seealso:: :py:func:`setFlags`
|
||||||
%End
|
%End
|
||||||
|
|
||||||
void addLayers( const QList< QPair<QgsVectorLayer *, int > > &layers );
|
void addLayers( const QList< QgsDxfExport::DxfLayer > &layers );
|
||||||
%Docstring
|
%Docstring
|
||||||
Add layers to export
|
Add layers to export
|
||||||
|
|
||||||
|
@ -1357,7 +1357,7 @@ int main( int argc, char *argv[] )
|
|||||||
dxfExport.setExtent( dxfExtent );
|
dxfExport.setExtent( dxfExtent );
|
||||||
|
|
||||||
QStringList layerIds;
|
QStringList layerIds;
|
||||||
QList< QPair<QgsVectorLayer *, int > > layers;
|
QList< QgsDxfExport::DxfLayer > layers;
|
||||||
if ( !dxfMapTheme.isEmpty() )
|
if ( !dxfMapTheme.isEmpty() )
|
||||||
{
|
{
|
||||||
Q_FOREACH ( QgsMapLayer *layer, QgsProject::instance()->mapThemeCollection()->mapThemeVisibleLayers( dxfMapTheme ) )
|
Q_FOREACH ( QgsMapLayer *layer, QgsProject::instance()->mapThemeCollection()->mapThemeVisibleLayers( dxfMapTheme ) )
|
||||||
@ -1365,7 +1365,7 @@ int main( int argc, char *argv[] )
|
|||||||
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( layer );
|
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( layer );
|
||||||
if ( !vl )
|
if ( !vl )
|
||||||
continue;
|
continue;
|
||||||
layers << qMakePair<QgsVectorLayer *, int>( vl, -1 );
|
layers << QgsDxfExport::DxfLayer( vl );
|
||||||
layerIds << vl->id();
|
layerIds << vl->id();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1376,7 +1376,7 @@ int main( int argc, char *argv[] )
|
|||||||
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( ml );
|
QgsVectorLayer *vl = qobject_cast<QgsVectorLayer *>( ml );
|
||||||
if ( !vl )
|
if ( !vl )
|
||||||
continue;
|
continue;
|
||||||
layers << qMakePair<QgsVectorLayer *, int>( vl, -1 );
|
layers << QgsDxfExport::DxfLayer( vl );
|
||||||
layerIds << vl->id();
|
layerIds << vl->id();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -276,9 +276,9 @@ bool QgsVectorLayerAndAttributeModel::setData( const QModelIndex &index, const Q
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QList< QPair<QgsVectorLayer *, int> > QgsVectorLayerAndAttributeModel::layers() const
|
QList< QgsDxfExport::DxfLayer > QgsVectorLayerAndAttributeModel::layers() const
|
||||||
{
|
{
|
||||||
QList< QPair<QgsVectorLayer *, int> > layers;
|
QList< QgsDxfExport::DxfLayer > layers;
|
||||||
QHash< QString, int > layerIdx;
|
QHash< QString, int > layerIdx;
|
||||||
|
|
||||||
Q_FOREACH ( const QModelIndex &idx, mCheckedLeafs )
|
Q_FOREACH ( const QModelIndex &idx, mCheckedLeafs )
|
||||||
@ -293,7 +293,7 @@ QList< QPair<QgsVectorLayer *, int> > QgsVectorLayerAndAttributeModel::layers()
|
|||||||
if ( !layerIdx.contains( vl->id() ) )
|
if ( !layerIdx.contains( vl->id() ) )
|
||||||
{
|
{
|
||||||
layerIdx.insert( vl->id(), layers.size() );
|
layerIdx.insert( vl->id(), layers.size() );
|
||||||
layers << qMakePair<QgsVectorLayer *, int>( vl, mAttributeIdx.value( vl, -1 ) );
|
layers << QgsDxfExport::DxfLayer( vl, mAttributeIdx.value( vl, -1 ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -304,12 +304,12 @@ QList< QPair<QgsVectorLayer *, int> > QgsVectorLayerAndAttributeModel::layers()
|
|||||||
if ( !layerIdx.contains( vl->id() ) )
|
if ( !layerIdx.contains( vl->id() ) )
|
||||||
{
|
{
|
||||||
layerIdx.insert( vl->id(), layers.size() );
|
layerIdx.insert( vl->id(), layers.size() );
|
||||||
layers << qMakePair<QgsVectorLayer *, int>( vl, mAttributeIdx.value( vl, -1 ) );
|
layers << QgsDxfExport::DxfLayer( vl, mAttributeIdx.value( vl, -1 ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QList< QPair<QgsVectorLayer *, int> > layersInROrder;
|
QList< QgsDxfExport::DxfLayer > layersInROrder;
|
||||||
|
|
||||||
QList<QgsMapLayer *> layerOrder = mRootNode->layerOrder();
|
QList<QgsMapLayer *> layerOrder = mRootNode->layerOrder();
|
||||||
|
|
||||||
@ -549,7 +549,7 @@ void QgsDxfExportDialog::deSelectAll()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
QList< QPair<QgsVectorLayer *, int> > QgsDxfExportDialog::layers() const
|
QList< QgsDxfExport::DxfLayer > QgsDxfExportDialog::layers() const
|
||||||
{
|
{
|
||||||
const QgsVectorLayerAndAttributeModel *model = dynamic_cast< const QgsVectorLayerAndAttributeModel *>( mTreeView->model() );
|
const QgsVectorLayerAndAttributeModel *model = dynamic_cast< const QgsVectorLayerAndAttributeModel *>( mTreeView->model() );
|
||||||
Q_ASSERT( model );
|
Q_ASSERT( model );
|
||||||
|
@ -53,7 +53,7 @@ class QgsVectorLayerAndAttributeModel : public QgsLayerTreeModel
|
|||||||
Qt::ItemFlags flags( const QModelIndex &index ) const override;
|
Qt::ItemFlags flags( const QModelIndex &index ) const override;
|
||||||
bool setData( const QModelIndex &index, const QVariant &value, int role = Qt::EditRole ) override;
|
bool setData( const QModelIndex &index, const QVariant &value, int role = Qt::EditRole ) override;
|
||||||
|
|
||||||
QList< QPair<QgsVectorLayer *, int> > layers() const;
|
QList< QgsDxfExport::DxfLayer > layers() const;
|
||||||
|
|
||||||
QgsVectorLayer *vectorLayer( const QModelIndex &index ) const;
|
QgsVectorLayer *vectorLayer( const QModelIndex &index ) const;
|
||||||
int attributeIndex( const QgsVectorLayer *vl ) const;
|
int attributeIndex( const QgsVectorLayer *vl ) const;
|
||||||
@ -79,7 +79,7 @@ class QgsDxfExportDialog : public QDialog, private Ui::QgsDxfExportDialogBase
|
|||||||
QgsDxfExportDialog( QWidget *parent = nullptr, Qt::WindowFlags f = nullptr );
|
QgsDxfExportDialog( QWidget *parent = nullptr, Qt::WindowFlags f = nullptr );
|
||||||
~QgsDxfExportDialog() override;
|
~QgsDxfExportDialog() override;
|
||||||
|
|
||||||
QList< QPair<QgsVectorLayer *, int> > layers() const;
|
QList< QgsDxfExport::DxfLayer > layers() const;
|
||||||
|
|
||||||
double symbologyScale() const;
|
double symbologyScale() const;
|
||||||
QgsDxfExport::SymbologyExport symbologyMode() const;
|
QgsDxfExport::SymbologyExport symbologyMode() const;
|
||||||
|
@ -398,18 +398,18 @@ QgsDxfExport::Flags QgsDxfExport::flags() const
|
|||||||
return mFlags;
|
return mFlags;
|
||||||
}
|
}
|
||||||
|
|
||||||
void QgsDxfExport::addLayers( const QList< QPair< QgsVectorLayer *, int > > &layers )
|
void QgsDxfExport::addLayers( const QList<DxfLayer> &layers )
|
||||||
{
|
{
|
||||||
QList<QgsMapLayer *> layerList;
|
QList<QgsMapLayer *> layerList;
|
||||||
|
|
||||||
mLayerNameAttribute.clear();
|
mLayerNameAttribute.clear();
|
||||||
|
|
||||||
QList< QPair< QgsVectorLayer *, int > >::const_iterator layerIt = layers.constBegin();
|
QList< DxfLayer >::const_iterator layerIt = layers.constBegin();
|
||||||
for ( ; layerIt != layers.constEnd(); ++layerIt )
|
for ( ; layerIt != layers.constEnd(); ++layerIt )
|
||||||
{
|
{
|
||||||
layerList << layerIt->first;
|
layerList << layerIt->layer();
|
||||||
if ( layerIt->second >= 0 )
|
if ( layerIt->layerOutputAttributeIndex() >= 0 )
|
||||||
mLayerNameAttribute.insert( layerIt->first->id(), layerIt->second );
|
mLayerNameAttribute.insert( layerIt->layer()->id(), layerIt->layerOutputAttributeIndex() );
|
||||||
}
|
}
|
||||||
|
|
||||||
mMapSettings.setLayers( layerList );
|
mMapSettings.setLayers( layerList );
|
||||||
|
@ -51,6 +51,25 @@ namespace pal SIP_SKIP
|
|||||||
class CORE_EXPORT QgsDxfExport
|
class CORE_EXPORT QgsDxfExport
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Layers and optional attribute index to split
|
||||||
|
* into multiple layers using attribute value as layer name.
|
||||||
|
*/
|
||||||
|
struct DxfLayer
|
||||||
|
{
|
||||||
|
DxfLayer( QgsVectorLayer *vl, int layerOutputAttributeIndex = -1 )
|
||||||
|
: mLayer( vl )
|
||||||
|
, mLayerOutputAttributeIndex( layerOutputAttributeIndex )
|
||||||
|
{}
|
||||||
|
|
||||||
|
QgsVectorLayer *layer() const {return mLayer;}
|
||||||
|
int layerOutputAttributeIndex() const {return mLayerOutputAttributeIndex;}
|
||||||
|
|
||||||
|
QgsVectorLayer *mLayer;
|
||||||
|
int mLayerOutputAttributeIndex;
|
||||||
|
};
|
||||||
|
|
||||||
enum SymbologyExport
|
enum SymbologyExport
|
||||||
{
|
{
|
||||||
NoSymbology = 0, //!< Export only data
|
NoSymbology = 0, //!< Export only data
|
||||||
@ -97,7 +116,7 @@ class CORE_EXPORT QgsDxfExport
|
|||||||
* \param layers list of layers and corresponding attribute indexes that determine the layer name (-1 for original layer name or title)
|
* \param layers list of layers and corresponding attribute indexes that determine the layer name (-1 for original layer name or title)
|
||||||
* \see setLayerTitleAsName
|
* \see setLayerTitleAsName
|
||||||
*/
|
*/
|
||||||
void addLayers( const QList< QPair<QgsVectorLayer *, int > > &layers );
|
void addLayers( const QList< QgsDxfExport::DxfLayer > &layers );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Export to a dxf file in the given encoding
|
* Export to a dxf file in the given encoding
|
||||||
|
@ -94,7 +94,7 @@ void TestQgsDxfExport::cleanup()
|
|||||||
void TestQgsDxfExport::testPoints()
|
void TestQgsDxfExport::testPoints()
|
||||||
{
|
{
|
||||||
QgsDxfExport d;
|
QgsDxfExport d;
|
||||||
d.addLayers( QList< QPair< QgsVectorLayer *, int > >() << qMakePair( mPointLayer, -1 ) );
|
d.addLayers( QList< QgsDxfExport::DxfLayer >() << QgsDxfExport::DxfLayer( mPointLayer ) );
|
||||||
|
|
||||||
QgsMapSettings mapSettings;
|
QgsMapSettings mapSettings;
|
||||||
QSize size( 640, 480 );
|
QSize size( 640, 480 );
|
||||||
@ -122,7 +122,7 @@ void TestQgsDxfExport::testPoints()
|
|||||||
void TestQgsDxfExport::testLines()
|
void TestQgsDxfExport::testLines()
|
||||||
{
|
{
|
||||||
QgsDxfExport d;
|
QgsDxfExport d;
|
||||||
d.addLayers( QList< QPair< QgsVectorLayer *, int > >() << qMakePair( mLineLayer, -1 ) );
|
d.addLayers( QList< QgsDxfExport::DxfLayer >() << QgsDxfExport::DxfLayer( mLineLayer ) );
|
||||||
|
|
||||||
QgsMapSettings mapSettings;
|
QgsMapSettings mapSettings;
|
||||||
QSize size( 640, 480 );
|
QSize size( 640, 480 );
|
||||||
@ -150,7 +150,7 @@ void TestQgsDxfExport::testLines()
|
|||||||
void TestQgsDxfExport::testPolygons()
|
void TestQgsDxfExport::testPolygons()
|
||||||
{
|
{
|
||||||
QgsDxfExport d;
|
QgsDxfExport d;
|
||||||
d.addLayers( QList< QPair< QgsVectorLayer *, int > >() << qMakePair( mPolygonLayer, -1 ) );
|
d.addLayers( QList< QgsDxfExport::DxfLayer >() << QgsDxfExport::DxfLayer( mPolygonLayer ) );
|
||||||
|
|
||||||
QgsMapSettings mapSettings;
|
QgsMapSettings mapSettings;
|
||||||
QSize size( 640, 480 );
|
QSize size( 640, 480 );
|
||||||
@ -189,7 +189,7 @@ void TestQgsDxfExport::testMtext()
|
|||||||
mPointLayer->setLabelsEnabled( true );
|
mPointLayer->setLabelsEnabled( true );
|
||||||
|
|
||||||
QgsDxfExport d;
|
QgsDxfExport d;
|
||||||
d.addLayers( QList< QPair< QgsVectorLayer *, int > >() << qMakePair( mPointLayer, -1 ) );
|
d.addLayers( QList< QgsDxfExport::DxfLayer >() << QgsDxfExport::DxfLayer( mPointLayer ) );
|
||||||
|
|
||||||
QgsMapSettings mapSettings;
|
QgsMapSettings mapSettings;
|
||||||
QSize size( 640, 480 );
|
QSize size( 640, 480 );
|
||||||
@ -251,7 +251,7 @@ void TestQgsDxfExport::testText()
|
|||||||
mPointLayer->setLabelsEnabled( true );
|
mPointLayer->setLabelsEnabled( true );
|
||||||
|
|
||||||
QgsDxfExport d;
|
QgsDxfExport d;
|
||||||
d.addLayers( QList< QPair< QgsVectorLayer *, int > >() << qMakePair( mPointLayer, -1 ) );
|
d.addLayers( QList< QgsDxfExport::DxfLayer >() << QgsDxfExport::DxfLayer( mPointLayer ) );
|
||||||
|
|
||||||
QgsMapSettings mapSettings;
|
QgsMapSettings mapSettings;
|
||||||
QSize size( 640, 480 );
|
QSize size( 640, 480 );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user