From 902e5df2e8e3bb6fa65fe35b2bc04b9a85820d66 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Mon, 25 Sep 2023 16:20:40 +0100 Subject: [PATCH] Report unsupported DXF features on import. Fixes https://gitlab.com/kicad/code/kicad/-/issues/15614 --- common/import_gfx/dxf_import_plugin.h | 144 +++++++++++++----------- common/import_gfx/graphics_importer.cpp | 1 + thirdparty/dxflib_qcad/dl_dxf.cpp | 2 +- 3 files changed, 81 insertions(+), 66 deletions(-) diff --git a/common/import_gfx/dxf_import_plugin.h b/common/import_gfx/dxf_import_plugin.h index 9a520d5fda..387f79e08b 100644 --- a/common/import_gfx/dxf_import_plugin.h +++ b/common/import_gfx/dxf_import_plugin.h @@ -27,6 +27,7 @@ #include "graphics_import_plugin.h" #include "graphics_importer_buffer.h" +#include "wx/translation.h" #include #include @@ -206,12 +207,8 @@ enum class DXF_IMPORT_UNITS * This class import DXF ASCII files and convert basic entities to board entities. * It depends on the dxflib library. */ -#if 0 //defined(DEBUG) -// For dxf import debug: -#define ON_UNSUPPORTED( error_msg ) wxLogMessage( wxT( error_msg ) ) -#else -#define ON_UNSUPPORTED( error_msg ) -#endif +#define ON_UNSUPPORTED( error_msg ) reportMessage( wxString::Format( _( "%s is not supported." ), \ + error_msg ) ) class DXF_IMPORT_PLUGIN : public GRAPHICS_IMPORT_PLUGIN, public DL_CreationAdapter { @@ -456,76 +453,93 @@ private: virtual void addKnot( const DL_KnotData& aData ) override; // Not yet handled DXF entities: - virtual void addXLine( const DL_XLineData& ) override { ON_UNSUPPORTED( "addXLine" ); } - - virtual void addRay( const DL_RayData& ) override { ON_UNSUPPORTED( "addRay" ); } + virtual void addXLine( const DL_XLineData& ) override + { + reportMsg( _( "DXF construction lines not currently supported." ) ); + } + virtual void addRay( const DL_RayData& ) override + { + reportMsg( _( "DXF construction lines not currently supported." ) ); + } virtual void addArcAlignedText( const DL_ArcAlignedTextData& ) override - { ON_UNSUPPORTED( "addArcAlignedText" ); } - - virtual void addAttribute( const DL_AttributeData& ) override - { ON_UNSUPPORTED( "addAttribute" ); } - - virtual void addDimAlign( const DL_DimensionData&, - const DL_DimAlignedData& ) override { ON_UNSUPPORTED( "addDimAlign" ); } - virtual void addDimLinear( const DL_DimensionData&, - const DL_DimLinearData& ) override { ON_UNSUPPORTED( "addDimLinear" ); } - virtual void addDimRadial( const DL_DimensionData&, - const DL_DimRadialData& ) override { ON_UNSUPPORTED( "addDimRadial" ); } - virtual void addDimDiametric( const DL_DimensionData&, - const DL_DimDiametricData& ) override { ON_UNSUPPORTED( "addDimDiametric" ); } - virtual void addDimAngular( const DL_DimensionData&, - const DL_DimAngular2LData& ) override { ON_UNSUPPORTED( "addDimAngular" ); } - virtual void addDimAngular3P( const DL_DimensionData&, - const DL_DimAngular3PData& ) override { ON_UNSUPPORTED( "addDimAngular3P" ); } - virtual void addDimOrdinate( const DL_DimensionData&, - const DL_DimOrdinateData& ) override { ON_UNSUPPORTED( "addDimOrdinate" ); } + { + reportMsg( _( "DXF arc-aligned text not currently supported." ) ); + } + virtual void addDimAlign( const DL_DimensionData&, const DL_DimAlignedData& ) override + { + reportMsg( _( "DXF dimensions not currently supported." ) ); + } + virtual void addDimLinear( const DL_DimensionData&, const DL_DimLinearData& ) override + { + reportMsg( _( "DXF dimensions not currently supported." ) ); + } + virtual void addDimRadial( const DL_DimensionData&, const DL_DimRadialData& ) override + { + reportMsg( _( "DXF dimensions not currently supported." ) ); + } + virtual void addDimDiametric( const DL_DimensionData&, const DL_DimDiametricData& ) override + { + reportMsg( _( "DXF dimensions not currently supported." ) ); + } + virtual void addDimAngular( const DL_DimensionData&, const DL_DimAngular2LData& ) override + { + reportMsg( _( "DXF dimensions not currently supported." ) ); + } + virtual void addDimAngular3P( const DL_DimensionData&, const DL_DimAngular3PData& ) override + { + reportMsg( _( "DXF dimensions not currently supported." ) ); + } + virtual void addDimOrdinate( const DL_DimensionData&, const DL_DimOrdinateData& ) override + { + reportMsg( _( "DXF dimensions not currently supported." ) ); + } virtual void addLeader( const DL_LeaderData& ) override - { ON_UNSUPPORTED( "addLeader" ); } + { + reportMsg( _( "DXF dimensions not currently supported." ) ); + } + virtual void addLeaderVertex( const DL_LeaderVertexData& ) override { } - virtual void addLeaderVertex( const DL_LeaderVertexData& ) override - { ON_UNSUPPORTED( "addLeaderVertex" ); } + virtual void addHatch( const DL_HatchData& ) override + { + reportMsg( _( "DXF hatches not currently supported." ) ); + } + virtual void addHatchLoop( const DL_HatchLoopData& ) override { } + virtual void addHatchEdge( const DL_HatchEdgeData& ) override { } - virtual void addHatch( const DL_HatchData& ) override { ON_UNSUPPORTED( "addHatch" ); } + virtual void addTrace( const DL_TraceData& ) override + { + reportMsg( _( "DXF traces not currently supported." ) ); + } - virtual void addTrace( const DL_TraceData& ) override { ON_UNSUPPORTED( "addTrace" ); } - virtual void add3dFace( const DL_3dFaceData& ) override { ON_UNSUPPORTED( "add3dFace" ); } + virtual void add3dFace( const DL_3dFaceData& ) override + { + reportMsg( _( "DXF 3dfaces not currently supported." ) ); + } - virtual void addSolid( const DL_SolidData& ) override { ON_UNSUPPORTED( "addSolid" ); } + virtual void addSolid( const DL_SolidData& ) override + { + reportMsg( _( "DXF solids not currently supported." ) ); + } - virtual void addImage( const DL_ImageData& ) override { ON_UNSUPPORTED( "addImage" ); } + virtual void addImage( const DL_ImageData& ) override + { + reportMsg( _( "DXF images not currently supported." ) ); + } virtual void linkImage( const DL_ImageDefData& ) override {} - virtual void addHatchLoop( const DL_HatchLoopData& ) override - { - ON_UNSUPPORTED( "addHatchLoop" ); - } - - virtual void addHatchEdge( const DL_HatchEdgeData& ) override - { - ON_UNSUPPORTED( "addHatchEdge" ); - } - - virtual void addXRecord( const std::string& ) override { ON_UNSUPPORTED( "addXRecord" ); } - - virtual void addXRecordString( int, const std::string& ) override - { - ON_UNSUPPORTED( "addXRecordString" ); - } - - virtual void addXRecordReal( int, double ) override { ON_UNSUPPORTED( "addXRecordReal" ); } - virtual void addXRecordInt( int, int ) override { ON_UNSUPPORTED( "addXRecordInt" ); } - virtual void addXRecordBool( int, bool ) override { ON_UNSUPPORTED( "addXRecordBool" ); } - - virtual void addXDataApp( const std::string& ) override { ON_UNSUPPORTED( "addXDataApp" ); } - virtual void addXDataString( int, const std::string& ) override - { - ON_UNSUPPORTED( "addXDataString" ); - } - - virtual void addXDataReal( int, double ) override { ON_UNSUPPORTED( "addXDataReal" ); } - virtual void addXDataInt( int, int ) override { ON_UNSUPPORTED( "addXDataInt" ); } + // Eat these silently + virtual void addAttribute( const DL_AttributeData& ) override { } + virtual void addXRecord( const std::string& ) override { } + virtual void addXRecordString( int, const std::string& ) override { } + virtual void addXRecordReal( int, double ) override { } + virtual void addXRecordInt( int, int ) override { } + virtual void addXRecordBool( int, bool ) override { } + virtual void addXDataApp( const std::string& ) override { } + virtual void addXDataString( int, const std::string& ) override { } + virtual void addXDataReal( int, double ) override { } + virtual void addXDataInt( int, int ) override { } /** * Convert a native Unicode string into a DXF encoded string. diff --git a/common/import_gfx/graphics_importer.cpp b/common/import_gfx/graphics_importer.cpp index 5b2230796e..2ed2039815 100644 --- a/common/import_gfx/graphics_importer.cpp +++ b/common/import_gfx/graphics_importer.cpp @@ -27,6 +27,7 @@ #include #include "graphics_importer.h" #include "graphics_import_plugin.h" +#include GRAPHICS_IMPORTER::GRAPHICS_IMPORTER() { diff --git a/thirdparty/dxflib_qcad/dl_dxf.cpp b/thirdparty/dxflib_qcad/dl_dxf.cpp index 7efc5dd11d..fca089ef84 100644 --- a/thirdparty/dxflib_qcad/dl_dxf.cpp +++ b/thirdparty/dxflib_qcad/dl_dxf.cpp @@ -627,7 +627,7 @@ bool DL_Dxf::processDXFGroup( DL_CreationInterface* creationInterface, break; case DL_ENTITY_HATCH: - // addHatch(creationInterface); + addHatch(creationInterface); handleHatchData( creationInterface ); break;