Tear down the wxPoint trigo helpers

This commit is contained in:
Marek Roszko 2022-01-04 21:23:11 -05:00
parent e4dbfcd92d
commit 726d873c53
9 changed files with 52 additions and 105 deletions

View File

@ -222,10 +222,10 @@ void FONT::getLinePositions( const UTF8& aText, const VECTOR2D& aPosition,
case GR_TEXT_H_ALIGN_RIGHT: lineOffset.x = mirrorX * -lineSize.x; break; case GR_TEXT_H_ALIGN_RIGHT: lineOffset.x = mirrorX * -lineSize.x; break;
} }
wxPoint pos( aPosition.x + lineOffset.x, aPosition.y + lineOffset.y ); VECTOR2I pos( aPosition.x + lineOffset.x, aPosition.y + lineOffset.y );
RotatePoint( &pos, origin, aAttrs.m_Angle ); RotatePoint( pos, origin, aAttrs.m_Angle );
aPositions.push_back( pos ); aPositions.push_back( (wxPoint) pos );
} }
} }

View File

@ -253,9 +253,9 @@ void GRCSegm( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2, int w
int dx = x2 - x1; int dx = x2 - x1;
int dy = y2 - y1; int dy = y2 - y1;
double angle = -ArcTangente( dy, dx ); double angle = -ArcTangente( dy, dx );
wxPoint start; VECTOR2I start;
wxPoint end; VECTOR2I end;
wxPoint org( x1, y1 ); VECTOR2I org( x1, y1 );
int len = (int) hypot( dx, dy ); int len = (int) hypot( dx, dy );
// We know if the DC is mirrored, to draw arcs // We know if the DC is mirrored, to draw arcs
@ -268,37 +268,37 @@ void GRCSegm( EDA_RECT* ClipBox, wxDC* DC, int x1, int y1, int x2, int y2, int w
start.y = radius; start.y = radius;
end.x = len; end.x = len;
end.y = radius; end.y = radius;
RotatePoint( &start, angle ); RotatePoint( start, angle );
RotatePoint( &end, angle ); RotatePoint( end, angle );
start += org; start += org;
end += org; end += org;
DC->DrawLine( start, end ); DC->DrawLine( (wxPoint) start, (wxPoint) end );
// first rounded end // first rounded end
end.x = 0; end.x = 0;
end.y = -radius; end.y = -radius;
RotatePoint( &end, angle ); RotatePoint( end, angle );
end += org; end += org;
if( !mirrored ) if( !mirrored )
DC->DrawArc( end, start, org ); DC->DrawArc( (wxPoint) end, (wxPoint) start, (wxPoint) org );
else else
DC->DrawArc( start, end, org ); DC->DrawArc( (wxPoint) start, (wxPoint) end, (wxPoint) org );
// second edge // second edge
start.x = len; start.x = len;
start.y = -radius; start.y = -radius;
RotatePoint( &start, angle ); RotatePoint( start, angle );
start += org; start += org;
DC->DrawLine( start, end ); DC->DrawLine( (wxPoint) start, (wxPoint) end );
// second rounded end // second rounded end
end.x = len; end.x = len;
end.y = radius; end.y = radius;
RotatePoint( &end, angle); RotatePoint( end, angle);
end += org; end += org;
if( !mirrored ) if( !mirrored )

View File

@ -2619,8 +2619,8 @@ void CADSTAR_ARCHIVE_PARSER::FixTextPositionNoAlignment( EDA_TEXT* aKiCadTextIte
if( !aKiCadTextItem->GetText().IsEmpty() ) if( !aKiCadTextItem->GetText().IsEmpty() )
{ {
int txtAngleDecideg = aKiCadTextItem->GetTextAngle().AsTenthsOfADegree(); int txtAngleDecideg = aKiCadTextItem->GetTextAngle().AsTenthsOfADegree();
wxPoint positionOffset( 0, aKiCadTextItem->GetInterline() ); VECTOR2I positionOffset( 0, aKiCadTextItem->GetInterline() );
RotatePoint( &positionOffset, txtAngleDecideg ); RotatePoint( positionOffset, txtAngleDecideg );
EDA_ITEM* textEdaItem = dynamic_cast<EDA_ITEM*>( aKiCadTextItem ); EDA_ITEM* textEdaItem = dynamic_cast<EDA_ITEM*>( aKiCadTextItem );

View File

@ -1919,20 +1919,20 @@ CADSTAR_SCH_ARCHIVE_LOADER::getLocationOfNetElement( const NET_SCH& aNet,
SYMBOL sym = Schematic.Symbols.at( symid ); SYMBOL sym = Schematic.Symbols.at( symid );
SYMDEF_ID symdefid = sym.SymdefID; SYMDEF_ID symdefid = sym.SymdefID;
wxPoint symbolOrigin = sym.Origin; VECTOR2I symbolOrigin = sym.Origin;
if( Library.SymbolDefinitions.find( symdefid ) == Library.SymbolDefinitions.end() ) if( Library.SymbolDefinitions.find( symdefid ) == Library.SymbolDefinitions.end() )
return logUnknownNetElementError(); return logUnknownNetElementError();
wxPoint libpinPosition = VECTOR2I libpinPosition =
Library.SymbolDefinitions.at( symdefid ).Terminals.at( termid ).Position; Library.SymbolDefinitions.at( symdefid ).Terminals.at( termid ).Position;
wxPoint libOrigin = Library.SymbolDefinitions.at( symdefid ).Origin; VECTOR2I libOrigin = Library.SymbolDefinitions.at( symdefid ).Origin;
wxPoint pinOffset = libpinPosition - libOrigin; VECTOR2I pinOffset = libpinPosition - libOrigin;
pinOffset.x = ( pinOffset.x * sym.ScaleRatioNumerator ) / sym.ScaleRatioDenominator; pinOffset.x = ( pinOffset.x * sym.ScaleRatioNumerator ) / sym.ScaleRatioDenominator;
pinOffset.y = ( pinOffset.y * sym.ScaleRatioNumerator ) / sym.ScaleRatioDenominator; pinOffset.y = ( pinOffset.y * sym.ScaleRatioNumerator ) / sym.ScaleRatioDenominator;
wxPoint pinPosition = symbolOrigin + pinOffset; VECTOR2I pinPosition = symbolOrigin + pinOffset;
double compAngleDeciDeg = getAngleTenthDegree( sym.OrientAngle ); double compAngleDeciDeg = getAngleTenthDegree( sym.OrientAngle );
@ -1942,7 +1942,7 @@ CADSTAR_SCH_ARCHIVE_LOADER::getLocationOfNetElement( const NET_SCH& aNet,
double adjustedOrientationDecideg; double adjustedOrientationDecideg;
getComponentOrientation( compAngleDeciDeg, adjustedOrientationDecideg ); getComponentOrientation( compAngleDeciDeg, adjustedOrientationDecideg );
RotatePoint( &pinPosition, symbolOrigin, -adjustedOrientationDecideg ); RotatePoint( pinPosition, symbolOrigin, -adjustedOrientationDecideg );
POINT retval; POINT retval;
retval.x = pinPosition.x; retval.x = pinPosition.x;

View File

@ -79,21 +79,11 @@ void RotatePoint( int *pX, int *pY, int cx, int cy, double angle );
/* /*
* Calculate the new coord point point for a rotation angle in (1/10 degree). * Calculate the new coord point point for a rotation angle in (1/10 degree).
*/ */
inline void RotatePoint( wxPoint* point, double angle )
{
RotatePoint( &point->x, &point->y, angle );
}
inline void RotatePoint( VECTOR2I& point, double angle ) inline void RotatePoint( VECTOR2I& point, double angle )
{ {
RotatePoint( &point.x, &point.y, angle ); RotatePoint( &point.x, &point.y, angle );
} }
inline void RotatePoint( wxPoint* point, EDA_ANGLE angle )
{
RotatePoint( &point->x, &point->y, angle.AsTenthsOfADegree() );
}
inline void RotatePoint( VECTOR2I& point, EDA_ANGLE angle ) inline void RotatePoint( VECTOR2I& point, EDA_ANGLE angle )
{ {
RotatePoint( &point.x, &point.y, angle.AsTenthsOfADegree() ); RotatePoint( &point.x, &point.y, angle.AsTenthsOfADegree() );
@ -109,12 +99,6 @@ inline void RotatePoint( VECTOR2I& point, const VECTOR2I& centre, EDA_ANGLE angl
/* /*
* Calculate the new coord point point for a center rotation center and angle in (1/10 degree). * Calculate the new coord point point for a center rotation center and angle in (1/10 degree).
*/ */
void RotatePoint( wxPoint *point, const wxPoint & centre, double angle );
inline void RotatePoint( wxPoint *point, const wxPoint& centre, EDA_ANGLE angle )
{
RotatePoint( point, centre, angle.AsTenthsOfADegree() );
}
void RotatePoint( double *pX, double *pY, double angle ); void RotatePoint( double *pX, double *pY, double angle );
@ -161,21 +145,6 @@ const VECTOR2I CalcArcMid( const VECTOR2I& aStart, const VECTOR2I& aEnd, const V
*/ */
double ArcTangente( int dy, int dx ); double ArcTangente( int dy, int dx );
//! @brief Euclidean norm of a 2D vector
//! @param vector Two-dimensional vector
//! @return Euclidean norm of the vector
inline double EuclideanNorm( const wxPoint &vector )
{
// this is working with doubles
return hypot( vector.x, vector.y );
}
inline double EuclideanNorm( const wxSize &vector )
{
// this is working with doubles, too
return hypot( vector.x, vector.y );
}
inline double EuclideanNorm( const VECTOR2I& vector ) inline double EuclideanNorm( const VECTOR2I& vector )
{ {
// this is working with doubles // this is working with doubles
@ -218,15 +187,6 @@ inline bool HitTestPoints( const VECTOR2I& pointA, const VECTOR2I& pointB, doubl
return sqdistance < threshold * threshold; return sqdistance < threshold * threshold;
} }
//! @brief Determine the cross product
//! @param vectorA Two-dimensional vector
//! @param vectorB Two-dimensional vector
inline double CrossProduct( const wxPoint& vectorA, const wxPoint& vectorB )
{
// As before the cast is to avoid int overflow
return (double)vectorA.x * vectorB.y - (double)vectorA.y * vectorB.x;
}
/** /**
* Test if \a aRefPoint is with \a aDistance on the line defined by \a aStart and \a aEnd.. * Test if \a aRefPoint is with \a aDistance on the line defined by \a aStart and \a aEnd..
* *
@ -238,19 +198,6 @@ inline double CrossProduct( const wxPoint& vectorA, const wxPoint& vectorB )
bool TestSegmentHit( const VECTOR2I& aRefPoint, const VECTOR2I& aStart, const VECTOR2I& aEnd, bool TestSegmentHit( const VECTOR2I& aRefPoint, const VECTOR2I& aStart, const VECTOR2I& aEnd,
int aDist ); int aDist );
/**
* Return the length of a line segment defined by \a aPointA and \a aPointB.
*
* See also EuclideanNorm and Distance for the single vector or four scalar versions.
*
* @return Length of a line (as double)
*/
inline double GetLineLength( const wxPoint& aPointA, const wxPoint& aPointB )
{
// Implicitly casted to double
return hypot( aPointA.x - aPointB.x, aPointA.y - aPointB.y );
}
/** /**
* Return the length of a line segment defined by \a aPointA and \a aPointB. * Return the length of a line segment defined by \a aPointA and \a aPointB.
* *

View File

@ -578,12 +578,12 @@ DIALOG_PAD_PRIMITIVES_TRANSFORM::DIALOG_PAD_PRIMITIVES_TRANSFORM( wxWindow* aPar
// A helper function in geometry transform // A helper function in geometry transform
inline void geom_transf( wxPoint& aCoord, const wxPoint& aMove, double aScale, double aRotation ) inline void geom_transf( VECTOR2I& aCoord, const VECTOR2I& aMove, double aScale, double aRotation )
{ {
aCoord.x = KiROUND( aCoord.x * aScale ); aCoord.x = KiROUND( aCoord.x * aScale );
aCoord.y = KiROUND( aCoord.y * aScale ); aCoord.y = KiROUND( aCoord.y * aScale );
aCoord += aMove; aCoord += aMove;
RotatePoint( &aCoord, aRotation ); RotatePoint( aCoord, aRotation );
} }

View File

@ -47,10 +47,8 @@
* @param aCenter = arc centre. * @param aCenter = arc centre.
* @param a_ArcAngle = arc length in 0.1 degrees. * @param a_ArcAngle = arc length in 0.1 degrees.
*/ */
static void gen_arc( std::vector <wxPoint>& aBuffer, static void gen_arc( std::vector<VECTOR2I>& aBuffer, const VECTOR2I& aStartPoint,
const wxPoint& aStartPoint, const VECTOR2I& aCenter, int a_ArcAngle )
const wxPoint& aCenter,
int a_ArcAngle )
{ {
auto first_point = aStartPoint - aCenter; auto first_point = aStartPoint - aCenter;
auto radius = KiROUND( EuclideanNorm( first_point ) ); auto radius = KiROUND( EuclideanNorm( first_point ) );
@ -64,7 +62,7 @@ static void gen_arc( std::vector <wxPoint>& aBuffer,
double rot_angle = increment_angle * ii; double rot_angle = increment_angle * ii;
double fcos = cos( rot_angle ); double fcos = cos( rot_angle );
double fsin = sin( rot_angle ); double fsin = sin( rot_angle );
wxPoint currpt; VECTOR2I currpt;
// Rotate current point: // Rotate current point:
currpt.x = KiROUND( ( first_point.x * fcos + first_point.y * fsin ) ); currpt.x = KiROUND( ( first_point.x * fcos + first_point.y * fsin ) );
@ -94,8 +92,10 @@ enum class INDUCTOR_S_SHAPE_RESULT
* @param aLength = full length of the path * @param aLength = full length of the path
* @param aWidth = segment width * @param aWidth = segment width
*/ */
static INDUCTOR_S_SHAPE_RESULT BuildCornersList_S_Shape( std::vector<wxPoint>& aBuffer, static INDUCTOR_S_SHAPE_RESULT BuildCornersList_S_Shape( std::vector<VECTOR2I>& aBuffer,
const wxPoint& aStartPoint, const wxPoint& aEndPoint, int aLength, int aWidth ) const VECTOR2I& aStartPoint,
const VECTOR2I& aEndPoint, int aLength,
int aWidth )
{ {
/* We must determine: /* We must determine:
* segm_count = number of segments perpendicular to the direction * segm_count = number of segments perpendicular to the direction
@ -279,7 +279,7 @@ static INDUCTOR_S_SHAPE_RESULT BuildCornersList_S_Shape( std::vector<wxPoint>& a
for( unsigned jj = 0; jj < aBuffer.size(); jj++ ) for( unsigned jj = 0; jj < aBuffer.size(); jj++ )
{ {
RotatePoint( &aBuffer[jj], aStartPoint, angle ); RotatePoint( aBuffer[jj], aStartPoint, angle );
} }
// push last point (end point) // push last point (end point)
@ -385,7 +385,7 @@ FOOTPRINT* MICROWAVE_TOOL::createMicrowaveInductor( MICROWAVE_INDUCTOR_PATTERN&
} }
// Calculate the elements. // Calculate the elements.
std::vector <wxPoint> buffer; std::vector<VECTOR2I> buffer;
const INDUCTOR_S_SHAPE_RESULT res = BuildCornersList_S_Shape( buffer, aInductorPattern.m_Start, const INDUCTOR_S_SHAPE_RESULT res = BuildCornersList_S_Shape( buffer, aInductorPattern.m_Start,
aInductorPattern.m_End, aInductorPattern.m_End,
aInductorPattern.m_Length, aInductorPattern.m_Length,
@ -443,7 +443,7 @@ FOOTPRINT* MICROWAVE_TOOL::createMicrowaveInductor( MICROWAVE_INDUCTOR_PATTERN&
pad->SetPosition( aInductorPattern.m_End ); pad->SetPosition( aInductorPattern.m_End );
pad->SetPos0( pad->GetPosition() - footprint->GetPosition() ); pad->SetPos0( pad->GetPosition() - footprint->GetPosition() );
pad->SetSize( wxSize( aInductorPattern.m_Width, aInductorPattern.m_Width ) ); pad->SetSize( VECTOR2I( aInductorPattern.m_Width, aInductorPattern.m_Width ) );
pad->SetLayerSet( LSET( footprint->GetLayer() ) ); pad->SetLayerSet( LSET( footprint->GetLayer() ) );
pad->SetAttribute( PAD_ATTRIB::SMD ); pad->SetAttribute( PAD_ATTRIB::SMD );
@ -460,10 +460,10 @@ FOOTPRINT* MICROWAVE_TOOL::createMicrowaveInductor( MICROWAVE_INDUCTOR_PATTERN&
pad->SetPos0( pad->GetPosition() - footprint->GetPosition() ); pad->SetPos0( pad->GetPosition() - footprint->GetPosition() );
// Modify text positions. // Modify text positions.
wxPoint refPos( ( aInductorPattern.m_Start.x + aInductorPattern.m_End.x ) / 2, VECTOR2I refPos( ( aInductorPattern.m_Start.x + aInductorPattern.m_End.x ) / 2,
( aInductorPattern.m_Start.y + aInductorPattern.m_End.y ) / 2 ); ( aInductorPattern.m_Start.y + aInductorPattern.m_End.y ) / 2 );
wxPoint valPos = refPos; VECTOR2I valPos = refPos;
refPos.y -= footprint->Reference().GetTextSize().y; refPos.y -= footprint->Reference().GetTextSize().y;
footprint->Reference().SetPosition( refPos ); footprint->Reference().SetPosition( refPos );

View File

@ -1024,8 +1024,8 @@ PAD* CADSTAR_PCB_ARCHIVE_LOADER::getKiCadPad( const COMPONENT_PAD& aCadstarPad,
csPadcode.Shape.Size = 1; csPadcode.Shape.Size = 1;
} }
wxPoint padOffset = { 0, 0 }; // offset of the pad origin (before rotating) VECTOR2I padOffset = { 0, 0 }; // offset of the pad origin (before rotating)
wxPoint drillOffset = { 0, 0 }; // offset of the drill origin w.r.t. the pad (before rotating) VECTOR2I drillOffset = { 0, 0 }; // offset of the drill origin w.r.t. the pad (before rotating)
switch( csPadcode.Shape.ShapeType ) switch( csPadcode.Shape.ShapeType )
{ {
@ -1224,8 +1224,8 @@ PAD* CADSTAR_PCB_ARCHIVE_LOADER::getKiCadPad( const COMPONENT_PAD& aCadstarPad,
double padOrientation = getAngleTenthDegree( aCadstarPad.OrientAngle ) double padOrientation = getAngleTenthDegree( aCadstarPad.OrientAngle )
+ getAngleTenthDegree( csPadcode.Shape.OrientAngle ); + getAngleTenthDegree( csPadcode.Shape.OrientAngle );
RotatePoint( &padOffset, padOrientation ); RotatePoint( padOffset, padOrientation );
RotatePoint( &drillOffset, padOrientation ); RotatePoint( drillOffset, padOrientation );
pad->SetPos0( getKiCadPoint( aCadstarPad.Position ) - aParent->GetPosition() - padOffset pad->SetPos0( getKiCadPoint( aCadstarPad.Position ) - aParent->GetPosition() - padOffset
- drillOffset ); - drillOffset );
pad->SetOrientation( padOrientation + getAngleTenthDegree( csPadcode.SlotOrientation ) ); pad->SetOrientation( padOrientation + getAngleTenthDegree( csPadcode.SlotOrientation ) );

View File

@ -874,13 +874,13 @@ void EAGLE_PLUGIN::loadPlain( wxXmlNode* aGraphics )
setKeepoutSettingsToZone( zone, c.layer ); setKeepoutSettingsToZone( zone, c.layer );
// approximate circle as polygon with a edge every 10 degree // approximate circle as polygon with a edge every 10 degree
wxPoint center( kicad_x( c.x ), kicad_y( c.y ) ); VECTOR2I center( kicad_x( c.x ), kicad_y( c.y ) );
int outlineRadius = radius + ( width / 2 ); int outlineRadius = radius + ( width / 2 );
for( int angle = 0; angle < 360; angle += 10 ) for( int angle = 0; angle < 360; angle += 10 )
{ {
wxPoint rotatedPoint( outlineRadius, 0 ); VECTOR2I rotatedPoint( outlineRadius, 0 );
RotatePoint( &rotatedPoint, angle * 10. ); RotatePoint( rotatedPoint, angle * 10. );
zone->AppendCorner( center + rotatedPoint, -1 ); zone->AppendCorner( center + rotatedPoint, -1 );
} }
@ -891,8 +891,8 @@ void EAGLE_PLUGIN::loadPlain( wxXmlNode* aGraphics )
for( int angle = 0; angle < 360; angle += 10 ) for( int angle = 0; angle < 360; angle += 10 )
{ {
wxPoint rotatedPoint( innerRadius, 0 ); VECTOR2I rotatedPoint( innerRadius, 0 );
RotatePoint( &rotatedPoint, angle * 10. ); RotatePoint( rotatedPoint, angle * 10. );
zone->AppendCorner( center + rotatedPoint, 0 ); zone->AppendCorner( center + rotatedPoint, 0 );
} }
} }
@ -2221,13 +2221,13 @@ void EAGLE_PLUGIN::packageCircle( FOOTPRINT* aFootprint, wxXmlNode* aTree ) cons
setKeepoutSettingsToZone( zone, e.layer ); setKeepoutSettingsToZone( zone, e.layer );
// approximate circle as polygon with a edge every 10 degree // approximate circle as polygon with a edge every 10 degree
wxPoint center( kicad_x( e.x ), kicad_y( e.y ) ); VECTOR2I center( kicad_x( e.x ), kicad_y( e.y ) );
int outlineRadius = radius + ( width / 2 ); int outlineRadius = radius + ( width / 2 );
for( int angle = 0; angle < 360; angle += 10 ) for( int angle = 0; angle < 360; angle += 10 )
{ {
wxPoint rotatedPoint( outlineRadius, 0 ); VECTOR2I rotatedPoint( outlineRadius, 0 );
RotatePoint( &rotatedPoint, angle * 10. ); RotatePoint( rotatedPoint, angle * 10. );
zone->AppendCorner( center + rotatedPoint, -1 ); zone->AppendCorner( center + rotatedPoint, -1 );
} }
@ -2238,8 +2238,8 @@ void EAGLE_PLUGIN::packageCircle( FOOTPRINT* aFootprint, wxXmlNode* aTree ) cons
for( int angle = 0; angle < 360; angle += 10 ) for( int angle = 0; angle < 360; angle += 10 )
{ {
wxPoint rotatedPoint( innerRadius, 0 ); VECTOR2I rotatedPoint( innerRadius, 0 );
RotatePoint( &rotatedPoint, angle * 10. ); RotatePoint( rotatedPoint, angle * 10. );
zone->AppendCorner( center + rotatedPoint, 0 ); zone->AppendCorner( center + rotatedPoint, 0 );
} }
} }