Browse Source

Fabmaster: handle FIG_RECTANGLE

pcb_db
John Beard 12 months ago
parent
commit
c22798ec72
  1. 45
      pcbnew/pcb_io/fabmaster/import_fabmaster.cpp
  2. 1
      pcbnew/pcb_io/fabmaster/import_fabmaster.h

45
pcbnew/pcb_io/fabmaster/import_fabmaster.cpp

@ -1200,6 +1200,11 @@ FABMASTER::GRAPHIC_ARC* FABMASTER::processCircle( const GRAPHIC_DATA& aData, dou
FABMASTER::GRAPHIC_RECTANGLE* FABMASTER::processRectangle( const FABMASTER::GRAPHIC_DATA& aData,
double aScale )
{
/*
* Examples:
* S!ROUTE KEEPOUT!BOTTOM!RECTANGLE!259!10076 1!-90.00!-1000.00!-60.00!-990.00!1!!!!!!
*/
GRAPHIC_RECTANGLE* new_rect = new GRAPHIC_RECTANGLE;
new_rect->shape = GR_SHAPE_RECTANGLE;
@ -1214,6 +1219,34 @@ FABMASTER::GRAPHIC_RECTANGLE* FABMASTER::processRectangle( const FABMASTER::GRAP
}
FABMASTER::GRAPHIC_RECTANGLE* FABMASTER::processFigRectangle( const FABMASTER::GRAPHIC_DATA& aData,
double aScale )
{
/*
* Examples:
* S!MANUFACTURING!NCLEGEND-1-10!FIG_RECTANGLE!6!8318 1!4891.50!1201.00!35.43!26.57!0!!!!!!
*/
auto new_rect = std::make_unique<GRAPHIC_RECTANGLE>();
const int center_x = KiROUND( readDouble( aData.graphic_data1 ) * aScale );
const int center_y = -KiROUND( readDouble( aData.graphic_data2 ) * aScale );
const int size_x = KiROUND( readDouble( aData.graphic_data3 ) * aScale );
const int size_y = KiROUND( readDouble( aData.graphic_data4 ) * aScale );
new_rect->shape = GR_SHAPE_RECTANGLE;
new_rect->start_x = center_x - size_x / 2;
new_rect->start_y = center_y + size_y / 2;
new_rect->end_x = center_x + size_x / 2;
new_rect->end_y = center_y - size_y / 2;
new_rect->fill = aData.graphic_data5 == "1";
new_rect->width = 0;
return new_rect.release();
}
FABMASTER::GRAPHIC_TEXT* FABMASTER::processText( const FABMASTER::GRAPHIC_DATA& aData,
double aScale )
{
@ -1272,6 +1305,8 @@ FABMASTER::GRAPHIC_ITEM* FABMASTER::processGraphic( const GRAPHIC_DATA& aData, d
retval = processCircle( aData, aScale );
else if( aData.graphic_dataname == "RECTANGLE" )
retval = processRectangle( aData, aScale );
else if( aData.graphic_dataname == "FIG_RECTANGLE" )
retval = processFigRectangle( aData, aScale );
else if( aData.graphic_dataname == "TEXT" )
retval = processText( aData, aScale );
@ -2854,6 +2889,16 @@ bool FABMASTER::loadPolygon( BOARD* aBoard, const std::unique_ptr<FABMASTER::TRA
new_shape->SetCenter( VECTOR2I( src.center_x, src.center_y ) );
new_shape->SetRadius( src.radius );
}
else if( seg->shape == GR_SHAPE_RECTANGLE )
{
const GRAPHIC_RECTANGLE& src = static_cast<const GRAPHIC_RECTANGLE&>( *seg );
new_shape->SetShape( SHAPE_T::RECTANGLE );
new_shape->SetStart( VECTOR2I( src.start_x, src.start_y ) );
new_shape->SetEnd( VECTOR2I( src.end_x, src.end_y ) );
new_shape->SetFilled( src.fill );
}
else
{
wxLogError( _( "Unhandled shape type %d in polygon on layer %s, tag %d" ),

1
pcbnew/pcb_io/fabmaster/import_fabmaster.h

@ -547,6 +547,7 @@ private:
GRAPHIC_LINE* processLine( const GRAPHIC_DATA& aData, double aScale );
GRAPHIC_TEXT* processText( const GRAPHIC_DATA& aData, double aScale );
GRAPHIC_RECTANGLE* processRectangle( const GRAPHIC_DATA& aData, double aScale );
GRAPHIC_RECTANGLE* processFigRectangle( const GRAPHIC_DATA& aData, double aScale );
PCB_LAYER_ID getLayer( const std::string& aLayerName );
bool assignLayers();

Loading…
Cancel
Save