Loading demos/sonde xilinx/sonde xilinx.pro +1 −1 Original line number Original line Diff line number Diff line update=20/05/2010 10:19:24 update=27/05/2010 12:18:31 version=1 version=1 last_client=pcbnew last_client=pcbnew [cvpcb] [cvpcb] Loading pcbnew/edit.cpp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -904,10 +904,12 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) wxPoint pos = GetScreen()->m_Curseur; wxPoint pos = GetScreen()->m_Curseur; track->Draw( DrawPanel, &dc, GR_XOR ); track->Draw( DrawPanel, &dc, GR_XOR ); PICKED_ITEMS_LIST itemsListPicker; PICKED_ITEMS_LIST itemsListPicker; TRACK* newtrack = CreateLockPoint( pos, track, NULL, &itemsListPicker); TRACK* newtrack = CreateLockPoint( GetBoard(), pos, track, &itemsListPicker); SaveCopyInUndoList(itemsListPicker,UR_UNSPECIFIED); SaveCopyInUndoList(itemsListPicker,UR_UNSPECIFIED); track->Draw( DrawPanel, &dc, GR_XOR ); track->Draw( DrawPanel, &dc, GR_XOR ); newtrack->Draw( DrawPanel, &dc, GR_XOR ); newtrack->Draw( DrawPanel, &dc, GR_XOR ); /* compute the new rastnest, because connectivity could change */ test_1_net_connexion( &dc, track->GetNet() ); } } break; break; Loading pcbnew/editrack.cpp +3 −4 Original line number Original line Diff line number Diff line Loading @@ -127,9 +127,8 @@ TRACK* WinEDA_PcbFrame::Begin_Route( TRACK* aTrack, wxDC* DC ) { { TrackOnStartPoint = (TRACK*) LockPoint; TrackOnStartPoint = (TRACK*) LockPoint; g_HighLight_NetCode = TrackOnStartPoint->GetNet(); g_HighLight_NetCode = TrackOnStartPoint->GetNet(); CreateLockPoint( pos, CreateLockPoint( GetBoard(), pos, TrackOnStartPoint, TrackOnStartPoint, NULL, &s_ItemsListPicker ); &s_ItemsListPicker ); } } } } Loading Loading @@ -478,9 +477,9 @@ void WinEDA_PcbFrame::End_Route( TRACK* aTrack, wxDC* DC ) g_HighLight_NetCode = adr_buf->GetNet(); g_HighLight_NetCode = adr_buf->GetNet(); /* Possible establishment of a hanging point. */ /* Possible establishment of a hanging point. */ LockPoint = CreateLockPoint( g_CurrentTrackSegment->m_End, LockPoint = CreateLockPoint( GetBoard(), g_CurrentTrackSegment->m_End, adr_buf, adr_buf, g_CurrentTrackSegment, &s_ItemsListPicker ); &s_ItemsListPicker ); } } } } Loading pcbnew/locate.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -82,7 +82,7 @@ TRACK* Locate_Via_Area( TRACK* aStart, const wxPoint& pos, int layer ) } } /* Location of the pellet CONNECTED developed a test track /* Locate the pad CONNECTED to a track * input: ptr_piste: pointer to the segment of track * input: ptr_piste: pointer to the segment of track * Extr = flag = START -> beginning of the test segment * Extr = flag = START -> beginning of the test segment * END -> end of the segment to be tested * END -> end of the segment to be tested Loading pcbnew/move_or_drag_track.cpp +49 −41 Original line number Original line Diff line number Diff line Loading @@ -1056,26 +1056,24 @@ BOARD_ITEM* LocateLockPoint( BOARD* Pcb, wxPoint pos, int LayerMask ) /* Create an intermediate point on a segment /* Create an intermediate point on a segment * ASegm segment is broken into 2 segments connecting point pX, pY * aSegm segment is broken into 2 segments connecting point pX, pY * After insertion: * The new segment starts from to new point, and ends to initial aSegm ending point * the old segment aSegm ends to new point * Returns: * Returns: * NULL if no new point (ie if aRefPoint already corresponded * NULL if no new point (ie if aRefPoint already corresponded at one end of aSegm * At one end where: * or * Pointer to the segment created * Pointer to the segment created * Created and the point is the intersection of 2 lines segments aSegm and * refsegm * Returns the exact value of aRefPoint * Returns the exact value of aRefPoint * If aSegm points to a via: * If aSegm points to a via: * Returns the exact value of aRefPoint and ptsegm, * Returns the exact value of aRefPoint and a pointer to the via, * But does not create extra point * But does not create extra point */ */ TRACK* CreateLockPoint( wxPoint& aRefPoint, TRACK* CreateLockPoint( BOARD* aPcb, wxPoint& aRefPoint, TRACK* aSegm, TRACK* aSegm, TRACK* aRefSegm, PICKED_ITEMS_LIST* aItemsListPicker ) PICKED_ITEMS_LIST* aItemsListPicker ) { { int cX, cY; int dx, dy; if( aSegm->m_Start == aRefPoint || aSegm->m_End == aRefPoint ) if( aSegm->m_Start == aRefPoint || aSegm->m_End == aRefPoint ) return NULL; return NULL; Loading @@ -1086,15 +1084,12 @@ TRACK* CreateLockPoint( wxPoint& aRefPoint, return aSegm; return aSegm; } } /* Calculation coordinate of intermediate point in the coordinate origin /* Calculation coordinate of intermediate point relative to * = Original ptsegm * the start point of aSegm */ */ cX = aRefPoint.x - aSegm->m_Start.x; wxPoint delta = aSegm->m_End - aSegm->m_Start; cY = aRefPoint.y - aSegm->m_Start.y; dx = aSegm->m_End.x - aSegm->m_Start.x; dy = aSegm->m_End.y - aSegm->m_Start.y; // Not yet used: // Not yet in use: #if 0 #if 0 int ox, oy, fx, fy; int ox, oy, fx, fy; Loading @@ -1107,17 +1102,20 @@ TRACK* CreateLockPoint( wxPoint& aRefPoint, } } #endif #endif /* that the item be on the segment ptsegm: cY/cX = dy/dx */ // calculate coordinates of aRefPoint relative to aSegm->m_Start if( dx == 0 ) wxPoint newPoint = aRefPoint - aSegm->m_Start; cX = 0; /* segm horizontal */ // newPoint must be on aSegm: // Ensure newPoint.y/newPoint.y = delta.y/delta.x if( delta.x == 0 ) newPoint.x = 0; /* horizontal segment*/ else else cY = ( cX * dy ) / dx; newPoint.y = wxRound(( (double)newPoint.x * delta.y ) / delta.x); /* Create the intermediate point (that is to say creation of a new /* Create the intermediate point (that is to say creation of a new * segment, beginning at the intermediate point. * segment, beginning at the intermediate point. */ */ cX += aSegm->m_Start.x; newPoint.x += aSegm->m_Start.x; cY += aSegm->m_Start.y; newPoint.y += aSegm->m_Start.y; TRACK* newTrack = aSegm->Copy(); TRACK* newTrack = aSegm->Copy(); if( aItemsListPicker ) if( aItemsListPicker ) Loading @@ -1131,29 +1129,39 @@ TRACK* CreateLockPoint( wxPoint& aRefPoint, wxASSERT( list ); wxASSERT( list ); list->Insert( newTrack, aSegm->Next() ); list->Insert( newTrack, aSegm->Next() ); /* Correct pointer at the end of the new segment. */ newTrack->end = aSegm->end; /* Segment ends at new point. */ if( aItemsListPicker ) if( aItemsListPicker ) { { ITEM_PICKER picker( aSegm, UR_CHANGED ); ITEM_PICKER picker( aSegm, UR_CHANGED ); picker.m_Link = aSegm->Copy(); picker.m_Link = aSegm->Copy(); aItemsListPicker->PushItem( picker ); aItemsListPicker->PushItem( picker ); } } aSegm->m_End.x = cX; aSegm->m_End.y = cY; /* Correct pointer at the end of the new segment. */ newTrack->end = aSegm->end; newTrack->SetState( END_ONPAD, aSegm->GetState( END_ONPAD ) ); /* Set connections info relative to the new point */ /* Old segment now ends at new point. */ aSegm->m_End = newPoint; aSegm->end = newTrack; aSegm->SetState( END_ONPAD, OFF ); aSegm->SetState( END_ONPAD, OFF ); /* The next segment begins at the new point. */ /* The new segment begins at the new point. */ aSegm = newTrack;; newTrack->m_Start = newPoint; aSegm->m_Start.x = cX; newTrack->start = aSegm; aSegm->m_Start.y = cY; newTrack->SetState( BEGIN_ONPAD, OFF ); aSegm->SetState( BEGIN_ONPAD, OFF ); aRefPoint.x = cX; D_PAD * pad = Locate_Pad_Connecte( aPcb, newTrack, START ); aRefPoint.y = cY; if ( pad ) { newTrack->start = pad; newTrack->SetState( BEGIN_ONPAD, ON ); aSegm->end = pad; aSegm->SetState( END_ONPAD, ON ); } return aSegm; aRefPoint = newPoint; return newTrack; } } Loading
demos/sonde xilinx/sonde xilinx.pro +1 −1 Original line number Original line Diff line number Diff line update=20/05/2010 10:19:24 update=27/05/2010 12:18:31 version=1 version=1 last_client=pcbnew last_client=pcbnew [cvpcb] [cvpcb] Loading
pcbnew/edit.cpp +3 −1 Original line number Original line Diff line number Diff line Loading @@ -904,10 +904,12 @@ void WinEDA_PcbFrame::Process_Special_Functions( wxCommandEvent& event ) wxPoint pos = GetScreen()->m_Curseur; wxPoint pos = GetScreen()->m_Curseur; track->Draw( DrawPanel, &dc, GR_XOR ); track->Draw( DrawPanel, &dc, GR_XOR ); PICKED_ITEMS_LIST itemsListPicker; PICKED_ITEMS_LIST itemsListPicker; TRACK* newtrack = CreateLockPoint( pos, track, NULL, &itemsListPicker); TRACK* newtrack = CreateLockPoint( GetBoard(), pos, track, &itemsListPicker); SaveCopyInUndoList(itemsListPicker,UR_UNSPECIFIED); SaveCopyInUndoList(itemsListPicker,UR_UNSPECIFIED); track->Draw( DrawPanel, &dc, GR_XOR ); track->Draw( DrawPanel, &dc, GR_XOR ); newtrack->Draw( DrawPanel, &dc, GR_XOR ); newtrack->Draw( DrawPanel, &dc, GR_XOR ); /* compute the new rastnest, because connectivity could change */ test_1_net_connexion( &dc, track->GetNet() ); } } break; break; Loading
pcbnew/editrack.cpp +3 −4 Original line number Original line Diff line number Diff line Loading @@ -127,9 +127,8 @@ TRACK* WinEDA_PcbFrame::Begin_Route( TRACK* aTrack, wxDC* DC ) { { TrackOnStartPoint = (TRACK*) LockPoint; TrackOnStartPoint = (TRACK*) LockPoint; g_HighLight_NetCode = TrackOnStartPoint->GetNet(); g_HighLight_NetCode = TrackOnStartPoint->GetNet(); CreateLockPoint( pos, CreateLockPoint( GetBoard(), pos, TrackOnStartPoint, TrackOnStartPoint, NULL, &s_ItemsListPicker ); &s_ItemsListPicker ); } } } } Loading Loading @@ -478,9 +477,9 @@ void WinEDA_PcbFrame::End_Route( TRACK* aTrack, wxDC* DC ) g_HighLight_NetCode = adr_buf->GetNet(); g_HighLight_NetCode = adr_buf->GetNet(); /* Possible establishment of a hanging point. */ /* Possible establishment of a hanging point. */ LockPoint = CreateLockPoint( g_CurrentTrackSegment->m_End, LockPoint = CreateLockPoint( GetBoard(), g_CurrentTrackSegment->m_End, adr_buf, adr_buf, g_CurrentTrackSegment, &s_ItemsListPicker ); &s_ItemsListPicker ); } } } } Loading
pcbnew/locate.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -82,7 +82,7 @@ TRACK* Locate_Via_Area( TRACK* aStart, const wxPoint& pos, int layer ) } } /* Location of the pellet CONNECTED developed a test track /* Locate the pad CONNECTED to a track * input: ptr_piste: pointer to the segment of track * input: ptr_piste: pointer to the segment of track * Extr = flag = START -> beginning of the test segment * Extr = flag = START -> beginning of the test segment * END -> end of the segment to be tested * END -> end of the segment to be tested Loading
pcbnew/move_or_drag_track.cpp +49 −41 Original line number Original line Diff line number Diff line Loading @@ -1056,26 +1056,24 @@ BOARD_ITEM* LocateLockPoint( BOARD* Pcb, wxPoint pos, int LayerMask ) /* Create an intermediate point on a segment /* Create an intermediate point on a segment * ASegm segment is broken into 2 segments connecting point pX, pY * aSegm segment is broken into 2 segments connecting point pX, pY * After insertion: * The new segment starts from to new point, and ends to initial aSegm ending point * the old segment aSegm ends to new point * Returns: * Returns: * NULL if no new point (ie if aRefPoint already corresponded * NULL if no new point (ie if aRefPoint already corresponded at one end of aSegm * At one end where: * or * Pointer to the segment created * Pointer to the segment created * Created and the point is the intersection of 2 lines segments aSegm and * refsegm * Returns the exact value of aRefPoint * Returns the exact value of aRefPoint * If aSegm points to a via: * If aSegm points to a via: * Returns the exact value of aRefPoint and ptsegm, * Returns the exact value of aRefPoint and a pointer to the via, * But does not create extra point * But does not create extra point */ */ TRACK* CreateLockPoint( wxPoint& aRefPoint, TRACK* CreateLockPoint( BOARD* aPcb, wxPoint& aRefPoint, TRACK* aSegm, TRACK* aSegm, TRACK* aRefSegm, PICKED_ITEMS_LIST* aItemsListPicker ) PICKED_ITEMS_LIST* aItemsListPicker ) { { int cX, cY; int dx, dy; if( aSegm->m_Start == aRefPoint || aSegm->m_End == aRefPoint ) if( aSegm->m_Start == aRefPoint || aSegm->m_End == aRefPoint ) return NULL; return NULL; Loading @@ -1086,15 +1084,12 @@ TRACK* CreateLockPoint( wxPoint& aRefPoint, return aSegm; return aSegm; } } /* Calculation coordinate of intermediate point in the coordinate origin /* Calculation coordinate of intermediate point relative to * = Original ptsegm * the start point of aSegm */ */ cX = aRefPoint.x - aSegm->m_Start.x; wxPoint delta = aSegm->m_End - aSegm->m_Start; cY = aRefPoint.y - aSegm->m_Start.y; dx = aSegm->m_End.x - aSegm->m_Start.x; dy = aSegm->m_End.y - aSegm->m_Start.y; // Not yet used: // Not yet in use: #if 0 #if 0 int ox, oy, fx, fy; int ox, oy, fx, fy; Loading @@ -1107,17 +1102,20 @@ TRACK* CreateLockPoint( wxPoint& aRefPoint, } } #endif #endif /* that the item be on the segment ptsegm: cY/cX = dy/dx */ // calculate coordinates of aRefPoint relative to aSegm->m_Start if( dx == 0 ) wxPoint newPoint = aRefPoint - aSegm->m_Start; cX = 0; /* segm horizontal */ // newPoint must be on aSegm: // Ensure newPoint.y/newPoint.y = delta.y/delta.x if( delta.x == 0 ) newPoint.x = 0; /* horizontal segment*/ else else cY = ( cX * dy ) / dx; newPoint.y = wxRound(( (double)newPoint.x * delta.y ) / delta.x); /* Create the intermediate point (that is to say creation of a new /* Create the intermediate point (that is to say creation of a new * segment, beginning at the intermediate point. * segment, beginning at the intermediate point. */ */ cX += aSegm->m_Start.x; newPoint.x += aSegm->m_Start.x; cY += aSegm->m_Start.y; newPoint.y += aSegm->m_Start.y; TRACK* newTrack = aSegm->Copy(); TRACK* newTrack = aSegm->Copy(); if( aItemsListPicker ) if( aItemsListPicker ) Loading @@ -1131,29 +1129,39 @@ TRACK* CreateLockPoint( wxPoint& aRefPoint, wxASSERT( list ); wxASSERT( list ); list->Insert( newTrack, aSegm->Next() ); list->Insert( newTrack, aSegm->Next() ); /* Correct pointer at the end of the new segment. */ newTrack->end = aSegm->end; /* Segment ends at new point. */ if( aItemsListPicker ) if( aItemsListPicker ) { { ITEM_PICKER picker( aSegm, UR_CHANGED ); ITEM_PICKER picker( aSegm, UR_CHANGED ); picker.m_Link = aSegm->Copy(); picker.m_Link = aSegm->Copy(); aItemsListPicker->PushItem( picker ); aItemsListPicker->PushItem( picker ); } } aSegm->m_End.x = cX; aSegm->m_End.y = cY; /* Correct pointer at the end of the new segment. */ newTrack->end = aSegm->end; newTrack->SetState( END_ONPAD, aSegm->GetState( END_ONPAD ) ); /* Set connections info relative to the new point */ /* Old segment now ends at new point. */ aSegm->m_End = newPoint; aSegm->end = newTrack; aSegm->SetState( END_ONPAD, OFF ); aSegm->SetState( END_ONPAD, OFF ); /* The next segment begins at the new point. */ /* The new segment begins at the new point. */ aSegm = newTrack;; newTrack->m_Start = newPoint; aSegm->m_Start.x = cX; newTrack->start = aSegm; aSegm->m_Start.y = cY; newTrack->SetState( BEGIN_ONPAD, OFF ); aSegm->SetState( BEGIN_ONPAD, OFF ); aRefPoint.x = cX; D_PAD * pad = Locate_Pad_Connecte( aPcb, newTrack, START ); aRefPoint.y = cY; if ( pad ) { newTrack->start = pad; newTrack->SetState( BEGIN_ONPAD, ON ); aSegm->end = pad; aSegm->SetState( END_ONPAD, ON ); } return aSegm; aRefPoint = newPoint; return newTrack; } }