From b411b240f2d287ccf7d91b1e1417391389f2970d Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 12 Nov 2014 17:59:12 +0100 Subject: [PATCH] bitmap2component: Add a layer selection to export a logo for Pcbnew from a Cirilo Bernardo's patch. Apply patch from Cirilo Bernardo with some minor changes: mainly allows also the solder mask layer and keep ref and value fields on the silk layer. --- bitmap2component/bitmap2cmp_gui.cpp | 37 ++++- bitmap2component/bitmap2cmp_gui_base.cpp | 28 ++-- bitmap2component/bitmap2cmp_gui_base.fbp | 164 ++++++++++++++++++----- bitmap2component/bitmap2cmp_gui_base.h | 8 +- bitmap2component/bitmap2component.cpp | 68 +++++++--- bitmap2component/bitmap2component.h | 9 ++ 6 files changed, 247 insertions(+), 67 deletions(-) diff --git a/bitmap2component/bitmap2cmp_gui.cpp b/bitmap2component/bitmap2cmp_gui.cpp index e0de783ad8..0a1a29c16c 100644 --- a/bitmap2component/bitmap2cmp_gui.cpp +++ b/bitmap2component/bitmap2cmp_gui.cpp @@ -50,13 +50,15 @@ #define KEYWORD_LAST_INPUT_FILE wxT( "Last_input" ) #define KEYWORD_LAST_OUTPUT_FILE wxT( "Last_output" ) #define KEYWORD_LAST_FORMAT wxT( "Last_format" ) +#define KEYWORD_LAST_MODLAYER wxT( "Last_modlayer" ) #define KEYWORD_BINARY_THRESHOLD wxT( "Threshold" ) #define KEYWORD_BW_NEGATIVE wxT( "Negative_choice" ) #define DEFAULT_DPI 300 // Default resolution in Bit per inches extern int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, - OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y ); + OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y, + BMP2CMP_MOD_LAYER aModLayer ); /** * Class BM2CMP_FRAME_BASE @@ -138,6 +140,7 @@ private: void NegateGreyscaleImage( ); void ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat ); void updateImageInfo(); + void OnFormatChange( wxCommandEvent& event ); }; @@ -169,6 +172,19 @@ BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) : m_radioBoxFormat->SetSelection( tmp ); } + if( tmp == PCBNEW_KICAD_MOD ) + m_radio_PCBLayer->Enable( true ); + else + m_radio_PCBLayer->Enable( false ); + + if( m_config->Read( KEYWORD_LAST_MODLAYER, &tmp ) ) + { + if( (unsigned) tmp > MOD_LYR_FINAL ) // Out of range + m_radio_PCBLayer->SetSelection( MOD_LYR_FSILKS ); + else + m_radio_PCBLayer->SetSelection( tmp ); + } + // Give an icon wxIcon icon; icon.CopyFromBitmap( KiBitmap( icon_bitmap2component_xpm ) ); @@ -204,6 +220,7 @@ BM2CMP_FRAME::~BM2CMP_FRAME() m_config->Write( KEYWORD_BINARY_THRESHOLD, m_sliderThreshold->GetValue() ); m_config->Write( KEYWORD_BW_NEGATIVE, m_rbOptions->GetSelection() ); m_config->Write( KEYWORD_LAST_FORMAT, m_radioBoxFormat->GetSelection() ); + m_config->Write( KEYWORD_LAST_MODLAYER, m_radio_PCBLayer->GetSelection() ); delete m_config; @@ -628,7 +645,14 @@ void BM2CMP_FRAME::ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat ) } } - bitmap2component( potrace_bitmap, aOutfile, aFormat, m_imageDPI.x, m_imageDPI.y ); + // choices of m_radio_PCBLayer are expected to be in same order as + // BMP2CMP_MOD_LAYER. See bitmap2component.h + BMP2CMP_MOD_LAYER modLayer = MOD_LYR_FSILKS; + + if( aFormat == PCBNEW_KICAD_MOD ) + modLayer = (BMP2CMP_MOD_LAYER) m_radio_PCBLayer->GetSelection(); + + bitmap2component( potrace_bitmap, aOutfile, aFormat, m_imageDPI.x, m_imageDPI.y, modLayer ); } @@ -711,3 +735,12 @@ bool IFACE::OnKifaceStart( PGM_BASE* aProgram, int aCtlBits ) return start_common( aCtlBits ); } +void BM2CMP_FRAME::OnFormatChange( wxCommandEvent& event ) +{ + if( m_radioBoxFormat->GetSelection() == PCBNEW_KICAD_MOD ) + m_radio_PCBLayer->Enable( true ); + else + m_radio_PCBLayer->Enable( false ); + + event.Skip(); +} diff --git a/bitmap2component/bitmap2cmp_gui_base.cpp b/bitmap2component/bitmap2cmp_gui_base.cpp index e309839e92..be48e480d3 100644 --- a/bitmap2component/bitmap2cmp_gui_base.cpp +++ b/bitmap2component/bitmap2cmp_gui_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Nov 6 2013) +// C++ code generated with wxFormBuilder (version Jun 5 2014) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! @@ -16,22 +16,22 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS wxBoxSizer* bMainSizer; bMainSizer = new wxBoxSizer( wxHORIZONTAL ); - m_notebook1 = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); - m_InitialPicturePanel = new wxScrolledWindow( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_Notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 ); + m_InitialPicturePanel = new wxScrolledWindow( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); m_InitialPicturePanel->SetScrollRate( 5, 5 ); m_InitialPicturePanel->SetMinSize( wxSize( 400,300 ) ); - m_notebook1->AddPage( m_InitialPicturePanel, _("Original Picture"), true ); - m_GreyscalePicturePanel = new wxScrolledWindow( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_Notebook->AddPage( m_InitialPicturePanel, _("Original Picture"), true ); + m_GreyscalePicturePanel = new wxScrolledWindow( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); m_GreyscalePicturePanel->SetScrollRate( 5, 5 ); m_GreyscalePicturePanel->SetMinSize( wxSize( 400,300 ) ); - m_notebook1->AddPage( m_GreyscalePicturePanel, _("Greyscale Picture"), false ); - m_BNPicturePanel = new wxScrolledWindow( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); + m_Notebook->AddPage( m_GreyscalePicturePanel, _("Greyscale Picture"), false ); + m_BNPicturePanel = new wxScrolledWindow( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL ); m_BNPicturePanel->SetScrollRate( 5, 5 ); - m_notebook1->AddPage( m_BNPicturePanel, _("Black&&White Picture"), false ); + m_Notebook->AddPage( m_BNPicturePanel, _("Black&&White Picture"), false ); - bMainSizer->Add( m_notebook1, 1, wxEXPAND, 5 ); + bMainSizer->Add( m_Notebook, 1, wxEXPAND, 5 ); m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL ); wxBoxSizer* brightSizer; @@ -147,6 +147,14 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS brightSizer->Add( m_sliderThreshold, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); + wxString m_radio_PCBLayerChoices[] = { _("Front silk screen"), _("Front solder mask"), _("User layer Eco1"), _("User Layer Eco2") }; + int m_radio_PCBLayerNChoices = sizeof( m_radio_PCBLayerChoices ) / sizeof( wxString ); + m_radio_PCBLayer = new wxRadioBox( m_panelRight, wxID_ANY, _("Board Layer for Outline:"), wxDefaultPosition, wxDefaultSize, m_radio_PCBLayerNChoices, m_radio_PCBLayerChoices, 1, wxRA_SPECIFY_COLS ); + m_radio_PCBLayer->SetSelection( 0 ); + m_radio_PCBLayer->SetToolTip( _("Choose the board layer to place the outline.\nThe 2 invisible fields reference and value and always placed on the silk screen layer.") ); + + brightSizer->Add( m_radio_PCBLayer, 0, wxALL|wxEXPAND, 5 ); + m_panelRight->SetSizer( brightSizer ); m_panelRight->Layout(); @@ -168,6 +176,7 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS m_DPIValueY->Connect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this ); m_buttonLoad->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnLoadFile ), NULL, this ); m_buttonExport->Connect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExport ), NULL, this ); + m_radioBoxFormat->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnFormatChange ), NULL, this ); m_rbOptions->Connect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnOptionsSelection ), NULL, this ); m_sliderThreshold->Connect( wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler( BM2CMP_FRAME_BASE::OnThresholdChange ), NULL, this ); } @@ -184,6 +193,7 @@ BM2CMP_FRAME_BASE::~BM2CMP_FRAME_BASE() m_DPIValueY->Disconnect( wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnResolutionChange ), NULL, this ); m_buttonLoad->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnLoadFile ), NULL, this ); m_buttonExport->Disconnect( wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnExport ), NULL, this ); + m_radioBoxFormat->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnFormatChange ), NULL, this ); m_rbOptions->Disconnect( wxEVT_COMMAND_RADIOBOX_SELECTED, wxCommandEventHandler( BM2CMP_FRAME_BASE::OnOptionsSelection ), NULL, this ); m_sliderThreshold->Disconnect( wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler( BM2CMP_FRAME_BASE::OnThresholdChange ), NULL, this ); diff --git a/bitmap2component/bitmap2cmp_gui_base.fbp b/bitmap2component/bitmap2cmp_gui_base.fbp index d0674b2210..4c0193b481 100644 --- a/bitmap2component/bitmap2cmp_gui_base.fbp +++ b/bitmap2component/bitmap2cmp_gui_base.fbp @@ -1,6 +1,6 @@ - + C++ @@ -44,7 +44,7 @@ BM2CMP_FRAME_BASE - 527,470 + 733,634 wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER KIWAY_PLAYER; kiway_player.h Bitmap to Component Converter @@ -133,7 +133,7 @@ 0 1 - m_notebook1 + m_Notebook 1 @@ -522,7 +522,7 @@ 5 wxEXPAND|wxBOTTOM 0 - + 4 wxBOTH 1,2 @@ -534,11 +534,11 @@ none 0 0 - + 5 wxALIGN_RIGHT|wxALL|wxALIGN_CENTER_VERTICAL 0 - + 1 1 1 @@ -617,11 +617,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -700,11 +700,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -783,11 +783,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxTOP|wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -866,11 +866,11 @@ - + 5 wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_RIGHT 0 - + 1 1 1 @@ -949,11 +949,11 @@ - + 5 wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -1032,11 +1032,11 @@ - + 5 wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -1115,11 +1115,11 @@ - + 5 wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -1198,11 +1198,11 @@ - + 5 wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL 0 - + 1 1 1 @@ -1281,11 +1281,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -1364,11 +1364,11 @@ - + 5 wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL 0 - + 1 1 1 @@ -1447,21 +1447,21 @@ - + 5 wxEXPAND 1 - + 0 protected 0 - + 5 wxALIGN_RIGHT|wxBOTTOM|wxRIGHT|wxLEFT|wxALIGN_CENTER_VERTICAL 0 - + 1 1 1 @@ -1540,11 +1540,11 @@ - + 5 wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -1631,11 +1631,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -1722,11 +1722,11 @@ - + 5 wxALIGN_CENTER_VERTICAL|wxBOTTOM|wxRIGHT 0 - + 1 1 1 @@ -2066,7 +2066,7 @@ - + OnFormatChange @@ -2356,6 +2356,96 @@ + + 5 + wxALL|wxEXPAND + 0 + + 1 + 1 + 1 + 1 + + + + + + + + 1 + 0 + "Front silk screen" "Front solder mask" "User layer Eco1" "User Layer Eco2" + 1 + + 1 + 0 + Dock + 0 + Left + 1 + + 1 + + 0 + 0 + wxID_ANY + Board Layer for Outline: + 1 + + 0 + + + 0 + + 1 + m_radio_PCBLayer + 1 + + + protected + 1 + + Resizable + 0 + 1 + + wxRA_SPECIFY_COLS + + 0 + Choose the board layer to place the outline. The 2 invisible fields reference and value and always placed on the silk screen layer. + + wxFILTER_NONE + wxDefaultValidator + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bitmap2component/bitmap2cmp_gui_base.h b/bitmap2component/bitmap2cmp_gui_base.h index 7d4270392e..0c7ddff659 100644 --- a/bitmap2component/bitmap2cmp_gui_base.h +++ b/bitmap2component/bitmap2cmp_gui_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Nov 6 2013) +// C++ code generated with wxFormBuilder (version Jun 5 2014) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! @@ -46,7 +46,7 @@ class BM2CMP_FRAME_BASE : public KIWAY_PLAYER private: protected: - wxNotebook* m_notebook1; + wxNotebook* m_Notebook; wxScrolledWindow* m_InitialPicturePanel; wxScrolledWindow* m_GreyscalePicturePanel; wxScrolledWindow* m_BNPicturePanel; @@ -72,6 +72,7 @@ class BM2CMP_FRAME_BASE : public KIWAY_PLAYER wxRadioBox* m_rbOptions; wxStaticText* m_ThresholdText; wxSlider* m_sliderThreshold; + wxRadioBox* m_radio_PCBLayer; wxStatusBar* m_statusBar; // Virtual event handlers, overide them in your derived class @@ -81,13 +82,14 @@ class BM2CMP_FRAME_BASE : public KIWAY_PLAYER virtual void UpdatePPITextValueY( wxMouseEvent& event ) { event.Skip(); } virtual void OnLoadFile( wxCommandEvent& event ) { event.Skip(); } virtual void OnExport( wxCommandEvent& event ) { event.Skip(); } + virtual void OnFormatChange( wxCommandEvent& event ) { event.Skip(); } virtual void OnOptionsSelection( wxCommandEvent& event ) { event.Skip(); } virtual void OnThresholdChange( wxScrollEvent& event ) { event.Skip(); } public: - BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Bitmap to Component Converter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 527,470 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL ); + BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Bitmap to Component Converter"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 733,634 ), long style = wxDEFAULT_FRAME_STYLE|wxRESIZE_BORDER|wxTAB_TRAVERSAL ); ~BM2CMP_FRAME_BASE(); diff --git a/bitmap2component/bitmap2component.cpp b/bitmap2component/bitmap2component.cpp index ddf83fc268..6e3427ebff 100644 --- a/bitmap2component/bitmap2component.cpp +++ b/bitmap2component/bitmap2component.cpp @@ -86,7 +86,7 @@ public: * Creates the output file specified by m_Outfile, * depending on file format given by m_Format */ - void CreateOutputFile(); + void CreateOutputFile( BMP2CMP_MOD_LAYER aModLayer = (BMP2CMP_MOD_LAYER) 0 ); private: @@ -94,7 +94,7 @@ private: * Function OuputFileHeader * write to file the header depending on file format */ - void OuputFileHeader(); + void OuputFileHeader( const char * aBrdLayerName ); /** * Function OuputFileEnd @@ -103,12 +103,18 @@ private: void OuputFileEnd(); + /** + * @return the board layer name depending on the board layer selected + * @param aChoice = the choice (MOD_LYR_FSILKS to MOD_LYR_FINAL) + */ + const char * getBrdLayerName( BMP2CMP_MOD_LAYER aChoice ); + /** * Function OuputOnePolygon * write one polygon to output file. * Polygon coordinates are expected scaled by the polugon extraction function */ - void OuputOnePolygon( KPolygon & aPolygon ); + void OuputOnePolygon( KPolygon & aPolygon, const char * aBrdLayerName ); }; @@ -133,7 +139,8 @@ BITMAPCONV_INFO::BITMAPCONV_INFO() int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, - OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y ) + OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y, + BMP2CMP_MOD_LAYER aModLayer ) { potrace_param_t* param; potrace_state_t* st; @@ -189,7 +196,7 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, info.m_Format = PCBNEW_KICAD_MOD; info.m_ScaleX = 1e6 * 25.4 / aDpi_X; // the conversion scale from PPI to UI info.m_ScaleY = 1e6 * 25.4 / aDpi_Y; // Y axis is top to bottom in modedit - info.CreateOutputFile(); + info.CreateOutputFile( aModLayer ); break; default: @@ -204,8 +211,33 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, return 0; } +const char* BITMAPCONV_INFO::getBrdLayerName( BMP2CMP_MOD_LAYER aChoice ) +{ + const char * layerName = "F.SilkS"; -void BITMAPCONV_INFO::OuputFileHeader() + switch( aChoice ) + { + case MOD_LYR_FSOLDERMASK: + layerName = "F.Mask"; + break; + + case MOD_LYR_ECO1: + layerName = "Eco1.User"; + break; + + case MOD_LYR_ECO2: + layerName = "Eco2.User"; + break; + + case MOD_LYR_FSILKS: + default: // case MOD_LYR_FSILKS only unless there is a bug + break; + } + + return layerName; +} + +void BITMAPCONV_INFO::OuputFileHeader( const char * aBrdLayerName ) { int Ypos = (int) ( m_PixmapHeight / 2 * m_ScaleY ); int fieldSize; // fields text size = 60 mils @@ -225,11 +257,10 @@ void BITMAPCONV_INFO::OuputFileHeader() // fields text thickness = 1.5 / 5 = 0.3mm fprintf( m_Outfile, "(module %s (layer F.Cu)\n (at 0 0)\n", m_CmpName ); - fprintf( m_Outfile, " (fp_text reference \"G***\" (at 0 0) (layer F.SilkS) hide\n" - " (effects (font (thickness 0.3)))\n )\n" ); - fprintf( m_Outfile, " (fp_text value \"%s\" (at 0.75 0) (layer F.SilkS) hide\n" - " (effects (font (thickness 0.3)))\n )\n", - m_CmpName ); + fprintf( m_Outfile, " (fp_text reference \"G***\" (at 0 0) (layer %s) hide\n" + " (effects (font (thickness 0.3)))\n )\n", aBrdLayerName ); + fprintf( m_Outfile, " (fp_text value \"%s\" (at 0.75 0) (layer %s) hide\n" + " (effects (font (thickness 0.3)))\n )\n", m_CmpName, aBrdLayerName ); break; case KICAD_LOGO: @@ -283,7 +314,7 @@ void BITMAPCONV_INFO::OuputFileEnd() * write one polygon to output file. * Polygon coordinates are expected scaled by the polygon extraction function */ -void BITMAPCONV_INFO::OuputOnePolygon( KPolygon & aPolygon ) +void BITMAPCONV_INFO::OuputOnePolygon( KPolygon & aPolygon, const char * aBrdLayerName ) { unsigned ii, jj; KPolyPoint currpoint; @@ -338,7 +369,9 @@ void BITMAPCONV_INFO::OuputOnePolygon( KPolygon & aPolygon ) // Close polygon fprintf( m_Outfile, " (xy %f %f) )", (startpoint.x() - offsetX) / 1e6, (startpoint.y() - offsetY) / 1e6 ); - fprintf( m_Outfile, "(layer F.SilkS) (width %f)\n )\n", width ); + + fprintf( m_Outfile, "(layer %s) (width %f)\n )\n", aBrdLayerName, width ); + } break; @@ -383,7 +416,7 @@ void BITMAPCONV_INFO::OuputOnePolygon( KPolygon & aPolygon ) } -void BITMAPCONV_INFO::CreateOutputFile() +void BITMAPCONV_INFO::CreateOutputFile( BMP2CMP_MOD_LAYER aModLayer ) { KPolyPoint currpoint; @@ -400,7 +433,10 @@ void BITMAPCONV_INFO::CreateOutputFile() setlocale( LC_NUMERIC, "C" ); // Switch the locale to standard C - OuputFileHeader(); + // The layer name has meaning only for .kicad_mod files. + // For these files the header creates 2 invisible texts: value and ref + // (needed but not usefull) on silk screen layer + OuputFileHeader( getBrdLayerName( MOD_LYR_FSILKS ) ); bool main_outline = true; @@ -477,7 +513,7 @@ void BITMAPCONV_INFO::CreateOutputFile() for( unsigned ii = 0; ii < polyset_areas.size(); ii++ ) { KPolygon& poly = polyset_areas[ii]; - OuputOnePolygon(poly ); + OuputOnePolygon(poly, getBrdLayerName( aModLayer ) ); } polyset_areas.clear(); diff --git a/bitmap2component/bitmap2component.h b/bitmap2component/bitmap2component.h index 2f3f9f88df..602a713891 100644 --- a/bitmap2component/bitmap2component.h +++ b/bitmap2component/bitmap2component.h @@ -35,4 +35,13 @@ enum OUTPUT_FMT_ID FINAL_FMT = KICAD_LOGO }; +enum BMP2CMP_MOD_LAYER +{ + MOD_LYR_FSILKS = 0, + MOD_LYR_FSOLDERMASK, + MOD_LYR_ECO1, + MOD_LYR_ECO2, + MOD_LYR_FINAL = MOD_LYR_ECO2 +}; + #endif // BITMAP2COMPONENT_H