pcbnew: added BOM generator (in postprocess menu)
This commit is contained in:
parent
534a64b416
commit
4ef16f53d9
|
@ -4,7 +4,12 @@ KiCad ChangeLog 2009
|
|||
Please add newer entries at the top, list the date and your name with
|
||||
email address.
|
||||
|
||||
2009-mar-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
|
||||
2009-mar-30 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
|
||||
================================================================================
|
||||
++pcbnew:
|
||||
added BOM generator (in postprocess menu)
|
||||
|
||||
2009-mar-28 UPDATE Jean-Pierre Charras <jean-pierre.charras@gipsa-lab.inpg.fr>
|
||||
================================================================================
|
||||
++All
|
||||
code cleanup in project_config.cpp.
|
||||
|
|
|
@ -737,7 +737,7 @@ enum main_id {
|
|||
ID_MENU_PCB_SHOW_3D_FRAME,
|
||||
ID_PCB_USER_GRID_SETUP,
|
||||
ID_PCB_DISPLAY_FOOTPRINT_DOC,
|
||||
ID_PCBUNUSED2,
|
||||
ID_PCB_GEN_BOM_FILE_FROM_BOARD,
|
||||
ID_PCBUNUSED3,
|
||||
ID_PCBUNUSED4,
|
||||
ID_PCBUNUSED5,
|
||||
|
|
|
@ -422,7 +422,20 @@ public:
|
|||
bool SavePcbFile( const wxString& FileName );
|
||||
int SavePcbFormatAscii( FILE* File );
|
||||
bool WriteGeneralDescrPcb( FILE* File );
|
||||
bool RecreateCmpFileFromBoard();
|
||||
|
||||
/**
|
||||
* Function RecreateBOMFileFromBoard
|
||||
* Recreates a .cmp file from the current loaded board
|
||||
* this is the same as created by cvpcb.
|
||||
* can be used if this file is lost
|
||||
*/
|
||||
void RecreateCmpFileFromBoard(wxCommandEvent & aEvent);
|
||||
|
||||
/**
|
||||
* Function RecreateBOMFileFromBoard
|
||||
* Creates a BOM file from the current loaded board
|
||||
*/
|
||||
void RecreateBOMFileFromBoard(wxCommandEvent & aEvent);
|
||||
|
||||
void ExportToGenCAD( wxCommandEvent& event );
|
||||
|
||||
|
|
|
@ -42,10 +42,13 @@ const wxChar* s_AllowedExtensionsToList[] =
|
|||
wxT( "^.*\\.net$" ),
|
||||
wxT( "^.*\\.txt$" ),
|
||||
wxT( "^.*\\.pho$" ),
|
||||
wxT( "^.*\\.gbr$" ),
|
||||
wxT( "^.*\\.odt$" ),
|
||||
wxT( "^.*\\.sxw$" ),
|
||||
wxT( "^.*\\.htm$" ),
|
||||
wxT( "^.*\\.html$" ),
|
||||
wxT( "^.*\\.rpt$" ),
|
||||
wxT( "^.*\\.csv$" ),
|
||||
NULL // end of list
|
||||
};
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ set(PCBNEW_SRCS
|
|||
block.cpp
|
||||
block_module_editor.cpp
|
||||
board.cpp
|
||||
build_BOM_from_board.cpp
|
||||
class_board_item.cpp
|
||||
class_drawsegment.cpp
|
||||
class_edge_mod.cpp
|
||||
|
|
|
@ -0,0 +1,153 @@
|
|||
/* build_BOM_from_board.cpp */
|
||||
|
||||
|
||||
#include "fctsys.h"
|
||||
#include "common.h"
|
||||
#include "confirm.h"
|
||||
#include "kicad_string.h"
|
||||
#include "gestfich.h"
|
||||
#include "pcbnew.h"
|
||||
|
||||
#include <wx/listimpl.cpp>
|
||||
|
||||
/* creates a BOM list rom board
|
||||
The format is:
|
||||
"Id";"Designator";"Package";"Number";"Designation";"Supplier and ref";
|
||||
1;"P1";"DB25FC";1;"DB25FEMELLE";;;
|
||||
2;"U9";"PGA120";1;"4003APG120";;;
|
||||
3;"JP1";"pin_array_8x2";1;"CONN_8X2";;;
|
||||
4;"RR1";"r_pack9";1;"9x1K";;;
|
||||
5;"X1";"HC-18UH";1;"8MHz";;;
|
||||
6;"U8";"24dip300";1;"EP600";;;
|
||||
7;"U5";"32dip600";1;"628128";;;
|
||||
8;"C2,C3";"C1";2;"47pF";;;
|
||||
9;"U1";"20dip300";1;"74LS245";;;
|
||||
10;"U3";"20dip300";1;"74LS541";;;
|
||||
11;"U2";"20dip300";1;"74LS688";;;
|
||||
12;"C1,C4,C5,C6";"CP6";4;"47uF";;;
|
||||
*/
|
||||
|
||||
wxString NetBomExtBuffer( wxT( ".csv" ) ); // BOM file extension
|
||||
|
||||
class cmp
|
||||
{
|
||||
public:
|
||||
wxString m_Ref;
|
||||
wxString m_Val;
|
||||
wxString m_Pkg;
|
||||
int m_Id;
|
||||
int m_CmpCount;
|
||||
};
|
||||
WX_DECLARE_LIST( cmp, CmpList );
|
||||
|
||||
WX_DEFINE_LIST( CmpList );
|
||||
|
||||
void WinEDA_PcbFrame::RecreateBOMFileFromBoard( wxCommandEvent& aEvent )
|
||||
{
|
||||
wxString FullFileName, mask;
|
||||
FILE* FichBom;
|
||||
MODULE* Module = GetBoard()->m_Modules;
|
||||
wxString msg;
|
||||
|
||||
|
||||
if( Module == NULL )
|
||||
{
|
||||
DisplayError( this, _( "No Modules!" ) );
|
||||
return;
|
||||
}
|
||||
|
||||
/* Set the file extension: */
|
||||
FullFileName = GetScreen()->m_FileName;
|
||||
ChangeFileNameExt( FullFileName, NetBomExtBuffer );
|
||||
|
||||
mask = wxT( "*" ) + NetBomExtBuffer;
|
||||
FullFileName = EDA_FileSelector( _( "Bom files:" ),
|
||||
wxEmptyString, /* Chemin par defaut */
|
||||
FullFileName, /* nom fichier par defaut */
|
||||
NetBomExtBuffer, /* extension par defaut */
|
||||
mask, /* Masque d'affichage */
|
||||
this,
|
||||
wxFD_SAVE,
|
||||
FALSE
|
||||
);
|
||||
if( FullFileName.IsEmpty() )
|
||||
return;
|
||||
|
||||
|
||||
FichBom = wxFopen( FullFileName, wxT( "wt" ) );
|
||||
if( FichBom == NULL )
|
||||
{
|
||||
msg = _( "Unable to create file " ) + FullFileName;
|
||||
DisplayError( this, msg );
|
||||
return;
|
||||
}
|
||||
|
||||
// Write header:
|
||||
msg = wxT( "\"");
|
||||
msg << _("Id") << wxT("\";\"");
|
||||
msg << _("Designator") << wxT("\";\"");
|
||||
msg << _("Package") << wxT("\";\"");
|
||||
msg << _("Number") << wxT("\";\"");
|
||||
msg << _("Designation") << wxT("\";\"");
|
||||
msg << _("Supplier and ref") << wxT("\";\n" );
|
||||
fprintf( FichBom, CONV_TO_UTF8( msg ) );
|
||||
|
||||
// Build list
|
||||
CmpList list;
|
||||
cmp* comp = NULL;
|
||||
CmpList::iterator iter;
|
||||
int i = 1;
|
||||
for( ; Module != NULL; Module = Module->Next() )
|
||||
{
|
||||
bool valExist = false;
|
||||
|
||||
if( comp != NULL )
|
||||
{
|
||||
for( iter = list.begin(); iter != list.end(); iter++ )
|
||||
{
|
||||
cmp* current = *iter;
|
||||
if( (current->m_Val == Module->m_Value->m_Text) && (current->m_Pkg == Module->m_LibRef) )
|
||||
{
|
||||
current->m_Ref.Append( wxT( ", " ), 1 );
|
||||
current->m_Ref.Append( Module->m_Reference->m_Text );
|
||||
comp->m_CmpCount++;
|
||||
|
||||
valExist = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if( !valExist || (comp == NULL) )
|
||||
{
|
||||
comp = new cmp();
|
||||
comp->m_Id = i++;
|
||||
comp->m_Val = Module->m_Value->m_Text;
|
||||
comp->m_Ref = Module->m_Reference->m_Text;
|
||||
comp->m_Pkg = Module->m_LibRef;
|
||||
comp->m_CmpCount = 1;
|
||||
list.Append( comp );
|
||||
}
|
||||
}
|
||||
|
||||
// Print list
|
||||
for( iter = list.begin(); iter != list.end(); iter++ )
|
||||
{
|
||||
cmp* current = *iter;
|
||||
|
||||
msg.Empty();
|
||||
|
||||
msg << current->m_Id << wxT( ";\"" );
|
||||
msg << current->m_Ref << wxT( "\";\"" );
|
||||
msg << current->m_Pkg << wxT( "\";" );
|
||||
msg << current->m_CmpCount << wxT( ";\"" );
|
||||
msg << current->m_Val << wxT( "\";;;\n" );
|
||||
fprintf( FichBom, CONV_TO_UTF8( msg ) );
|
||||
|
||||
list.DeleteObject( current );
|
||||
delete (current);
|
||||
}
|
||||
|
||||
|
||||
fclose( FichBom );
|
||||
}
|
|
@ -459,8 +459,14 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
DrawPanel->MouseToCursorSchema();
|
||||
if( GetCurItem() == NULL )
|
||||
break;
|
||||
Delete_Zone_Fill( &dc, (SEGZONE*) GetCurItem() );
|
||||
{
|
||||
SEGZONE* zsegm = (SEGZONE*) GetCurItem();
|
||||
int netcode = zsegm->GetNet();
|
||||
Delete_Zone_Fill( &dc, zsegm );
|
||||
SetCurItem( NULL );
|
||||
test_1_net_connexion( NULL, netcode );
|
||||
GetScreen()->SetModify();
|
||||
}
|
||||
break;
|
||||
|
||||
case ID_POPUP_PCB_EDIT_ZONE_PARAMS:
|
||||
|
@ -483,8 +489,12 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event )
|
|||
case ID_POPUP_PCB_DELETE_ZONE_CONTAINER:
|
||||
case ID_POPUP_PCB_DELETE_ZONE_CUTOUT:
|
||||
DrawPanel->MouseToCursorSchema();
|
||||
{
|
||||
int netcode = ((ZONE_CONTAINER*) GetCurItem())->GetNet();
|
||||
Delete_Zone_Contour( &dc, (ZONE_CONTAINER*) GetCurItem() );
|
||||
SetCurItem( NULL );
|
||||
test_1_net_connexion( NULL, netcode );
|
||||
}
|
||||
break;
|
||||
|
||||
case ID_POPUP_PCB_DELETE_ZONE_CORNER:
|
||||
|
|
|
@ -120,10 +120,6 @@ void WinEDA_PcbFrame::Files_io( wxCommandEvent& event )
|
|||
SavePcbFile( wxEmptyString );
|
||||
break;
|
||||
|
||||
case ID_PCB_GEN_CMP_FILE:
|
||||
RecreateCmpFileFromBoard();
|
||||
break;
|
||||
|
||||
default:
|
||||
DisplayError( this, wxT( "File_io Internal Error" ) ); break;
|
||||
}
|
||||
|
|
|
@ -24,6 +24,7 @@ SPECCTRA_TOOLS = specctra.o specctra_export.o dsn.o specctra_import.o
|
|||
OBJECTS= $(TARGET).o\
|
||||
$(ZONE_FILES)\
|
||||
$(SPECCTRA_TOOLS)\
|
||||
build_BOM_from_board.o\
|
||||
print_board_functions.o\
|
||||
dialog_freeroute_exchange.o\
|
||||
modedit_undo_redo.o\
|
||||
|
|
|
@ -263,6 +263,12 @@ void WinEDA_PcbFrame::ReCreateMenuBar()
|
|||
item->SetBitmap( save_cmpstuff_xpm );
|
||||
postprocess_menu->Append( item );
|
||||
|
||||
item = new wxMenuItem( postprocess_menu, ID_PCB_GEN_BOM_FILE_FROM_BOARD,
|
||||
_( "Create &BOM File" ),
|
||||
_( "Recreate .csv file for CvPcb" ) );
|
||||
item->SetBitmap( tools_xpm );
|
||||
postprocess_menu->Append( item );
|
||||
|
||||
//////////////////////////
|
||||
// Menu d'outils divers //
|
||||
//////////////////////////
|
||||
|
|
|
@ -104,7 +104,8 @@ BEGIN_EVENT_TABLE( WinEDA_PcbFrame, WinEDA_BasePcbFrame )
|
|||
// menu Postprocess
|
||||
EVT_MENU( ID_PCB_GEN_POS_MODULES_FILE, WinEDA_PcbFrame::GenModulesPosition )
|
||||
EVT_MENU( ID_PCB_GEN_DRILL_FILE, WinEDA_PcbFrame::InstallDrillFrame )
|
||||
EVT_MENU( ID_PCB_GEN_CMP_FILE, WinEDA_PcbFrame::Files_io )
|
||||
EVT_MENU( ID_PCB_GEN_CMP_FILE, WinEDA_PcbFrame::RecreateCmpFileFromBoard )
|
||||
EVT_MENU( ID_PCB_GEN_BOM_FILE_FROM_BOARD, WinEDA_PcbFrame::RecreateBOMFileFromBoard )
|
||||
|
||||
// menu Miscellaneous
|
||||
EVT_MENU( ID_MENU_LIST_NETS, WinEDA_PcbFrame::Liste_Equipot )
|
||||
|
|
|
@ -601,8 +601,14 @@ void WinEDA_ExchangeModuleFrame::Sel_NewMod_By_Liste( wxCommandEvent& event )
|
|||
|
||||
|
||||
/***************************************************/
|
||||
bool WinEDA_PcbFrame::RecreateCmpFileFromBoard()
|
||||
void WinEDA_PcbFrame::RecreateCmpFileFromBoard(wxCommandEvent& aEvent)
|
||||
/***************************************************/
|
||||
/**
|
||||
* Function RecreateBOMFileFromBoard
|
||||
* Recreates a .cmp file from the current loaded board
|
||||
* this is the same as created by cvpcb.
|
||||
* can be used if this file is lost
|
||||
*/
|
||||
{
|
||||
wxString FullFileNameCmp, mask;
|
||||
FILE* FichCmp;
|
||||
|
@ -613,7 +619,7 @@ bool WinEDA_PcbFrame::RecreateCmpFileFromBoard()
|
|||
if( Module == NULL )
|
||||
{
|
||||
DisplayError( this, _( "No Modules!" ) );
|
||||
return FALSE;
|
||||
return;
|
||||
}
|
||||
|
||||
/* Calcul nom fichier CMP par changement de l'extension du nom netliste */
|
||||
|
@ -631,7 +637,7 @@ bool WinEDA_PcbFrame::RecreateCmpFileFromBoard()
|
|||
FALSE
|
||||
);
|
||||
if( FullFileNameCmp.IsEmpty() )
|
||||
return FALSE;
|
||||
return;
|
||||
|
||||
|
||||
FichCmp = wxFopen( FullFileNameCmp, wxT( "wt" ) );
|
||||
|
@ -639,7 +645,7 @@ bool WinEDA_PcbFrame::RecreateCmpFileFromBoard()
|
|||
{
|
||||
msg = _( "Unable to create file " ) + FullFileNameCmp;
|
||||
DisplayError( this, msg );
|
||||
return FALSE;
|
||||
return;
|
||||
}
|
||||
|
||||
fgets( Line, sizeof(Line), FichCmp );
|
||||
|
@ -662,6 +668,4 @@ bool WinEDA_PcbFrame::RecreateCmpFileFromBoard()
|
|||
|
||||
fprintf( FichCmp, "\nEndListe\n" );
|
||||
fclose( FichCmp );
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue