diff --git a/external/libdxfrw/intern/drw_dbg.cpp b/external/libdxfrw/intern/drw_dbg.cpp index 7bf0bbe38f2..469b8580e67 100644 --- a/external/libdxfrw/intern/drw_dbg.cpp +++ b/external/libdxfrw/intern/drw_dbg.cpp @@ -10,17 +10,14 @@ ** along with this program. If not, see . ** ******************************************************************************/ +#include +#include #include "drw_dbg.h" -#include "qgslogger.h" +DRW_dbg *DRW_dbg::instance{nullptr}; +/*********private clases*************/ -#include -#include - -DRW_dbg *DRW_dbg::instance = nullptr; - -/*********private classes*************/ class print_debug : public DRW::DebugPrinter { public: void printS(const std::string& s) override; @@ -31,12 +28,8 @@ public: void printB(int i) override; void printHL(int c, int s, int h) override; void printPT(double x, double y, double z) override; - ~print_debug() override { QgsDebugMsgLevel( mBuf, 5 ); } private: std::ios_base::fmtflags flags{std::cerr.flags()}; - QString mBuf; - QTextStream mTS; - void flush(); }; /********* debug class *************/ @@ -119,60 +112,41 @@ void DRW_dbg::printPT(double x, double y, double z){ currentPrinter->printPT(x, y, z); } -void print_debug::flush() -{ - QStringList lines = mBuf.split( '\n' ); - for ( int i = 0; i < lines.size() - 1; i++ ) - { - QgsDebugMsgLevel( lines[i], 4 ); - } - mBuf = lines.last(); +void print_debug::printS(const std::string& s){ + std::cerr << s; } -void print_debug::printS( const std::string& s ) -{ - mTS << QString::fromStdString( s ); - flush(); +void print_debug::printI(long long int i){ + std::cerr << i; } -void print_debug::printI( long long int i ) -{ - mTS << i; - flush(); +void print_debug::printUI(long long unsigned int i){ + std::cerr << i; } -void print_debug::printUI( long long unsigned int i ) -{ - mTS << i; - flush(); +void print_debug::printD(double d){ + std::cerr << std::fixed << d; } -void print_debug::printD( double d ) -{ - mTS << QStringLiteral( "%1 " ).arg( d, 0, 'g' ); - flush(); +void print_debug::printH(long long i){ + std::cerr << "0x" << std::setw(2) << std::setfill('0'); + std::cerr << std::hex << i; + std::cerr.flags(flags); } -void print_debug::printH( long long i ) -{ - mTS << QStringLiteral( "0x%1" ).arg( i, 0, 16 ); - flush(); +void print_debug::printB(int i){ + std::cerr << std::setw(8) << std::setfill('0'); + std::cerr << std::setbase(2) << i; + std::cerr.flags(flags); } -void print_debug::printB( int i ) -{ - mTS << QStringLiteral( "0%1" ).arg( i, 0, 8 ); - flush(); +void print_debug::printHL(int c, int s, int h){ + std::cerr << c << '.' << s << '.'; + std::cerr << "0x" << std::setw(2) << std::setfill('0'); + std::cerr << std::hex << h; + std::cerr.flags(flags); } -void print_debug::printHL( int c, int s, int h ) -{ - mTS << QStringLiteral( "%1.%2 0x%3" ).arg( c ).arg( s ).arg( h, 0, 16 ); - flush(); -} - -void print_debug::printPT( double x, double y, double z ) -{ - mTS << QStringLiteral( "x:%1 y:%2 z:%3" ).arg( x, 0, 'g' ).arg( y, 0, 'g' ).arg( z, 0, 'g' ); - flush(); +void print_debug::printPT(double x, double y, double z){ + std::cerr << std::fixed << "x: " << x << ", y: " << y << ", z: "<< z; } diff --git a/src/app/dwg/qgsdwgimporter.cpp b/src/app/dwg/qgsdwgimporter.cpp index 9efbd98e6ef..a17b307d049 100644 --- a/src/app/dwg/qgsdwgimporter.cpp +++ b/src/app/dwg/qgsdwgimporter.cpp @@ -48,6 +48,7 @@ #include #include #include +#include #define LOG( x ) { QgsDebugMsg( x ); QgsMessageLog::logMessage( x, QObject::tr( "DWG/DXF import" ) ); } #define ONCE( x ) { static bool show=true; if( show ) LOG( x ); show=false; } @@ -64,6 +65,82 @@ #endif +class QgsDrwDebugPrinter : public DRW::DebugPrinter +{ + public: + + QgsDrwDebugPrinter() + : mTS( &mBuf ) + { } + ~QgsDrwDebugPrinter() override + { + QgsDebugMsgLevel( mBuf, 4 ); + } + + void printS( const std::string &s ) override + { + mTS << QString::fromStdString( s ); + flush(); + } + + void printI( long long int i ) override + { + mTS << i; + flush(); + } + + void printUI( long long unsigned int i ) override + { + mTS << i; + flush(); + } + + void printD( double d ) override + { + mTS << QStringLiteral( "%1 " ).arg( d, 0, 'g' ); + flush(); + } + + void printH( long long int i ) override + { + mTS << QStringLiteral( "0x%1" ).arg( i, 0, 16 ); + flush(); + } + + void printB( int i ) override + { + mTS << QStringLiteral( "0%1" ).arg( i, 0, 8 ); + flush(); + } + + void printHL( int c, int s, int h ) override + { + mTS << QStringLiteral( "%1.%2 0x%3" ).arg( c ).arg( s ).arg( h, 0, 16 ); + flush(); + } + + void printPT( double x, double y, double z ) override + { + mTS << QStringLiteral( "x:%1 y:%2 z:%3" ).arg( x, 0, 'g' ).arg( y, 0, 'g' ).arg( z, 0, 'g' ); + flush(); + } + + private: + std::ios_base::fmtflags flags{std::cerr.flags()}; + QString mBuf; + QTextStream mTS; + void flush() + { + QStringList lines = mBuf.split( '\n' ); + for ( int i = 0; i < lines.size() - 1; i++ ) + { + QgsDebugMsgLevel( lines[i], 4 ); + } + mBuf = lines.last(); + } +}; + + QgsDwgImporter::QgsDwgImporter( const QString &database, const QgsCoordinateReferenceSystem &crs ) : mDs( nullptr ) , mDatabase( database ) @@ -76,6 +153,13 @@ QgsDwgImporter::QgsDwgImporter( const QString &database, const QgsCoordinateRefe { QgsDebugCall; + // setup custom debug printer for libdxfrw + static std::once_flag initialized; + std::call_once( initialized, [ = ]( ) + { + DRW::setCustomDebugPrinter( new QgsDrwDebugPrinter() ); + } ); + const QString crswkt( crs.toWkt( QgsCoordinateReferenceSystem::WKT_PREFERRED_GDAL ) ); mCrsH = QgsOgrUtils::crsToOGRSpatialReference( crs ); QgsDebugMsg( QStringLiteral( "CRS %1[%2]: %3" ).arg( mCrs ).arg( ( qint64 ) mCrsH, 0, 16 ).arg( crswkt ) );