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()
{
@ -170,14 +180,19 @@ void LENGTH_TUNER_TOOL::performTuning()
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 );
statusPopup.Popup();
PNS_MEANDER_PLACER* placer = static_cast<PNS_MEANDER_PLACER*>( m_router->Placer() );
VECTOR2I end;
placer->UpdateSettings( m_savedMeanderSettings );
m_router->Move( end, NULL );
updateStatusPopup( statusPopup );
while( OPT_TOOL_EVENT evt = Wait() )
{
if( evt->IsCancel() || evt->IsActivate() )
@ -191,14 +206,8 @@ void LENGTH_TUNER_TOOL::performTuning()
{
end = evt->Position();
m_router->Move( end, NULL );
wxPoint p = wxGetMousePosition();
p.x += 20;
p.y += 20;
statusPopup.Update( m_router );
statusPopup.Move( p );
updateStatusPopup( statusPopup );
}
else if( evt->IsClick( BUT_LEFT ) )
{

View File

@ -44,6 +44,9 @@ private:
void performTuning( );
int mainLoop( PNS_ROUTER_MODE aMode );
void handleCommonEvents( const TOOL_EVENT& aEvent );
void updateStatusPopup ( PNS_TUNE_STATUS_POPUP& aPopup );
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& 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 );
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 );
aPost = l.Slice( i_end, -1 );
aTuned = l.Slice( i_start, i_end );
aTuned.Simplify();
}