EasyEDA Pro: import Colorful Image as Reference Image.
This commit is contained in:
parent
d45911f54b
commit
7b935f7673
|
@ -57,6 +57,8 @@
|
||||||
#include <convert_basic_shapes_to_polygon.h>
|
#include <convert_basic_shapes_to_polygon.h>
|
||||||
#include <project.h>
|
#include <project.h>
|
||||||
#include <fix_board_shape.h>
|
#include <fix_board_shape.h>
|
||||||
|
#include <pcb_reference_image.h>
|
||||||
|
#include <core/mirror.h>
|
||||||
|
|
||||||
|
|
||||||
static const wxString QUERY_MODEL_UUID_KEY = wxS( "JLC_3DModel_Q" );
|
static const wxString QUERY_MODEL_UUID_KEY = wxS( "JLC_3DModel_Q" );
|
||||||
|
@ -848,7 +850,7 @@ FOOTPRINT* PCB_IO_EASYEDAPRO_PARSER::ParseFootprint( const nlohmann::json&
|
||||||
else if( type == wxS( "REGION" ) )
|
else if( type == wxS( "REGION" ) )
|
||||||
{
|
{
|
||||||
wxString uuid = line.at( 1 );
|
wxString uuid = line.at( 1 );
|
||||||
|
|
||||||
// if( line.at( 2 ).is_number() )
|
// if( line.at( 2 ).is_number() )
|
||||||
// int unk = line.at( 2 ).get<int>();
|
// int unk = line.at( 2 ).get<int>();
|
||||||
// else if( line.at( 2 ).is_string() )
|
// else if( line.at( 2 ).is_string() )
|
||||||
|
@ -1389,7 +1391,7 @@ void PCB_IO_EASYEDAPRO_PARSER::ParseBoard(
|
||||||
else if( type == wxS( "IMAGE" ) )
|
else if( type == wxS( "IMAGE" ) )
|
||||||
{
|
{
|
||||||
wxString uuid = line.at( 1 );
|
wxString uuid = line.at( 1 );
|
||||||
|
|
||||||
// if( line.at( 2 ).is_number() )
|
// if( line.at( 2 ).is_number() )
|
||||||
// int unk = line.at( 2 ).get<int>();
|
// int unk = line.at( 2 ).get<int>();
|
||||||
// else if( line.at( 2 ).is_string() )
|
// else if( line.at( 2 ).is_string() )
|
||||||
|
@ -1467,10 +1469,94 @@ void PCB_IO_EASYEDAPRO_PARSER::ParseBoard(
|
||||||
if( group )
|
if( group )
|
||||||
aBoard->Add( group.release(), ADD_MODE::APPEND );
|
aBoard->Add( group.release(), ADD_MODE::APPEND );
|
||||||
}
|
}
|
||||||
|
else if( type == wxS( "OBJ" ) )
|
||||||
|
{
|
||||||
|
VECTOR2D start, size;
|
||||||
|
wxString mimeType, base64Data;
|
||||||
|
double angle = 0;
|
||||||
|
int flipped = 0;
|
||||||
|
|
||||||
|
if( !line.at( 3 ).is_number() )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
int layer = line.at( 3 ).get<int>();
|
||||||
|
PCB_LAYER_ID klayer = LayerToKi( layer );
|
||||||
|
|
||||||
|
start = VECTOR2D( line.at( 5 ), line.at( 6 ) );
|
||||||
|
size = VECTOR2D( line.at( 7 ), line.at( 8 ) );
|
||||||
|
angle = line.at( 9 );
|
||||||
|
flipped = line.at( 10 );
|
||||||
|
|
||||||
|
wxString imageUrl = line.at( 11 );
|
||||||
|
|
||||||
|
if( imageUrl.BeforeFirst( ':' ) == wxS( "blob" ) )
|
||||||
|
{
|
||||||
|
wxString objectId = imageUrl.AfterLast( ':' );
|
||||||
|
|
||||||
|
if( auto blob = get_opt( aBlobMap, objectId ) )
|
||||||
|
{
|
||||||
|
wxString blobUrl = blob->url;
|
||||||
|
|
||||||
|
if( blobUrl.BeforeFirst( ':' ) == wxS( "data" ) )
|
||||||
|
{
|
||||||
|
wxArrayString paramsArr =
|
||||||
|
wxSplit( blobUrl.AfterFirst( ':' ).BeforeFirst( ',' ), ';', '\0' );
|
||||||
|
|
||||||
|
base64Data = blobUrl.AfterFirst( ',' );
|
||||||
|
|
||||||
|
if( paramsArr.size() > 0 )
|
||||||
|
mimeType = paramsArr[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VECTOR2D kstart = ScalePos( start );
|
||||||
|
VECTOR2D ksize = ScaleSize( size );
|
||||||
|
|
||||||
|
if( mimeType.empty() || base64Data.empty() )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
wxMemoryBuffer buf = wxBase64Decode( base64Data );
|
||||||
|
|
||||||
|
if( mimeType == wxS( "image/svg+xml" ) )
|
||||||
|
{
|
||||||
|
// Not yet supported by EasyEDA
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
VECTOR2D kcenter = kstart + ksize / 2;
|
||||||
|
|
||||||
|
std::unique_ptr<PCB_REFERENCE_IMAGE> bitmap =
|
||||||
|
std::make_unique<PCB_REFERENCE_IMAGE>( aBoard, kcenter, klayer );
|
||||||
|
|
||||||
|
wxImage::SetDefaultLoadFlags( wxImage::GetDefaultLoadFlags()
|
||||||
|
& ~wxImage::Load_Verbose );
|
||||||
|
|
||||||
|
if( bitmap->ReadImageFile( buf ) )
|
||||||
|
{
|
||||||
|
double scaleFactor = ScaleSize( size.x ) / bitmap->GetSize().x;
|
||||||
|
bitmap->SetImageScale( scaleFactor );
|
||||||
|
|
||||||
|
// TODO: support non-90-deg angles
|
||||||
|
bitmap->Rotate( kstart, EDA_ANGLE( angle, DEGREES_T ) );
|
||||||
|
|
||||||
|
if( flipped )
|
||||||
|
{
|
||||||
|
int x = bitmap->GetPosition().x;
|
||||||
|
MIRROR( x, KiROUND( kstart.x ) );
|
||||||
|
bitmap->SetX( x );
|
||||||
|
|
||||||
|
bitmap->MutableImage()->Mirror( false );
|
||||||
|
}
|
||||||
|
|
||||||
|
aBoard->Add( bitmap.release(), ADD_MODE::APPEND );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
else if( type == wxS( "STRING" ) )
|
else if( type == wxS( "STRING" ) )
|
||||||
{
|
{
|
||||||
wxString uuid = line.at( 1 );
|
wxString uuid = line.at( 1 );
|
||||||
|
|
||||||
// if( line.at( 2 ).is_number() )
|
// if( line.at( 2 ).is_number() )
|
||||||
// int unk = line.at( 2 ).get<int>();
|
// int unk = line.at( 2 ).get<int>();
|
||||||
// else if( line.at( 2 ).is_string() )
|
// else if( line.at( 2 ).is_string() )
|
||||||
|
|
Loading…
Reference in New Issue