Loading 3d-viewer/3d_draw.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -464,8 +464,8 @@ void EDA_3D_CANVAS::Draw3D_Track( TRACK* aTrack ) SetGLColor( color ); glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) ); Draw3D_SolidSegment( aTrack->m_Start, aTrack->m_End, aTrack->m_Width, thickness, zpos, Draw3D_SolidSegment( aTrack->GetStart(), aTrack->GetEnd(), aTrack->GetWidth(), thickness, zpos, g_Parm_3D_Visu.m_BiuTo3Dunits ); } Loading @@ -475,7 +475,7 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via ) int color; double biu_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits ; int outer_radius = via->m_Width / 2; int outer_radius = via->GetWidth() / 2; int inner_radius = via->GetDrillValue() / 2; int thickness = g_Parm_3D_Visu.GetCopperThicknessBIU(); Loading Loading @@ -504,7 +504,7 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via ) SetGLColor( color ); glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) ); Draw3D_ZaxisCylinder( via->m_Start, (outer_radius + inner_radius)/2, Draw3D_ZaxisCylinder( via->GetStart(), (outer_radius + inner_radius)/2, thickness, outer_radius - inner_radius, zpos, biu_to_3Dunits ); if( layer >= top_layer ) Loading @@ -512,13 +512,13 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via ) } // Drawing via hole: color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + via->m_Shape ); color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + via->GetShape() ); SetGLColor( color ); int height = g_Parm_3D_Visu.GetLayerZcoordBIU(top_layer) - g_Parm_3D_Visu.GetLayerZcoordBIU( bottom_layer ); int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU(bottom_layer) + thickness/2; Draw3D_ZaxisCylinder( via->m_Start, inner_radius + thickness/2, height, Draw3D_ZaxisCylinder( via->GetStart(), inner_radius + thickness/2, height, thickness, zpos, biu_to_3Dunits ); } Loading pcbnew/autorouter/autoplac.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -462,7 +462,7 @@ int PCB_EDIT_FRAME::GenPlaceBoard() TmpSegm.SetLayer( -1 ); TmpSegm.SetNet( -1 ); TmpSegm.m_Width = RoutingMatrix.m_GridRouting / 2; TmpSegm.SetWidth( RoutingMatrix.m_GridRouting / 2 ); EDA_ITEM* PtStruct = GetBoard()->m_Drawings; Loading pcbnew/autorouter/graphpcb.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -262,13 +262,13 @@ void TraceSegmentPcb( TRACK* pt_segm, int color, int marge, int op_logic ) int half_width; int ux0, uy0, ux1, uy1; half_width = ( pt_segm->m_Width / 2 ) + marge; half_width = ( pt_segm->GetWidth() / 2 ) + marge; // Calculate the bounding rectangle of the segment (if H, V or Via) ux0 = pt_segm->m_Start.x - RoutingMatrix.GetBrdCoordOrigin().x; uy0 = pt_segm->m_Start.y - RoutingMatrix.GetBrdCoordOrigin().y; ux1 = pt_segm->m_End.x - RoutingMatrix.GetBrdCoordOrigin().x; uy1 = pt_segm->m_End.y - RoutingMatrix.GetBrdCoordOrigin().y; ux0 = pt_segm->GetStart().x - RoutingMatrix.GetBrdCoordOrigin().x; uy0 = pt_segm->GetStart().y - RoutingMatrix.GetBrdCoordOrigin().y; ux1 = pt_segm->GetEnd().x - RoutingMatrix.GetBrdCoordOrigin().x; uy1 = pt_segm->GetEnd().y - RoutingMatrix.GetBrdCoordOrigin().y; // Test if VIA (filled circle was drawn) if( pt_segm->Type() == PCB_VIA_T ) Loading @@ -290,7 +290,7 @@ void TraceSegmentPcb( TRACK* pt_segm, int color, int marge, int op_logic ) mask_layer = -1; if( mask_layer ) TraceFilledCircle( pt_segm->m_Start.x, pt_segm->m_Start.y, TraceFilledCircle( pt_segm->GetStart().x, pt_segm->GetStart().y, half_width, mask_layer, color, op_logic ); return; } Loading @@ -301,13 +301,13 @@ void TraceSegmentPcb( TRACK* pt_segm, int color, int marge, int op_logic ) layer = -1; // The segment is here a straight line or a circle or an arc.: if( pt_segm->m_Shape == S_CIRCLE ) if( pt_segm->GetShape() == S_CIRCLE ) { TraceCircle( ux0, uy0, ux1, uy1, half_width, layer, color, op_logic ); return; } if( pt_segm->m_Shape == S_ARC ) if( pt_segm->GetShape() == S_ARC ) { TraceArc( ux0, uy0, ux1, uy1, pt_segm->m_Param, half_width, layer, color, op_logic ); return; Loading pcbnew/autorouter/solve.cpp +35 −38 Original line number Diff line number Diff line Loading @@ -1169,16 +1169,14 @@ static void OrCell_Trace( BOARD* pcb, int col, int row, g_CurrentTrackSegment->SetState( TRACK_AR, ON ); g_CurrentTrackSegment->SetLayer( 0x0F ); g_CurrentTrackSegment->m_Start.x = g_CurrentTrackSegment->m_End.x = pcb->GetBoundingBox().GetX() + ( RoutingMatrix.m_GridRouting * row ); g_CurrentTrackSegment->SetStart(wxPoint( pcb->GetBoundingBox().GetX() + ( RoutingMatrix.m_GridRouting * row ), pcb->GetBoundingBox().GetY() + ( RoutingMatrix.m_GridRouting * col ))); g_CurrentTrackSegment->SetEnd( g_CurrentTrackSegment->GetStart() ); g_CurrentTrackSegment->m_Start.y = g_CurrentTrackSegment->m_End.y = pcb->GetBoundingBox().GetY() + ( RoutingMatrix.m_GridRouting * col ); g_CurrentTrackSegment->m_Width = pcb->GetCurrentViaSize(); g_CurrentTrackSegment->m_Shape = pcb->GetDesignSettings().m_CurrentViaType; g_CurrentTrackSegment->SetWidth( pcb->GetCurrentViaSize() ); g_CurrentTrackSegment->SetShape( pcb->GetDesignSettings().m_CurrentViaType ); g_CurrentTrackSegment->SetNet( current_net_code ); } Loading @@ -1194,35 +1192,34 @@ static void OrCell_Trace( BOARD* pcb, int col, int row, g_CurrentTrackSegment->SetLayer( Route_Layer_TOP ); g_CurrentTrackSegment->SetState( TRACK_AR, ON ); g_CurrentTrackSegment->m_End.x = pcb->GetBoundingBox().GetX() + ( RoutingMatrix.m_GridRouting * row ); g_CurrentTrackSegment->m_End.y = pcb->GetBoundingBox().GetY() + ( RoutingMatrix.m_GridRouting * col ); g_CurrentTrackSegment->SetEnd( wxPoint( pcb->GetBoundingBox().GetX() + ( RoutingMatrix.m_GridRouting * row ), pcb->GetBoundingBox().GetY() + ( RoutingMatrix.m_GridRouting * col ))); g_CurrentTrackSegment->SetNet( current_net_code ); if( g_CurrentTrackSegment->Back() == NULL ) /* Start trace. */ { g_CurrentTrackSegment->m_Start.x = segm_fX; g_CurrentTrackSegment->m_Start.y = segm_fY; g_CurrentTrackSegment->SetStart( wxPoint( segm_fX, segm_fY ) ); /* Placement on the center of the pad if outside grid. */ dx1 = g_CurrentTrackSegment->m_End.x - g_CurrentTrackSegment->m_Start.x; dy1 = g_CurrentTrackSegment->m_End.y - g_CurrentTrackSegment->m_Start.y; dx1 = g_CurrentTrackSegment->GetEnd().x - g_CurrentTrackSegment->GetStart().x; dy1 = g_CurrentTrackSegment->GetEnd().y - g_CurrentTrackSegment->GetStart().y; dx0 = pt_cur_ch->m_PadEnd->GetPosition().x - g_CurrentTrackSegment->m_Start.x; dy0 = pt_cur_ch->m_PadEnd->GetPosition().y - g_CurrentTrackSegment->m_Start.y; dx0 = pt_cur_ch->m_PadEnd->GetPosition().x - g_CurrentTrackSegment->GetStart().x; dy0 = pt_cur_ch->m_PadEnd->GetPosition().y - g_CurrentTrackSegment->GetStart().y; /* If aligned, change the origin point. */ if( abs( dx0 * dy1 ) == abs( dx1 * dy0 ) ) { g_CurrentTrackSegment->m_Start = pt_cur_ch->m_PadEnd->GetPosition(); g_CurrentTrackSegment->SetStart( pt_cur_ch->m_PadEnd->GetPosition() ); } else // Creation of a supplemental segment { g_CurrentTrackSegment->m_Start = pt_cur_ch->m_PadEnd->GetPosition(); g_CurrentTrackSegment->SetStart( pt_cur_ch->m_PadEnd->GetPosition() ); newTrack = (TRACK*)g_CurrentTrackSegment->Clone(); newTrack->m_Start = g_CurrentTrackSegment->m_End; newTrack->SetStart( g_CurrentTrackSegment->GetEnd()); g_CurrentTrackList.PushBack( newTrack ); } Loading @@ -1231,28 +1228,28 @@ static void OrCell_Trace( BOARD* pcb, int col, int row, { if( g_CurrentTrackSegment->Back() ) { g_CurrentTrackSegment->m_Start = g_CurrentTrackSegment->Back()->m_End; g_CurrentTrackSegment->SetStart( g_CurrentTrackSegment->Back()->GetEnd() ); } } g_CurrentTrackSegment->m_Width = pcb->GetCurrentTrackWidth(); g_CurrentTrackSegment->SetWidth( pcb->GetCurrentTrackWidth() ); if( g_CurrentTrackSegment->m_Start != g_CurrentTrackSegment->m_End ) if( g_CurrentTrackSegment->GetStart() != g_CurrentTrackSegment->GetEnd() ) { /* Reduce aligned segments by one. */ TRACK* oldTrack = g_CurrentTrackSegment->Back(); if( oldTrack && oldTrack->Type() != PCB_VIA_T ) { dx1 = g_CurrentTrackSegment->m_End.x - g_CurrentTrackSegment->m_Start.x; dy1 = g_CurrentTrackSegment->m_End.y - g_CurrentTrackSegment->m_Start.y; dx1 = g_CurrentTrackSegment->GetEnd().x - g_CurrentTrackSegment->GetStart().x; dy1 = g_CurrentTrackSegment->GetEnd().y - g_CurrentTrackSegment->GetStart().y; dx0 = oldTrack->m_End.x - oldTrack->m_Start.x; dy0 = oldTrack->m_End.y - oldTrack->m_Start.y; dx0 = oldTrack->GetEnd().x - oldTrack->GetStart().x; dy0 = oldTrack->GetEnd().y - oldTrack->GetStart().y; if( abs( dx0 * dy1 ) == abs( dx1 * dy0 ) ) { oldTrack->m_End = g_CurrentTrackSegment->m_End; oldTrack->SetEnd( g_CurrentTrackSegment->GetEnd() ); delete g_CurrentTrackList.PopBack(); } Loading Loading @@ -1280,24 +1277,24 @@ static void AddNewTrace( PCB_EDIT_FRAME* pcbframe, wxDC* DC ) marge = s_Clearance + ( pcbframe->GetBoard()->GetCurrentTrackWidth() / 2 ); via_marge = s_Clearance + ( pcbframe->GetBoard()->GetCurrentViaSize() / 2 ); dx1 = g_CurrentTrackSegment->m_End.x - g_CurrentTrackSegment->m_Start.x; dy1 = g_CurrentTrackSegment->m_End.y - g_CurrentTrackSegment->m_Start.y; dx1 = g_CurrentTrackSegment->GetEnd().x - g_CurrentTrackSegment->GetStart().x; dy1 = g_CurrentTrackSegment->GetEnd().y - g_CurrentTrackSegment->GetStart().y; /* Place on center of pad if off grid. */ dx0 = pt_cur_ch->m_PadStart->GetPosition().x - g_CurrentTrackSegment->m_Start.x; dy0 = pt_cur_ch->m_PadStart->GetPosition().y - g_CurrentTrackSegment->m_Start.y; dx0 = pt_cur_ch->m_PadStart->GetPosition().x - g_CurrentTrackSegment->GetStart().x; dy0 = pt_cur_ch->m_PadStart->GetPosition().y - g_CurrentTrackSegment->GetStart().y; /* If aligned, change the origin point. */ if( abs( dx0 * dy1 ) == abs( dx1 * dy0 ) ) { g_CurrentTrackSegment->m_End = pt_cur_ch->m_PadStart->GetPosition(); g_CurrentTrackSegment->SetEnd( pt_cur_ch->m_PadStart->GetPosition() ); } else { TRACK* newTrack = (TRACK*)g_CurrentTrackSegment->Clone(); newTrack->m_End = pt_cur_ch->m_PadStart->GetPosition(); newTrack->m_Start = g_CurrentTrackSegment->m_End; newTrack->SetEnd( pt_cur_ch->m_PadStart->GetPosition() ); newTrack->SetStart( g_CurrentTrackSegment->GetEnd() ); g_CurrentTrackList.PushBack( newTrack ); } Loading pcbnew/board_undo_redo.cpp +8 −5 Original line number Diff line number Diff line Loading @@ -245,11 +245,14 @@ void SwapData( BOARD_ITEM* aItem, BOARD_ITEM* aImage ) { TRACK* track = (TRACK*) aItem; TRACK* image = (TRACK*) aImage; EXCHG( track->m_Start, image->m_Start ); EXCHG( track->m_End, image->m_End ); EXCHG( track->m_Width, image->m_Width ); EXCHG( track->m_Shape, image->m_Shape ); int atmp = track->GetDrillValue(); // swap start, end, width and shape for track and image. wxPoint exchp = track->GetStart(); track->SetStart( image->GetStart() ); image->SetStart( exchp ); exchp = track->GetEnd(); track->SetEnd( image->GetEnd() ); image->SetEnd( exchp ); int atmp = track->GetWidth(); track->SetWidth( image->GetWidth() ); image->SetWidth( atmp ); atmp = track->GetShape(); track->SetShape( image->GetShape() ); image->SetShape( atmp ); atmp = track->GetDrillValue(); if( track->IsDrillDefault() ) atmp = -1; Loading Loading
3d-viewer/3d_draw.cpp +6 −6 Original line number Diff line number Diff line Loading @@ -464,8 +464,8 @@ void EDA_3D_CANVAS::Draw3D_Track( TRACK* aTrack ) SetGLColor( color ); glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) ); Draw3D_SolidSegment( aTrack->m_Start, aTrack->m_End, aTrack->m_Width, thickness, zpos, Draw3D_SolidSegment( aTrack->GetStart(), aTrack->GetEnd(), aTrack->GetWidth(), thickness, zpos, g_Parm_3D_Visu.m_BiuTo3Dunits ); } Loading @@ -475,7 +475,7 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via ) int color; double biu_to_3Dunits = g_Parm_3D_Visu.m_BiuTo3Dunits ; int outer_radius = via->m_Width / 2; int outer_radius = via->GetWidth() / 2; int inner_radius = via->GetDrillValue() / 2; int thickness = g_Parm_3D_Visu.GetCopperThicknessBIU(); Loading Loading @@ -504,7 +504,7 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via ) SetGLColor( color ); glNormal3f( 0.0, 0.0, Get3DLayer_Z_Orientation( layer ) ); Draw3D_ZaxisCylinder( via->m_Start, (outer_radius + inner_radius)/2, Draw3D_ZaxisCylinder( via->GetStart(), (outer_radius + inner_radius)/2, thickness, outer_radius - inner_radius, zpos, biu_to_3Dunits ); if( layer >= top_layer ) Loading @@ -512,13 +512,13 @@ void EDA_3D_CANVAS::Draw3D_Via( SEGVIA* via ) } // Drawing via hole: color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + via->m_Shape ); color = g_ColorsSettings.GetItemColor( VIAS_VISIBLE + via->GetShape() ); SetGLColor( color ); int height = g_Parm_3D_Visu.GetLayerZcoordBIU(top_layer) - g_Parm_3D_Visu.GetLayerZcoordBIU( bottom_layer ); int zpos = g_Parm_3D_Visu.GetLayerZcoordBIU(bottom_layer) + thickness/2; Draw3D_ZaxisCylinder( via->m_Start, inner_radius + thickness/2, height, Draw3D_ZaxisCylinder( via->GetStart(), inner_radius + thickness/2, height, thickness, zpos, biu_to_3Dunits ); } Loading
pcbnew/autorouter/autoplac.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -462,7 +462,7 @@ int PCB_EDIT_FRAME::GenPlaceBoard() TmpSegm.SetLayer( -1 ); TmpSegm.SetNet( -1 ); TmpSegm.m_Width = RoutingMatrix.m_GridRouting / 2; TmpSegm.SetWidth( RoutingMatrix.m_GridRouting / 2 ); EDA_ITEM* PtStruct = GetBoard()->m_Drawings; Loading
pcbnew/autorouter/graphpcb.cpp +8 −8 Original line number Diff line number Diff line Loading @@ -262,13 +262,13 @@ void TraceSegmentPcb( TRACK* pt_segm, int color, int marge, int op_logic ) int half_width; int ux0, uy0, ux1, uy1; half_width = ( pt_segm->m_Width / 2 ) + marge; half_width = ( pt_segm->GetWidth() / 2 ) + marge; // Calculate the bounding rectangle of the segment (if H, V or Via) ux0 = pt_segm->m_Start.x - RoutingMatrix.GetBrdCoordOrigin().x; uy0 = pt_segm->m_Start.y - RoutingMatrix.GetBrdCoordOrigin().y; ux1 = pt_segm->m_End.x - RoutingMatrix.GetBrdCoordOrigin().x; uy1 = pt_segm->m_End.y - RoutingMatrix.GetBrdCoordOrigin().y; ux0 = pt_segm->GetStart().x - RoutingMatrix.GetBrdCoordOrigin().x; uy0 = pt_segm->GetStart().y - RoutingMatrix.GetBrdCoordOrigin().y; ux1 = pt_segm->GetEnd().x - RoutingMatrix.GetBrdCoordOrigin().x; uy1 = pt_segm->GetEnd().y - RoutingMatrix.GetBrdCoordOrigin().y; // Test if VIA (filled circle was drawn) if( pt_segm->Type() == PCB_VIA_T ) Loading @@ -290,7 +290,7 @@ void TraceSegmentPcb( TRACK* pt_segm, int color, int marge, int op_logic ) mask_layer = -1; if( mask_layer ) TraceFilledCircle( pt_segm->m_Start.x, pt_segm->m_Start.y, TraceFilledCircle( pt_segm->GetStart().x, pt_segm->GetStart().y, half_width, mask_layer, color, op_logic ); return; } Loading @@ -301,13 +301,13 @@ void TraceSegmentPcb( TRACK* pt_segm, int color, int marge, int op_logic ) layer = -1; // The segment is here a straight line or a circle or an arc.: if( pt_segm->m_Shape == S_CIRCLE ) if( pt_segm->GetShape() == S_CIRCLE ) { TraceCircle( ux0, uy0, ux1, uy1, half_width, layer, color, op_logic ); return; } if( pt_segm->m_Shape == S_ARC ) if( pt_segm->GetShape() == S_ARC ) { TraceArc( ux0, uy0, ux1, uy1, pt_segm->m_Param, half_width, layer, color, op_logic ); return; Loading
pcbnew/autorouter/solve.cpp +35 −38 Original line number Diff line number Diff line Loading @@ -1169,16 +1169,14 @@ static void OrCell_Trace( BOARD* pcb, int col, int row, g_CurrentTrackSegment->SetState( TRACK_AR, ON ); g_CurrentTrackSegment->SetLayer( 0x0F ); g_CurrentTrackSegment->m_Start.x = g_CurrentTrackSegment->m_End.x = pcb->GetBoundingBox().GetX() + ( RoutingMatrix.m_GridRouting * row ); g_CurrentTrackSegment->SetStart(wxPoint( pcb->GetBoundingBox().GetX() + ( RoutingMatrix.m_GridRouting * row ), pcb->GetBoundingBox().GetY() + ( RoutingMatrix.m_GridRouting * col ))); g_CurrentTrackSegment->SetEnd( g_CurrentTrackSegment->GetStart() ); g_CurrentTrackSegment->m_Start.y = g_CurrentTrackSegment->m_End.y = pcb->GetBoundingBox().GetY() + ( RoutingMatrix.m_GridRouting * col ); g_CurrentTrackSegment->m_Width = pcb->GetCurrentViaSize(); g_CurrentTrackSegment->m_Shape = pcb->GetDesignSettings().m_CurrentViaType; g_CurrentTrackSegment->SetWidth( pcb->GetCurrentViaSize() ); g_CurrentTrackSegment->SetShape( pcb->GetDesignSettings().m_CurrentViaType ); g_CurrentTrackSegment->SetNet( current_net_code ); } Loading @@ -1194,35 +1192,34 @@ static void OrCell_Trace( BOARD* pcb, int col, int row, g_CurrentTrackSegment->SetLayer( Route_Layer_TOP ); g_CurrentTrackSegment->SetState( TRACK_AR, ON ); g_CurrentTrackSegment->m_End.x = pcb->GetBoundingBox().GetX() + ( RoutingMatrix.m_GridRouting * row ); g_CurrentTrackSegment->m_End.y = pcb->GetBoundingBox().GetY() + ( RoutingMatrix.m_GridRouting * col ); g_CurrentTrackSegment->SetEnd( wxPoint( pcb->GetBoundingBox().GetX() + ( RoutingMatrix.m_GridRouting * row ), pcb->GetBoundingBox().GetY() + ( RoutingMatrix.m_GridRouting * col ))); g_CurrentTrackSegment->SetNet( current_net_code ); if( g_CurrentTrackSegment->Back() == NULL ) /* Start trace. */ { g_CurrentTrackSegment->m_Start.x = segm_fX; g_CurrentTrackSegment->m_Start.y = segm_fY; g_CurrentTrackSegment->SetStart( wxPoint( segm_fX, segm_fY ) ); /* Placement on the center of the pad if outside grid. */ dx1 = g_CurrentTrackSegment->m_End.x - g_CurrentTrackSegment->m_Start.x; dy1 = g_CurrentTrackSegment->m_End.y - g_CurrentTrackSegment->m_Start.y; dx1 = g_CurrentTrackSegment->GetEnd().x - g_CurrentTrackSegment->GetStart().x; dy1 = g_CurrentTrackSegment->GetEnd().y - g_CurrentTrackSegment->GetStart().y; dx0 = pt_cur_ch->m_PadEnd->GetPosition().x - g_CurrentTrackSegment->m_Start.x; dy0 = pt_cur_ch->m_PadEnd->GetPosition().y - g_CurrentTrackSegment->m_Start.y; dx0 = pt_cur_ch->m_PadEnd->GetPosition().x - g_CurrentTrackSegment->GetStart().x; dy0 = pt_cur_ch->m_PadEnd->GetPosition().y - g_CurrentTrackSegment->GetStart().y; /* If aligned, change the origin point. */ if( abs( dx0 * dy1 ) == abs( dx1 * dy0 ) ) { g_CurrentTrackSegment->m_Start = pt_cur_ch->m_PadEnd->GetPosition(); g_CurrentTrackSegment->SetStart( pt_cur_ch->m_PadEnd->GetPosition() ); } else // Creation of a supplemental segment { g_CurrentTrackSegment->m_Start = pt_cur_ch->m_PadEnd->GetPosition(); g_CurrentTrackSegment->SetStart( pt_cur_ch->m_PadEnd->GetPosition() ); newTrack = (TRACK*)g_CurrentTrackSegment->Clone(); newTrack->m_Start = g_CurrentTrackSegment->m_End; newTrack->SetStart( g_CurrentTrackSegment->GetEnd()); g_CurrentTrackList.PushBack( newTrack ); } Loading @@ -1231,28 +1228,28 @@ static void OrCell_Trace( BOARD* pcb, int col, int row, { if( g_CurrentTrackSegment->Back() ) { g_CurrentTrackSegment->m_Start = g_CurrentTrackSegment->Back()->m_End; g_CurrentTrackSegment->SetStart( g_CurrentTrackSegment->Back()->GetEnd() ); } } g_CurrentTrackSegment->m_Width = pcb->GetCurrentTrackWidth(); g_CurrentTrackSegment->SetWidth( pcb->GetCurrentTrackWidth() ); if( g_CurrentTrackSegment->m_Start != g_CurrentTrackSegment->m_End ) if( g_CurrentTrackSegment->GetStart() != g_CurrentTrackSegment->GetEnd() ) { /* Reduce aligned segments by one. */ TRACK* oldTrack = g_CurrentTrackSegment->Back(); if( oldTrack && oldTrack->Type() != PCB_VIA_T ) { dx1 = g_CurrentTrackSegment->m_End.x - g_CurrentTrackSegment->m_Start.x; dy1 = g_CurrentTrackSegment->m_End.y - g_CurrentTrackSegment->m_Start.y; dx1 = g_CurrentTrackSegment->GetEnd().x - g_CurrentTrackSegment->GetStart().x; dy1 = g_CurrentTrackSegment->GetEnd().y - g_CurrentTrackSegment->GetStart().y; dx0 = oldTrack->m_End.x - oldTrack->m_Start.x; dy0 = oldTrack->m_End.y - oldTrack->m_Start.y; dx0 = oldTrack->GetEnd().x - oldTrack->GetStart().x; dy0 = oldTrack->GetEnd().y - oldTrack->GetStart().y; if( abs( dx0 * dy1 ) == abs( dx1 * dy0 ) ) { oldTrack->m_End = g_CurrentTrackSegment->m_End; oldTrack->SetEnd( g_CurrentTrackSegment->GetEnd() ); delete g_CurrentTrackList.PopBack(); } Loading Loading @@ -1280,24 +1277,24 @@ static void AddNewTrace( PCB_EDIT_FRAME* pcbframe, wxDC* DC ) marge = s_Clearance + ( pcbframe->GetBoard()->GetCurrentTrackWidth() / 2 ); via_marge = s_Clearance + ( pcbframe->GetBoard()->GetCurrentViaSize() / 2 ); dx1 = g_CurrentTrackSegment->m_End.x - g_CurrentTrackSegment->m_Start.x; dy1 = g_CurrentTrackSegment->m_End.y - g_CurrentTrackSegment->m_Start.y; dx1 = g_CurrentTrackSegment->GetEnd().x - g_CurrentTrackSegment->GetStart().x; dy1 = g_CurrentTrackSegment->GetEnd().y - g_CurrentTrackSegment->GetStart().y; /* Place on center of pad if off grid. */ dx0 = pt_cur_ch->m_PadStart->GetPosition().x - g_CurrentTrackSegment->m_Start.x; dy0 = pt_cur_ch->m_PadStart->GetPosition().y - g_CurrentTrackSegment->m_Start.y; dx0 = pt_cur_ch->m_PadStart->GetPosition().x - g_CurrentTrackSegment->GetStart().x; dy0 = pt_cur_ch->m_PadStart->GetPosition().y - g_CurrentTrackSegment->GetStart().y; /* If aligned, change the origin point. */ if( abs( dx0 * dy1 ) == abs( dx1 * dy0 ) ) { g_CurrentTrackSegment->m_End = pt_cur_ch->m_PadStart->GetPosition(); g_CurrentTrackSegment->SetEnd( pt_cur_ch->m_PadStart->GetPosition() ); } else { TRACK* newTrack = (TRACK*)g_CurrentTrackSegment->Clone(); newTrack->m_End = pt_cur_ch->m_PadStart->GetPosition(); newTrack->m_Start = g_CurrentTrackSegment->m_End; newTrack->SetEnd( pt_cur_ch->m_PadStart->GetPosition() ); newTrack->SetStart( g_CurrentTrackSegment->GetEnd() ); g_CurrentTrackList.PushBack( newTrack ); } Loading
pcbnew/board_undo_redo.cpp +8 −5 Original line number Diff line number Diff line Loading @@ -245,11 +245,14 @@ void SwapData( BOARD_ITEM* aItem, BOARD_ITEM* aImage ) { TRACK* track = (TRACK*) aItem; TRACK* image = (TRACK*) aImage; EXCHG( track->m_Start, image->m_Start ); EXCHG( track->m_End, image->m_End ); EXCHG( track->m_Width, image->m_Width ); EXCHG( track->m_Shape, image->m_Shape ); int atmp = track->GetDrillValue(); // swap start, end, width and shape for track and image. wxPoint exchp = track->GetStart(); track->SetStart( image->GetStart() ); image->SetStart( exchp ); exchp = track->GetEnd(); track->SetEnd( image->GetEnd() ); image->SetEnd( exchp ); int atmp = track->GetWidth(); track->SetWidth( image->GetWidth() ); image->SetWidth( atmp ); atmp = track->GetShape(); track->SetShape( image->GetShape() ); image->SetShape( atmp ); atmp = track->GetDrillValue(); if( track->IsDrillDefault() ) atmp = -1; Loading