Skip to content

Commit

Permalink
Merge pull request #5702 from nyalldawson/dxf_improve
Browse files Browse the repository at this point in the history
[dxf] Add option to export labels as text elements, instead of mtext
  • Loading branch information
nyalldawson committed Nov 24, 2017
2 parents 2b5aca5 + f8d8395 commit 03ec2d8
Show file tree
Hide file tree
Showing 13 changed files with 725 additions and 280 deletions.
25 changes: 25 additions & 0 deletions python/core/dxf/qgsdxfexport.sip
Expand Up @@ -27,6 +27,13 @@ class QgsDxfExport
SymbolLayerSymbology
};

enum Flag
{
FlagNoMText,
};
typedef QFlags<QgsDxfExport::Flag> Flags;


QgsDxfExport();
%Docstring
Constructor for QgsDxfExport.
Expand All @@ -38,6 +45,21 @@ class QgsDxfExport
\param settings map settings to apply
%End

void setFlags( QgsDxfExport::Flags flags );
%Docstring
Sets the export flags.
.. versionadded:: 3.0
.. seealso:: flags()
%End

QgsDxfExport::Flags flags() const;
%Docstring
Returns the export flags.
.. versionadded:: 3.0
.. seealso:: setFlags()
:rtype: QgsDxfExport.Flags
%End

void addLayers( const QList< QPair<QgsVectorLayer *, int > > &layers );
%Docstring
Add layers to export
Expand Down Expand Up @@ -342,6 +364,9 @@ return list of available DXF encodings

};

QFlags<QgsDxfExport::Flag> operator|(QgsDxfExport::Flag f1, QFlags<QgsDxfExport::Flag> f2);


/************************************************************************
* This file has been generated automatically from *
* *
Expand Down
6 changes: 6 additions & 0 deletions src/app/qgisapp.cpp
Expand Up @@ -5700,6 +5700,12 @@ void QgisApp::dxfExport()
dxfExport.setLayerTitleAsName( d.layerTitleAsName() );
dxfExport.setDestinationCrs( d.crs() );
dxfExport.setForce2d( d.force2d() );

QgsDxfExport::Flags flags = 0;
if ( !d.useMText() )
flags = flags | QgsDxfExport::FlagNoMText;
dxfExport.setFlags( flags );

if ( mapCanvas() )
{
//extent
Expand Down
1 change: 1 addition & 0 deletions src/app/qgscrashhandler.h
Expand Up @@ -31,6 +31,7 @@ class APP_EXPORT QgsCrashHandler
{

public:

/**
* This class doesn't need to be created by anyone as is only used to handle
* crashes in the application.
Expand Down
8 changes: 8 additions & 0 deletions src/app/qgsdxfexportdialog.cpp
Expand Up @@ -458,6 +458,7 @@ QgsDxfExportDialog::QgsDxfExportDialog( QWidget *parent, Qt::WindowFlags f )
mScaleWidget->setScale( 1.0 / oldScale );
mLayerTitleAsName->setChecked( QgsProject::instance()->readEntry( QStringLiteral( "dxf" ), QStringLiteral( "/lastDxfLayerTitleAsName" ), s.value( QStringLiteral( "qgis/lastDxfLayerTitleAsName" ), "false" ).toString() ) != QLatin1String( "false" ) );
mMapExtentCheckBox->setChecked( QgsProject::instance()->readEntry( QStringLiteral( "dxf" ), QStringLiteral( "/lastDxfMapRectangle" ), s.value( QStringLiteral( "qgis/lastDxfMapRectangle" ), "false" ).toString() ) != QLatin1String( "false" ) );
mMTextCheckBox->setChecked( QgsProject::instance()->readEntry( QStringLiteral( "dxf" ), QStringLiteral( "/lastDxfUseMText" ), s.value( QStringLiteral( "qgis/lastDxfUseMText" ), "true" ).toString() ) != QLatin1String( "false" ) );

QStringList ids = QgsProject::instance()->mapThemeCollection()->mapThemes();
ids.prepend( QLatin1String( "" ) );
Expand Down Expand Up @@ -611,6 +612,11 @@ bool QgsDxfExportDialog::force2d() const
return mForce2d->isChecked();
}

bool QgsDxfExportDialog::useMText() const
{
return mMTextCheckBox->isChecked();
}

void QgsDxfExportDialog::saveSettings()
{
QgsSettings s;
Expand All @@ -622,6 +628,7 @@ void QgsDxfExportDialog::saveSettings()
s.setValue( QStringLiteral( "qgis/lastDxfLayerTitleAsName" ), mLayerTitleAsName->isChecked() );
s.setValue( QStringLiteral( "qgis/lastDxfEncoding" ), mEncoding->currentText() );
s.setValue( QStringLiteral( "qgis/lastDxfCrs" ), QString::number( mCRS.srsid() ) );
s.setValue( QStringLiteral( "qgis/lastDxfUseMText" ), mMTextCheckBox->isChecked() );

QgsProject::instance()->writeEntry( QStringLiteral( "dxf" ), QStringLiteral( "/lastDxfSymbologyMode" ), mSymbologyModeComboBox->currentIndex() );
QgsProject::instance()->writeEntry( QStringLiteral( "dxf" ), QStringLiteral( "/lastSymbologyExportScale" ), mScaleWidget->scale() != 0 ? 1.0 / mScaleWidget->scale() : 0 );
Expand All @@ -630,6 +637,7 @@ void QgsDxfExportDialog::saveSettings()
QgsProject::instance()->writeEntry( QStringLiteral( "dxf" ), QStringLiteral( "/lastDxfEncoding" ), mEncoding->currentText() );
QgsProject::instance()->writeEntry( QStringLiteral( "dxf" ), QStringLiteral( "/lastVisibilityPreset" ), mVisibilityPresets->currentText() );
QgsProject::instance()->writeEntry( QStringLiteral( "dxf" ), QStringLiteral( "/lastDxfCrs" ), QString::number( mCRS.srsid() ) );
QgsProject::instance()->writeEntry( QStringLiteral( "dxf" ), QStringLiteral( "/lastDxfUseMText" ), mMTextCheckBox->isChecked() );
}


Expand Down
1 change: 1 addition & 0 deletions src/app/qgsdxfexportdialog.h
Expand Up @@ -88,6 +88,7 @@ class QgsDxfExportDialog : public QDialog, private Ui::QgsDxfExportDialogBase
bool exportMapExtent() const;
bool layerTitleAsName() const;
bool force2d() const;
bool useMText() const;
QString mapTheme() const;
QString encoding() const;
QgsCoordinateReferenceSystem crs() const;
Expand Down
55 changes: 36 additions & 19 deletions src/core/dxf/qgsdxfexport.cpp
Expand Up @@ -389,6 +389,16 @@ void QgsDxfExport::setMapSettings( const QgsMapSettings &settings )
mMapSettings = settings;
}

void QgsDxfExport::setFlags( QgsDxfExport::Flags flags )
{
mFlags = flags;
}

QgsDxfExport::Flags QgsDxfExport::flags() const
{
return mFlags;
}

void QgsDxfExport::addLayers( const QList< QPair< QgsVectorLayer *, int > > &layers )
{
QList<QgsMapLayer *> layerList;
Expand Down Expand Up @@ -491,7 +501,7 @@ int QgsDxfExport::writeToFile( QIODevice *d, const QString &encoding )
return 1;
}

if ( !d->isOpen() && !d->open( QIODevice::WriteOnly ) )
if ( !d->isOpen() && !d->open( QIODevice::WriteOnly | QIODevice::Truncate ) )
{
return 2;
}
Expand Down Expand Up @@ -3633,6 +3643,7 @@ void QgsDxfExport::writeText( const QString &layer, const QString &text, const Q
writeGroup( 1, text );
writeGroup( 50, angle );
writeGroup( 7, QStringLiteral( "STANDARD" ) ); // so far only support for standard font
writeGroup( 100, QStringLiteral( "AcDbText" ) );
}

void QgsDxfExport::writeMText( const QString &layer, const QString &text, const QgsPoint &pt, double width, double angle, const QColor &color )
Expand Down Expand Up @@ -4400,30 +4411,36 @@ void QgsDxfExport::drawLabel( const QString &layerId, QgsRenderContext &context,
}
}

txt = txt.replace( wrapchr, QLatin1String( "\\P" ) );

if ( tmpLyr.format().font().underline() )
if ( mFlags & FlagNoMText )
{
txt.prepend( "\\L" ).append( "\\l" );
writeText( dxfLayer, txt, QgsPoint( label->getX(), label->getY() ), label->getHeight(), label->getAlpha() * 180.0 / M_PI, tmpLyr.format().color() );
}

if ( tmpLyr.format().font().overline() )
else
{
txt.prepend( "\\O" ).append( "\\o" );
}
txt = txt.replace( wrapchr, QLatin1String( "\\P" ) );

if ( tmpLyr.format().font().strikeOut() )
{
txt.prepend( "\\K" ).append( "\\k" );
}
if ( tmpLyr.format().font().underline() )
{
txt.prepend( "\\L" ).append( "\\l" );
}

if ( tmpLyr.format().font().overline() )
{
txt.prepend( "\\O" ).append( "\\o" );
}

txt.prepend( QStringLiteral( "\\f%1|i%2|b%3;\\H%4;" )
.arg( tmpLyr.format().font().family() )
.arg( tmpLyr.format().font().italic() ? 1 : 0 )
.arg( tmpLyr.format().font().bold() ? 1 : 0 )
.arg( label->getHeight() / ( 1 + txt.count( QStringLiteral( "\\P" ) ) ) * 0.75 ) );
if ( tmpLyr.format().font().strikeOut() )
{
txt.prepend( "\\K" ).append( "\\k" );
}

writeMText( dxfLayer, txt, QgsPoint( label->getX(), label->getY() ), label->getWidth(), label->getAlpha() * 180.0 / M_PI, tmpLyr.format().color() );
txt.prepend( QStringLiteral( "\\f%1|i%2|b%3;\\H%4;" )
.arg( tmpLyr.format().font().family() )
.arg( tmpLyr.format().font().italic() ? 1 : 0 )
.arg( tmpLyr.format().font().bold() ? 1 : 0 )
.arg( label->getHeight() / ( 1 + txt.count( QStringLiteral( "\\P" ) ) ) * 0.75 ) );
writeMText( dxfLayer, txt, QgsPoint( label->getX(), label->getY() ), label->getWidth(), label->getAlpha() * 180.0 / M_PI, tmpLyr.format().color() );
}
}


Expand Down
32 changes: 29 additions & 3 deletions src/core/dxf/qgsdxfexport.h
Expand Up @@ -53,11 +53,18 @@ class CORE_EXPORT QgsDxfExport
public:
enum SymbologyExport
{
NoSymbology = 0, //export only data
FeatureSymbology, //Keeps the number of features and export symbology per feature (using the first symbol level)
SymbolLayerSymbology //Exports one feature per symbol layer (considering symbol levels)
NoSymbology = 0, //!< Export only data
FeatureSymbology, //!< Keeps the number of features and export symbology per feature (using the first symbol level)
SymbolLayerSymbology //!< Exports one feature per symbol layer (considering symbol levels)
};

//! Export flags
enum Flag
{
FlagNoMText = 1 << 1, //!< Export text as TEXT elements. If not set, text will be exported as MTEXT elements.
};
Q_DECLARE_FLAGS( Flags, Flag )

/**
* Constructor for QgsDxfExport.
*/
Expand All @@ -71,6 +78,20 @@ class CORE_EXPORT QgsDxfExport
*/
void setMapSettings( const QgsMapSettings &settings );

/**
* Sets the export flags.
* \since QGIS 3.0
* \see flags()
*/
void setFlags( QgsDxfExport::Flags flags );

/**
* Returns the export flags.
* \since QGIS 3.0
* \see setFlags()
*/
QgsDxfExport::Flags flags() const;

/**
* Add layers to export
* \param layers list of layers and corresponding attribute indexes that determine the layer name (-1 for original layer name or title)
Expand Down Expand Up @@ -440,6 +461,11 @@ class CORE_EXPORT QgsDxfExport
QHash<QString, int> mLayerNameAttribute;
double mFactor = 1.0;
bool mForce2d = false;

QgsDxfExport::Flags mFlags = 0;

};

Q_DECLARE_OPERATORS_FOR_FLAGS( QgsDxfExport::Flags )

#endif // QGSDXFEXPORT_H
64 changes: 32 additions & 32 deletions src/crashhandler/CMakeLists.txt
@@ -1,32 +1,32 @@
INCLUDE_DIRECTORIES(SYSTEM
${CMAKE_CURRENT_BINARY_DIR}
)

QT5_WRAP_UI(CRASH_UIS_H qgscrashdialog.ui)
QT5_WRAP_CPP(CRASH_HDR_MOC qgscrashdialog.h)

SET(IMAGE_RCCS ../../images/images.qrc)
QT5_ADD_RESOURCES(IMAGE_RCC_SRCS ${IMAGE_RCCS})

# -wd4091 Avoid 'typedef' ignored on left of '' when no variable is declared warning in DbgHelp.h
SET_SOURCE_FILES_PROPERTIES(qgsstacktrace.cpp PROPERTIES COMPILE_FLAGS -wd4091)

ADD_EXECUTABLE(qgiscrashhandler WIN32
main.cpp
${CRASH_UIS_H}
${CRASH_HDR_MOC}
${IMAGE_RCC_SRCS}
qgscrashdialog.cpp
qgsstacktrace.cpp
qgscrashreport.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../app/qgis_win32.rc
)

TARGET_LINK_LIBRARIES(qgiscrashhandler
${QT_QTCORE_LIBRARY}
${QT_QTGUI_LIBRARY}
DbgHelp
)

INSTALL(CODE "MESSAGE(\"Installing crashhandler ...\")")
INSTALL(TARGETS qgiscrashhandler RUNTIME DESTINATION ${QGIS_LIBEXEC_DIR})
INCLUDE_DIRECTORIES(SYSTEM
${CMAKE_CURRENT_BINARY_DIR}
)

QT5_WRAP_UI(CRASH_UIS_H qgscrashdialog.ui)
QT5_WRAP_CPP(CRASH_HDR_MOC qgscrashdialog.h)

SET(IMAGE_RCCS ../../images/images.qrc)
QT5_ADD_RESOURCES(IMAGE_RCC_SRCS ${IMAGE_RCCS})

# -wd4091 Avoid 'typedef' ignored on left of '' when no variable is declared warning in DbgHelp.h
SET_SOURCE_FILES_PROPERTIES(qgsstacktrace.cpp PROPERTIES COMPILE_FLAGS -wd4091)

ADD_EXECUTABLE(qgiscrashhandler WIN32
main.cpp
${CRASH_UIS_H}
${CRASH_HDR_MOC}
${IMAGE_RCC_SRCS}
qgscrashdialog.cpp
qgsstacktrace.cpp
qgscrashreport.cpp
${CMAKE_CURRENT_SOURCE_DIR}/../app/qgis_win32.rc
)

TARGET_LINK_LIBRARIES(qgiscrashhandler
${QT_QTCORE_LIBRARY}
${QT_QTGUI_LIBRARY}
DbgHelp
)

INSTALL(CODE "MESSAGE(\"Installing crashhandler ...\")")
INSTALL(TARGETS qgiscrashhandler RUNTIME DESTINATION ${QGIS_LIBEXEC_DIR})

0 comments on commit 03ec2d8

Please sign in to comment.