diff --git a/external/libdxfrw/drw_base.h b/external/libdxfrw/drw_base.h index 8e93c50e4fb4..2f7d4e4c9506 100644 --- a/external/libdxfrw/drw_base.h +++ b/external/libdxfrw/drw_base.h @@ -63,15 +63,24 @@ namespace DRW enum Version { UNKNOWNV, //!< UNKNOWN VERSION. - AC1006, //!< R10. - AC1009, //!< R11 & R12. - AC1012, //!< R13. - AC1014, //!< R14. - AC1015, //!< ACAD 2000. - AC1018, //!< ACAD 2004. - AC1021, //!< ACAD 2007. - AC1024, //!< ACAD 2010. - AC1027 //!< ACAD 2013. + MC00, //!< DWG Release 1.1 + AC12, //!< DWG Release 1.2 + AC14, //!< DWG Release 1.4 + AC150, //!< DWG Release 2.0 + AC210, //!< DWG Release 2.10 + AC1002, //!< DWG Release 2.5 + AC1003, //!< DWG Release 2.6 + AC1004, //!< DWG Relase 9 + AC1006, //!< DWG Release 10 + AC1009, //!< DWG Release 11/12 (LT R1/R2) + AC1012, //!< DWG Release 13 (LT95) + AC1014, //!< DWG Release 14/14.01 (LT97/LT98) + AC1015, //!< AutoCAD 2000/2000i/2002 + AC1018, //!< AutoCAD 2004/2005/2006 + AC1021, //!< AutoCAD 2007/2008/2009 + AC1024, //!< AutoCAD 2010/2011/2012 + AC1027, //!< AutoCAD 2013/2014/2015/2016/2017 + AC1032, //!< AutoCAD 2018/2019/2020 }; enum error diff --git a/external/libdxfrw/libdwgr.cpp b/external/libdxfrw/libdwgr.cpp index 3052b3f76307..64b7c1a421e5 100644 --- a/external/libdxfrw/libdwgr.cpp +++ b/external/libdxfrw/libdwgr.cpp @@ -223,8 +223,42 @@ bool dwgR::openFile( std::ifstream *filestr ) QgsDebugMsg( QString( "line version:%1" ).arg( line ) ); - if ( strcmp( line, "AC1006" ) == 0 ) + if ( strcmp( line, "MC0.0" ) == 0 ) + { + version = DRW::MC00; + } + else if ( strcmp( line, "AC1.2" ) == 0 ) + { + version = DRW::AC12; + } + else if ( strcmp( line, "AC1.4" ) == 0 ) + { + version = DRW::AC14; + } + else if ( strcmp( line, "AC1.50" ) == 0 ) + { + version = DRW::AC150; + } + else if ( strcmp( line, "AC2.10" ) == 0 ) + { + version = DRW::AC210; + } + else if ( strcmp( line, "AC1002" ) == 0 ) + { + version = DRW::AC1002; + } + else if ( strcmp( line, "AC1003" ) == 0 ) + { + version = DRW::AC1003; + } + else if ( strcmp( line, "AC1004" ) == 0 ) + { + version = DRW::AC1004; + } + else if ( strcmp( line, "AC1006" ) == 0 ) + { version = DRW::AC1006; + } else if ( strcmp( line, "AC1009" ) == 0 ) { version = DRW::AC1009; @@ -265,6 +299,10 @@ bool dwgR::openFile( std::ifstream *filestr ) version = DRW::AC1027; reader = new dwgReader27( filestr, this ); } + else if ( strcmp( line, "AC1032" ) == 0 ) + { + version = DRW::AC1032; + } else version = DRW::UNKNOWNV; diff --git a/src/app/dwg/qgsdwgimporter.cpp b/src/app/dwg/qgsdwgimporter.cpp index 105e35c3252c..a00e97030827 100644 --- a/src/app/dwg/qgsdwgimporter.cpp +++ b/src/app/dwg/qgsdwgimporter.cpp @@ -173,6 +173,52 @@ QgsDwgImporter::~QgsDwgImporter() } } +QString drwVersionToString( DRW::Version version ) +{ + switch ( version ) + { + case DRW::UNKNOWNV: + return QObject::tr( "Unknown version" ); + case DRW::MC00: + return QObject::tr( "AutoCAD Release 1.1" ); + case DRW::AC12: + return QObject::tr( "AutoCAD Release 1.2" ); + case DRW::AC14: + return QObject::tr( "AutoCAD Release 1.4" ); + case DRW::AC150: + return QObject::tr( "AutoCAD Release 2.0" ); + case DRW::AC210: + return QObject::tr( "AutoCAD Release 2.10" ); + case DRW::AC1002: + return QObject::tr( "AutoCAD Release 2.5" ); + case DRW::AC1003: + return QObject::tr( "AutoCAD Release 2.6" ); + case DRW::AC1004: + return QObject::tr( "AutoCAD Release 9" ); + case DRW::AC1006: + return QObject::tr( "AutoCAD Release 10" ); + case DRW::AC1009: + return QObject::tr( "AutoCAD Release 11/12 (LT R1/R2)" ); + case DRW::AC1012: + return QObject::tr( "AutoCAD Release 13 (LT95)" ); + case DRW::AC1014: + return QObject::tr( "AutoCAD Release 14/14.01 (LT97/LT98)" ); + case DRW::AC1015: + return QObject::tr( "AutoCAD 2000/2000i/2002" ); + case DRW::AC1018: + return QObject::tr( "AutoCAD 2004/2005/2006" ); + case DRW::AC1021: + return QObject::tr( "AutoCAD 2007/2008/2009" ); + case DRW::AC1024: + return QObject::tr( "AutoCAD 2010/2011/2012" ); + case DRW::AC1027: + return QObject::tr( "AutoCAD 2013/2014/2015/2016/2017" ); + case DRW::AC1032: + return QObject::tr( "AutoCAD 2018/2019/2020" ); + } + return QString(); +} + bool QgsDwgImporter::import( const QString &drawing, QString &error, bool doExpandInserts, bool useCurves, QLabel *label ) { QgsDebugCall; @@ -601,6 +647,7 @@ bool QgsDwgImporter::import( const QString &drawing, QString &error, bool doExpa LOG( tr( "Updating database from %1 [%2]." ).arg( drawing, fi.lastModified().toString() ) ); DRW::error result( DRW::BAD_NONE ); + DRW::Version version = DRW::Version::UNKNOWNV; mTime.start(); mEntities = 0; @@ -622,6 +669,7 @@ bool QgsDwgImporter::import( const QString &drawing, QString &error, bool doExpa { result = dwg->getError(); } + version = dwg->getVersion(); } else { @@ -641,7 +689,7 @@ bool QgsDwgImporter::import( const QString &drawing, QString &error, bool doExpa error = tr( "error opening file." ); break; case DRW::BAD_VERSION: - error = tr( "unsupported version." ); + error = tr( "unsupported version. Cannot read %1 documents." ).arg( drwVersionToString( version ) ); break; case DRW::BAD_READ_METADATA: error = tr( "error reading metadata." );