diff --git a/bitmap2component/bitmap2cmp_gui.cpp b/bitmap2component/bitmap2cmp_gui.cpp index 9e8968ecfb..cb01eca04e 100644 --- a/bitmap2component/bitmap2cmp_gui.cpp +++ b/bitmap2component/bitmap2cmp_gui.cpp @@ -31,6 +31,7 @@ #include #include +#include #include #include @@ -54,7 +55,7 @@ #define DEFAULT_DPI 300 // Default resolution in Bit per inches extern int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, - int aFormat, int aDpi_X, int aDpi_Y ); + OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y ); /** * Class BM2CMP_FRAME_BASE @@ -98,11 +99,9 @@ private: void OnExportEeschema(); /** - * Depending on the option: - * Legacy format: generate a module library which comtains one component - * New kicad_mod format: generate a module in S expr format + * Generate a module in S expr format */ - void OnExportPcbnew( bool aLegacyFormat ); + void OnExportPcbnew(); /** * Generate a postscript file @@ -129,13 +128,14 @@ private: { m_DPIValueX->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.x ) ); } + void UpdateDPITextValueY( wxMouseEvent& event ) { m_DPIValueY->ChangeValue( wxString::Format( wxT( "%d" ), m_imageDPI.y ) ); } void NegateGreyscaleImage( ); - void ExportFile( FILE* aOutfile, int aFormat ); + void ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat ); void updateImageInfo(); }; @@ -160,8 +160,13 @@ BM2CMP_FRAME::BM2CMP_FRAME( KIWAY* aKiway, wxWindow* aParent ) : if( m_config->Read( KEYWORD_BW_NEGATIVE, &tmp ) ) m_rbOptions->SetSelection( tmp ? 1 : 0 ); - m_config->Read( KEYWORD_LAST_FORMAT, &tmp ); - m_radioBoxFormat->SetSelection( tmp ); + if( m_config->Read( KEYWORD_LAST_FORMAT, &tmp ) ) + { + if( tmp < 0 || tmp > FINAL_FMT ) + tmp = PCBNEW_KICAD_MOD; + + m_radioBoxFormat->SetSelection( tmp ); + } // Give an icon wxIcon icon; @@ -430,27 +435,25 @@ void BM2CMP_FRAME::OnThresholdChange( wxScrollEvent& event ) void BM2CMP_FRAME::OnExport( wxCommandEvent& event ) { - int sel = m_radioBoxFormat->GetSelection(); + // choices of m_radioBoxFormat are expected to be in same order as + // OUTPUT_FMT_ID. See bitmap2component.h + OUTPUT_FMT_ID sel = (OUTPUT_FMT_ID) m_radioBoxFormat->GetSelection(); switch( sel ) { - case 0: + case EESCHEMA_FMT: OnExportEeschema(); break; - case 1: - OnExportPcbnew( true ); + case PCBNEW_KICAD_MOD: + OnExportPcbnew(); break; - case 2: - OnExportPcbnew( false ); - break; - - case 3: + case POSTSCRIPT_FMT: OnExportPostScript(); break; - case 4: + case KICAD_LOGO: OnExportLogo(); break; } @@ -476,6 +479,15 @@ void BM2CMP_FRAME::OnExportLogo() m_ConvertedFileName = fileDlg.GetPath(); + if( m_ConvertedFileName.size() > 1 + && m_ConvertedFileName.Right( 10 ).compare( _( ".kicad_wks") ) ) + { + if( m_ConvertedFileName.Right( 1 ).compare( _( "." ) ) ) + m_ConvertedFileName += _( ".kicad_wks" ); + else + m_ConvertedFileName += _( "kicad_wks" ); + } + FILE* outfile; outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) ); @@ -487,7 +499,7 @@ void BM2CMP_FRAME::OnExportLogo() return; } - ExportFile( outfile, 4 ); + ExportFile( outfile, KICAD_LOGO ); fclose( outfile ); } @@ -512,6 +524,15 @@ void BM2CMP_FRAME::OnExportPostScript() m_ConvertedFileName = fileDlg.GetPath(); + if( m_ConvertedFileName.size() > 1 + && m_ConvertedFileName.Right( 3 ).compare( _( ".ps") ) ) + { + if( m_ConvertedFileName.Right( 1 ).compare( _( "." ) ) ) + m_ConvertedFileName += _( ".ps" ); + else + m_ConvertedFileName += _( "ps" ); + } + FILE* outfile; outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) ); @@ -523,7 +544,7 @@ void BM2CMP_FRAME::OnExportPostScript() return; } - ExportFile( outfile, 3 ); + ExportFile( outfile, POSTSCRIPT_FMT ); fclose( outfile ); } @@ -549,6 +570,15 @@ void BM2CMP_FRAME::OnExportEeschema() m_ConvertedFileName = fileDlg.GetPath(); + if( m_ConvertedFileName.size() > 1 + && m_ConvertedFileName.Right( 4 ).compare( _( ".lib") ) ) + { + if( m_ConvertedFileName.Right( 1 ).compare( _( "." ) ) ) + m_ConvertedFileName += _( ".lib" ); + else + m_ConvertedFileName += _( "lib" ); + } + FILE* outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) ); if( outfile == NULL ) @@ -559,12 +589,12 @@ void BM2CMP_FRAME::OnExportEeschema() return; } - ExportFile( outfile, 2 ); + ExportFile( outfile, EESCHEMA_FMT ); fclose( outfile ); } -void BM2CMP_FRAME::OnExportPcbnew( bool aLegacyFormat ) +void BM2CMP_FRAME::OnExportPcbnew() { wxFileName fn( m_ConvertedFileName ); wxString path = fn.GetPath(); @@ -572,9 +602,7 @@ void BM2CMP_FRAME::OnExportPcbnew( bool aLegacyFormat ) if( path.IsEmpty() || !wxDirExists( path ) ) path = ::wxGetCwd(); - wxString msg = aLegacyFormat ? - _( "Footprint file (*.emp)|*.emp" ) : - _( "Footprint file (*.kicad_mod)|*.kicad_mod" ); + wxString msg = _( "Footprint file (*.kicad_mod)|*.kicad_mod" ); wxFileDialog fileDlg( this, _( "Create a footprint file for PcbNew" ), path, wxEmptyString, @@ -588,6 +616,15 @@ void BM2CMP_FRAME::OnExportPcbnew( bool aLegacyFormat ) m_ConvertedFileName = fileDlg.GetPath(); + if( m_ConvertedFileName.size() > 1 + && m_ConvertedFileName.Right( 10 ).compare( _( ".kicad_mod") ) ) + { + if( m_ConvertedFileName.Right( 1 ).compare( _( "." ) ) ) + m_ConvertedFileName += _( ".kicad_mod" ); + else + m_ConvertedFileName += _( "kicad_mod" ); + } + FILE* outfile = wxFopen( m_ConvertedFileName, wxT( "w" ) ); if( outfile == NULL ) @@ -598,12 +635,12 @@ void BM2CMP_FRAME::OnExportPcbnew( bool aLegacyFormat ) return; } - ExportFile( outfile, aLegacyFormat ? 0 : 1 ); + ExportFile( outfile, PCBNEW_KICAD_MOD ); fclose( outfile ); } -void BM2CMP_FRAME::ExportFile( FILE* aOutfile, int aFormat ) +void BM2CMP_FRAME::ExportFile( FILE* aOutfile, OUTPUT_FMT_ID aFormat ) { // Create a potrace bitmap int h = m_NB_Image.GetHeight(); diff --git a/bitmap2component/bitmap2cmp_gui_base.cpp b/bitmap2component/bitmap2cmp_gui_base.cpp index 594bcff5e0..e309839e92 100644 --- a/bitmap2component/bitmap2cmp_gui_base.cpp +++ b/bitmap2component/bitmap2cmp_gui_base.cpp @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Nov 5 2013) +// C++ code generated with wxFormBuilder (version Nov 6 2013) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! @@ -126,10 +126,10 @@ BM2CMP_FRAME_BASE::BM2CMP_FRAME_BASE( wxWindow* parent, wxWindowID id, const wxS brightSizer->Add( m_buttonExport, 0, wxEXPAND|wxALIGN_CENTER_HORIZONTAL|wxBOTTOM|wxRIGHT|wxLEFT, 5 ); - wxString m_radioBoxFormatChoices[] = { _("Eeschema"), _("Pcbnew old fmt (.emp)"), _("Pcbnew kicad_mod"), _("Postscript"), _("Logo for title block") }; + wxString m_radioBoxFormatChoices[] = { _("Eeschema (.lib file)"), _("Pcbnew (.kicad_mod file)"), _("Postscript (.ps file)"), _("Logo for title block (.kicad_wks file)") }; int m_radioBoxFormatNChoices = sizeof( m_radioBoxFormatChoices ) / sizeof( wxString ); m_radioBoxFormat = new wxRadioBox( m_panelRight, wxID_ANY, _("Format"), wxDefaultPosition, wxDefaultSize, m_radioBoxFormatNChoices, m_radioBoxFormatChoices, 1, wxRA_SPECIFY_COLS ); - m_radioBoxFormat->SetSelection( 2 ); + m_radioBoxFormat->SetSelection( 1 ); brightSizer->Add( m_radioBoxFormat, 0, wxEXPAND|wxALL, 5 ); wxString m_rbOptionsChoices[] = { _("Normal"), _("Negative") }; diff --git a/bitmap2component/bitmap2cmp_gui_base.fbp b/bitmap2component/bitmap2cmp_gui_base.fbp index 6ebddf257d..d0674b2210 100644 --- a/bitmap2component/bitmap2cmp_gui_base.fbp +++ b/bitmap2component/bitmap2cmp_gui_base.fbp @@ -2003,7 +2003,7 @@ 1 0 - "Eeschema" "Pcbnew old fmt (.emp)" "Pcbnew kicad_mod" "Postscript" "Logo for title block" + "Eeschema (.lib file)" "Pcbnew (.kicad_mod file)" "Postscript (.ps file)" "Logo for title block (.kicad_wks file)" 1 1 @@ -2035,7 +2035,7 @@ 1 Resizable - 2 + 1 1 wxRA_SPECIFY_COLS diff --git a/bitmap2component/bitmap2cmp_gui_base.h b/bitmap2component/bitmap2cmp_gui_base.h index 11f333506e..7d4270392e 100644 --- a/bitmap2component/bitmap2cmp_gui_base.h +++ b/bitmap2component/bitmap2cmp_gui_base.h @@ -1,5 +1,5 @@ /////////////////////////////////////////////////////////////////////////// -// C++ code generated with wxFormBuilder (version Nov 5 2013) +// C++ code generated with wxFormBuilder (version Nov 6 2013) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! diff --git a/bitmap2component/bitmap2component.cpp b/bitmap2component/bitmap2component.cpp index e0c22fbf20..ddf83fc268 100644 --- a/bitmap2component/bitmap2component.cpp +++ b/bitmap2component/bitmap2component.cpp @@ -38,6 +38,8 @@ #include #include +#include + // Define some types used here from boost::polygon namespace bpl = boost::polygon; // bpl = boost polygon library @@ -50,14 +52,6 @@ typedef std::vector KPolygonSet; // define a set of p typedef bpl::point_data KPolyPoint; // define a corner of a polygon -enum output_format { - POSTSCRIPT_FMT = 1, - PCBNEW_LEGACY_EMP, - PCBNEW_KICAD_MOD, - EESCHEMA_FMT, - KICAD_LOGO -}; - /* free a potrace bitmap */ static void bm_free( potrace_bitmap_t* bm ) { @@ -75,7 +69,7 @@ static void bm_free( potrace_bitmap_t* bm ) class BITMAPCONV_INFO { public: - enum output_format m_Format; // File format + enum OUTPUT_FMT_ID m_Format; // File format int m_PixmapWidth; int m_PixmapHeight; // the bitmap size in pixels double m_ScaleX; @@ -139,7 +133,7 @@ BITMAPCONV_INFO::BITMAPCONV_INFO() int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, - int aFormat, int aDpi_X, int aDpi_Y ) + OUTPUT_FMT_ID aFormat, int aDpi_X, int aDpi_Y ) { potrace_param_t* param; potrace_state_t* st; @@ -169,14 +163,14 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, switch( aFormat ) { - case 4: + case KICAD_LOGO: info.m_Format = KICAD_LOGO; info.m_ScaleX = 1e3 * 25.4 / aDpi_X; // the conversion scale from PPI to micro info.m_ScaleY = 1e3 * 25.4 / aDpi_Y; // Y axis is top to bottom info.CreateOutputFile(); break; - case 3: + case POSTSCRIPT_FMT: info.m_Format = POSTSCRIPT_FMT; info.m_ScaleX = 1.0; // the conversion scale info.m_ScaleY = info.m_ScaleX; @@ -184,27 +178,20 @@ int bitmap2component( potrace_bitmap_t* aPotrace_bitmap, FILE* aOutfile, info.CreateOutputFile(); break; - case 2: + case EESCHEMA_FMT: info.m_Format = EESCHEMA_FMT; info.m_ScaleX = 1000.0 / aDpi_X; // the conversion scale from PPI to UI info.m_ScaleY = -1000.0 / aDpi_Y; // Y axis is bottom to Top for components in libs info.CreateOutputFile(); break; - case 1: + case 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_ScaleY = 1e6 * 25.4 / aDpi_Y; // Y axis is top to bottom in modedit info.CreateOutputFile(); break; - case 0: - info.m_Format = PCBNEW_LEGACY_EMP; - info.m_ScaleX = 10000.0 / aDpi_X; // the conversion scale - info.m_ScaleY = 10000.0 / aDpi_Y; // Y axis is top to bottom in modedit - info.CreateOutputFile(); - break; - default: break; } @@ -233,25 +220,6 @@ void BITMAPCONV_INFO::OuputFileHeader() fprintf( m_Outfile, "gsave\n" ); break; - case PCBNEW_LEGACY_EMP: - #define FIELD_LAYER 21 - fieldSize = 600; // fields text size = 60 mils - Ypos += fieldSize / 2; - fprintf( m_Outfile, "PCBNEW-LibModule-V1\n" ); - fprintf( m_Outfile, "$INDEX\n%s\n$EndINDEX\n", m_CmpName ); - - fprintf( m_Outfile, "#\n# %s\n", m_CmpName ); - fprintf( m_Outfile, "# pixmap w = %d, h = %d\n#\n", - m_PixmapWidth, m_PixmapHeight ); - fprintf( m_Outfile, "$MODULE %s\n", m_CmpName ); - fprintf( m_Outfile, "Po 0 0 0 15 00000000 00000000 ~~\n" ); - fprintf( m_Outfile, "Li %s\n", m_CmpName ); - fprintf( m_Outfile, "T0 0 %d %d %d 0 %d N I %d \"G***\"\n", - Ypos, fieldSize, fieldSize, fieldSize / 5, FIELD_LAYER ); - fprintf( m_Outfile, "T1 0 %d %d %d 0 %d N I %d \"%s\"\n", - -Ypos, fieldSize, fieldSize, fieldSize / 5, FIELD_LAYER, m_CmpName ); - break; - case PCBNEW_KICAD_MOD: // fields text size = 1.5 mm // fields text thickness = 1.5 / 5 = 0.3mm @@ -295,11 +263,6 @@ void BITMAPCONV_INFO::OuputFileEnd() fprintf( m_Outfile, "%%EOF\n" ); break; - case PCBNEW_LEGACY_EMP: - fprintf( m_Outfile, "$EndMODULE %s\n", m_CmpName ); - fprintf( m_Outfile, "$EndLIBRARY\n" ); - break; - case PCBNEW_KICAD_MOD: fprintf( m_Outfile, ")\n" ); break; @@ -353,27 +316,6 @@ void BITMAPCONV_INFO::OuputOnePolygon( KPolygon & aPolygon ) fprintf( m_Outfile, "\nclosepath fill\n" ); break; - case PCBNEW_LEGACY_EMP: - { - LAYER_NUM layer = F_SilkS; - int width = 1; - fprintf( m_Outfile, "DP %d %d %d %d %d %d %d\n", - 0, 0, 0, 0, - (int) aPolygon.size() + 1, width, layer ); - - for( ii = 0; ii < aPolygon.size(); ii++ ) - { - currpoint = *( aPolygon.begin() + ii ); - fprintf( m_Outfile, "Dl %d %d\n", - currpoint.x() - offsetX, currpoint.y() - offsetY ); - } - - // Close polygon - fprintf( m_Outfile, "Dl %d %d\n", - startpoint.x() - offsetX, startpoint.y() - offsetY ); - } - break; - case PCBNEW_KICAD_MOD: { double width = 0.1; diff --git a/bitmap2component/bitmap2component.h b/bitmap2component/bitmap2component.h new file mode 100644 index 0000000000..2f3f9f88df --- /dev/null +++ b/bitmap2component/bitmap2component.h @@ -0,0 +1,38 @@ +/* + * This program source code file is part of KICAD, a free EDA CAD application. + * + * Copyright (C) 1992-2014 Kicad Developers, see change_log.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 + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, you may find one here: + * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html + * or you may search the http://www.gnu.org website for the version 2 license, + * or you may write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifndef BITMAP2COMPONENT_H +#define BITMAP2COMPONENT_H + +// for consistency this enum should conform to the +// indices in m_radioBoxFormat from bitmap2cmp_gui.cpp +enum OUTPUT_FMT_ID +{ + EESCHEMA_FMT = 0, + PCBNEW_KICAD_MOD, + POSTSCRIPT_FMT, + KICAD_LOGO, + FINAL_FMT = KICAD_LOGO +}; + +#endif // BITMAP2COMPONENT_H