diff --git a/libs/kimath/src/geometry/shape_collisions.cpp b/libs/kimath/src/geometry/shape_collisions.cpp index d487812341..c1a0b6612f 100644 --- a/libs/kimath/src/geometry/shape_collisions.cpp +++ b/libs/kimath/src/geometry/shape_collisions.cpp @@ -360,14 +360,19 @@ static inline bool Collide( const SHAPE_LINE_CHAIN_BASE& aA, const SHAPE_LINE_CH if( closest_dist > 0 && aActual ) { std::vector chains = { - static_cast( &aA ), - static_cast( &aB ) + dynamic_cast( &aA ), + dynamic_cast( &aB ) }; + std::vector shapes = { &aA, &aB }; + for( int ii = 0; ii < 2; ii++ ) { const SHAPE_LINE_CHAIN* chain = chains[ii]; - const SHAPE_LINE_CHAIN* other = chains[( ii + 1 ) % 2]; + const SHAPE* other = shapes[( ii + 1 ) % 2]; + + if( !chain ) + continue; for( size_t jj = 0; jj < chain->ArcCount(); jj++ ) {