small changes in editrack-part2.cpp (translation of some comments from french to english) are some explanations relatives to the todo remark
This commit is contained in:
parent
9d650474dd
commit
2bd88d356c
|
@ -4,6 +4,12 @@ Started 2007-June-11
|
||||||
Please add newer entries at the top, list the date and your name with
|
Please add newer entries at the top, list the date and your name with
|
||||||
email address.
|
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>
|
2007-Aug-31 UPDATE Dick Hollenbeck <dick@softplc.com>
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
|
@ -21,9 +21,9 @@
|
||||||
static EDA_BaseStruct* CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREEN* screen,
|
static EDA_BaseStruct* CopyStruct( WinEDA_DrawPanel* panel, wxDC* DC, BASE_SCREEN* screen,
|
||||||
EDA_BaseStruct* DrawStruct );
|
EDA_BaseStruct* DrawStruct );
|
||||||
static void CollectStructsToDrag( SCH_SCREEN* screen );
|
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,
|
static LibEDA_BaseStruct* GetNextPinPosition( EDA_SchComponentStruct* DrawLibItem,
|
||||||
int* px, int* py );
|
wxPoint & position );
|
||||||
static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );
|
static void DrawMovingBlockOutlines( WinEDA_DrawPanel* panel, wxDC* DC, bool erase );
|
||||||
static EDA_BaseStruct* SaveStructListForPaste( EDA_BaseStruct* DrawStruct );
|
static EDA_BaseStruct* SaveStructListForPaste( EDA_BaseStruct* DrawStruct );
|
||||||
static bool MirrorStruct( WinEDA_DrawPanel* panel, wxDC* DC,
|
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 )
|
if( Struct->Type() == DRAW_LIB_ITEM_STRUCT_TYPE )
|
||||||
{
|
{
|
||||||
LibEDA_BaseStruct* DrawItem;
|
LibEDA_BaseStruct* DrawItem;
|
||||||
int x, y;
|
wxPoint pos;
|
||||||
DrawItem = GetNextPinPosition( (EDA_SchComponentStruct*) Struct, &x, &y );
|
DrawItem = GetNextPinPosition( (EDA_SchComponentStruct*) Struct, pos );
|
||||||
while( DrawItem )
|
while( DrawItem )
|
||||||
{
|
{
|
||||||
if( (x < ox) || (x > fx) || (y < oy) || (y > fy) )
|
if( (pos.x < ox) || (pos.x > fx) || (pos.y < oy) || (pos.y > fy) )
|
||||||
AddPickedItem( screen, x, y );
|
AddPickedItem( screen, pos );
|
||||||
|
|
||||||
DrawItem = GetNextPinPosition( NULL, &x, &y );
|
DrawItem = GetNextPinPosition( NULL, pos );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1458,7 +1458,7 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
|
||||||
while( SLabel )
|
while( SLabel )
|
||||||
{
|
{
|
||||||
if( SLabel->Type() == DRAW_SHEETLABEL_STRUCT_TYPE )
|
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;
|
SLabel = (DrawSheetLabelStruct*) SLabel->Pnext;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1466,15 +1466,15 @@ static void CollectStructsToDrag( SCH_SCREEN* screen )
|
||||||
if( Struct->Type() == DRAW_BUSENTRY_STRUCT_TYPE )
|
if( Struct->Type() == DRAW_BUSENTRY_STRUCT_TYPE )
|
||||||
{
|
{
|
||||||
DrawBusEntryStruct* item = (DrawBusEntryStruct*) Struct;
|
DrawBusEntryStruct* item = (DrawBusEntryStruct*) Struct;
|
||||||
AddPickedItem( screen, item->m_Pos.x, item->m_Pos.y );
|
AddPickedItem( screen, item->m_Pos );
|
||||||
AddPickedItem( screen, item->m_End().x, item->m_End().y );
|
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;
|
DrawPickedStruct* DrawStructs;
|
||||||
|
@ -1492,10 +1492,10 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
|
||||||
case DRAW_SEGMENT_STRUCT_TYPE:
|
case DRAW_SEGMENT_STRUCT_TYPE:
|
||||||
#undef STRUCT
|
#undef STRUCT
|
||||||
#define STRUCT ( (EDA_DrawLineStruct*) 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;
|
STRUCT->m_Flags &= ~STARTPOINT;
|
||||||
|
|
||||||
if( (STRUCT->m_End.x == px) && (STRUCT->m_End.y == py) )
|
if( STRUCT->m_End == position )
|
||||||
STRUCT->m_Flags &= ~ENDPOINT;
|
STRUCT->m_Flags &= ~ENDPOINT;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -1524,9 +1524,7 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
|
||||||
#define STRUCT ( (DrawJunctionStruct*) Struct )
|
#define STRUCT ( (DrawJunctionStruct*) Struct )
|
||||||
if( Struct->m_Flags & SELECTED )
|
if( Struct->m_Flags & SELECTED )
|
||||||
break; /* Deja en liste */
|
break; /* Deja en liste */
|
||||||
if( STRUCT->m_Pos.x != px )
|
if( STRUCT->m_Pos != position )
|
||||||
break;
|
|
||||||
if( STRUCT->m_Pos.y != py )
|
|
||||||
break;
|
break;
|
||||||
DrawStructs = new DrawPickedStruct( Struct );
|
DrawStructs = new DrawPickedStruct( Struct );
|
||||||
DrawStructs->Pnext =
|
DrawStructs->Pnext =
|
||||||
|
@ -1539,7 +1537,7 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
|
||||||
#define STRUCT ( (EDA_DrawLineStruct*) Struct )
|
#define STRUCT ( (EDA_DrawLineStruct*) Struct )
|
||||||
if( Struct->m_Flags & SELECTED )
|
if( Struct->m_Flags & SELECTED )
|
||||||
break; /* Deja en liste */
|
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 = new DrawPickedStruct( Struct );
|
||||||
DrawStructs->Pnext =
|
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 = SELECTED | ENDPOINT | STARTPOINT;
|
||||||
Struct->m_Flags &= ~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 = new DrawPickedStruct( Struct );
|
||||||
DrawStructs->Pnext =
|
DrawStructs->Pnext =
|
||||||
|
@ -1569,10 +1567,8 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
|
||||||
#undef STRUCT
|
#undef STRUCT
|
||||||
#define STRUCT ( (DrawLabelStruct*) Struct )
|
#define STRUCT ( (DrawLabelStruct*) Struct )
|
||||||
if( Struct->m_Flags & SELECTED )
|
if( Struct->m_Flags & SELECTED )
|
||||||
break; /* Deja en liste */
|
break; /* Already in list */
|
||||||
if( STRUCT->m_Pos.x != px )
|
if( STRUCT->m_Pos != position )
|
||||||
break;
|
|
||||||
if( STRUCT->m_Pos.y != py )
|
|
||||||
break;
|
break;
|
||||||
DrawStructs = new DrawPickedStruct( Struct );
|
DrawStructs = new DrawPickedStruct( Struct );
|
||||||
DrawStructs->Pnext =
|
DrawStructs->Pnext =
|
||||||
|
@ -1585,10 +1581,8 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
|
||||||
#undef STRUCT
|
#undef STRUCT
|
||||||
#define STRUCT ( (DrawGlobalLabelStruct*) Struct )
|
#define STRUCT ( (DrawGlobalLabelStruct*) Struct )
|
||||||
if( Struct->m_Flags & SELECTED )
|
if( Struct->m_Flags & SELECTED )
|
||||||
break; /* Deja en liste */
|
break; /* Already in list */
|
||||||
if( STRUCT->m_Pos.x != px )
|
if( STRUCT->m_Pos != position )
|
||||||
break;
|
|
||||||
if( STRUCT->m_Pos.y != py )
|
|
||||||
break;
|
break;
|
||||||
DrawStructs = new DrawPickedStruct( Struct );
|
DrawStructs = new DrawPickedStruct( Struct );
|
||||||
DrawStructs->Pnext =
|
DrawStructs->Pnext =
|
||||||
|
@ -1613,10 +1607,8 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
|
||||||
#undef STRUCT
|
#undef STRUCT
|
||||||
#define STRUCT ( (DrawMarkerStruct*) Struct )
|
#define STRUCT ( (DrawMarkerStruct*) Struct )
|
||||||
if( Struct->m_Flags & SELECTED )
|
if( Struct->m_Flags & SELECTED )
|
||||||
break; /* Deja en liste */
|
break; /* Already in list */
|
||||||
if( STRUCT->m_Pos.x != px )
|
if( STRUCT->m_Pos != position )
|
||||||
break;
|
|
||||||
if( STRUCT->m_Pos.y != py )
|
|
||||||
break;
|
break;
|
||||||
DrawStructs = new DrawPickedStruct( Struct );
|
DrawStructs = new DrawPickedStruct( Struct );
|
||||||
DrawStructs->Pnext =
|
DrawStructs->Pnext =
|
||||||
|
@ -1629,10 +1621,8 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
|
||||||
#undef STRUCT
|
#undef STRUCT
|
||||||
#define STRUCT ( (DrawNoConnectStruct*) Struct )
|
#define STRUCT ( (DrawNoConnectStruct*) Struct )
|
||||||
if( Struct->m_Flags & SELECTED )
|
if( Struct->m_Flags & SELECTED )
|
||||||
break; /* Deja en liste */
|
break; /* Already in list */
|
||||||
if( STRUCT->m_Pos.x != px )
|
if( STRUCT->m_Pos != position )
|
||||||
break;
|
|
||||||
if( STRUCT->m_Pos.y != py )
|
|
||||||
break;
|
break;
|
||||||
DrawStructs = new DrawPickedStruct( Struct );
|
DrawStructs = new DrawPickedStruct( Struct );
|
||||||
DrawStructs->Pnext =
|
DrawStructs->Pnext =
|
||||||
|
@ -1651,14 +1641,14 @@ static void AddPickedItem( SCH_SCREEN* screen, int px, int py )
|
||||||
|
|
||||||
/*********************************************************************************/
|
/*********************************************************************************/
|
||||||
static LibEDA_BaseStruct* GetNextPinPosition( EDA_SchComponentStruct* DrawLibItem,
|
static LibEDA_BaseStruct* GetNextPinPosition( EDA_SchComponentStruct* DrawLibItem,
|
||||||
int* px, int* py )
|
wxPoint & position )
|
||||||
/*********************************************************************************/
|
/*********************************************************************************/
|
||||||
{
|
{
|
||||||
EDA_LibComponentStruct* Entry;
|
EDA_LibComponentStruct* Entry;
|
||||||
static LibEDA_BaseStruct* NextItem;
|
static LibEDA_BaseStruct* NextItem;
|
||||||
static int Multi, convert, PartX, PartY, TransMat[2][2];
|
static int Multi, convert, PartX, PartY, TransMat[2][2];
|
||||||
LibEDA_BaseStruct* DEntry;
|
LibEDA_BaseStruct* DEntry;
|
||||||
int x2, y2, orient;
|
int orient;
|
||||||
LibDrawPin* Pin;
|
LibDrawPin* Pin;
|
||||||
|
|
||||||
if( DrawLibItem )
|
if( DrawLibItem )
|
||||||
|
@ -1693,11 +1683,10 @@ static LibEDA_BaseStruct* GetNextPinPosition( EDA_SchComponentStruct* DrawLibIte
|
||||||
orient = Pin->ReturnPinDrawOrient( TransMat );
|
orient = Pin->ReturnPinDrawOrient( TransMat );
|
||||||
|
|
||||||
/* Calcul de la position du point de reference */
|
/* 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);
|
+ (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);
|
+ (TransMat[1][1] * Pin->m_Pos.y);
|
||||||
*px = x2; *py = y2;
|
|
||||||
NextItem = DEntry->Next();
|
NextItem = DEntry->Next();
|
||||||
return DEntry;
|
return DEntry;
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,12 +90,12 @@ static bool WriteGeneralDescrPcb( BOARD* Pcb, FILE* File )
|
||||||
{
|
{
|
||||||
int NbLayers;
|
int NbLayers;
|
||||||
|
|
||||||
/* generation du masque des couches autorisees */
|
/* Print the copper layer count */
|
||||||
NbLayers = Pcb->m_BoardSettings->m_CopperLayerCount;
|
NbLayers = Pcb->m_BoardSettings->m_CopperLayerCount;
|
||||||
fprintf( File, "$GENERAL\n" );
|
fprintf( File, "$GENERAL\n" );
|
||||||
fprintf( File, "LayerCount %d\n", NbLayers );
|
fprintf( File, "LayerCount %d\n", NbLayers );
|
||||||
|
|
||||||
/* Generation des coord du rectangle d'encadrement */
|
/* Compute and print the board bounding box */
|
||||||
Pcb->ComputeBoundaryBox();
|
Pcb->ComputeBoundaryBox();
|
||||||
fprintf( File, "Di %d %d %d %d\n",
|
fprintf( File, "Di %d %d %d %d\n",
|
||||||
Pcb->m_BoundaryBox.GetX(), Pcb->m_BoundaryBox.GetY(),
|
Pcb->m_BoundaryBox.GetX(), Pcb->m_BoundaryBox.GetY(),
|
||||||
|
@ -112,10 +112,11 @@ static int SavePcbFormatAscii( WinEDA_GerberFrame* frame, FILE* File,
|
||||||
int* LayerLookUpTable )
|
int* LayerLookUpTable )
|
||||||
/*******************************************************************/
|
/*******************************************************************/
|
||||||
|
|
||||||
/* Routine de sauvegarde du PCB courant sous format ASCII
|
/* Routine to save the board
|
||||||
* retourne
|
* @param frame = pointer to the main frame
|
||||||
* 1 si OK
|
* @param File = FILE * pointer to an already opened file
|
||||||
* 0 si sauvegarde non faite
|
* @param LayerLookUpTable = look up table: pcbnew layer for each gerber layer
|
||||||
|
* @return 1 if OK, 0 if fail
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
char Line[256];
|
char Line[256];
|
||||||
|
|
|
@ -157,8 +157,11 @@ void WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
|
||||||
/****************************************************************/
|
/****************************************************************/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Change de couche active pour le routage.
|
* if no track in progress :
|
||||||
* Si une piste est en cours de trace : placement d'une Via
|
* 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;
|
TRACK* pt_segm;
|
||||||
|
@ -177,7 +180,7 @@ void WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
|
||||||
return;
|
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() ) )
|
if( Locate_Via( m_Pcb, g_CurrentTrackSegment->m_End, g_CurrentTrackSegment->GetLayer() ) )
|
||||||
return;
|
return;
|
||||||
pt_segm = g_FirstTrackSegment;
|
pt_segm = g_FirstTrackSegment;
|
||||||
|
@ -188,17 +191,20 @@ void WinEDA_PcbFrame::Other_Layer_Route( TRACK* track, wxDC* DC )
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Test si segment possible a placer */
|
/* Is the current segment Ok (no DRC error) */
|
||||||
if( Drc_On )
|
if( Drc_On )
|
||||||
if( Drc( this, DC, g_CurrentTrackSegment, m_Pcb->m_Track, 1 ) == BAD_DRC )
|
if( Drc( this, DC, g_CurrentTrackSegment, m_Pcb->m_Track, 1 ) == BAD_DRC )
|
||||||
|
/* DRC error, the change layer is not made */
|
||||||
return;
|
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;
|
itmp = g_TrackSegmentCount;
|
||||||
Begin_Route( g_CurrentTrackSegment, DC );
|
Begin_Route( g_CurrentTrackSegment, DC );
|
||||||
|
|
||||||
DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
|
DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
|
||||||
|
|
||||||
|
/* create the via */
|
||||||
Via = new SEGVIA( m_Pcb );
|
Via = new SEGVIA( m_Pcb );
|
||||||
Via->m_Flags = IS_NEW;
|
Via->m_Flags = IS_NEW;
|
||||||
Via->m_Width = g_DesignSettings.m_CurrentViaSize;
|
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_NetCode = g_HightLigth_NetCode;
|
||||||
Via->m_Start = Via->m_End = g_CurrentTrackSegment->m_End;
|
Via->m_Start = Via->m_End = g_CurrentTrackSegment->m_End;
|
||||||
|
|
||||||
Via->SetLayer( GetScreen()->m_Active_Layer );
|
int old_layer = GetScreen()->m_Active_Layer );
|
||||||
|
|
||||||
// Provisoirement. indicate the first layer (?)
|
|
||||||
|
|
||||||
//swap the layers.
|
//swap the layers.
|
||||||
if( GetScreen()->m_Active_Layer != GetScreen()->m_Route_Layer_TOP )
|
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
|
else
|
||||||
GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_BOTTOM;
|
GetScreen()->m_Active_Layer = GetScreen()->m_Route_Layer_BOTTOM;
|
||||||
|
|
||||||
|
/* Adjust the via layer pair */
|
||||||
if( (Via->m_Shape & 15) == VIA_ENTERREE )
|
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
|
else if( (Via->m_Shape & 15) == VIA_BORGNE ) //blind via
|
||||||
{ // A revoir! ( la via devrait deboucher sur 1 cote )
|
{ // 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
|
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 ) )
|
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;
|
delete Via;
|
||||||
GetScreen()->m_Active_Layer = g_CurrentTrackSegment->GetLayer();
|
GetScreen()->m_Active_Layer = old_layer;
|
||||||
DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
|
DrawPanel->ManageCurseur( DrawPanel, DC, FALSE );
|
||||||
return;
|
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;
|
Via->Pback = g_CurrentTrackSegment;
|
||||||
g_CurrentTrackSegment->Pnext = Via;
|
g_CurrentTrackSegment->Pnext = Via;
|
||||||
g_TrackSegmentCount++;
|
g_TrackSegmentCount++;
|
||||||
|
|
||||||
// @todo: is this a memory leak bug? is g_CurrentTrackSegment's original lost or is it on some list?
|
/* The g_CurrentTrackSegment is now in linked list and we need a new track segment
|
||||||
g_CurrentTrackSegment = g_CurrentTrackSegment->Copy();
|
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_CurrentTrackSegment->m_Start = g_CurrentTrackSegment->m_End = Via->m_Start;
|
||||||
|
|
||||||
g_TrackSegmentCount++;
|
g_TrackSegmentCount++;
|
||||||
|
|
6
todo.txt
6
todo.txt
|
@ -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.
|
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:
|
Concerns:
|
||||||
a) Isn't there a problem with losing the memory of the original?
|
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
|
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()
|
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:
|
*** Set up a DOXYGEN environment starting with a configuration file that:
|
||||||
|
|
Loading…
Reference in New Issue