From e5588938514aec064543e152b6a25a8943ef62b2 Mon Sep 17 00:00:00 2001 From: Tomasz Wlostowski Date: Thu, 21 Jul 2022 16:30:28 +0200 Subject: [PATCH] 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) --- pcbnew/router/pns_node.cpp | 2 +- pcbnew/router/pns_router.cpp | 13 +------------ 2 files changed, 2 insertions(+), 13 deletions(-) diff --git a/pcbnew/router/pns_node.cpp b/pcbnew/router/pns_node.cpp index cacc759eb4..5862228cd9 100644 --- a/pcbnew/router/pns_node.cpp +++ b/pcbnew/router/pns_node.cpp @@ -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] ); } diff --git a/pcbnew/router/pns_router.cpp b/pcbnew/router/pns_router.cpp index bc6b29704f..daaca18555 100644 --- a/pcbnew/router/pns_router.cpp +++ b/pcbnew/router/pns_router.cpp @@ -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 ) {