Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Report actual version of unsupported DWG files #44428

Merged
merged 2 commits into from
Jul 29, 2021
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions external/libdxfrw/drw_base.h
Original file line number Diff line number Diff line change
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/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
Expand Down
40 changes: 39 additions & 1 deletion external/libdxfrw/libdwgr.cpp
Original file line number Diff line number Diff line change
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
Original file line number Diff line number Diff line change
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