From 4a05b36bc6535b18858de8249b9c7420852e4052 Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Thu, 20 Jan 2022 18:10:14 +0000 Subject: [PATCH] Prefer EDA_ANGLE to naked radians. --- common/gal/cairo/cairo_gal.cpp | 7 ++- common/preview_items/ruler_item.cpp | 25 ++++++----- gerbview/excellon_read_drill_file.cpp | 44 ++++++++++--------- .../cadstar/cadstar_pcb_archive_loader.cpp | 5 ++- 4 files changed, 46 insertions(+), 35 deletions(-) diff --git a/common/gal/cairo/cairo_gal.cpp b/common/gal/cairo/cairo_gal.cpp index 3be76cf634..9814233798 100644 --- a/common/gal/cairo/cairo_gal.cpp +++ b/common/gal/cairo/cairo_gal.cpp @@ -35,6 +35,7 @@ #include #include #include // for KiROUND +#include #include #include @@ -390,8 +391,10 @@ void CAIRO_GAL_BASE::DrawArcSegment( const VECTOR2D& aCenterPoint, double aRadiu VECTOR2D mid = roundp( xform( aCenterPoint ) ); double width = xform( aWidth / 2.0 ); - VECTOR2D startPointS = VECTOR2D( r, 0.0 ).Rotate( startAngleS ); - VECTOR2D endPointS = VECTOR2D( r, 0.0 ).Rotate( endAngleS ); + VECTOR2D startPointS = VECTOR2D( r, 0.0 ); + VECTOR2D endPointS = VECTOR2D( r, 0.0 ); + RotatePoint( startPointS, -EDA_ANGLE( startAngleS, RADIANS_T ) ); + RotatePoint( endPointS, -EDA_ANGLE( endAngleS, RADIANS_T ) ); cairo_save( m_currentContext ); diff --git a/common/preview_items/ruler_item.cpp b/common/preview_items/ruler_item.cpp index 29307fd13e..860e1d0b9f 100644 --- a/common/preview_items/ruler_item.cpp +++ b/common/preview_items/ruler_item.cpp @@ -72,7 +72,7 @@ static void drawCursorStrings( KIGFX::VIEW* aView, const VECTOR2D& aCursor, cursorStrings.push_back( DimensionLabel( "r", aRulerVec.EuclideanNorm(), aUnits ) ); - EDA_ANGLE angle( -aRulerVec.Angle(), RADIANS_T ); + EDA_ANGLE angle = -EDA_ANGLE( aRulerVec ); cursorStrings.push_back( DimensionLabel( wxString::FromUTF8( "θ" ), angle.AsDegrees(), EDA_UNITS::DEGREES ) ); @@ -152,17 +152,19 @@ void drawTicksAlongLine( KIGFX::VIEW* aView, const VECTOR2D& aOrigin, const VECT { KIGFX::GAL* gal = aView->GetGAL(); KIFONT::FONT* font = KIFONT::FONT::GetFont(); - VECTOR2D tickLine = aLine.Rotate( -M_PI_2 ); double tickSpace; TICK_FORMAT tickFormat = getTickFormatForScale( gal->GetWorldScale(), tickSpace, aUnits ); double majorTickLen = aMinorTickLen * ( majorTickLengthFactor + 1 ); + VECTOR2D tickLine = aLine; + + RotatePoint( tickLine, ANGLE_90 ); // number of ticks in whole ruler int numTicks = (int) std::ceil( aLine.EuclideanNorm() / tickSpace ); // work out which way up the tick labels go TEXT_DIMS labelDims = GetConstantGlyphHeight( gal, -1 ); - double labelAngle = -tickLine.Angle(); + EDA_ANGLE labelAngle = - EDA_ANGLE( tickLine ); VECTOR2I labelOffset = tickLine.Resize( majorTickLen ); if( aDrawingDropShadows ) @@ -178,15 +180,15 @@ void drawTicksAlongLine( KIGFX::VIEW* aView, const VECTOR2D& aOrigin, const VECT labelAttrs.m_Size = labelDims.GlyphSize; labelAttrs.m_StrokeWidth = labelDims.StrokeWidth; - if( aLine.Angle() > 0 ) + if( EDA_ANGLE( aLine ) > ANGLE_0 ) { labelAttrs.m_Halign = GR_TEXT_H_ALIGN_LEFT; - labelAttrs.m_Angle = EDA_ANGLE( labelAngle, RADIANS_T ); + labelAttrs.m_Angle = labelAngle; } else { labelAttrs.m_Halign = GR_TEXT_H_ALIGN_RIGHT; - labelAttrs.m_Angle = EDA_ANGLE( labelAngle + M_PI, RADIANS_T ); + labelAttrs.m_Angle = labelAngle + ANGLE_180; } BOX2D viewportD = aView->GetViewport(); @@ -241,10 +243,13 @@ void drawTicksAlongLine( KIGFX::VIEW* aView, const VECTOR2D& aOrigin, const VECT void drawBacksideTicks( KIGFX::VIEW* aView, const VECTOR2D& aOrigin, const VECTOR2D& aLine, double aTickLen, int aNumDivisions, bool aDrawingDropShadows ) { - KIGFX::GAL* gal = aView->GetGAL(); - const double backTickSpace = aLine.EuclideanNorm() / aNumDivisions; - const VECTOR2D backTickVec = aLine.Rotate( M_PI_2 ).Resize( aTickLen ); - TEXT_DIMS textDims = GetConstantGlyphHeight( gal, -1 ); + KIGFX::GAL* gal = aView->GetGAL(); + TEXT_DIMS textDims = GetConstantGlyphHeight( gal, -1 ); + const double backTickSpace = aLine.EuclideanNorm() / aNumDivisions; + VECTOR2D backTickVec = aLine; + + RotatePoint( backTickVec, -ANGLE_90 ); + backTickVec.Resize( aTickLen ); BOX2D viewportD = aView->GetViewport(); BOX2I viewport( VECTOR2I( viewportD.GetPosition() ), VECTOR2I( viewportD.GetSize() ) ); diff --git a/gerbview/excellon_read_drill_file.cpp b/gerbview/excellon_read_drill_file.cpp index 513824d443..2e69330b62 100644 --- a/gerbview/excellon_read_drill_file.cpp +++ b/gerbview/excellon_read_drill_file.cpp @@ -63,6 +63,7 @@ #include // for KiROUND +#include // for RotatePoint #include #include @@ -109,38 +110,39 @@ static VECTOR2I computeCenter( VECTOR2I aStart, VECTOR2I aEnd, int& aRadius, boo * the Y center positions are on the vertical line starting at end.x/2, 0 * and solve aRadius^2 = X^2 + Y^2 (2 values) */ - double seg_angle = end.Angle(); //in radian - VECTOR2D h_segm = end.Rotate( - seg_angle ); - double cX = h_segm.x/2; - double cY1 = sqrt( (double)aRadius*aRadius - cX*cX ); - double cY2 = -cY1; - VECTOR2D center1( cX, cY1 ); - center1 = center1.Rotate( seg_angle ); - double arc_angle1 = (end - center1).Angle() - (VECTOR2D(0.0,0.0) - center1).Angle(); - VECTOR2D center2( cX, cY2 ); - center2 = center2.Rotate( seg_angle ); - double arc_angle2 = (end - center2).Angle() - (VECTOR2D(0.0,0.0) - center2).Angle(); + EDA_ANGLE seg_angle( end ); + VECTOR2D h_segm = end; + RotatePoint( h_segm, seg_angle ); + double cX = h_segm.x/2; + double cY1 = sqrt( (double)aRadius*aRadius - cX*cX ); + double cY2 = -cY1; + VECTOR2D center1( cX, cY1 ); + RotatePoint( center1, -seg_angle ); + EDA_ANGLE arc_angle1 = EDA_ANGLE( end - center1 ) - EDA_ANGLE( VECTOR2D( 0.0, 0.0 ) - center1 ); + VECTOR2D center2( cX, cY2 ); + RotatePoint( center2, -seg_angle ); + EDA_ANGLE arc_angle2 = EDA_ANGLE( end - center2 ) - EDA_ANGLE( VECTOR2D( 0.0, 0.0 ) - center2 ); if( !aRotCCW ) { - if( arc_angle1 < 0.0 ) - arc_angle1 += 2*M_PI; + if( arc_angle1 < ANGLE_0 ) + arc_angle1 += ANGLE_360; - if( arc_angle2 < 0.0 ) - arc_angle2 += 2*M_PI; + if( arc_angle2 < ANGLE_0 ) + arc_angle2 += ANGLE_360; } else { - if( arc_angle1 > 0.0 ) - arc_angle1 -= 2*M_PI; + if( arc_angle1 > ANGLE_0 ) + arc_angle1 -= ANGLE_360; - if( arc_angle2 > 0.0 ) - arc_angle2 -= 2*M_PI; + if( arc_angle2 > ANGLE_0 ) + arc_angle2 -= ANGLE_360; } // Arc angle must be <= 180.0 degrees. // So choose the center that create a arc angle <= 180.0 - if( std::abs( arc_angle1 ) <= M_PI ) + if( std::abs( arc_angle1 ) <= ANGLE_180 ) { center.x = KiROUND( center1.x ); center.y = KiROUND( center1.y ); @@ -161,7 +163,7 @@ extern double ReadDouble( char*& text, bool aSkipSeparator = true ); extern void fillFlashedGBRITEM( GERBER_DRAW_ITEM* aGbrItem, APERTURE_T aAperture, int Dcode_index, - const VECTOR2I& aPos, + const VECTOR2I& aPos, wxSize aSize, bool aLayerNegative ); diff --git a/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.cpp b/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.cpp index 549146b8da..f5d761fe4b 100644 --- a/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.cpp +++ b/pcbnew/plugins/cadstar/cadstar_pcb_archive_loader.cpp @@ -1415,8 +1415,9 @@ void CADSTAR_PCB_ARCHIVE_LOADER::loadDimensions() } else { - double angle = crossbarVector.Angle() + ( M_PI / 2 ); - height = heightVector.x * cos( angle ) + heightVector.y * sin( angle ); + EDA_ANGLE angle( crossbarVector ); + angle += ANGLE_90; + height = heightVector.x * angle.Cos() + heightVector.y * angle.Sin(); } dimension->SetHeight( height );