KiCad PCB EDA Suite
Loading...
Searching...
No Matches
trigo.h File Reference
#include <cmath>
#include <math/vector2d.h>
#include <geometry/eda_angle.h>

Go to the source code of this file.

Functions

bool IsPointOnSegment (const VECTOR2I &aSegStart, const VECTOR2I &aSegEnd, const VECTOR2I &aTestPoint)
 Test if aTestPoint is on line defined by aSegStart and aSegEnd.
 
bool SegmentIntersectsSegment (const VECTOR2I &a_p1_l1, const VECTOR2I &a_p2_l1, const VECTOR2I &a_p1_l2, const VECTOR2I &a_p2_l2, VECTOR2I *aIntersectionPoint=nullptr)
 Test if two lines intersect.
 
void RotatePoint (int *pX, int *pY, const EDA_ANGLE &aAngle)
 Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.
 
void RotatePoint (VECTOR2I &point, const EDA_ANGLE &aAngle)
 
void RotatePoint (int *pX, int *pY, int cx, int cy, const EDA_ANGLE &aAngle)
 Calculate the new point of coord coord pX, pY, for a rotation center cx, cy.
 
void RotatePoint (VECTOR2I &point, const VECTOR2I &centre, const EDA_ANGLE &aAngle)
 
void RotatePoint (double *pX, double *pY, const EDA_ANGLE &aAngle)
 Calculate the new coord point point for a rotation center 0, 0.
 
void RotatePoint (VECTOR2D &point, const EDA_ANGLE &aAngle)
 
void RotatePoint (double *pX, double *pY, double cx, double cy, const EDA_ANGLE &aAngle)
 
void RotatePoint (VECTOR2D &point, const VECTOR2D &aCenter, const EDA_ANGLE &aAngle)
 
const VECTOR2I CalcArcCenter (const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
 Determine the center of an arc or circle given three points on its circumference.
 
const VECTOR2D CalcArcCenter (const VECTOR2D &aStart, const VECTOR2D &aMid, const VECTOR2D &aEnd)
 
const VECTOR2D CalcArcCenter (const VECTOR2D &aStart, const VECTOR2D &aEnd, const EDA_ANGLE &aAngle)
 
const VECTOR2I CalcArcMid (const VECTOR2I &aStart, const VECTOR2I &aEnd, const VECTOR2I &aCenter, bool aMinArcAngle=true)
 Return the middle point of an arc, half-way between aStart and aEnd.
 
double EuclideanNorm (const VECTOR2I &vector)
 
double DistanceLinePoint (const VECTOR2I &linePointA, const VECTOR2I &linePointB, const VECTOR2I &referencePoint)
 Compute the distance between a line and a reference point.
 
bool HitTestPoints (const VECTOR2I &pointA, const VECTOR2I &pointB, double threshold)
 Test if two points are near each other.
 
bool TestSegmentHit (const VECTOR2I &aRefPoint, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aDist)
 Test if aRefPoint is with aDistance on the line defined by aStart and aEnd.
 
double GetLineLength (const VECTOR2I &aPointA, const VECTOR2I &aPointB)
 Return the length of a line segment defined by aPointA and aPointB.
 
double DEG2RAD (double deg)
 
double RAD2DEG (double rad)
 
double RAD2DECIDEG (double rad)
 
template<class T >
NormalizeAnglePos (T Angle)
 Normalize angle to be in the 0.0 .
 
template<class T >
void NORMALIZE_ANGLE_POS (T &Angle)
 
template<class T >
NormalizeAngle180 (T Angle)
 Normalize angle to be in the -180.0 .
 
bool InterceptsPositiveX (double aStartAngle, double aEndAngle)
 Test if an arc from aStartAngle to aEndAngle crosses the positive X axis (0 degrees).
 
bool InterceptsNegativeX (double aStartAngle, double aEndAngle)
 Test if an arc from aStartAngle to aEndAngle crosses the negative X axis (180 degrees).
 
template<class T >
VECTOR2< T >::extended_type ParallelogramArea (const VECTOR2< T > &aPointA, const VECTOR2< T > &aPointB, const VECTOR2< T > &aPointC)
 Calculate the area of a parallelogram defined by aPointA, aPointB, and aPointC.
 
bool TestSegmentHitFast (const VECTOR2I &aRefPoint, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aDist)
 Test if a point hits a line segment within a given distance.
 

Function Documentation

◆ CalcArcCenter() [1/3]

const VECTOR2D CalcArcCenter ( const VECTOR2D aStart,
const VECTOR2D aEnd,
const EDA_ANGLE aAngle 
)

Definition at line 332 of file trigo.cpp.

References ANGLE_0, ANGLE_180, ANGLE_360, ANGLE_90, EuclideanNorm(), VECTOR2< T >::Resize(), and RotatePoint().

Referenced by CalcArcCenter().

◆ CalcArcCenter() [2/3]

const VECTOR2D CalcArcCenter ( const VECTOR2D aStart,
const VECTOR2D aMid,
const VECTOR2D aEnd 
)

◆ CalcArcCenter() [3/3]

const VECTOR2I CalcArcCenter ( const VECTOR2I aStart,
const VECTOR2I aMid,
const VECTOR2I aEnd 
)

Determine the center of an arc or circle given three points on its circumference.

Parameters
aStartThe starting point of the circle (equivalent to aEnd).
aMidThe point on the arc, half-way between aStart and aEnd.
aEndThe ending point of the circle (equivalent to aStart).
Returns
The center of the circle.

Definition at line 520 of file trigo.cpp.

References CalcArcCenter(), KiROUND(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by GRAPHICS_IMPORTER_LIB_SYMBOL::AddArc(), GRAPHICS_IMPORTER_SCH::AddArc(), PLOTTER::Arc(), BOOST_AUTO_TEST_CASE(), SHAPE_ARC::ConstructFromStartEndAngle(), KIGFX::SCH_PAINTER::draw(), PCB_ARC::GetPosition(), PCB_ARC::GetRadius(), SCH_IO_KICAD_SEXPR_PARSER::parseSymbolArc(), EDA_SHAPE::SetArcGeometry(), SHAPE_ARC::update_values(), and DIALOG_SHAPE_PROPERTIES::Validate().

◆ CalcArcMid()

const VECTOR2I CalcArcMid ( const VECTOR2I aStart,
const VECTOR2I aEnd,
const VECTOR2I aCenter,
bool  aMinArcAngle = true 
)

Return the middle point of an arc, half-way between aStart and aEnd.

There are two possible solutions which can be found by toggling aMinArcAngle. The behavior is undefined for semicircles (i.e. 180 degree arcs).

Parameters
aStartThe starting point of the arc (for calculating the radius).
aEndThe end point of the arc (for determining the arc angle).
aCenterThe center point of the arc.
aMinArcAngleIf true, returns the point that results in the smallest arc angle.
Returns
The middle point of the arc.

Definition at line 208 of file trigo.cpp.

References ANGLE_180, and RotatePoint().

Referenced by CIRCLE::ConstructFromTanTanPt(), EDIT_TOOL::DragArcTrack(), and PCB_IO_EAGLE::loadSignals().

◆ DEG2RAD()

◆ DistanceLinePoint()

double DistanceLinePoint ( const VECTOR2I linePointA,
const VECTOR2I linePointB,
const VECTOR2I referencePoint 
)
inline

Compute the distance between a line and a reference point.

Reference: http://mathworld.wolfram.com/Point-LineDistance2-Dimensional.html

Parameters
linePointAPoint on line.
linePointBPoint on line.
referencePointReference point.

Definition at line 143 of file trigo.h.

References EuclideanNorm(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by EE_POINT_EDITOR::addCorner(), and EE_SELECTION_TOOL::GuessSelectionCandidates().

◆ EuclideanNorm()

double EuclideanNorm ( const VECTOR2I vector)
inline

Definition at line 128 of file trigo.h.

References VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by GRAPHICS_IMPORTER_LIB_SYMBOL::AddArc(), GRAPHICS_IMPORTER_SCH::AddArc(), GRAPHICS_IMPORTER_PCBNEW::AddArc(), approximateLineChainWithArcs(), PLOTTER::Arc(), EE_GRID_HELPER::BestSnapAnchor(), BOOST_AUTO_TEST_CASE(), BuildCornersList_S_Shape(), PNS::DP_GATEWAYS::BuildFromPrimitivePair(), PNS::DP_GATEWAYS::BuildGeneric(), PNS::DP_GATEWAYS::BuildOrthoProjections(), CalcArcCenter(), PNS::DRAGGER::checkVirtualVia(), EE_SELECTION_TOOL::CollectHits(), SHAPE_ARC::Collide(), collideArc2Arc(), PCB_GRID_HELPER::computeAnchors(), CIRCLE::ConstructFromTanTanPt(), CIRCLE::Contains(), AM_PRIMITIVE::ConvertShapeToPolygon(), MICROWAVE_TOOL::createMicrowaveInductor(), PNS::LINE_PLACER::cursorDistMinimum(), DistanceLinePoint(), EDIT_TOOL::DragArcTrack(), KIGFX::SCH_PAINTER::draw(), KIGFX::CAIRO_GAL_BASE::DrawSegment(), DRAWING_TOOL::DrawVia(), PCB_POINT_EDITOR::editArcMidKeepCenter(), PCB_POINT_EDITOR::editArcMidKeepEndpoints(), PAD_TOOL::EnumeratePads(), extractDiffPairCoupledItems(), TEARDROP_MANAGER::findAnchorPointsOnTrack(), PNS::findCoupledVertices(), PNS::DIFF_PAIR_PLACER::FindDpPrimitivePair(), gen_arc(), SCH_LINE::GetItemDescription(), DS_DRAW_ITEM_LINE::GetItemDescription(), EE_SELECTION_TOOL::GetNode(), PCB_TEXTBOX::GetShownText(), BOARD::GetTrackLength(), EE_SELECTION_TOOL::GuessSelectionCandidates(), ALTIUM_PCB::HelperParseDimensions6Leader(), ALTIUM_PCB::HelperParseDimensions6Linear(), EDA_SHAPE::hitTest(), PCB_ARC::HitTest(), CIRCLE::IntersectLine(), PCB_ARC::IsDegenerated(), GEOM_TEST::IsPointAtDistance(), PCB_IO_EAGLE::loadSignals(), PNS::makeGapVector(), STEP_PCB_MODEL::MakeShapeAsThickSegment(), PNS::MEANDERED_LINE::MeanderSegment(), LABEL_MANAGER::nearestBoxCorner(), AR_AUTOPLACER::nearestPad(), PNS::TOPOLOGY::NearestUnconnectedItem(), VECTOR3< T >::Normalize(), SHAPE_LINE_CHAIN::compareOriginDistance::operator()(), compareOriginDistance::operator()(), RN_NET::OptimizeRNEdges(), GPCB_FPL_CACHE::parseFOOTPRINT(), SCH_EDITOR_CONTROL::Paste(), SHAPE_LINE_CHAIN::PathLength(), SCH_LABEL_BASE::Plot(), SCH_LABEL_BASE::Print(), LINE_EXTENSION_ROUTINE::ProcessLinePair(), pushoutForce(), EDA_SHAPE::RebuildBezierToSegmentsPointsList(), PCB_TUNING_PATTERN::resetToBaseline(), PNS::LINE_PLACER::rhMarkObstacles(), PNS::LINE_PLACER::rhWalkBase(), PNS::DIFF_PAIR_PLACER::routeHead(), DRC_TEST_PROVIDER_CONNECTION_WIDTH::Run(), PLOTTER::segmentAsOval(), GEOM_TEST::SegmentCompletelyWithinRadius(), PNS::LINE::snapDraggedCorner(), PNS::DRAGGER::startDragSegment(), DRC_TEST_PROVIDER_HOLE_TO_HOLE::testHoleAgainstHole(), TestSegmentHitFast(), DRC_TEST_PROVIDER_PHYSICAL_CLEARANCE::testShapeLineChain(), PLOTTER::ThickArc(), TransformOvalToPolygon(), PCB_POINT_EDITOR::updateItem(), and DIALOG_SHAPE_PROPERTIES::Validate().

◆ GetLineLength()

double GetLineLength ( const VECTOR2I aPointA,
const VECTOR2I aPointB 
)
inline

◆ HitTestPoints()

bool HitTestPoints ( const VECTOR2I pointA,
const VECTOR2I pointB,
double  threshold 
)
inline

Test if two points are near each other.

Parameters
pointAFirst point.
pointBSecond point.
thresholdThe maximum distance.
Returns
true if pointA is within threshold of pointB otherwise false.

Definition at line 165 of file trigo.h.

References VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by GERBER_DRAW_ITEM::HitTest(), and EE_SELECTION_TOOL::selectPoint().

◆ InterceptsNegativeX()

bool InterceptsNegativeX ( double  aStartAngle,
double  aEndAngle 
)
inline

Test if an arc from aStartAngle to aEndAngle crosses the negative X axis (180 degrees).

Testing is performed in the quadrant 1 to quadrant 4 direction (counter-clockwise).

Parameters
aStartAngleThe arc start angle in degrees.
aEndAngleThe arc end angle in degrees.

Definition at line 267 of file trigo.h.

Referenced by BOOST_AUTO_TEST_CASE().

◆ InterceptsPositiveX()

bool InterceptsPositiveX ( double  aStartAngle,
double  aEndAngle 
)
inline

Test if an arc from aStartAngle to aEndAngle crosses the positive X axis (0 degrees).

Testing is performed in the quadrant 1 to quadrant 4 direction (counter-clockwise).

Parameters
aStartAngleThe arc start angle in degrees.
aEndAngleThe arc end angle in degrees.

Definition at line 249 of file trigo.h.

Referenced by BOOST_AUTO_TEST_CASE().

◆ IsPointOnSegment()

bool IsPointOnSegment ( const VECTOR2I aSegStart,
const VECTOR2I aSegEnd,
const VECTOR2I aTestPoint 
)

Test if aTestPoint is on line defined by aSegStart and aSegEnd.

This function is faster than TestSegmentHit() because aTestPoint should be exactly on the line. This only works for horizontal, vertical, and 45 degree line segments.

Parameters
aSegStartThe first point of the line segment.
aSegEndThe second point of the line segment.
aTestPointThe point to test.
Returns
true if the point is on the line segment.

Definition at line 88 of file trigo.cpp.

References VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by SCH_LINE_WIRE_BUS_TOOL::finishSegments(), SCH_SCREEN::GetBusesAndWires(), SCH_SCREEN::GetNeededJunctions(), SCH_LINE_WIRE_BUS_TOOL::TrimOverLappingWires(), SCH_EDIT_FRAME::TrimWire(), SCH_BUS_WIRE_ENTRY::UpdateDanglingState(), and SCH_BUS_BUS_ENTRY::UpdateDanglingState().

◆ NORMALIZE_ANGLE_POS()

template<class T >
void NORMALIZE_ANGLE_POS ( T &  Angle)
inline

Definition at line 221 of file trigo.h.

References NormalizeAnglePos().

Referenced by SCH_IO_KICAD_LEGACY_LIB_CACHE::loadArc(), and MapAnglesV6().

◆ NormalizeAngle180()

template<class T >
T NormalizeAngle180 ( Angle)
inline

Normalize angle to be in the -180.0 .

. 180.0 range.

Definition at line 230 of file trigo.h.

Referenced by DIALOG_COPPER_ZONE::AcceptOptions(), and PANEL_ZONE_PROPERTIES::AcceptOptions().

◆ NormalizeAnglePos()

template<class T >
T NormalizeAnglePos ( Angle)
inline

Normalize angle to be in the 0.0 .

. 360.0 range: angle is in 1/10 degrees.

Definition at line 212 of file trigo.h.

Referenced by NORMALIZE_ANGLE_POS().

◆ ParallelogramArea()

template<class T >
VECTOR2< T >::extended_type ParallelogramArea ( const VECTOR2< T > &  aPointA,
const VECTOR2< T > &  aPointB,
const VECTOR2< T > &  aPointC 
)
inline

Calculate the area of a parallelogram defined by aPointA, aPointB, and aPointC.

B ______________________ / / / / /______________________/ A C The area of a parallelogram is the cross product of the vectors A->B and A->C. The order of the vertices is not important, the result will be the same (modulo sign).

Definition at line 289 of file trigo.h.

References VECTOR3< T >::Cross(), v1, and v2.

Referenced by TestSegmentHitFast().

◆ RAD2DECIDEG()

double RAD2DECIDEG ( double  rad)
inline

Definition at line 204 of file trigo.h.

Referenced by MapAnglesV6().

◆ RAD2DEG()

double RAD2DEG ( double  rad)
inline

◆ RotatePoint() [1/8]

void RotatePoint ( double *  pX,
double *  pY,
const EDA_ANGLE aAngle 
)

Calculate the new coord point point for a rotation center 0, 0.

Definition at line 294 of file trigo.cpp.

References ANGLE_0, ANGLE_180, ANGLE_270, ANGLE_90, EDA_ANGLE::Cos(), EDA_ANGLE::Normalize(), EDA_ANGLE::Sin(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ RotatePoint() [2/8]

void RotatePoint ( double *  pX,
double *  pY,
double  cx,
double  cy,
const EDA_ANGLE aAngle 
)

Definition at line 280 of file trigo.cpp.

References RotatePoint().

◆ RotatePoint() [3/8]

void RotatePoint ( int *  pX,
int *  pY,
const EDA_ANGLE aAngle 
)

Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.

Definition at line 228 of file trigo.cpp.

References ANGLE_0, ANGLE_180, ANGLE_270, ANGLE_90, EDA_ANGLE::Cos(), KiROUND(), EDA_ANGLE::Normalize(), EDA_ANGLE::Sin(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by DXF_IMPORT_PLUGIN::addArc(), GRAPHICS_IMPORTER_LIB_SYMBOL::AddArc(), GRAPHICS_IMPORTER_SCH::AddArc(), GRAPHICS_IMPORTER_PCBNEW::AddArc(), PCAD2KICAD::PCAD_FOOTPRINT::AddToBoard(), PCAD2KICAD::PCAD_PAD::AddToFootprint(), EC_CIRCLE::Apply(), CADSTAR_SCH_ARCHIVE_LOADER::applyTransform(), SVG_PLOTTER::Arc(), BOOST_AUTO_TEST_CASE(), PCB_TEXT::buildBoundingHull(), BuildConvexHull(), BuildCornersList_S_Shape(), PAD::BuildEffectiveShapes(), DIRECTION_45::BuildInitialTrace(), ZONE_FILLER::buildThermalSpokes(), CalcArcCenter(), CalcArcMid(), PNS::OPTIMIZER::circleBreakouts(), SHAPE_ARC::Collide(), PCB_GRID_HELPER::computeAnchors(), computeCenter(), PSLIKE_PLOTTER::computeTextParameters(), ConnectBoardShapes(), SHAPE_ARC::ConstructFromStartEndAngle(), SHAPE_ARC::ConstructFromStartEndCenter(), AM_PRIMITIVE::ConvertBasicShapeToPolygon(), convertOblong2Segment(), AM_PRIMITIVE::ConvertShapeToPolygon(), D_CODE::ConvertShapeToPolygon(), CornerListToPolygon(), PCAD2KICAD::CorrectTextPosition(), BOARD_ADAPTER::createArcSegments(), EXCELLON_WRITER::createDrillFile(), MICROWAVE_TOOL::createFootprint(), SCH_GLOBALLABEL::CreateGraphicShape(), SCH_DIRECTIVE_LABEL::CreateGraphicShape(), PNS::OPTIMIZER::customBreakouts(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), KIGFX::CAIRO_GAL_BASE::DrawArcSegment(), drawBacksideTicks(), CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarText(), DrawHalfOpenCylinder(), AR_MATRIX::drawSegmentQcq(), drawTicksAlongLine(), GBR_TO_PCB_EXPORTER::export_segarc_copper_item(), EXPORTER_PCB_VRML::ExportVrmlFootprint(), fillArcPOLY(), CADSTAR_ARCHIVE_PARSER::FixTextPositionNoAlignment(), GERBER_PLOTTER::FlashPadChamferRoundRect(), GERBER_PLOTTER::FlashPadCustom(), HPGL_PLOTTER::FlashPadOval(), PSLIKE_PLOTTER::FlashPadOval(), HPGL_PLOTTER::FlashPadRect(), PSLIKE_PLOTTER::FlashPadRect(), DXF_PLOTTER::FlashPadRect(), DXF_PLOTTER::FlashPadTrapez(), GERBER_PLOTTER::FlashPadTrapez(), HPGL_PLOTTER::FlashPadTrapez(), PSLIKE_PLOTTER::FlashPadTrapez(), GERBER_PLOTTER::FlashRegularPolygon(), GENCAD_EXPORTER::FootprintWriteShape(), PCB_IO_KICAD_SEXPR::format(), formatInternalUnits(), GERBER_DRAW_ITEM::GetABPosition(), EDA_SHAPE::GetArcMid(), SCH_LABEL::GetBodyBoundingBox(), SCH_FIELD::GetBoundingBox(), SCH_TEXT::GetBoundingBox(), SCH_PIN::GetBoundingBox(), BOX2< Vec >::GetBoundingBoxRotated(), DS_DATA_ITEM_POLYGONS::GetCornerPosition(), PCB_TEXTBOX::GetDrawPos(), KIGFX::PREVIEW::ARC_GEOM_MANAGER::GetEndRadiusEnd(), BOARD_ITEM::GetFPRelativePosition(), CADSTAR_PCB_ARCHIVE_LOADER::getKiCadPad(), EDA_TEXT::GetLinePositions(), CADSTAR_SCH_ARCHIVE_LOADER::getLocationOfNetElement(), GetOvalKeyPoints(), getRectangleAlongCentreLine(), KIGFX::PREVIEW::ARC_GEOM_MANAGER::GetStartRadiusEnd(), KIFONT::OUTLINE_FONT::getTextAsGlyphsUnlocked(), ARRAY_CIRCULAR_OPTIONS::GetTransform(), GERBER_DRAW_ITEM::GetXYPosition(), GRCSegm(), hash_fp_item(), ALTIUM_PCB::HelperParseDimensions6Center(), ALTIUM_PCB::HelperParseDimensions6Leader(), idf_export_footprint(), RENDER_3D_RAYTRACE_BASE::insertHole(), CIRCLE::Intersect(), BOX2< Vec >::Intersects(), SCH_IO_KICAD_LEGACY_LIB_CACHE::loadArc(), PCB_IO_EAGLE::loadPlain(), SCH_IO_EAGLE::loadRectangle(), CADSTAR_SCH_ARCHIVE_LOADER::loadSchematicSymbolInstances(), SCH_IO_EAGLE::loadSymbolRectangle(), CADSTAR_SCH_ARCHIVE_LOADER::loadSymdef(), STEP_PCB_MODEL::MakeShapeAsThickSegment(), DSN::mapPt(), FOOTPRINT::MoveAnchorPosition(), PCB_IO_EAGLE::packageCircle(), ALTIUM_PCB::ParseComponentsBodies6Data(), PCB_IO_EASYEDAPRO_PARSER::ParseContour(), GPCB_FPL_CACHE::parseFOOTPRINT(), PCB_IO_EASYEDA_PARSER::ParseToBoardItemContainer(), SCH_TEXT::Plot(), GERBER_PLOTTER::plotRoundRectAsRegion(), SCH_TEXT::Print(), FABMASTER::processArc(), SHAPE_ARC::Rotate(), SHAPE_LINE_CHAIN::Rotate(), EDIT_TOOL::Rotate(), SCH_BITMAP::Rotate(), SCH_BUS_ENTRY_BASE::Rotate(), SCH_FIELD::Rotate(), SCH_JUNCTION::Rotate(), SCH_LABEL_BASE::Rotate(), SCH_LINE::Rotate(), SCH_NO_CONNECT::Rotate(), SCH_SHEET::Rotate(), SCH_SHEET_PIN::Rotate(), SCH_SYMBOL::Rotate(), SCH_TEXT::Rotate(), PCB_REFERENCE_IMAGE::Rotate(), EDA_SHAPE::rotate(), FOOTPRINT::Rotate(), PCB_TUNING_PATTERN::Rotate(), PAD::Rotate(), PCB_DIMENSION_BASE::Rotate(), PCB_TARGET::Rotate(), PCB_TEXT::Rotate(), PCB_TRACK::Rotate(), PCB_ARC::Rotate(), SCH_LABEL_BASE::Rotate90(), SCH_PIN::RotatePin(), RotatePoint(), EDA_SHAPE::SetArcAngleAndEnd(), DS_DATA_ITEM_POLYGONS::SetBoundingBox(), BOARD_ITEM::SetFPRelativePosition(), SHAPE_ARC::SHAPE_ARC(), PAD::ShapePos(), PLOTTER::sketchOval(), KIGFX::PCB_PAINTER::strokeText(), PNS_KICAD_IFACE_BASE::syncPad(), DRC_TEST_PROVIDER_PHYSICAL_CLEARANCE::testShapeLineChain(), PDF_PLOTTER::Text(), EDA_TEXT::TextHitTest(), AR_MATRIX::TraceFilledRectangle(), DIALOG_PAD_PROPERTIES::transferDataToPad(), PCB_IO_EAGLE::transferPad(), KIFONT::STROKE_GLYPH::Transform(), TransformCircleToPolygon(), TransformEllipseToBeziers(), TransformOvalToPolygon(), PAD::TransformShapeToPolygon(), EASYEDA_PARSER_BASE::TransformTextToBaseline(), PNS::MEANDER_SHAPE::turn(), PCB_DIM_ALIGNED::updateGeometry(), PCB_DIM_ORTHOGONAL::updateGeometry(), PCB_DIM_RADIAL::updateGeometry(), PCB_DIM_LEADER::updateGeometry(), PCB_DIM_CENTER::updateGeometry(), PCB_POINT_EDITOR::updateItem(), PCB_DIM_ALIGNED::updateText(), and GERBER_PLOTTER::writeApertureList().

◆ RotatePoint() [4/8]

void RotatePoint ( int *  pX,
int *  pY,
int  cx,
int  cy,
const EDA_ANGLE aAngle 
)

Calculate the new point of coord coord pX, pY, for a rotation center cx, cy.

Definition at line 266 of file trigo.cpp.

References RotatePoint().

◆ RotatePoint() [5/8]

void RotatePoint ( VECTOR2D point,
const EDA_ANGLE aAngle 
)
inline

Definition at line 88 of file trigo.h.

References RotatePoint(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ RotatePoint() [6/8]

void RotatePoint ( VECTOR2D point,
const VECTOR2D aCenter,
const EDA_ANGLE aAngle 
)
inline

Definition at line 95 of file trigo.h.

References RotatePoint(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ RotatePoint() [7/8]

void RotatePoint ( VECTOR2I point,
const EDA_ANGLE aAngle 
)
inline

Definition at line 66 of file trigo.h.

References RotatePoint(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ RotatePoint() [8/8]

void RotatePoint ( VECTOR2I point,
const VECTOR2I centre,
const EDA_ANGLE aAngle 
)
inline

Definition at line 77 of file trigo.h.

References RotatePoint(), VECTOR2< T >::x, and VECTOR2< T >::y.

◆ SegmentIntersectsSegment()

bool SegmentIntersectsSegment ( const VECTOR2I a_p1_l1,
const VECTOR2I a_p2_l1,
const VECTOR2I a_p1_l2,
const VECTOR2I a_p2_l2,
VECTOR2I aIntersectionPoint = nullptr 
)

Test if two lines intersect.

Parameters
a_p1_l1The first point of the first line.
a_p2_l1The second point of the first line.
a_p1_l2The first point of the second line.
a_p2_l2The second point of the second line.
aIntersectionPointis filled with the intersection point if it exists
Returns
bool true if the two segments defined by four points intersect. (i.e. if the 2 segments have at least a common point)

Definition at line 106 of file trigo.cpp.

References KiROUND(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by BOX2< Vec >::Intersects().

◆ TestSegmentHit()

bool TestSegmentHit ( const VECTOR2I aRefPoint,
const VECTOR2I aStart,
const VECTOR2I aEnd,
int  aDist 
)

Test if aRefPoint is with aDistance on the line defined by aStart and aEnd.

Parameters
aRefPoint= reference point to test
aStartis the first end-point of the line segment
aEndis the second end-point of the line segment
aDist= maximum distance for hit

Definition at line 174 of file trigo.cpp.

References std::abs(), delta, SEG::Square(), SEG::SquaredDistance(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by SCH_IO_EAGLE::addBusEntries(), EE_GRID_HELPER::computeAnchors(), DRAWING_TOOL::DrawVia(), EDA_SHAPE::hitTest(), SCH_BUS_ENTRY_BASE::HitTest(), SCH_LINE::HitTest(), DS_DRAW_ITEM_LINE::HitTest(), DS_DRAW_ITEM_RECT::HitTest(), PCB_TRACK::HitTest(), GERBER_DRAW_ITEM::HitTest(), SCH_IO_EAGLE::moveLabels(), and SCH_LABEL_BASE::UpdateDanglingState().

◆ TestSegmentHitFast()

bool TestSegmentHitFast ( const VECTOR2I aRefPoint,
const VECTOR2I aStart,
const VECTOR2I aEnd,
int  aDist 
)

Test if a point hits a line segment within a given distance.

This is a faster version of TestSegmentHit() that does not calculate the distance.

Definition at line 541 of file trigo.cpp.

References std::abs(), delta, EuclideanNorm(), ParallelogramArea(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by SHAPE_LINE_CHAIN::Simplify().