Commit 2bd88d35 authored by CHARRAS's avatar CHARRAS
Browse files

small changes in editrack-part2.cpp (translation of some comments from french...

small changes in editrack-part2.cpp (translation of some comments from french to english) are some explanations relatives to the todo remark
parent 9d650474
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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-sept-04 UPDATE   Jean-Pierre Charras <jean-pierre.charras@inpg.fr>
================================================================================
+ pcbnew
	better comments in editrack-part2 (the todo remark solved) 
+ todo.txt: note about editrack-part2 modified (problem solved)


2007-Aug-31 UPDATE   Dick Hollenbeck <dick@softplc.com>
================================================================================
+28 −39
Original line number Diff line number Diff line
@@ -21,9 +21,9 @@
static EDA_BaseStruct*      CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREEN* screen,
                                        EDA_BaseStruct* DrawStruct );
static void                 CollectStructsToDrag( SCH_SCREEN* screen );
static void                 AddPickedItem( SCH_SCREEN* screen, int px, int py );
static void                 AddPickedItem( SCH_SCREEN* screen, wxPoint position );
static LibEDA_BaseStruct*   GetNextPinPosition( EDA_SchComponentStruct* DrawLibItem,
                                                int* px, int* py );
                                                wxPoint & position );
static void                 DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );
static EDA_BaseStruct*      SaveStructListForPaste( EDA_BaseStruct* DrawStruct );
static bool                 MirrorStruct( WinEDA_DrawPanel* panel, wxDC* DC,
@@ -1441,14 +1441,14 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
        if( Struct->Type() == DRAW_LIB_ITEM_STRUCT_TYPE )
        {
            LibEDA_BaseStruct* DrawItem;
            int x, y;
            DrawItem = GetNextPinPosition( (EDA_SchComponentStruct*) Struct, &x, &y );
            wxPoint pos;
            DrawItem = GetNextPinPosition( (EDA_SchComponentStruct*) Struct, pos );
            while( DrawItem )
            {
                if( (x < ox) || (x > fx) || (y < oy) || (y > fy) )
                    AddPickedItem( screen, x, y );
                if( (pos.x < ox) || (pos.x > fx) || (pos.y < oy) || (pos.y > fy) )
                    AddPickedItem( screen, pos );

                DrawItem = GetNextPinPosition( NULL, &x, &y );
                DrawItem = GetNextPinPosition( NULL, pos );
            }
        }

@@ -1458,7 +1458,7 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
            while( SLabel )
            {
                if( SLabel->Type() == DRAW_SHEETLABEL_STRUCT_TYPE )
                    AddPickedItem( screen, SLabel->m_Pos.x, SLabel->m_Pos.y );
                    AddPickedItem( screen, SLabel->m_Pos );
                SLabel = (DrawSheetLabelStruct*) SLabel->Pnext;
            }
        }
@@ -1466,15 +1466,15 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
        if( Struct->Type() == DRAW_BUSENTRY_STRUCT_TYPE )
        {
            DrawBusEntryStruct* item = (DrawBusEntryStruct*) Struct;
            AddPickedItem( screen, item->m_Pos.x, item->m_Pos.y );
            AddPickedItem( screen, item->m_End().x, item->m_End().y );
            AddPickedItem( screen, item->m_Pos );
            AddPickedItem( screen, item->m_End() );
        }
    }
}


/******************************************************************/
static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
static void AddPickedItem( SCH_SCREEN* screen, wxPoint position )
/******************************************************************/
{
    DrawPickedStruct* DrawStructs;
@@ -1492,10 +1492,10 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
        case DRAW_SEGMENT_STRUCT_TYPE:
                #undef STRUCT
                #define STRUCT ( (EDA_DrawLineStruct*) Struct )
            if( (STRUCT->m_Start.x == px) && (STRUCT->m_Start.y == py) )
            if( STRUCT->m_Start == position )
                STRUCT->m_Flags &= ~STARTPOINT;

            if( (STRUCT->m_End.x == px) && (STRUCT->m_End.y == py) )
            if( STRUCT->m_End == position )
                STRUCT->m_Flags &= ~ENDPOINT;
            break;

@@ -1524,9 +1524,7 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
                #define STRUCT ( (DrawJunctionStruct*) Struct )
            if( Struct->m_Flags & SELECTED )
                break;                                  /* Deja en liste */
            if( STRUCT->m_Pos.x != px )
                break;
            if( STRUCT->m_Pos.y != py )
            if( STRUCT->m_Pos != position )
                break;
            DrawStructs = new DrawPickedStruct( Struct );
            DrawStructs->Pnext =
@@ -1539,7 +1537,7 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
                #define STRUCT ( (EDA_DrawLineStruct*) Struct )
            if( Struct->m_Flags & SELECTED )
                break;                                  /* Deja en liste */
            if( (STRUCT->m_Start.x == px ) && ( STRUCT->m_Start.y == py ) )
            if( STRUCT->m_Start == position )
            {
                DrawStructs = new DrawPickedStruct( Struct );
                DrawStructs->Pnext =
@@ -1548,7 +1546,7 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
                Struct->m_Flags  = SELECTED | ENDPOINT | STARTPOINT;
                Struct->m_Flags &= ~STARTPOINT;
            }
            else if( (STRUCT->m_End.x == px ) && ( STRUCT->m_End.y == py ) )
            else if( STRUCT->m_End == position )
            {
                DrawStructs = new DrawPickedStruct( Struct );
                DrawStructs->Pnext =
@@ -1569,10 +1567,8 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
                #undef STRUCT
                #define STRUCT ( (DrawLabelStruct*) Struct )
            if( Struct->m_Flags & SELECTED )
                break;                                  /* Deja en liste */
            if( STRUCT->m_Pos.x != px )
                break;
            if( STRUCT->m_Pos.y != py )
                break;                                  /* Already in list */
            if( STRUCT->m_Pos != position )
                break;
            DrawStructs = new DrawPickedStruct( Struct );
            DrawStructs->Pnext =
@@ -1585,10 +1581,8 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
                #undef STRUCT
                #define STRUCT ( (DrawGlobalLabelStruct*) Struct )
            if( Struct->m_Flags & SELECTED )
                break;                                  /* Deja en liste */
            if( STRUCT->m_Pos.x != px )
                break;
            if( STRUCT->m_Pos.y != py )
                break;                                  /* Already in list */
            if( STRUCT->m_Pos != position )
                break;
            DrawStructs = new DrawPickedStruct( Struct );
            DrawStructs->Pnext =
@@ -1613,10 +1607,8 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
                #undef STRUCT
                #define STRUCT ( (DrawMarkerStruct*) Struct )
            if( Struct->m_Flags & SELECTED )
                break;                                  /* Deja en liste */
            if( STRUCT->m_Pos.x != px )
                break;
            if( STRUCT->m_Pos.y != py )
                break;                                  /* Already in list */
            if( STRUCT->m_Pos != position )
                break;
            DrawStructs = new DrawPickedStruct( Struct );
            DrawStructs->Pnext =
@@ -1629,10 +1621,8 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
                #undef STRUCT
                #define STRUCT ( (DrawNoConnectStruct*) Struct )
            if( Struct->m_Flags & SELECTED )
                break;                                  /* Deja en liste */
            if( STRUCT->m_Pos.x != px )
                break;
            if( STRUCT->m_Pos.y != py )
                break;                                  /* Already in list */
            if( STRUCT->m_Pos != position )
                break;
            DrawStructs = new DrawPickedStruct( Struct );
            DrawStructs->Pnext =
@@ -1651,14 +1641,14 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )

/*********************************************************************************/
static LibEDA_BaseStruct* GetNextPinPosition( EDA_SchComponentStruct* DrawLibItem,
                                              int* px, int* py )
                                              wxPoint & position )
/*********************************************************************************/
{
    EDA_LibComponentStruct* Entry;
    static LibEDA_BaseStruct* NextItem;
    static int Multi, convert, PartX, PartY, TransMat[2][2];
    LibEDA_BaseStruct* DEntry;
    int x2, y2, orient;
    int orient;
    LibDrawPin* Pin;

    if( DrawLibItem )
@@ -1693,11 +1683,10 @@ static LibEDA_BaseStruct* GetNextPinPosition( EDA_SchComponentStruct* DrawLibIte
        orient = Pin->ReturnPinDrawOrient( TransMat );

        /* Calcul de la position du point de reference */
        x2 = PartX + (TransMat[0][0] * Pin->m_Pos.x)
        position.x = PartX + (TransMat[0][0] * Pin->m_Pos.x)
             + (TransMat[0][1] * Pin->m_Pos.y);
        y2 = PartY + (TransMat[1][0] * Pin->m_Pos.x)
        position.y = PartY + (TransMat[1][0] * Pin->m_Pos.x)
             + (TransMat[1][1] * Pin->m_Pos.y);
        *px      = x2; *py = y2;
        NextItem = DEntry->Next();
        return DEntry;
    }
+8 −7
Original line number Diff line number Diff line
@@ -90,12 +90,12 @@ static bool WriteGeneralDescrPcb( BOARD* Pcb, FILE* File )
{
    int NbLayers;

    /* generation du masque des couches autorisees */
    /* Print the copper layer count */
    NbLayers = Pcb->m_BoardSettings->m_CopperLayerCount;
    fprintf( File, "$GENERAL\n" );
    fprintf( File, "LayerCount %d\n", NbLayers );

    /* Generation des coord du rectangle d'encadrement */
    /* Compute and print the board bounding box */
    Pcb->ComputeBoundaryBox();
    fprintf( File, "Di %d %d %d %d\n",
            Pcb->m_BoundaryBox.GetX(), Pcb->m_BoundaryBox.GetY(),
@@ -112,10 +112,11 @@ static int SavePcbFormatAscii( WinEDA_GerberFrame* frame, FILE* File,
                               int* LayerLookUpTable )
/*******************************************************************/

/* Routine de sauvegarde du PCB courant sous format ASCII
 *  retourne
 *      1 si OK
 *      0 si sauvegarde non faite
/* Routine to save the board
 * @param frame = pointer to the main frame
 * @param File = FILE * pointer to an already opened file
 * @param LayerLookUpTable = look up table: pcbnew layer for each gerber layer
 * @return 1 if OK, 0 if fail
 */
{
    char            Line[256];
+31 −17
Original line number Diff line number Diff line
@@ -157,8 +157,11 @@ void WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
/****************************************************************/

/*
 *  Change de couche active pour le routage.
 *  Si une piste est en cours de trace : placement d'une Via
 *  if no track in progress :
 *		swap the active layer between m_Route_Layer_TOP and m_Route_Layer_BOTTOM
 *  if a track is in progress :
 *		put (if possible, i.e. if no DRC problem) a Via on the end of the current
 *		track, swap the current active layer and start a new trac segment on the new layer
 */
{
    TRACK*  pt_segm;
@@ -177,7 +180,7 @@ void WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
        return;
    }

    /* Les vias ne doivent pas etre inutilement empilees: */
    /* Avoid more than one via on the current location: */
    if( Locate_Via( m_Pcb, g_CurrentTrackSegment->m_End, g_CurrentTrackSegment->GetLayer() ) )
        return;
    pt_segm = g_FirstTrackSegment;
@@ -188,17 +191,20 @@ void WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
            return;
    }

    /* Test si segment possible a placer */
    /* Is the current segment Ok (no DRC error) */
    if( Drc_On )
        if( Drc( this, DC, g_CurrentTrackSegment, m_Pcb->m_Track, 1 ) == BAD_DRC )
			/* DRC error, the change layer is not made */
            return;

    /* save etat actuel pour regeneration si via impossible a placer */
    /* Saving current state before placing a via.
		If the via canot be placed this current state will be reused */
    itmp = g_TrackSegmentCount;
    Begin_Route( g_CurrentTrackSegment, DC );

    DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );

	/* create the via */
    Via = new SEGVIA( m_Pcb );
    Via->m_Flags   = IS_NEW;
    Via->m_Width   = g_DesignSettings.m_CurrentViaSize;
@@ -206,9 +212,7 @@ void WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
    Via->m_NetCode = g_HightLigth_NetCode;
    Via->m_Start   = Via->m_End = g_CurrentTrackSegment->m_End;

    Via->SetLayer( GetScreen()->m_Active_Layer );

    // Provisoirement. indicate the first layer (?)
    int old_layer = GetScreen()->m_Active_Layer );

    //swap the layers.
    if( GetScreen()->m_Active_Layer != GetScreen()->m_Route_Layer_TOP )
@@ -216,36 +220,46 @@ void WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
    else
        GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_BOTTOM;

	/* Adjust the via layer pair */
    if( (Via->m_Shape & 15) == VIA_ENTERREE )
    {
        Via->SetLayer( Via->GetLayer() | GetScreen()->m_Active_Layer << 4 );
        Via->SetLayer( old_layer | GetScreen()->m_Active_Layer << 4 );
    }
    else if( (Via->m_Shape & 15) == VIA_BORGNE )    //blind via
    {                                               // A revoir! ( la via devrait deboucher sur 1 cote )
        Via->SetLayer( Via->GetLayer() |  GetScreen()->m_Active_Layer << 4 );
        Via->SetLayer( old_layer | GetScreen()->m_Active_Layer << 4 );
    }
    else
        Via->SetLayer( 0x0F );
        Via->SetLayer( 0x0F );	// Usual via is from copper to component; layer pair is 0 and 0x0F

    if( Drc_On &&( Drc( this, DC, Via, m_Pcb->m_Track, 1 ) == BAD_DRC ) )
    { 
        /* Via impossible a placer ici */
        /* DRC fault: the Via cannot be placed here ... */
        delete Via;
        GetScreen()->m_Active_Layer = g_CurrentTrackSegment->GetLayer();
        GetScreen()->m_Active_Layer = old_layer;
        DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
        return;
    }

    /* la via est OK et est inseree apres le segment courant */
    /* A new via was created. It was Ok.
	Put it in linked list, after the g_CurrentTrackSegment */
    Via->Pback = g_CurrentTrackSegment;
    g_CurrentTrackSegment->Pnext = Via;
    g_TrackSegmentCount++;

    // @todo: is this a memory leak bug? is g_CurrentTrackSegment's original lost or is it on some list?
    g_CurrentTrackSegment = g_CurrentTrackSegment->Copy();
	/* The g_CurrentTrackSegment is now in linked list and we need a new track segment 
	after the via, starting at via location.
	it will become the new curren segment (from via to the mouse cursor)
	*/
	g_CurrentTrackSegment = g_CurrentTrackSegment->Copy();	/* create a new segment
	from the last entered segment, with the current width, flags, netcode, etc... values
	layer, start and end point are not correct, and will be modified next */
    
    g_CurrentTrackSegment->SetLayer( GetScreen()->m_Active_Layer );
    g_CurrentTrackSegment->SetLayer( GetScreen()->m_Active_Layer );	// set the layer to the new value
    
	/* the start point is the via position,
	and the end point is the cursor which also is on the via (will change when moving mouse)
	*/
    g_CurrentTrackSegment->m_Start = g_CurrentTrackSegment->m_End = Via->m_Start;
    
    g_TrackSegmentCount++;
+5 −1
Original line number Diff line number Diff line
@@ -3,11 +3,15 @@ Here are some source code maintenance tasks that need to be done, and maybe some
folks will see these items and volunteer to do them.


*** Look at @todo in editrack-part2.cpp.  Is this is a bug?

*** Look at @todo in editrack-part2.cpp.  Is this is a bug?  ** Done (JP Charras)  **
Concerns:
a) Isn't there a problem with losing the memory of the original?
b) If this is supposed to duplicate a SEGVIA to, then this call should be changed
   to the new TRACK::Copy(), i.e. g_CurrentTrackSegment->Copy() 
>> (JP Charras:) No problem. the code is correct.
	I have put comments to explain this code section and modified some line for a more intelligible code


   
*** Set up a DOXYGEN environment starting with a configuration file that: