router: use actual snap point position for routability checks of a segment instead of the segment endpoint(s).

Explanation:
- place a long segment A with something violating the rules close to its endpoint
- try to start routing in the 2/3 of the length of A (on the obstacle side)
- bummer - the router picks the nearest endpoint of A for the collision check (even though we don't care about this collision since we want to route far away from it)
This commit is contained in:
Tomasz Wlostowski 2022-07-21 16:30:28 +02:00
parent e4a36135c6
commit e558893851
2 changed files with 2 additions and 13 deletions

View File

@ -489,7 +489,7 @@ NODE::OPT_OBSTACLE NODE::CheckColliding( const ITEM* aItemA, int aKindMask )
if( line->EndsWithVia() )
{
n += QueryColliding( &line->Via(), obs, aKindMask, 1 );
if( n )
return OPT_OBSTACLE( obs[0] );
}

View File

@ -284,18 +284,7 @@ bool ROUTER::isStartingPointRoutable( const VECTOR2I& aWhere, ITEM* aStartItem,
}
}
VECTOR2I startPoint = aStartItem ? aStartItem->Anchor( 0 ) : aWhere;
if( aStartItem && aStartItem->OfKind( ITEM::SEGMENT_T | ITEM::ARC_T ) )
{
VECTOR2I otherEnd = aStartItem->Anchor( 1 );
if( ( otherEnd - aWhere ).SquaredEuclideanNorm()
< ( startPoint - aWhere ).SquaredEuclideanNorm() )
{
startPoint = otherEnd;
}
}
VECTOR2I startPoint = aWhere;
if( m_mode == PNS_MODE_ROUTE_SINGLE )
{