Commit b411b240 authored by unknown's avatar unknown Committed by jean-pierre charras
Browse files

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.
parent 9524ad1f
Loading
Loading
Loading
Loading
+35 −2
Original line number Original line Diff line number Diff line
@@ -50,13 +50,15 @@
#define KEYWORD_LAST_INPUT_FILE     wxT( "Last_input" )
#define KEYWORD_LAST_INPUT_FILE     wxT( "Last_input" )
#define KEYWORD_LAST_OUTPUT_FILE    wxT( "Last_output" )
#define KEYWORD_LAST_OUTPUT_FILE    wxT( "Last_output" )
#define KEYWORD_LAST_FORMAT         wxT( "Last_format" )
#define KEYWORD_LAST_FORMAT         wxT( "Last_format" )
#define KEYWORD_LAST_MODLAYER       wxT( "Last_modlayer" )
#define KEYWORD_BINARY_THRESHOLD    wxT( "Threshold" )
#define KEYWORD_BINARY_THRESHOLD    wxT( "Threshold" )
#define KEYWORD_BW_NEGATIVE         wxT( "Negative_choice" )
#define KEYWORD_BW_NEGATIVE         wxT( "Negative_choice" )


#define DEFAULT_DPI 300     // Default resolution in Bit per inches
#define DEFAULT_DPI 300     // Default resolution in Bit per inches


extern int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
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
 * Class BM2CMP_FRAME_BASE
@@ -138,6 +140,7 @@ private:
    void NegateGreyscaleImage( );
    void NegateGreyscaleImage( );
    void ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat );
    void ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat );
    void updateImageInfo();
    void updateImageInfo();
    void OnFormatChange( wxCommandEvent& event );
};
};




@@ -169,6 +172,19 @@ BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) :
        m_radioBoxFormat->SetSelection( tmp );
        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
    // Give an icon
    wxIcon icon;
    wxIcon icon;
    icon.CopyFromBitmap( KiBitmap( icon_bitmap2component_xpm ) );
    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_BINARY_THRESHOLD, m_sliderThreshold->GetValue() );
    m_config->Write( KEYWORD_BW_NEGATIVE, m_rbOptions->GetSelection() );
    m_config->Write( KEYWORD_BW_NEGATIVE, m_rbOptions->GetSelection() );
    m_config->Write( KEYWORD_LAST_FORMAT,  m_radioBoxFormat->GetSelection() );
    m_config->Write( KEYWORD_LAST_FORMAT,  m_radioBoxFormat->GetSelection() );
    m_config->Write( KEYWORD_LAST_MODLAYER,  m_radio_PCBLayer->GetSelection() );


    delete m_config;
    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 );
    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();
}
+19 −9
Original line number Original line Diff line number Diff line
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Nov  6 2013)
// C++ code generated with wxFormBuilder (version Jun  5 2014)
// http://www.wxformbuilder.org/
// http://www.wxformbuilder.org/
//
//
// PLEASE DO "NOT" EDIT THIS FILE!
// PLEASE DO "NOT" EDIT THIS FILE!
@@ -16,22 +16,22 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS
	wxBoxSizer* bMainSizer;
	wxBoxSizer* bMainSizer;
	bMainSizer = new wxBoxSizer( wxHORIZONTAL );
	bMainSizer = new wxBoxSizer( wxHORIZONTAL );
	
	
	m_notebook1 = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
	m_Notebook = new wxNotebook( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, 0 );
	m_InitialPicturePanel = new wxScrolledWindow( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
	m_InitialPicturePanel = new wxScrolledWindow( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
	m_InitialPicturePanel->SetScrollRate( 5, 5 );
	m_InitialPicturePanel->SetScrollRate( 5, 5 );
	m_InitialPicturePanel->SetMinSize( wxSize( 400,300 ) );
	m_InitialPicturePanel->SetMinSize( wxSize( 400,300 ) );
	
	
	m_notebook1->AddPage( m_InitialPicturePanel, _("Original Picture"), true );
	m_Notebook->AddPage( m_InitialPicturePanel, _("Original Picture"), true );
	m_GreyscalePicturePanel = new wxScrolledWindow( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
	m_GreyscalePicturePanel = new wxScrolledWindow( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
	m_GreyscalePicturePanel->SetScrollRate( 5, 5 );
	m_GreyscalePicturePanel->SetScrollRate( 5, 5 );
	m_GreyscalePicturePanel->SetMinSize( wxSize( 400,300 ) );
	m_GreyscalePicturePanel->SetMinSize( wxSize( 400,300 ) );
	
	
	m_notebook1->AddPage( m_GreyscalePicturePanel, _("Greyscale Picture"), false );
	m_Notebook->AddPage( m_GreyscalePicturePanel, _("Greyscale Picture"), false );
	m_BNPicturePanel = new wxScrolledWindow( m_notebook1, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
	m_BNPicturePanel = new wxScrolledWindow( m_Notebook, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxHSCROLL|wxVSCROLL );
	m_BNPicturePanel->SetScrollRate( 5, 5 );
	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 );
	m_panelRight = new wxPanel( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxTAB_TRAVERSAL );
	wxBoxSizer* brightSizer;
	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 );
	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->SetSizer( brightSizer );
	m_panelRight->Layout();
	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_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_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_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_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 );
	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_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_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_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_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 );
	m_sliderThreshold->Disconnect( wxEVT_SCROLL_THUMBTRACK, wxScrollEventHandler( BM2CMP_FRAME_BASE::OnThresholdChange ), NULL, this );
	
	
+127 −37

File changed.

Preview size limit exceeded, changes collapsed.

+5 −3
Original line number Original line Diff line number Diff line
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
// C++ code generated with wxFormBuilder (version Nov  6 2013)
// C++ code generated with wxFormBuilder (version Jun  5 2014)
// http://www.wxformbuilder.org/
// http://www.wxformbuilder.org/
//
//
// PLEASE DO "NOT" EDIT THIS FILE!
// PLEASE DO "NOT" EDIT THIS FILE!
@@ -46,7 +46,7 @@ class BM2CMP_FRAME_BASE : public KIWAY_PLAYER
	private:
	private:
	
	
	protected:
	protected:
		wxNotebook* m_notebook1;
		wxNotebook* m_Notebook;
		wxScrolledWindow* m_InitialPicturePanel;
		wxScrolledWindow* m_InitialPicturePanel;
		wxScrolledWindow* m_GreyscalePicturePanel;
		wxScrolledWindow* m_GreyscalePicturePanel;
		wxScrolledWindow* m_BNPicturePanel;
		wxScrolledWindow* m_BNPicturePanel;
@@ -72,6 +72,7 @@ class BM2CMP_FRAME_BASE : public KIWAY_PLAYER
		wxRadioBox* m_rbOptions;
		wxRadioBox* m_rbOptions;
		wxStaticText* m_ThresholdText;
		wxStaticText* m_ThresholdText;
		wxSlider* m_sliderThreshold;
		wxSlider* m_sliderThreshold;
		wxRadioBox* m_radio_PCBLayer;
		wxStatusBar* m_statusBar;
		wxStatusBar* m_statusBar;
		
		
		// Virtual event handlers, overide them in your derived class
		// 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 UpdatePPITextValueY( wxMouseEvent& event ) { event.Skip(); }
		virtual void OnLoadFile( wxCommandEvent& event ) { event.Skip(); }
		virtual void OnLoadFile( wxCommandEvent& event ) { event.Skip(); }
		virtual void OnExport( 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 OnOptionsSelection( wxCommandEvent& event ) { event.Skip(); }
		virtual void OnThresholdChange( wxScrollEvent& event ) { event.Skip(); }
		virtual void OnThresholdChange( wxScrollEvent& event ) { event.Skip(); }
		
		
	
	
	public:
	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();
		~BM2CMP_FRAME_BASE();
	
	
+52 −16
Original line number Original line Diff line number Diff line
@@ -86,7 +86,7 @@ public:
     * Creates the output file specified by m_Outfile,
     * Creates the output file specified by m_Outfile,
     * depending on file format given by m_Format
     * depending on file format given by m_Format
     */
     */
    void CreateOutputFile();
    void CreateOutputFile( BMP2CMP_MOD_LAYER aModLayer = (BMP2CMP_MOD_LAYER) 0 );




private:
private:
@@ -94,7 +94,7 @@ private:
     * Function OuputFileHeader
     * Function OuputFileHeader
     * write to file the header depending on file format
     * write to file the header depending on file format
     */
     */
    void OuputFileHeader();
    void OuputFileHeader(  const char * aBrdLayerName );


    /**
    /**
     * Function OuputFileEnd
     * Function OuputFileEnd
@@ -103,12 +103,18 @@ private:
    void OuputFileEnd();
    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
     * Function OuputOnePolygon
     * write one polygon to output file.
     * write one polygon to output file.
     * Polygon coordinates are expected scaled by the polugon extraction function
     * 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,
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_param_t* param;
    potrace_state_t* st;
    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_Format = PCBNEW_KICAD_MOD;
        info.m_ScaleX = 1e6 * 25.4 / aDpi_X;       // the conversion scale from PPI to UI
        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.m_ScaleY = 1e6 * 25.4 / aDpi_Y;       // Y axis is top to bottom in modedit
        info.CreateOutputFile();
        info.CreateOutputFile( aModLayer );
        break;
        break;


    default:
    default:
@@ -204,8 +211,33 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile,
    return 0;
    return 0;
}
}


const char* BITMAPCONV_INFO::getBrdLayerName( BMP2CMP_MOD_LAYER aChoice )
{
    const char * layerName = "F.SilkS";

    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()
void BITMAPCONV_INFO::OuputFileHeader(  const char * aBrdLayerName )
{
{
    int Ypos = (int) ( m_PixmapHeight / 2 * m_ScaleY );
    int Ypos = (int) ( m_PixmapHeight / 2 * m_ScaleY );
    int fieldSize;             // fields text size = 60 mils
    int fieldSize;             // fields text size = 60 mils
@@ -225,11 +257,10 @@ void BITMAPCONV_INFO::OuputFileHeader()
        // fields text thickness = 1.5 / 5 = 0.3mm
        // fields text thickness = 1.5 / 5 = 0.3mm
        fprintf( m_Outfile, "(module %s (layer F.Cu)\n  (at 0 0)\n",
        fprintf( m_Outfile, "(module %s (layer F.Cu)\n  (at 0 0)\n",
                 m_CmpName );
                 m_CmpName );
        fprintf( m_Outfile, " (fp_text reference \"G***\" (at 0 0) (layer F.SilkS) hide\n"
        fprintf( m_Outfile, " (fp_text reference \"G***\" (at 0 0) (layer %s) hide\n"
                            "  (effects (font (thickness 0.3)))\n  )\n" );
            "  (effects (font (thickness 0.3)))\n  )\n", aBrdLayerName );
        fprintf( m_Outfile, "  (fp_text value \"%s\" (at 0.75 0) (layer F.SilkS) hide\n"
        fprintf( m_Outfile, "  (fp_text value \"%s\" (at 0.75 0) (layer %s) hide\n"
                            "  (effects (font (thickness 0.3)))\n  )\n",
            "  (effects (font (thickness 0.3)))\n  )\n", m_CmpName, aBrdLayerName );
                 m_CmpName );
        break;
        break;


    case KICAD_LOGO:
    case KICAD_LOGO:
@@ -283,7 +314,7 @@ void BITMAPCONV_INFO::OuputFileEnd()
 * write one polygon to output file.
 * write one polygon to output file.
 * Polygon coordinates are expected scaled by the polygon extraction function
 * 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;
    unsigned ii, jj;
    KPolyPoint currpoint;
    KPolyPoint currpoint;
@@ -338,7 +369,9 @@ void BITMAPCONV_INFO::OuputOnePolygon( KPolygon & aPolygon )
        // Close polygon
        // Close polygon
        fprintf( m_Outfile, " (xy %f %f) )",
        fprintf( m_Outfile, " (xy %f %f) )",
                (startpoint.x() - offsetX) / 1e6, (startpoint.y() - offsetY) / 1e6 );
                (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;
    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;
    KPolyPoint currpoint;


@@ -400,7 +433,10 @@ void BITMAPCONV_INFO::CreateOutputFile()


    setlocale( LC_NUMERIC, "C" );    // Switch the locale to standard C
    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;
    bool main_outline = true;


@@ -477,7 +513,7 @@ void BITMAPCONV_INFO::CreateOutputFile()
            for( unsigned ii = 0; ii < polyset_areas.size(); ii++ )
            for( unsigned ii = 0; ii < polyset_areas.size(); ii++ )
            {
            {
                KPolygon& poly = polyset_areas[ii];
                KPolygon& poly = polyset_areas[ii];
                OuputOnePolygon(poly );
                OuputOnePolygon(poly, getBrdLayerName( aModLayer ) );
            }
            }


            polyset_areas.clear();
            polyset_areas.clear();
Loading