router: fix tuning status popup & incorrect length display

This commit is contained in:
Tomasz Wlostowski 2015-03-05 10:02:29 +01:00 committed by Maciej Suminski
parent 504c8bf286
commit 435ca8a7dd
3 changed files with 39 additions and 13 deletions

View File

@ -147,6 +147,16 @@ void LENGTH_TUNER_TOOL::handleCommonEvents( const TOOL_EVENT& aEvent )
} }
} }
void LENGTH_TUNER_TOOL::updateStatusPopup( PNS_TUNE_STATUS_POPUP& aPopup )
{
wxPoint p = wxGetMousePosition();
p.x += 20;
p.y += 20;
aPopup.Update( m_router );
aPopup.Move( p );
}
void LENGTH_TUNER_TOOL::performTuning() void LENGTH_TUNER_TOOL::performTuning()
{ {
@ -170,13 +180,18 @@ void LENGTH_TUNER_TOOL::performTuning()
return; return;
} }
PNS_MEANDER_PLACER_BASE* placer = static_cast<PNS_MEANDER_PLACER_BASE*>( m_router->Placer() );
placer->UpdateSettings( m_savedMeanderSettings );
VECTOR2I end( m_startSnapPoint );
PNS_TUNE_STATUS_POPUP statusPopup( m_frame ); PNS_TUNE_STATUS_POPUP statusPopup( m_frame );
statusPopup.Popup(); statusPopup.Popup();
PNS_MEANDER_PLACER* placer = static_cast<PNS_MEANDER_PLACER*>( m_router->Placer() ); m_router->Move( end, NULL );
VECTOR2I end; updateStatusPopup( statusPopup );
placer->UpdateSettings( m_savedMeanderSettings );
while( OPT_TOOL_EVENT evt = Wait() ) while( OPT_TOOL_EVENT evt = Wait() )
{ {
@ -191,14 +206,8 @@ void LENGTH_TUNER_TOOL::performTuning()
{ {
end = evt->Position(); end = evt->Position();
m_router->Move( end, NULL ); m_router->Move( end, NULL );
updateStatusPopup( statusPopup );
wxPoint p = wxGetMousePosition();
p.x += 20;
p.y += 20;
statusPopup.Update( m_router );
statusPopup.Move( p );
} }
else if( evt->IsClick( BUT_LEFT ) ) else if( evt->IsClick( BUT_LEFT ) )
{ {

View File

@ -44,6 +44,9 @@ private:
void performTuning( ); void performTuning( );
int mainLoop( PNS_ROUTER_MODE aMode ); int mainLoop( PNS_ROUTER_MODE aMode );
void handleCommonEvents( const TOOL_EVENT& aEvent ); void handleCommonEvents( const TOOL_EVENT& aEvent );
void updateStatusPopup ( PNS_TUNE_STATUS_POPUP& aPopup );
PNS_MEANDER_SETTINGS m_savedMeanderSettings; PNS_MEANDER_SETTINGS m_savedMeanderSettings;
}; };

View File

@ -64,7 +64,20 @@ void PNS_MEANDER_PLACER_BASE::cutTunedLine( const SHAPE_LINE_CHAIN& aOrigin,
SHAPE_LINE_CHAIN& aTuned, SHAPE_LINE_CHAIN& aTuned,
SHAPE_LINE_CHAIN& aPost ) SHAPE_LINE_CHAIN& aPost )
{ {
VECTOR2I n = aOrigin.NearestPoint( aCursorPos ); VECTOR2I cp ( aCursorPos );
if ( cp == aTuneStart ) // we don't like tuning segments with 0 length
{
int idx = aOrigin.FindSegment( cp );
if( idx >= 0 )
{
const SEG& s = aOrigin.CSegment( idx );
cp += (s.B - s.A).Resize(2);
} else
cp += VECTOR2I (2, 5); // some arbitrary value that is not 45 degrees oriented
}
VECTOR2I n = aOrigin.NearestPoint( cp );
VECTOR2I m = aOrigin.NearestPoint( aTuneStart ); VECTOR2I m = aOrigin.NearestPoint( aTuneStart );
SHAPE_LINE_CHAIN l( aOrigin ); SHAPE_LINE_CHAIN l( aOrigin );
@ -84,6 +97,7 @@ void PNS_MEANDER_PLACER_BASE::cutTunedLine( const SHAPE_LINE_CHAIN& aOrigin,
aPre = l.Slice( 0, i_start ); aPre = l.Slice( 0, i_start );
aPost = l.Slice( i_end, -1 ); aPost = l.Slice( i_end, -1 );
aTuned = l.Slice( i_start, i_end ); aTuned = l.Slice( i_start, i_end );
aTuned.Simplify(); aTuned.Simplify();
} }