From 112f089485430fdceb8a9752aa98e5aca3e14368 Mon Sep 17 00:00:00 2001 From: Roberto Fernandez Bautista Date: Fri, 2 Sep 2022 22:18:17 +0200 Subject: [PATCH] Fix TRANSFORM::MapAngles for other transformations than y=-y Tested on transformation that results in: y=-y & x=-x Fixes https://gitlab.com/kicad/code/kicad/-/issues/12345 --- common/transform.cpp | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/common/transform.cpp b/common/transform.cpp index ec8e650baa..ef5351a0dc 100644 --- a/common/transform.cpp +++ b/common/transform.cpp @@ -84,7 +84,7 @@ bool TRANSFORM::MapAngles( EDA_ANGLE* aAngle1, EDA_ANGLE* aAngle2 ) const VECTOR2D v; bool swap = false; - EDA_ANGLE delta = ( *aAngle2 - *aAngle1 ).Normalize(); + EDA_ANGLE delta = ( *aAngle2 - *aAngle1 ).Normalize180(); x = aAngle1->Cos(); y = aAngle1->Sin(); @@ -92,17 +92,16 @@ bool TRANSFORM::MapAngles( EDA_ANGLE* aAngle1, EDA_ANGLE* aAngle2 ) const *aAngle1 = EDA_ANGLE( v ); aAngle1->Normalize180(); - // Transform the relative difference between the two angles - x = delta.Cos(); - y = delta.Sin(); + x = aAngle2->Cos(); + y = aAngle2->Sin(); v = VECTOR2D( x * x1 + y * y1, x * x2 + y * y2 ); - EDA_ANGLE deltaTransformed( v ); + *aAngle2 = EDA_ANGLE( v ); + aAngle2->Normalize180(); - // Calculate the second angle using the first one as an anchor - *aAngle2 = *aAngle1 + deltaTransformed; + EDA_ANGLE deltaTransformed = ( *aAngle2 - *aAngle1 ).Normalize180(); - if( sign( deltaTransformed.Normalize180().AsDegrees() ) - != sign( delta.Normalize180().AsDegrees() ) ) + if( sign( deltaTransformed.AsDegrees() ) + != sign( delta.AsDegrees() ) ) { std::swap( *aAngle1, *aAngle2 ); swap = true;