Navigation Menu

Skip to content

Commit

Permalink
Report actual version of unsupported DWG files
Browse files Browse the repository at this point in the history
  • Loading branch information
nyalldawson committed Jul 29, 2021
1 parent 273a9ef commit 33bceba
Show file tree
Hide file tree
Showing 3 changed files with 106 additions and 11 deletions.
27 changes: 18 additions & 9 deletions external/libdxfrw/drw_base.h
Expand Up @@ -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/200i0/2002
AC1018, //!< AutoCAD 2004/2005/2006
AC1021, //!< AutoCAD 2007/2008/2009
AC1024, //!< AutoCAD 2010/2011/2021
AC1027, //!< AutoCAD 2013/2014/2015/2016/2017
AC1032, //!< AutoCAD 2018/2019/2020
};

enum error
Expand Down
40 changes: 39 additions & 1 deletion external/libdxfrw/libdwgr.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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;

Expand Down
50 changes: 49 additions & 1 deletion src/app/dwg/qgsdwgimporter.cpp
Expand Up @@ -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;
Expand Down Expand Up @@ -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;
Expand All @@ -622,6 +669,7 @@ bool QgsDwgImporter::import( const QString &drawing, QString &error, bool doExpa
{
result = dwg->getError();
}
version = dwg->getVersion();
}
else
{
Expand All @@ -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." );
Expand Down

0 comments on commit 33bceba

Please sign in to comment.