Graphics import: support loading from memory buffer.
This commit is contained in:
parent
26a52ecfe9
commit
4e43d4e0db
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2019 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 2019 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2019-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -137,6 +137,26 @@ bool DXF_IMPORT_PLUGIN::Load( const wxString& aFileName )
|
|||
}
|
||||
|
||||
|
||||
bool DXF_IMPORT_PLUGIN::LoadFromMemory( const wxMemoryBuffer& aMemBuffer )
|
||||
{
|
||||
try
|
||||
{
|
||||
return ImportDxfFile( aMemBuffer );
|
||||
}
|
||||
catch( const std::bad_alloc& )
|
||||
{
|
||||
m_layers.clear();
|
||||
m_blocks.clear();
|
||||
m_styles.clear();
|
||||
|
||||
m_internalImporter.ClearShapes();
|
||||
|
||||
reportMsg( _( "Memory was exhausted trying to load the DXF, it may be too large." ) );
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool DXF_IMPORT_PLUGIN::Import()
|
||||
{
|
||||
wxCHECK( m_importer, false );
|
||||
|
@ -203,6 +223,20 @@ bool DXF_IMPORT_PLUGIN::ImportDxfFile( const wxString& aFile )
|
|||
}
|
||||
|
||||
|
||||
bool DXF_IMPORT_PLUGIN::ImportDxfFile( const wxMemoryBuffer& aMemBuffer )
|
||||
{
|
||||
DL_Dxf dxf_reader;
|
||||
|
||||
std::string str( reinterpret_cast<char*>( aMemBuffer.GetData() ), aMemBuffer.GetDataLen() );
|
||||
|
||||
// Note the dxf reader takes care of switching to "C" locale before reading the file
|
||||
// and will close the file after reading
|
||||
bool success = dxf_reader.in( str, this );
|
||||
|
||||
return success;
|
||||
}
|
||||
|
||||
|
||||
void DXF_IMPORT_PLUGIN::reportMsg( const wxString& aMessage )
|
||||
{
|
||||
// Add message to keep trace of not handled dxf entities
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2019 Jean-Pierre Charras, jp.charras at wanadoo.fr
|
||||
* Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -231,6 +231,7 @@ public:
|
|||
}
|
||||
|
||||
bool Load( const wxString& aFileName ) override;
|
||||
bool LoadFromMemory( const wxMemoryBuffer& aMemBuffer ) override;
|
||||
bool Import() override;
|
||||
|
||||
double GetImageWidth() const override;
|
||||
|
@ -307,6 +308,13 @@ public:
|
|||
*/
|
||||
bool ImportDxfFile( const wxString& aFile );
|
||||
|
||||
/**
|
||||
* Implementation of the method used for communicate with this filter.
|
||||
*
|
||||
* @param aMemBuffer is the memory bufferr.
|
||||
*/
|
||||
bool ImportDxfFile( const wxMemoryBuffer& aMemBuffer );
|
||||
|
||||
/**
|
||||
* @return the list of messages in one string. Each message ends by '\n'
|
||||
*/
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 CERN
|
||||
* Copyright (C) 2019-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2019-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* @author Maciej Suminski <maciej.suminski@cern.ch>
|
||||
*
|
||||
|
@ -91,6 +91,13 @@ public:
|
|||
*/
|
||||
virtual bool Load( const wxString& aFileName ) = 0;
|
||||
|
||||
/**
|
||||
* Set memory buffer with content for import.
|
||||
*
|
||||
* It is necessary to have the GRAPHICS_IMPORTER object set before.
|
||||
*/
|
||||
virtual bool LoadFromMemory( const wxMemoryBuffer& aMemBuffer ) = 0;
|
||||
|
||||
/**
|
||||
* Return image height from original imported file.
|
||||
*
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
* This program source code file is part of KICAD, a free EDA CAD application.
|
||||
*
|
||||
* Copyright (C) 2016 CERN
|
||||
* Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 1992-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* @author Janito V. Ferreira Filho
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
|
@ -25,6 +25,7 @@
|
|||
|
||||
#include "svg_import_plugin.h"
|
||||
|
||||
#include <nanosvg.h>
|
||||
#include <algorithm>
|
||||
#include <cmath>
|
||||
|
||||
|
@ -33,6 +34,8 @@
|
|||
#include <eda_item.h>
|
||||
#include "graphics_importer.h"
|
||||
|
||||
static const int SVG_DPI = 96;
|
||||
|
||||
static VECTOR2D calculateBezierBoundingBoxExtremity( const float* aCurvePoints,
|
||||
std::function< const float&( const float&, const float& ) > comparator );
|
||||
static float calculateBezierSegmentationThreshold( const float* aCurvePoints );
|
||||
|
@ -64,13 +67,30 @@ bool SVG_IMPORT_PLUGIN::Load( const wxString& aFileName )
|
|||
return false;
|
||||
|
||||
// nsvgParseFromFile will close the file after reading
|
||||
m_parsedImage = nsvgParseFromFile( fp, "mm", 96 );
|
||||
m_parsedImage = nsvgParseFromFile( fp, "mm", SVG_DPI );
|
||||
|
||||
wxCHECK( m_parsedImage, false );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SVG_IMPORT_PLUGIN::LoadFromMemory( const wxMemoryBuffer& aMemBuffer )
|
||||
{
|
||||
wxCHECK( m_importer, false );
|
||||
|
||||
std::string str( reinterpret_cast<char*>( aMemBuffer.GetData() ), aMemBuffer.GetDataLen() );
|
||||
wxCHECK( str.data()[aMemBuffer.GetDataLen()] == '\0', false );
|
||||
|
||||
// nsvgParse will modify the string data
|
||||
m_parsedImage = nsvgParse( str.data(), "mm", SVG_DPI );
|
||||
|
||||
wxCHECK( m_parsedImage, false );
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool SVG_IMPORT_PLUGIN::Import()
|
||||
{
|
||||
auto alpha =
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Copyright (C) 2016 CERN
|
||||
* @author Janito V. Ferreira Filho <janito.vff@gmail.com>
|
||||
* Copyright (C) 2018-2019 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
* Copyright (C) 2018-2023 KiCad Developers, see AUTHORS.txt for contributors.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -26,8 +26,6 @@
|
|||
#ifndef SVG_IMPORT_PLUGIN_H
|
||||
#define SVG_IMPORT_PLUGIN_H
|
||||
|
||||
#include "nanosvg.h"
|
||||
|
||||
#include "graphics_import_plugin.h"
|
||||
#include "graphics_importer_buffer.h"
|
||||
#include <math/vector2d.h>
|
||||
|
@ -66,6 +64,7 @@ public:
|
|||
|
||||
bool Import() override;
|
||||
bool Load( const wxString& aFileName ) override;
|
||||
bool LoadFromMemory( const wxMemoryBuffer& aMemBuffer ) override;
|
||||
|
||||
virtual double GetImageHeight() const override;
|
||||
virtual double GetImageWidth() const override;
|
||||
|
|
Loading…
Reference in New Issue