diff --git a/change_log.txt b/change_log.txt index e130775413..9ffd722997 100644 --- a/change_log.txt +++ b/change_log.txt @@ -4,6 +4,12 @@ Started 2007-June-11 Please add newer entries at the top, list the date and your name with email address. +2007-Dec-02 UPDATE Jean-Pierre Charras +================================================================================ ++eeschema: + Solved an annotation problem: in multiple parts per package components, + when sorted by position, parts were not grouped by package. + 2007-Dec-2 UPDATE Dick Hollenbeck ================================================================================ diff --git a/eeschema/annotate.cpp b/eeschema/annotate.cpp index c53b45531b..4d2cabfc84 100644 --- a/eeschema/annotate.cpp +++ b/eeschema/annotate.cpp @@ -2,17 +2,19 @@ /* annotate.cpp: component annotation */ /**************************************/ +/* Local Variable */ +static bool AnnotProject = true; +static bool SortByPosition = true; + #include "annotate_dialog.cpp" #include "netlist.h" #include "protos.h" -/* fonctions exportees */ -int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumSheet ); -int AnnotTriComposant( const void* o1, const void* o2 ); -void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ); - -/* fonctions locales */ +/* Local Functions*/ +static int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumSheet ); +static int AnnotTriComposant( const void* o1, const void* o2 ); +static void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void ReAnnotateComponents( CmpListStruct* BaseListeCmp, int NbOfCmp ); static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ); static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseListeCmp, @@ -20,19 +22,15 @@ static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseLis static int ExistUnit( CmpListStruct* Objet, int Unit, CmpListStruct* BaseListeCmp, int NbOfCmp ); -/* Variable locales */ -static bool AnnotProject = TRUE; -static bool SortByPosition = TRUE; - /**************************************/ -void ReAnnotatePowerSymbolsOnly() +void ReAnnotatePowerSymbolsOnly( void ) /**************************************/ /* Used to reannotate the power symbols, before testing erc or computing netlist * when a true component reannotation is not necessary - * - * In order to avoid conflicts the ref number start with a 0: + * + * In order to avoid conflicts the ref number starts with a 0: * PWR with id 12 is named PWR12 in global annotation and PWR012 by the Power annotation */ { @@ -66,9 +64,13 @@ void ReAnnotatePowerSymbolsOnly() } -/******************************************************************/ +/***********************************************************************/ void InstallAnnotateFrame( WinEDA_SchematicFrame* parent, wxPoint& pos ) -/******************************************************************/ +/***********************************************************************/ + +/** Function InstallAnnotateFrame + * Install the annotate dialog frame + */ { WinEDA_AnnotateFrame* frame = new WinEDA_AnnotateFrame( parent ); @@ -81,7 +83,7 @@ void InstallAnnotateFrame( WinEDA_SchematicFrame* parent, wxPoint& pos ) void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) /******************************************************************/ -/* +/** Function WinEDA_AnnotateFrame::AnnotateComponents * Compute the annotation of the components for the whole projeect, or the current sheet only. * All the components or the new ones only will be annotated. */ @@ -92,8 +94,8 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) wxBusyCursor dummy; - AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? TRUE : FALSE; - SortByPosition = (m_AnnotSortCmpCtrl->GetSelection() == 0) ? TRUE : FALSE; + AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? true : FALSE; + SortByPosition = (m_AnnotSortCmpCtrl->GetSelection() == 0) ? true : FALSE; /* If it is an annotation for all the components, reset previous annotation: */ if( m_AnnotNewCmpCtrl->GetSelection() == 0 ) @@ -113,7 +115,7 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) /* First pass: Component counting */ screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; - if( AnnotProject == TRUE ) + if( AnnotProject == true ) { NbOfCmp = 0; for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) @@ -132,7 +134,7 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) /* Second pass : Int data tables */ screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; - if( AnnotProject == TRUE ) + if( AnnotProject == true ) { ii = 0; for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) @@ -147,22 +149,22 @@ void WinEDA_AnnotateFrame::AnnotateComponents( wxCommandEvent& event ) if( ii != NbOfCmp ) DisplayError( this, wxT( "Internal error in AnnotateComponents()" ) ); - /* Separation des Numeros de la reference: IC1 -> IC, et 1 dans .m_NumRef */ + /* Break full components reference in name (prefix) and number: example: IC1 become IC, and 1 */ BreakReference( BaseListeCmp, NbOfCmp ); qsort( BaseListeCmp, NbOfCmp, sizeof(CmpListStruct), ( int( * ) ( const void*, const void* ) )AnnotTriComposant ); - /* Recalcul des numeros de reference */ + /* Recalculate reference numbers */ ComputeReferenceNumber( BaseListeCmp, NbOfCmp ); ReAnnotateComponents( BaseListeCmp, NbOfCmp ); MyFree( BaseListeCmp ); BaseListeCmp = NULL; /* Final control */ - CheckAnnotate( m_Parent, AnnotProject ? FALSE : TRUE ); + CheckAnnotate( m_Parent, AnnotProject ? FALSE : true ); - m_Parent->DrawPanel->Refresh( TRUE ); /* Refresh screen */ + m_Parent->DrawPanel->Refresh( true ); /* Refresh screen */ EndModal( 1 ); } @@ -181,10 +183,10 @@ void WinEDA_AnnotateFrame::DeleteAnnotation( wxCommandEvent& event ) if( !IsOK( this, _( "Previous Annotation will be deleted. Continue ?" ) ) ) { - m_Abort = TRUE; return; + m_Abort = true; return; } - AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? TRUE : FALSE; + AnnotProject = (m_AnnotProjetCtrl->GetSelection() == 0) ? true : FALSE; m_Abort = FALSE; /* Build the screen list */ @@ -197,7 +199,7 @@ void WinEDA_AnnotateFrame::DeleteAnnotation( wxCommandEvent& event ) ScreenSch->SetModify(); - if( AnnotProject == TRUE ) + if( AnnotProject == true ) screen = ScreenList.GetFirst(); else screen = (SCH_SCREEN*) m_Parent->m_CurrentScreen; @@ -218,7 +220,7 @@ void WinEDA_AnnotateFrame::DeleteAnnotation( wxCommandEvent& event ) break; } - m_Parent->DrawPanel->Refresh( TRUE ); + m_Parent->DrawPanel->Refresh( true ); EndModal( 0 ); } @@ -253,25 +255,25 @@ int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumShe Entry = FindLibPart( DrawLibItem->m_ChipName.GetData(), wxEmptyString, FIND_ROOT ); if( Entry == NULL ) break; - + if( BaseListeCmp == NULL ) /* Items counting only */ { - NbrCmp++; + NbrCmp++; break; } - + BaseListeCmp[NbrCmp].m_Cmp = DrawLibItem; BaseListeCmp[NbrCmp].m_NbParts = Entry->m_UnitCount; BaseListeCmp[NbrCmp].m_Unit = DrawLibItem->m_Multi; BaseListeCmp[NbrCmp].m_PartsLocked = Entry->m_UnitSelectionLocked; BaseListeCmp[NbrCmp].m_Sheet = NumSheet; BaseListeCmp[NbrCmp].m_IsNew = FALSE; - BaseListeCmp[NbrCmp].m_Pos = DrawLibItem->m_Pos; - BaseListeCmp[NbrCmp].m_TimeStamp = DrawLibItem->m_TimeStamp; - + BaseListeCmp[NbrCmp].m_Pos = DrawLibItem->m_Pos; + BaseListeCmp[NbrCmp].m_TimeStamp = DrawLibItem->m_TimeStamp; + if( DrawLibItem->m_Field[REFERENCE].m_Text.IsEmpty() ) DrawLibItem->m_Field[REFERENCE].m_Text = wxT( "DefRef?" ); - + strncpy( BaseListeCmp[NbrCmp].m_TextRef, CONV_TO_UTF8( DrawLibItem->m_Field[REFERENCE].m_Text ), 32 ); @@ -279,7 +281,7 @@ int ListeComposants( CmpListStruct* BaseListeCmp, SCH_SCREEN* screen, int NumShe if( DrawLibItem->m_Field[VALUE].m_Text.IsEmpty() ) DrawLibItem->m_Field[VALUE].m_Text = wxT( "~" ); - + strncpy( BaseListeCmp[NbrCmp].m_TextValue, CONV_TO_UTF8( DrawLibItem->m_Field[VALUE].m_Text ), 32 ); NbrCmp++; @@ -316,23 +318,21 @@ int AnnotTriComposant( const void* o1, const void* o2 ) * if same sheet, by time stamp **/ { - CmpListStruct* Objet1 = (CmpListStruct*) o1; + CmpListStruct* Objet1 = (CmpListStruct*) o1; CmpListStruct* Objet2 = (CmpListStruct*) o2; - int ii = strnicmp( Objet1->m_TextRef, Objet2->m_TextRef, 32 ); - - if( SortByPosition == TRUE ) + int ii = strnicmp( Objet1->m_TextRef, Objet2->m_TextRef, 32 ); + + if( SortByPosition == true ) { if( ii == 0 ) ii = Objet1->m_Sheet - Objet2->m_Sheet; - if( ii == 0 ) - ii = Objet1->m_Unit - Objet2->m_Unit; if( ii == 0 ) ii = Objet1->m_Pos.x - Objet2->m_Pos.x; if( ii == 0 ) ii = Objet1->m_Pos.y - Objet2->m_Pos.y; } - else + else // Sort by value { if( ii == 0 ) ii = strnicmp( Objet1->m_TextValue, Objet2->m_TextValue, 32 ); @@ -340,6 +340,10 @@ int AnnotTriComposant( const void* o1, const void* o2 ) ii = Objet1->m_Unit - Objet2->m_Unit; if( ii == 0 ) ii = Objet1->m_Sheet - Objet2->m_Sheet; + if( ii == 0 ) + ii = Objet1->m_Pos.x - Objet2->m_Pos.x; + if( ii == 0 ) + ii = Objet1->m_Pos.y - Objet2->m_Pos.y; } if( ii == 0 ) @@ -384,19 +388,16 @@ static void ReAnnotateComponents( CmpListStruct* BaseListeCmp, int NbOfCmp ) void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) /**************************************************************/ -/* Modifie dans BaseListeCmp la reference des composants en supprimant la - * partie nombre de la partie texte. - * Place le nombre dans .m_NumRef - * Pour les composants multiples non encore annotes, met .m_Unit a sa valeur max - * Utilise: - * BaseListeCmp - * NbOfCmp +/** BreakReference + * Break full components reference in name (prefix) and number: example: IC1 become IC, and 1 in .m_NumRef + * For multi part per package components not already annotated, set .m_Unit to a max value (0x7FFFFFFF) + * @param BaseListeCmp = list of component + * @param NbOfCmp = item count in the list */ { int ii, ll; char* Text; - /* Separation des Numeros de la reference: IC1 -> IC, et 1 dans .m_NumRef */ for( ii = 0; ii < NbOfCmp; ii++ ) { BaseListeCmp[ii].m_NumRef = -1; @@ -404,16 +405,16 @@ void BreakReference( CmpListStruct* BaseListeCmp, int NbOfCmp ) ll = strlen( Text ) - 1; if( Text[ll] == '?' ) { - BaseListeCmp[ii].m_IsNew = TRUE; + BaseListeCmp[ii].m_IsNew = true; if( !BaseListeCmp[ii].m_PartsLocked ) BaseListeCmp[ii].m_Unit = 0x7FFFFFFF; - Text[ll] = 0; + Text[ll] = 0; continue; } if( isdigit( Text[ll] ) == 0 ) { - BaseListeCmp[ii].m_IsNew = TRUE; + BaseListeCmp[ii].m_IsNew = true; if( !BaseListeCmp[ii].m_PartsLocked ) BaseListeCmp[ii].m_Unit = 0x7FFFFFFF; continue; @@ -444,16 +445,16 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) */ { int ii, jj, LastReferenceNumber, NumberOfUnits, Unit; - const char* Text, * RefText, * ValText; + const char* Text, * RefText, * ValText; CmpListStruct* ObjRef, * ObjToTest; - /* Components with an invisible reference (power...) always are re-annotated*/ + /* Components with an invisible reference (power...) always are re-annotated */ for( ii = 0; ii < NbOfCmp; ii++ ) { Text = BaseListeCmp[ii].m_TextRef; if( *Text == '#' ) { - BaseListeCmp[ii].m_IsNew = TRUE; + BaseListeCmp[ii].m_IsNew = true; BaseListeCmp[ii].m_NumRef = 0; } } @@ -472,7 +473,7 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) LastReferenceNumber = GetLastReferenceNumber( BaseListeCmp + ii, BaseListeCmp, NbOfCmp ); } - /* Annotation of mono-part components ( 1 part per package ) (trivial case)*/ + /* Annotation of one part per package components (trivial case)*/ if( BaseListeCmp[ii].m_NbParts <= 1 ) { if( BaseListeCmp[ii].m_IsNew ) @@ -504,7 +505,7 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) continue; jj = ExistUnit( BaseListeCmp + ii, Unit, BaseListeCmp, NbOfCmp ); if( jj >= 0 ) - continue; /* Unit exists for this reference */ + continue; /* Unit exists for this reference */ /* Search a component to annotate ( same prefix, same value) */ for( jj = ii + 1; jj < NbOfCmp; jj++ ) @@ -514,13 +515,12 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) continue; Text = BaseListeCmp[jj].m_TextRef; if( strnicmp( RefText, Text, 32 ) != 0 ) - break; // references are different + continue; // references are different Text = BaseListeCmp[jj].m_TextValue; if( strnicmp( ValText, Text, 32 ) != 0 ) - break; // values are different + continue; // values are different if( !BaseListeCmp[jj].m_IsNew ) { - //BaseListeCmp[jj].m_Flag = 1; continue; } /* Component without reference number found, annotate it if possible */ @@ -542,9 +542,13 @@ static void ComputeReferenceNumber( CmpListStruct* BaseListeCmp, int NbOfCmp ) static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseListeCmp, int NbOfCmp ) /*************************************************************************************************/ -/* Recherche le plus grand numero de reference dans les composants - * de meme prefixe de reference que celui pointe par Objet - * la liste des composants est supposee triee +/** Function GetLastReferenceNumber + * Search the last (bigger) reference number in the component list + * for the prefix reference given by Objet + * The component list must be sorted + * @param Objet = reference item ( Objet->m_TextRef is the search pattern) + * @param BaseListeCmp = list of items + * @param NbOfCmp = items count in list of items */ { CmpListStruct* LastObjet = BaseListeCmp + NbOfCmp; @@ -554,7 +558,7 @@ static int GetLastReferenceNumber( CmpListStruct* Objet, CmpListStruct* BaseList RefText = Objet->m_TextRef; for( ; Objet < LastObjet; Objet++ ) { - if( strnicmp( RefText, Objet->m_TextRef, 32 ) != 0 ) /* Nouveau Identificateur */ + if( strnicmp( RefText, Objet->m_TextRef, 32 ) != 0 ) /* Nouveau Identificateur */ break; if( LastNumber < Objet->m_NumRef ) LastNumber = Objet->m_NumRef; @@ -589,10 +593,10 @@ static int ExistUnit( CmpListStruct* Objet, int Unit, if( Objet == ItemToTest ) continue; if( ItemToTest->m_IsNew ) - continue; /* non affecte */ + continue; /* non affecte */ if( ItemToTest->m_NumRef != NumRef ) continue; - if( strnicmp( RefText, ItemToTest->m_TextRef, 32 ) != 0 ) /* Nouveau Identificateur */ + if( strnicmp( RefText, ItemToTest->m_TextRef, 32 ) != 0 ) /* Nouveau Identificateur */ continue; if( ItemToTest->m_Unit == Unit ) { @@ -608,9 +612,10 @@ static int ExistUnit( CmpListStruct* Objet, int Unit, int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) /******************************************************************/ -/* Retourne le nombre de composants non annotés ou de meme référence (doublés) - * Si OneSheetOnly : recherche sur le schema courant - * sinon: recherche sur toute la hierarchie +/** Function CheckAnnotate + * @return composent count ( which are not annotated or have the same reference (duplicates)) + * @param OneSheetOnly : true = search is made only in the current sheet + * false = search in whole hierarchy (usual search). */ { int NbSheet, ii, NumSheet = 1, error, NbOfCmp; @@ -619,7 +624,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) wxString Buff; wxString msg, cmpref; - /* build tje screen list */ + /* build the screen list */ EDA_ScreenList ScreenList( NULL ); NbSheet = ScreenList.GetCount(); @@ -628,7 +633,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) ScreenSch->SetModify(); ScreenList.UpdateSheetNumberAndDate(); - /* 1ere passe : Comptage du nombre de composants */ + /* first pass : count composents */ screen = (SCH_SCREEN*) frame->m_CurrentScreen; if( !OneSheetOnly ) { @@ -647,13 +652,14 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) return 0; } + + /* Second pass : create the list of components */ ii = sizeof(CmpListStruct) * NbOfCmp; ListeCmp = (CmpListStruct*) MyZMalloc( ii ); - /* 2eme passe : Remplissage du tableau des caracteristiques */ if( OneSheetOnly == 0 ) { - ii = 0; + ii = 0; screen = ScreenSch; for( screen = ScreenList.GetFirst(); screen != NULL; screen = ScreenList.GetNext() ) { @@ -668,23 +674,23 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) qsort( ListeCmp, NbOfCmp, sizeof(CmpListStruct), AnnotTriComposant ); - /* Separation des Numeros de la reference: IC1 -> IC, et 1 dans .m_NumRef */ + /* Break full components reference in name (prefix) and number: example: IC1 become IC, and 1 */ BreakReference( ListeCmp, NbOfCmp ); - /* comptage des elements non annotes */ + /* count not yet annotated items */ error = 0; for( ii = 0; ii < NbOfCmp - 1; ii++ ) { - msg.Empty(); + msg.Empty(); Buff.Empty(); - + if( ListeCmp[ii].m_IsNew ) { if( ListeCmp[ii].m_NumRef >= 0 ) Buff << ListeCmp[ii].m_NumRef; else Buff = wxT( "?" ); - + cmpref = CONV_FROM_UTF8( ListeCmp[ii].m_TextRef ); msg.Printf( _( "item not annotated: %s%s" ), cmpref.GetData(), Buff.GetData() ); @@ -694,7 +700,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) msg << Buff; } DisplayError( NULL, msg ); - error++; + error++; break; } @@ -712,7 +718,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) ListeCmp[ii].m_Unit, ListeCmp[ii].m_NbParts ); msg << Buff; DisplayError( frame, msg ); - error++; + error++; break; } } @@ -723,16 +729,17 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) // count the duplicated elements (if all are annotated) for( ii = 0; (ii < NbOfCmp - 1) && (error < 4); ii++ ) { - msg.Empty(); + msg.Empty(); Buff.Empty(); - + if( (stricmp( ListeCmp[ii].m_TextRef, ListeCmp[ii + 1].m_TextRef ) != 0) || ( ListeCmp[ii].m_NumRef != ListeCmp[ii + 1].m_NumRef ) ) continue; - /* Meme reference trouvée */ - /* Il y a erreur si meme unite */ - if( ListeCmp[ii].m_Unit == ListeCmp[ii+1].m_Unit ) + /* Same reference found */ + + /* If same unit, error ! */ + if( ListeCmp[ii].m_Unit == ListeCmp[ii + 1].m_Unit ) { if( ListeCmp[ii].m_NumRef >= 0 ) Buff << ListeCmp[ii].m_NumRef; @@ -749,12 +756,12 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) msg << Buff; } DisplayError( frame, msg ); - error++; + error++; continue; } - /* Il y a erreur si unites differentes mais nombre de parts differentes - * par boitier (ex U3 ( 1 part) et U3B sont incompatibles) */ + /* Test error if units are different but number of parts per package to hight + * (ex U3 ( 1 part) and we find U3B the is an error) */ if( ListeCmp[ii].m_NbParts != ListeCmp[ii + 1].m_NbParts ) { if( ListeCmp[ii].m_NumRef >= 0 ) @@ -775,7 +782,7 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) error++; } - /* Il y a erreur si unites differentes ET valeurs différentes */ + /* Error if values are différent between units, for the same reference */ if( stricmp( ListeCmp[ii].m_TextValue, ListeCmp[ii + 1].m_TextValue ) != 0 ) { wxString nextcmpref, cmpvalue, nextcmpvalue; @@ -785,8 +792,8 @@ int CheckAnnotate( WinEDA_SchematicFrame* frame, bool OneSheetOnly ) nextcmpvalue = CONV_FROM_UTF8( ListeCmp[ii + 1].m_TextValue ); msg.Printf( _( "Diff values for %s%d%c (%s) and %s%d%c (%s)" ), cmpref.GetData(), ListeCmp[ii].m_NumRef, ListeCmp[ii].m_Unit + 'A' - 1, - cmpvalue.GetData(), nextcmpref.GetData(), - ListeCmp[ii + 1].m_NumRef, + cmpvalue.GetData(), nextcmpref.GetData(), + ListeCmp[ii + 1].m_NumRef, ListeCmp[ii + 1].m_Unit + 'A' - 1, nextcmpvalue.GetData() ); diff --git a/eeschema/annotate_dialog.cpp b/eeschema/annotate_dialog.cpp index 558f82cc17..090fe9e485 100644 --- a/eeschema/annotate_dialog.cpp +++ b/eeschema/annotate_dialog.cpp @@ -155,6 +155,8 @@ void WinEDA_AnnotateFrame::CreateControls() itemBoxSizer7->Add(itemButton10, 0, wxGROW|wxALL, 5); ////@end WinEDA_AnnotateFrame content construction + + m_AnnotSortCmpCtrl->SetSelection(SortByPosition ? 0 : 1); } /*! diff --git a/gerbview/edit.cpp b/gerbview/edit.cpp index 2fcce30fdb..9048350a53 100644 --- a/gerbview/edit.cpp +++ b/gerbview/edit.cpp @@ -148,7 +148,7 @@ void WinEDA_GerberFrame::Process_Special_Functions( wxCommandEvent& event ) break; case ID_PCB_GLOBAL_DELETE: - Erase_Current_Layer( &dc, TRUE ); + Erase_Current_Layer( TRUE ); break; case wxID_CUT: diff --git a/gerbview/files.cpp b/gerbview/files.cpp index 23bd998e3c..18dc5c2b96 100644 --- a/gerbview/files.cpp +++ b/gerbview/files.cpp @@ -32,7 +32,7 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event ) { case ID_MENU_LOAD_FILE: case ID_LOAD_FILE: - if( Clear_Pcb( &dc, TRUE ) ) + if( Clear_Pcb( TRUE ) ) { LoadOneGerberFile( wxEmptyString, &dc, 0 ); } @@ -56,7 +56,7 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event ) case ID_MENU_NEW_BOARD: case ID_NEW_BOARD: - Clear_Pcb( &dc, TRUE ); + Clear_Pcb( TRUE ); Zoom_Automatique( FALSE ); GetScreen()->SetRefreshReq(); break; @@ -71,7 +71,7 @@ void WinEDA_GerberFrame::Files_io( wxCommandEvent& event ) case ID_LOAD_FILE_8: case ID_LOAD_FILE_9: case ID_LOAD_FILE_10: - if( Clear_Pcb( &dc, TRUE ) ) + if( Clear_Pcb( TRUE ) ) { LoadOneGerberFile( GetLastProject( id - ID_LOAD_FILE_1 ).GetData(), diff --git a/gerbview/initpcb.cpp b/gerbview/initpcb.cpp index 68fa949d5c..9bd7e265e1 100644 --- a/gerbview/initpcb.cpp +++ b/gerbview/initpcb.cpp @@ -15,7 +15,7 @@ /********************************************************/ -bool WinEDA_GerberFrame::Clear_Pcb( wxDC* DC, bool query ) +bool WinEDA_GerberFrame::Clear_Pcb( bool query ) /********************************************************/ /* Realise les init des pointeurs et variables @@ -82,7 +82,7 @@ bool WinEDA_GerberFrame::Clear_Pcb( wxDC* DC, bool query ) /*********************************************************/ -void WinEDA_GerberFrame::Erase_Zones( wxDC* DC, bool query ) +void WinEDA_GerberFrame::Erase_Zones( bool query ) /*********************************************************/ { if( query && !IsOK( this, _( "Delete zones ?" ) ) ) @@ -98,10 +98,9 @@ void WinEDA_GerberFrame::Erase_Zones( wxDC* DC, bool query ) } -/*****************************************************/ -void WinEDA_GerberFrame::Erase_Segments_Pcb( wxDC* DC, - bool all_layers, bool query ) -/*****************************************************/ +/************************************************************************/ +void WinEDA_GerberFrame::Erase_Segments_Pcb( bool all_layers, bool query ) +/************************************************************************/ { BOARD_ITEM* PtStruct; BOARD_ITEM* PtNext; @@ -135,10 +134,9 @@ void WinEDA_GerberFrame::Erase_Segments_Pcb( wxDC* DC, } -/****************************************************************/ -void WinEDA_GerberFrame::Erase_Pistes( wxDC* DC, int masque_type, - bool query ) -/****************************************************************/ +/******************************************************************/ +void WinEDA_GerberFrame::Erase_Pistes( int masque_type, bool query ) +/******************************************************************/ /* Efface les segments de piste, selon les autorisations affichees * masque_type = masque des options de selection: @@ -166,7 +164,7 @@ void WinEDA_GerberFrame::Erase_Pistes( wxDC* DC, int masque_type, /*****************************************************************/ -void WinEDA_GerberFrame::Erase_Textes_Pcb( wxDC* DC, bool query ) +void WinEDA_GerberFrame::Erase_Textes_Pcb( bool query ) /*****************************************************************/ { BOARD_ITEM* PtStruct; @@ -187,9 +185,9 @@ void WinEDA_GerberFrame::Erase_Textes_Pcb( wxDC* DC, bool query ) } -/*******************************************************************/ -void WinEDA_GerberFrame::Erase_Current_Layer( wxDC* DC, bool query ) -/*******************************************************************/ +/*********************************************************/ +void WinEDA_GerberFrame::Erase_Current_Layer( bool query ) +/*********************************************************/ { int layer = GetScreen()->m_Active_Layer; wxString msg; diff --git a/include/wxstruct.h b/include/wxstruct.h index 99d9aeb283..bc70388f02 100644 --- a/include/wxstruct.h +++ b/include/wxstruct.h @@ -393,15 +393,15 @@ public: // Read/write fonctions: EDA_BaseStruct* ReadDrawSegmentDescr( FILE* File, int* LineNum ); - int ReadListeSegmentDescr( wxDC* DC, FILE* File, + int ReadListeSegmentDescr( FILE* File, TRACK* PtSegm, int StructType, int* LineNum, int NumSegm ); int ReadSetup( FILE* File, int* LineNum ); - int ReadGeneralDescrPcb( wxDC* DC, FILE* File, int* LineNum ); + int ReadGeneralDescrPcb( FILE* File, int* LineNum ); // PCB handling - bool Clear_Pcb( wxDC* DC, bool query ); + bool Clear_Pcb( bool query ); /** * Function PcbGeneralLocateAndDisplay @@ -681,12 +681,12 @@ public: // loading modules: see WinEDA_BasePcbFrame - // Borad handling - void Erase_Zones( wxDC* DC, bool query ); - void Erase_Segments_Pcb( wxDC* DC, bool is_edges, bool query ); + // Board handling + void Erase_Zones( bool query ); + void Erase_Segments_Pcb( bool is_edges, bool query ); void Erase_Pistes( wxDC* DC, int masque_type, bool query ); - void Erase_Modules( wxDC* DC, bool query ); - void Erase_Textes_Pcb( wxDC* DC, bool query ); + void Erase_Modules( bool query ); + void Erase_Textes_Pcb( bool query ); void Erase_Marqueurs(); void UnDeleteItem( wxDC* DC ); void RemoveStruct( BOARD_ITEM* Item, wxDC* DC ); @@ -902,12 +902,12 @@ public: void Place_Texte_Pcb( TEXTE_PCB* TextePcb, wxDC* DC ); // PCB handling - bool Clear_Pcb( wxDC* DC, bool query ); - void Erase_Current_Layer( wxDC* DC, bool query ); - void Erase_Zones( wxDC* DC, bool query ); - void Erase_Segments_Pcb( wxDC* DC, bool is_edges, bool query ); - void Erase_Pistes( wxDC* DC, int masque_type, bool query ); - void Erase_Textes_Pcb( wxDC* DC, bool query ); + bool Clear_Pcb( bool query ); + void Erase_Current_Layer( bool query ); + void Erase_Zones( bool query ); + void Erase_Segments_Pcb( bool is_edges, bool query ); + void Erase_Pistes( int masque_type, bool query ); + void Erase_Textes_Pcb( bool query ); void UnDeleteItem( wxDC* DC ); void Delete_DCode_Items( wxDC* DC, int dcode_value, int layer_number ); diff --git a/pcbnew/files.cpp b/pcbnew/files.cpp index d998e1b747..816adf4744 100644 --- a/pcbnew/files.cpp +++ b/pcbnew/files.cpp @@ -34,7 +34,7 @@ void WinEDA_PcbFrame::Files_io( wxCommandEvent& event ) { case ID_MENU_LOAD_FILE: case ID_LOAD_FILE: - Clear_Pcb( &dc, TRUE ); + Clear_Pcb(TRUE ); LoadOnePcbFile( wxEmptyString, &dc, FALSE ); ReCreateAuxiliaryToolbar(); break; @@ -64,7 +64,7 @@ void WinEDA_PcbFrame::Files_io( wxCommandEvent& event ) if( !IsOK( this, msg ) ) break; } - Clear_Pcb( &dc, TRUE ); + Clear_Pcb( TRUE ); LoadOnePcbFile( filename, &dc, FALSE ); GetScreen()->m_FileName = oldfilename; SetTitle( GetScreen()->m_FileName ); @@ -79,7 +79,7 @@ void WinEDA_PcbFrame::Files_io( wxCommandEvent& event ) case ID_MENU_NEW_BOARD: case ID_NEW_BOARD: - Clear_Pcb( &dc, TRUE ); + Clear_Pcb( TRUE ); GetScreen()->m_FileName.Printf( wxT( "%s%cnoname%s" ), wxGetCwd().GetData(), DIR_SEP, PcbExtBuffer.GetData() ); SetTitle( GetScreen()->m_FileName ); @@ -95,7 +95,7 @@ void WinEDA_PcbFrame::Files_io( wxCommandEvent& event ) case ID_LOAD_FILE_8: case ID_LOAD_FILE_9: case ID_LOAD_FILE_10: - Clear_Pcb( &dc, TRUE ); + Clear_Pcb(TRUE ); wxSetWorkingDirectory( wxPathOnly( GetLastProject( id - ID_LOAD_FILE_1 ) ) ); LoadOnePcbFile( GetLastProject( id - ID_LOAD_FILE_1 ).GetData(), &dc, FALSE ); diff --git a/pcbnew/initpcb.cpp b/pcbnew/initpcb.cpp index bc23497d8c..53e287a1c4 100644 --- a/pcbnew/initpcb.cpp +++ b/pcbnew/initpcb.cpp @@ -41,38 +41,38 @@ void WinEDA_PcbGlobalDeleteFrame::AcceptPcbDelete( wxCommandEvent& event ) if( m_DelAlls->GetValue() ) { - m_Parent->Clear_Pcb( &dc, TRUE ); + m_Parent->Clear_Pcb( TRUE ); redraw = TRUE; } else { if( m_DelZones->GetValue() ) { - m_Parent->Erase_Zones( &dc, TRUE ); + m_Parent->Erase_Zones( TRUE ); redraw = TRUE; } if( m_DelTexts->GetValue() ) { - m_Parent->Erase_Textes_Pcb( &dc, TRUE ); + m_Parent->Erase_Textes_Pcb( TRUE ); redraw = TRUE; } if( m_DelEdges->GetValue() ) { - m_Parent->Erase_Segments_Pcb( &dc, TRUE, TRUE ); + m_Parent->Erase_Segments_Pcb( TRUE, TRUE ); redraw = TRUE; } if( m_DelDrawings->GetValue() ) { - m_Parent->Erase_Segments_Pcb( &dc, FALSE, TRUE ); + m_Parent->Erase_Segments_Pcb( FALSE, TRUE ); redraw = TRUE; } if( m_DelModules->GetValue() ) { - m_Parent->Erase_Modules( &dc, TRUE ); + m_Parent->Erase_Modules( TRUE ); redraw = TRUE; } @@ -108,7 +108,7 @@ void WinEDA_PcbGlobalDeleteFrame::AcceptPcbDelete( wxCommandEvent& event ) /*********************************************************/ -bool WinEDA_BasePcbFrame::Clear_Pcb( wxDC* DC, bool query ) +bool WinEDA_BasePcbFrame::Clear_Pcb( bool query ) /*********************************************************/ /* Realise les init des pointeurs et variables @@ -146,7 +146,7 @@ bool WinEDA_BasePcbFrame::Clear_Pcb( wxDC* DC, bool query ) m_Pcb->m_Zone = NULL; m_Pcb->m_NbSegmZone = 0; - DelLimitesZone( DC, FALSE ); + DelLimitesZone( NULL, FALSE ); for( ; g_UnDeleteStackPtr != 0; ) { @@ -207,7 +207,7 @@ bool WinEDA_BasePcbFrame::Clear_Pcb( wxDC* DC, bool query ) /************************************************************/ -void WinEDA_PcbFrame::Erase_Zones( wxDC* DC, bool query ) +void WinEDA_PcbFrame::Erase_Zones( bool query ) /************************************************************/ { if( query && !IsOK( this, _( "Delete Zones ?" ) ) ) @@ -220,14 +220,14 @@ void WinEDA_PcbFrame::Erase_Zones( wxDC* DC, bool query ) m_Pcb->m_NbSegmZone = 0; } - DelLimitesZone( DC, FALSE ); + DelLimitesZone( NULL, FALSE ); GetScreen()->SetModify(); } /*****************************************************************************/ -void WinEDA_PcbFrame::Erase_Segments_Pcb( wxDC* DC, bool is_edges, bool query ) +void WinEDA_PcbFrame::Erase_Segments_Pcb( bool is_edges, bool query ) /*****************************************************************************/ { BOARD_ITEM* PtStruct; @@ -272,7 +272,7 @@ void WinEDA_PcbFrame::Erase_Segments_Pcb( wxDC* DC, bool is_edges, bool query ) /**************************************************************************/ -void WinEDA_PcbFrame::Erase_Pistes( wxDC* DC, int masque_type, bool query ) +void WinEDA_PcbFrame::Erase_Pistes( wxDC * DC, int masque_type, bool query ) /**************************************************************************/ /* Efface les segments de piste, selon les autorisations affichees @@ -304,7 +304,7 @@ void WinEDA_PcbFrame::Erase_Pistes( wxDC* DC, int masque_type, bool query ) /**************************************************************/ -void WinEDA_PcbFrame::Erase_Modules( wxDC* DC, bool query ) +void WinEDA_PcbFrame::Erase_Modules( bool query ) /**************************************************************/ { if( query && !IsOK( this, _( "Delete Modules?" ) ) ) @@ -325,7 +325,7 @@ void WinEDA_PcbFrame::Erase_Modules( wxDC* DC, bool query ) /************************************************************/ -void WinEDA_PcbFrame::Erase_Textes_Pcb( wxDC* DC, bool query ) +void WinEDA_PcbFrame::Erase_Textes_Pcb( bool query ) /************************************************************/ { BOARD_ITEM* PtStruct, * PtNext; diff --git a/pcbnew/ioascii.cpp b/pcbnew/ioascii.cpp index 68d77fb38d..94ba6fdaa0 100644 --- a/pcbnew/ioascii.cpp +++ b/pcbnew/ioascii.cpp @@ -74,46 +74,26 @@ extern Ki_PageDescr* SheetList[]; -/* Variables locales, utilisees pour la lecture des fichiers PCB */ +/* Local Variables */ int NbDraw, NbTrack, NbZone, NbMod, NbNets; /**********************************************************************/ -int WinEDA_BasePcbFrame::ReadListeSegmentDescr( wxDC* DC, FILE* File, +int WinEDA_BasePcbFrame::ReadListeSegmentDescr( FILE* File, TRACK* PtSegm, int StructType, int* LineNum, int NumSegm ) /**********************************************************************/ -/* Lecture de la description d'une liste de segments (Tracks, zones) - * Retourne: - * si ok nombre d'items lus. - * si pas de fin de block ($..) - nombre. +/** Read a list of segments (Tracks, zones) + * @return items count or - count if no end block ($End...) found. */ { int shape, width, layer, type, flags, net_code; - int ii = 0, PerCent, Pas; + int ii = 0; char line1[256]; char line2[256]; TRACK* NewTrack; - PerCent = 0; - - Pas = NumSegm / 99; - -#ifdef PCBNEW - switch( StructType ) - { - case TYPETRACK: - case TYPEVIA: - DisplayActivity( PerCent, wxT( "Tracks:" ) ); - break; - - case TYPEZONE: - DisplayActivity( PerCent, wxT( "Zones:" ) ); - break; - } -#endif - while( GetLine( File, line1, LineNum ) ) { int makeType; @@ -121,7 +101,7 @@ int WinEDA_BasePcbFrame::ReadListeSegmentDescr( wxDC* DC, FILE* File, if( line1[0] == '$' ) { - return ii; /* fin de liste OK */ + return ii; /* end of segmentlist: OK */ } // Read the 2nd line to determine the exact type, one of: @@ -179,29 +159,6 @@ int WinEDA_BasePcbFrame::ReadListeSegmentDescr( wxDC* DC, FILE* File, PtSegm->SetLayer( layer ); PtSegm->SetNet( net_code ); PtSegm->SetState( flags, ON ); - -#ifdef PCBNEW - PtSegm->Draw( DrawPanel, DC, GR_OR ); -#endif - ii++; - if( ( Pas && (ii % Pas ) == 0) ) - { - PerCent++; - -#ifdef PCBNEW - switch( makeType ) - { - case TYPETRACK: - case TYPEVIA: - DisplayActivity( PerCent, _( "Tracks:" ) ); - break; - - case TYPEZONE: - DisplayActivity( PerCent, _( "Zones:" ) ); - break; - } -#endif - } } DisplayError( this, _( "Error: Unexpected end of file !" ) ); @@ -210,7 +167,7 @@ int WinEDA_BasePcbFrame::ReadListeSegmentDescr( wxDC* DC, FILE* File, /**********************************************************************************/ -int WinEDA_BasePcbFrame::ReadGeneralDescrPcb( wxDC* DC, FILE* File, int* LineNum ) +int WinEDA_BasePcbFrame::ReadGeneralDescrPcb( FILE* File, int* LineNum ) /**********************************************************************************/ { char Line[1024], * data; @@ -266,29 +223,6 @@ int WinEDA_BasePcbFrame::ReadGeneralDescrPcb( wxDC* DC, FILE* File, int* LineNum m_Pcb->m_BoundaryBox.SetWidth( atoi( data ) - m_Pcb->m_BoundaryBox.GetX() ); data = strtok( NULL, " =\n\r" ); m_Pcb->m_BoundaryBox.SetHeight( atoi( data ) - m_Pcb->m_BoundaryBox.GetY() ); - - /* calcul du zoom optimal */ - pcbsize = m_Pcb->m_BoundaryBox.GetSize(); - screensize = DrawPanel->GetClientSize(); - ii = pcbsize.x / screensize.x; - jj = pcbsize.y / screensize.y; - bestzoom = MAX( ii, jj ); - screen->m_Curseur = m_Pcb->m_BoundaryBox.Centre(); - - screen->SetZoom( bestzoom ); - - // la position des trac� a chang� mise a jour dans le DC courant - wxPoint org; - DrawPanel->GetViewStart( &org.x, &org.y ); - DrawPanel->GetScrollPixelsPerUnit( &ii, &jj ); - org.x *= ii; org.y *= jj; -#ifdef WX_ZOOM - DC->SetUserScale( 1.0 / (double) screen->GetZoom(), 1.0 / screen->GetZoom() ); - org.x *= screen->GetZoom(); org.y *= screen->GetZoom(); - DC->SetDeviceOrigin( -org.x, -org.y ); -#endif - DrawPanel->SetBoundaryBox(); - Recadre_Trace( TRUE ); continue; } @@ -527,21 +461,6 @@ int WinEDA_BasePcbFrame::ReadSetup( FILE* File, int* LineNum ) g_Pad_Master.m_Drill.y = g_Pad_Master.m_Drill.x; continue; } - - if( stricmp( Line, "PadDeltaSize" ) == 0 ) - { - g_Pad_Master.m_DeltaSize.x = atoi( data ); - data = strtok( NULL, " =\n\r" ); - g_Pad_Master.m_DeltaSize.y = atoi( data ); - continue; - } - if( stricmp( Line, "PadShapeOffset" ) == 0 ) - { - g_Pad_Master.m_Offset.x = atoi( data ); - data = strtok( NULL, " =\n\r" ); - g_Pad_Master.m_Offset.y = atoi( data ); - continue; - } #endif } @@ -613,9 +532,6 @@ static int WriteSetup( FILE* File, WinEDA_BasePcbFrame* frame ) fprintf( File, "PadSize %d %d\n", g_Pad_Master.m_Size.x, g_Pad_Master.m_Size.y ); fprintf( File, "PadDrill %d\n", g_Pad_Master.m_Drill.x ); -// fprintf(File, "PadDeltaSize %d %d\n", Pad_DeltaSize.x, Pad_DeltaSize.y); -// fprintf(File, "PadDrillOffset %d %d\n", Pad_OffsetSize.x, Pad_OffsetSize.y); - fprintf( File, "AuxiliaryAxisOrg %d %d\n", frame->m_Auxiliary_Axis_Position.x, frame->m_Auxiliary_Axis_Position.y ); @@ -633,11 +549,7 @@ bool WinEDA_PcbFrame::WriteGeneralDescrPcb( FILE* File ) EDA_BaseStruct* PtStruct = m_Pcb->m_Modules; int NbModules, NbDrawItem, NbLayers; - /* Calcul du nombre des modules */ - for( NbModules = 0; PtStruct != NULL; PtStruct = PtStruct->Pnext ) - NbModules++; - - /* generation du masque des couches autorisees */ + /* Write copper layer count */ NbLayers = m_Pcb->m_BoardSettings->m_CopperLayerCount; fprintf( File, "$GENERAL\n" ); fprintf( File, "LayerCount %d\n", NbLayers ); @@ -647,14 +559,18 @@ bool WinEDA_PcbFrame::WriteGeneralDescrPcb( FILE* File ) fprintf( File, "Links %d\n", m_Pcb->m_NbLinks ); fprintf( File, "NoConn %d\n", m_Pcb->m_NbNoconnect ); - /* Generation des coord du rectangle d'encadrement */ + /* Write Bounding box info */ m_Pcb->ComputeBoundaryBox(); fprintf( File, "Di %d %d %d %d\n", m_Pcb->m_BoundaryBox.GetX(), m_Pcb->m_BoundaryBox.GetY(), m_Pcb->m_BoundaryBox.GetRight(), m_Pcb->m_BoundaryBox.GetBottom() ); - /* Generation du nombre de segments type DRAW , TRACT ZONE */ + /* Write segment count for footprints, drawings, track and zones */ + /* Calculate the footprint count */ + for( NbModules = 0; PtStruct != NULL; PtStruct = PtStruct->Pnext ) + NbModules++; + PtStruct = m_Pcb->m_Drawings; NbDrawItem = 0; for( ; PtStruct != NULL; PtStruct = PtStruct->Pnext ) NbDrawItem++; @@ -674,8 +590,12 @@ bool WinEDA_PcbFrame::WriteGeneralDescrPcb( FILE* File ) /******************************************************/ bool WriteSheetDescr( BASE_SCREEN* screen, FILE* File ) /******************************************************/ +/** Function WriteSheetDescr +* Save the page information (size, texts, date ..) +* @param screen BASE_SCREEN to save + * @param File = an openen FILE to write info +*/ { - /* Sauvegarde des dimensions de la feuille de dessin, des textes du cartouche.. */ Ki_PageDescr* sheet = screen->m_CurrentSheet; fprintf( File, "$SHEETDESCR\n" ); @@ -701,7 +621,6 @@ static bool ReadSheetDescr( BASE_SCREEN* screen, FILE* File, int* LineNum ) { char Line[1024], buf[1024], * text; - /* Recheche suite et fin de descr */ while( GetLine( File, Line, LineNum ) != NULL ) { if( strnicmp( Line, "$End", 4 ) == 0 ) @@ -799,9 +718,10 @@ static bool ReadSheetDescr( BASE_SCREEN* screen, FILE* File, int* LineNum ) int WinEDA_PcbFrame::ReadPcbFile( wxDC* DC, FILE* File, bool Append ) /********************************************************************/ -/* Lit un fichier PCB .brd - * Si Append == 0: l'ancien pcb en memoire est supprime - * Sinon il y a ajout des elements +/** ReadPcbFile + * Read a board file .brd + * @param Append if 0: a previoulsy loaded boar is delete before loadin the file. + * else all items of the board file are added to the existing board */ { char Line[1024]; @@ -852,7 +772,7 @@ int WinEDA_PcbFrame::ReadPcbFile( wxDC* DC, FILE* File, bool Append ) if( strnicmp( Line, "$GENERAL", 8 ) == 0 ) { - ReadGeneralDescrPcb( DC, File, &LineNum ); + ReadGeneralDescrPcb( File, &LineNum ); continue; } @@ -898,10 +818,6 @@ int WinEDA_PcbFrame::ReadPcbFile( wxDC* DC, FILE* File, bool Append ) if( strnicmp( Line, "$MODULE", 7 ) == 0 ) { - float Pas; - Pas = 100.0; if( NbMod > 1 ) - Pas /= NbMod; - Module = new MODULE( m_Pcb ); if( Module == NULL ) continue; @@ -919,10 +835,6 @@ int WinEDA_PcbFrame::ReadPcbFile( wxDC* DC, FILE* File, bool Append ) } LastModule = Module; nbmod++; -#ifdef PCBNEW - DisplayActivity( (int) ( Pas * nbmod), wxT( "Modules:" ) ); -#endif - Module->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_OR ); continue; } @@ -942,9 +854,6 @@ int WinEDA_PcbFrame::ReadPcbFile( wxDC* DC, FILE* File, bool Append ) LastStructPcb->Pnext = StructPcb; } LastStructPcb = StructPcb; -#ifdef PCBNEW - ( (TEXTE_PCB*) StructPcb )->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_OR ); -#endif continue; } @@ -963,9 +872,6 @@ int WinEDA_PcbFrame::ReadPcbFile( wxDC* DC, FILE* File, bool Append ) LastStructPcb->Pnext = DrawSegm; } LastStructPcb = DrawSegm; -#ifdef PCBNEW - Trace_DrawSegmentPcb( DrawPanel, DC, DrawSegm, GR_OR ); -#endif continue; } @@ -985,9 +891,6 @@ int WinEDA_PcbFrame::ReadPcbFile( wxDC* DC, FILE* File, bool Append ) LastStructPcb->Pnext = Cotation; } LastStructPcb = Cotation; -#ifdef PCBNEW - Cotation->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_OR ); -#endif continue; } @@ -1007,9 +910,6 @@ int WinEDA_PcbFrame::ReadPcbFile( wxDC* DC, FILE* File, bool Append ) LastStructPcb->Pnext = Mire; } LastStructPcb = Mire; -#ifdef PCBNEW - Mire->Draw( DrawPanel, DC, wxPoint( 0, 0 ), GR_OR ); -#endif continue; } @@ -1028,7 +928,7 @@ int WinEDA_PcbFrame::ReadPcbFile( wxDC* DC, FILE* File, bool Append ) } #ifdef PCBNEW - int ii = ReadListeSegmentDescr( DC, File, StartTrack, TYPETRACK, + int ii = ReadListeSegmentDescr( File, StartTrack, TYPETRACK, &LineNum, NbTrack ); m_Pcb->m_NbSegmTrack += ii; #endif @@ -1049,7 +949,7 @@ int WinEDA_PcbFrame::ReadPcbFile( wxDC* DC, FILE* File, bool Append ) } #ifdef PCBNEW - int ii = ReadListeSegmentDescr( DC, File, StartZone, TYPEZONE, + int ii = ReadListeSegmentDescr( File, StartZone, TYPEZONE, &LineNum, NbZone ); m_Pcb->m_NbSegmZone += ii; #endif @@ -1060,6 +960,9 @@ int WinEDA_PcbFrame::ReadPcbFile( wxDC* DC, FILE* File, bool Append ) setlocale( LC_NUMERIC, "" ); // revert to the current locale Affiche_Message( wxEmptyString ); + + BestZoom(); + DrawPanel->ReDraw(DC, true); #ifdef PCBNEW Compile_Ratsnest( DC, TRUE ); diff --git a/pcbnew/loadcmp.cpp b/pcbnew/loadcmp.cpp index f3081c0c44..0cc7af70c9 100644 --- a/pcbnew/loadcmp.cpp +++ b/pcbnew/loadcmp.cpp @@ -61,7 +61,7 @@ void WinEDA_ModuleEditFrame::Load_Module_Module_From_BOARD( MODULE* Module ) SetCurItem( NULL ); - Clear_Pcb( NULL, TRUE ); + Clear_Pcb( TRUE ); m_Pcb->m_Status_Pcb = 0; NewModule = new MODULE( m_Pcb ); diff --git a/pcbnew/modedit.cpp b/pcbnew/modedit.cpp index 893c424dfc..18dd2db526 100644 --- a/pcbnew/modedit.cpp +++ b/pcbnew/modedit.cpp @@ -209,7 +209,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event ) break; case ID_MODEDIT_NEW_MODULE: - Clear_Pcb( &dc, TRUE ); + Clear_Pcb( TRUE ); GetScreen()->ClearUndoRedoList(); SetCurItem( NULL ); GetScreen()->m_Curseur = wxPoint( 0, 0 ); @@ -314,7 +314,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event ) case ID_LIBEDIT_IMPORT_PART: GetScreen()->ClearUndoRedoList(); SetCurItem( NULL ); - Clear_Pcb( &dc, TRUE ); + Clear_Pcb( TRUE ); GetScreen()->m_Curseur = wxPoint( 0, 0 ); Import_Module( &dc ); if( m_Pcb->m_Modules ) @@ -342,7 +342,7 @@ void WinEDA_ModuleEditFrame::Process_Special_Functions( wxCommandEvent& event ) { GetScreen()->ClearUndoRedoList(); SetCurItem( NULL ); - Clear_Pcb( &dc, TRUE ); + Clear_Pcb( TRUE ); GetScreen()->m_Curseur = wxPoint( 0, 0 ); Load_Module_From_Library( m_CurrentLib, &dc ); if( m_Pcb->m_Modules ) diff --git a/pcbnew/zones.cpp b/pcbnew/zones.cpp index 0527da881f..37d810d229 100644 --- a/pcbnew/zones.cpp +++ b/pcbnew/zones.cpp @@ -643,7 +643,7 @@ void WinEDA_BasePcbFrame::DelLimitesZone( wxDC* DC, bool Redraw ) { next = segment->Next(); - if( Redraw ) + if( Redraw && DC ) Trace_DrawSegmentPcb( DrawPanel, DC, segment, GR_XOR ); delete segment;