From 64784945ff2be244150869edda12b0b44ab80066 Mon Sep 17 00:00:00 2001 From: CHARRAS Date: Thu, 1 Nov 2007 12:34:24 +0000 Subject: [PATCH] zone.cpp comments translated into english --- pcbnew/zones.cpp | 165 ++++++++++++++++++++++++----------------------- 1 file changed, 85 insertions(+), 80 deletions(-) diff --git a/pcbnew/zones.cpp b/pcbnew/zones.cpp index 3928762426..c91c3cabd9 100644 --- a/pcbnew/zones.cpp +++ b/pcbnew/zones.cpp @@ -35,20 +35,21 @@ ////@begin XPM images ////@end XPM images -/* Routines Locales */ +/* Local functions */ static void Display_Zone_Netname( WinEDA_PcbFrame* frame ); static void Exit_Zones( WinEDA_DrawPanel* Panel, wxDC* DC ); static void Show_Zone_Edge_While_MoveMouse( WinEDA_DrawPanel* panel, wxDC* DC, bool erase ); static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code ); static bool Genere_Pad_Connexion( WinEDA_PcbFrame* frame, wxDC* DC, int layer ); -/* Variables locales */ +/* Local variables */ static bool Zone_Debug = FALSE; static bool Zone_45_Only = FALSE; static bool Zone_Exclude_Pads = TRUE; -static bool Zone_Genere_Freins_Thermiques = TRUE; +static bool s_Zone_Create_Thermal_Relief = TRUE; -static unsigned long s_TimeStamp; /* signature temporelle pour la zone generee */ +/* Time stamp comon to all segments relative to the new created zone */ +static unsigned long s_TimeStamp; /*! * WinEDA_ZoneFrame type definition @@ -262,7 +263,7 @@ void WinEDA_ZoneFrame::CreateControls() if( Zone_Exclude_Pads ) { - if( Zone_Genere_Freins_Thermiques ) + if( s_Zone_Create_Thermal_Relief ) m_FillOpt->SetSelection( 1 ); else m_FillOpt->SetSelection( 2 ); @@ -335,17 +336,17 @@ void WinEDA_ZoneFrame::ExecFillZone( wxCommandEvent& event ) { case 0: Zone_Exclude_Pads = FALSE; - Zone_Genere_Freins_Thermiques = FALSE; + s_Zone_Create_Thermal_Relief = FALSE; break; case 1: Zone_Exclude_Pads = TRUE; - Zone_Genere_Freins_Thermiques = TRUE; + s_Zone_Create_Thermal_Relief = TRUE; break; case 2: Zone_Exclude_Pads = TRUE; - Zone_Genere_Freins_Thermiques = FALSE; + s_Zone_Create_Thermal_Relief = FALSE; break; } @@ -803,19 +804,15 @@ static void Show_Zone_Edge_While_MoveMouse( WinEDA_DrawPanel* panel, wxDC* DC, b void WinEDA_PcbFrame::Fill_Zone( wxDC* DC ) /**********************************************/ -/* - * Fonction generale de creation de zone - * Un contour de zone doit exister, sinon l'ensemble du PCB est utilise - * - * ce qui permet de creer des obstacles et donc des parties non remplies. - * - * Le remplissage s'effectue a partir du point d'ancrage, jusque ves les limites - * - * - * On place la zone sur la couche (layer) active. - * - * - * "Hight Light" la zone fera partie de ce net +/** Function Fill_Zone() + * Init the zone filling + * If a zone edge is found, it is used. + * Otherwise the whole board is filled by the zone + * The zone edge is a frontier, and can be complex. So non filled zones can be achieved + * The zone is put on the active layer + * If a net is hightlighted, the zone will be attached to this net + * The filling start from a starting point. + * If a net is selected, all tracks attached to this net are also starting points */ { int ii, jj; @@ -910,7 +907,7 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC ) lp_tmp = g_DesignSettings.m_CurrentTrackWidth; g_DesignSettings.m_CurrentTrackWidth = g_GridRoutingSize; - /* Affichage du NetName */ + /* Shos the NetName */ if( g_HightLigth_NetCode > 0 ) { pt_equipot = m_Pcb->FindNet( g_HightLigth_NetCode ); @@ -927,8 +924,8 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC ) Affiche_1_Parametre( this, 22, _( "NetName" ), msg, RED ); - /* Init des points d'accrochage possibles de la zone: - * les pistes du net sont des points d'accrochage convenables*/ + /* Create the starting point for thz zone: + * The starting point and all the tracks are suitable "starting points" */ TRACK* pt_segm = m_Pcb->m_Track; for( ; pt_segm != NULL; pt_segm = pt_segm->Next() ) { @@ -997,8 +994,8 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC ) PlaceCells( m_Pcb, g_HightLigth_NetCode, ii ); Affiche_1_Parametre( this, -1, wxEmptyString, _( "Ok" ), RED ); - /* Trace des limites de la zone sur la matrice de routage - * (a pu etre detruit par PlaceCells()) : */ + /* Create zone limits on the routing matrix + * (colud be deleted by PlaceCells()) : */ for( PtLim = m_Pcb->m_CurrentLimitZone; PtLim; PtLim = PtLim->Next() ) { int ux0, uy0, ux1, uy1; @@ -1009,14 +1006,14 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC ) TraceLignePcb( ux0, uy0, ux1, uy1, -1, HOLE | CELL_is_EDGE, WRITE_CELL ); } - /* Init du point d'accrochage de la zone donné par la position souris - * (a pu etre detruit par PlaceCells()) : */ + /* Init the starting point for zone filling : this is the mouse position + * (could be deleted by PlaceCells()) : */ OrCell( ZoneStartFill.y, ZoneStartFill.x, BOTTOM, CELL_is_ZONE ); if( Zone_Debug ) DisplayBoard( DrawPanel, DC ); - /* Remplissage des cellules (creation effective de la zone)*/ + /* Filling the cells of the matrix (tjis is the zone building)*/ ii = 1; jj = 1; while( ii ) { @@ -1028,15 +1025,15 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC ) if( Zone_Debug ) DisplayBoard( DrawPanel, DC ); - /* Generation des segments de piste type Zone correspondants*/ + /* Convert the matrix information (cells) to segments which are actually the zone */ if( g_HightLigth_NetCode < 0 ) Genere_Segments_Zone( this, DC, 0 ); else Genere_Segments_Zone( this, DC, g_HightLigth_NetCode ); - /* Trace des connexions type frein thermique */ + /* Create the thermal reliefs */ g_DesignSettings.m_CurrentTrackWidth = lp_tmp; - if( Zone_Exclude_Pads && Zone_Genere_Freins_Thermiques ) + if( Zone_Exclude_Pads && s_Zone_Create_Thermal_Relief ) Genere_Pad_Connexion( this, DC, GetScreen()->m_Active_Layer ); g_DesignSettings.m_TrackClearence = save_isol; @@ -1056,15 +1053,18 @@ void WinEDA_PcbFrame::Fill_Zone( wxDC* DC ) static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code ) /*******************************************************************************/ -/* Genere les segments de piste dans les limites de la zone a remplir - * Algorithme: - * procede en 2 balayages - * - Gauche->droite - * - Haut->Bas - * Parametres: - * net_code = net_code a attribuer au segment de zone - * TimeStamp(global): signature temporelle d'identification - * (mis en .start) +/** Function Genere_Segments_Zone() + * Create the zone segments from the routing matrix structure + * Algorithm: + * Search for consecutive cells (flagged "zone") , and create segments +* from the first cell to the last cell in the matrix + * 2 searchs are made + * 1 - From left to right and create horizontal zone segments + * 2 - From top to bottom, and create vertical zone segmùents + * @param net_code = net_code common to all segment zone created + * @param DC = current device context + * @param frame = current WinEDA_PcbFrame + * global: parameter TimeStamp: time stamp common to all segment zone created */ { int row, col; @@ -1173,24 +1173,28 @@ static void Genere_Segments_Zone( WinEDA_PcbFrame* frame, wxDC* DC, int net_code int Propagation( WinEDA_PcbFrame* frame ) /********************************************/ -/* Determine les cellules inscrites dans les limites de la zone a remplir - * Algorithme: - * Si une cellule disponible a un voisin faisant partie de la zone, elle - * devient elle meme partie de la zone - * On procede en 4 balayages de la matrice des cellules - * - Gauche->droite de Haut->bas - * - Droite->gauche de Haut->bas - * - Bas->Haut de Droite->gauche - * - Bas->Haut de Gauche->Droite - * et pour chaque balayage, on considere des 2 cellules voisines de - * la cellule courants: cellule precedente sur la ligne et cellule precedente - * sur la colonne. +/** Function Propagation() + * An important function to calculate zones + * Uses the routing matrix to fill the cells within the zone + * Search and mark cells within the zone, and agree with DRC options. + * Requirements: + * Start from an initial point, to fill zone + * The zone must have no "copper island" + * Algorithm: + * If the current cell has a neightbour flagged as "cell in the zone", it + * become a cell in the zone + * The first point in the zone is the starting point + * 4 searches within the matrix are made: + * 1 - Left to right and top to bottom + * 2 - Right to left and top to bottom + * 3 - bottom to top and Right to left + * 4 - bottom to top and Left to right + * Given the current cell, for each search, we consider the 2 neightbour cells + * the previous cell on the same line and the previous cell on the same column. * - * La routine peut demander plusieurs iterations - * les iterations doivent continuer juqu'a ce que la routine ne trouve plus - * de cellules a modifier. - * Retourne: - * Nombre de cellules modifiees (c.a.d mises a la valeur CELL_is_ZONE. + * This funtion can request some iterations + * Iterations are made until no cell is added to the zone. + * @return: added cells count (i.e. which the attribute CELL_is_ZONE is set) */ { int row, col, nn; @@ -1202,13 +1206,13 @@ int Propagation( WinEDA_PcbFrame* frame ) wxString msg; Affiche_1_Parametre( frame, 57, wxT( "Detect" ), msg, CYAN ); - /* balayage Gauche-> droite de Haut->bas */ Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "1" ), CYAN ); - // Reservation memoire pour stockahe de 1 ligne ou une colonne de cellules + // Alloc memory to handle 1 line or 1 colunmn on the routing matrix nn = MAX( Nrows, Ncols ) * sizeof(*pt_cell_V); pt_cell_V = (long*) MyMalloc( nn ); + /* search 1 : from left to right and top to bottom */ memset( pt_cell_V, 0, nn ); for( row = 0; row < Nrows; row++ ) { @@ -1216,7 +1220,7 @@ int Propagation( WinEDA_PcbFrame* frame ) for( col = 0; col < Ncols; col++ ) { current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE; - if( current_cell == 0 ) /* une cellule libre a ete trouvee */ + if( current_cell == 0 ) /* a free cell is found */ { if( (old_cell_H & CELL_is_ZONE) || (pt_cell_V[col] & CELL_is_ZONE) ) @@ -1230,7 +1234,7 @@ int Propagation( WinEDA_PcbFrame* frame ) } } - /* balayage Droite-> gauche de Haut->bas */ + /* search 2 : from right to left and top to bottom */ Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "2" ), CYAN ); memset( pt_cell_V, 0, nn ); for( row = 0; row < Nrows; row++ ) @@ -1239,7 +1243,7 @@ int Propagation( WinEDA_PcbFrame* frame ) for( col = Ncols - 1; col >= 0; col-- ) { current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE; - if( current_cell == 0 ) /* une cellule libre a ete trouvee */ + if( current_cell == 0 ) /* a free cell is found */ { if( (old_cell_H & CELL_is_ZONE) || (pt_cell_V[col] & CELL_is_ZONE) ) @@ -1253,7 +1257,7 @@ int Propagation( WinEDA_PcbFrame* frame ) } } - /* balayage Bas->Haut de Droite->gauche */ + /* search 3 : from bottom to top and right to left balayage */ Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "3" ), CYAN ); memset( pt_cell_V, 0, nn ); for( col = Ncols - 1; col >= 0; col-- ) @@ -1262,7 +1266,7 @@ int Propagation( WinEDA_PcbFrame* frame ) for( row = Nrows - 1; row >= 0; row-- ) { current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE; - if( current_cell == 0 ) /* une cellule libre a ete trouvee */ + if( current_cell == 0 ) /* a free cell is found */ { if( (old_cell_H & CELL_is_ZONE) || (pt_cell_V[row] & CELL_is_ZONE) ) @@ -1276,7 +1280,7 @@ int Propagation( WinEDA_PcbFrame* frame ) } } - /* balayage Bas->Haut de Gauche->Droite*/ + /* search 4 : from bottom to top and left to right */ Affiche_1_Parametre( frame, -1, wxEmptyString, wxT( "4" ), CYAN ); memset( pt_cell_V, 0, nn ); for( col = 0; col < Ncols; col++ ) @@ -1285,7 +1289,7 @@ int Propagation( WinEDA_PcbFrame* frame ) for( row = Nrows - 1; row >= 0; row-- ) { current_cell = GetCell( row, col, BOTTOM ) & NO_CELL_ZONE; - if( current_cell == 0 ) /* une cellule libre a ete trouvee */ + if( current_cell == 0 ) /* a free cell is found */ { if( (old_cell_H & CELL_is_ZONE) || (pt_cell_V[row] & CELL_is_ZONE) ) @@ -1309,8 +1313,8 @@ int Propagation( WinEDA_PcbFrame* frame ) static bool Genere_Pad_Connexion( WinEDA_PcbFrame* frame, wxDC* DC, int layer ) /*****************************************************************************/ -/* Generation des segments de zone de connexion zone / pad pour constitution - * de freins thermiques +/* Create the thermal relief for each pad in the zone: + * this is 4 small segments from the pad to the zone */ { int ii, jj, Npads; @@ -1323,23 +1327,23 @@ static bool Genere_Pad_Connexion( WinEDA_PcbFrame* frame, wxDC* DC, int layer ) wxString msg; if( frame->m_Pcb->m_Zone == NULL ) - return FALSE; /* pas de zone */ + return FALSE; /* error: no zone */ - if( frame->m_Pcb->m_Zone->m_TimeStamp != s_TimeStamp ) /* c'est une autre zone */ + if( frame->m_Pcb->m_Zone->m_TimeStamp != s_TimeStamp ) /* error: this is not the new zone */ return FALSE; - /* Calcul du nombre de pads a traiter et affichage */ + /* Count the pads, i.e. the thermal relief to create count, and displays it */ Affiche_1_Parametre( frame, 50, wxT( "NPads" ), wxT( " " ), CYAN ); pt_liste_pad = (LISTE_PAD*) frame->m_Pcb->m_Pads; for( ii = 0, Npads = 0; ii < frame->m_Pcb->m_NbPads; ii++, pt_liste_pad++ ) { pt_pad = *pt_liste_pad; - /* la pastille doit etre du meme net */ + /* Search pads relative to the selected net code */ if( pt_pad->GetNet() != g_HightLigth_NetCode ) continue; - /* la pastille doit exister sur la couche */ + /* Is the pad on the active layer ? */ if( (pt_pad->m_Masque_Layer & g_TabOneLayerMask[layer]) == 0 ) continue; Npads++; @@ -1348,20 +1352,21 @@ static bool Genere_Pad_Connexion( WinEDA_PcbFrame* frame, wxDC* DC, int layer ) msg.Printf( wxT( "%d" ), Npads ); Affiche_1_Parametre( frame, -1, wxEmptyString, msg, CYAN ); + /* Create the thermal reliefs */ Affiche_1_Parametre( frame, 57, wxT( "Pads" ), wxT( " " ), CYAN ); pt_liste_pad = (LISTE_PAD*) frame->m_Pcb->m_Pads; for( ii = 0, Npads = 0; ii < frame->m_Pcb->m_NbPads; ii++, pt_liste_pad++ ) { pt_pad = *pt_liste_pad; - /* la pastille doit etre du meme net */ + /* Search pads relative to the selected net code */ if( pt_pad->GetNet() != g_HightLigth_NetCode ) continue; - /* la pastille doit exister sur la couche */ + /* Is the pad on the active layer ? */ if( (pt_pad->m_Masque_Layer & g_TabOneLayerMask[layer]) == 0 ) continue; - /* traitement du pad en cours */ + /* Create the theram relief for the current pad */ Npads++; msg.Printf( wxT( "%d" ), Npads ); Affiche_1_Parametre( frame, -1, wxEmptyString, msg, CYAN ); cX = pt_pad->m_Pos.x; cY = pt_pad->m_Pos.y; @@ -1376,7 +1381,7 @@ static bool Genere_Pad_Connexion( WinEDA_PcbFrame* frame, wxDC* DC, int layer ) dy += abs( pt_pad->m_DeltaSize.x ) / 2; } - /* calcul des coord des 4 segments a rajouter a partir du centre cX,cY */ + /* calculate the 4 segment coordintes (starting from the pad centre cX,cY) */ sommet[0][0] = 0; sommet[0][1] = -dy; sommet[1][0] = -dx; sommet[1][1] = 0; sommet[2][0] = 0; sommet[2][1] = dy; @@ -1398,13 +1403,13 @@ static bool Genere_Pad_Connexion( WinEDA_PcbFrame* frame, wxDC* DC, int layer ) pt_track->m_End.y = cY + sommet[jj][1]; pt_track->m_TimeStamp = s_TimeStamp; - /* tst si trace possible */ + /* Test if the segment is allowed */ if( Drc( frame, DC, pt_track, frame->m_Pcb->m_Track, 0 ) == BAD_DRC ) { delete pt_track; continue; } - /* on doit pouvoir se connecter sur la zone */ + /* Search for a zone segment */ loctrack = Locate_Zone( frame->m_Pcb->m_Zone, pt_track->m_End, layer ); if( (loctrack == NULL) || (loctrack->m_TimeStamp != s_TimeStamp) ) {