KiCad PCB EDA Suite
Loading...
Searching...
No Matches
EDA_SHAPE Class Reference

#include <eda_shape.h>

Inheritance diagram for EDA_SHAPE:
EDA_SHAPE_MOCK PCB_SHAPE SCH_SHAPE PCB_TEXTBOX SCH_TEXTBOX PCB_TABLECELL SCH_TABLECELL

Public Member Functions

 EDA_SHAPE (SHAPE_T aType, int aLineWidth, FILL_T aFill)
 
virtual ~EDA_SHAPE ()
 
void SwapShape (EDA_SHAPE *aImage)
 
wxString ShowShape () const
 
wxString SHAPE_T_asString () const
 
virtual bool IsProxyItem () const
 
virtual void SetIsProxyItem (bool aIsProxy=true)
 
bool IsFilled () const
 
void SetFilled (bool aFlag)
 
void SetFillMode (FILL_T aFill)
 
FILL_T GetFillMode () const
 
bool IsClosed () const
 
COLOR4D GetFillColor () const
 
void SetFillColor (const COLOR4D &aColor)
 
void SetWidth (int aWidth)
 
virtual int GetWidth () const
 
virtual int GetEffectiveWidth () const
 
void SetLineStyle (const LINE_STYLE aStyle)
 
LINE_STYLE GetLineStyle () const
 
void SetLineColor (const COLOR4D &aColor)
 
COLOR4D GetLineColor () const
 
void SetShape (SHAPE_T aShape)
 
SHAPE_T GetShape () const
 
const VECTOR2IGetStart () const
 Return the starting point of the graphic.
 
int GetStartY () const
 
int GetStartX () const
 
void SetStart (const VECTOR2I &aStart)
 
void SetStartY (int y)
 
void SetStartX (int x)
 
const VECTOR2IGetEnd () const
 Return the ending point of the graphic.
 
int GetEndY () const
 
int GetEndX () const
 
void SetEnd (const VECTOR2I &aEnd)
 
void SetEndY (int aY)
 
void SetEndX (int aX)
 
void SetRadius (int aX)
 
virtual VECTOR2I GetTopLeft () const
 
virtual VECTOR2I GetBotRight () const
 
virtual void SetTop (int val)
 
virtual void SetLeft (int val)
 
virtual void SetRight (int val)
 
virtual void SetBottom (int val)
 
void SetBezierC1 (const VECTOR2I &aPt)
 
const VECTOR2IGetBezierC1 () const
 
void SetBezierC2 (const VECTOR2I &aPt)
 
const VECTOR2IGetBezierC2 () const
 
VECTOR2I getCenter () const
 
void SetCenter (const VECTOR2I &aCenter)
 
void SetArcAngleAndEnd (const EDA_ANGLE &aAngle, bool aCheckNegativeAngle=false)
 Set the end point from the angle center and start.
 
EDA_ANGLE GetArcAngle () const
 
EDA_ANGLE GetSegmentAngle () const
 
bool EndsSwapped () const
 Have the start and end points been swapped since they were set?
 
VECTOR2I GetArcMid () const
 
std::vector< VECTOR2IGetRectCorners () const
 
void CalcArcAngles (EDA_ANGLE &aStartAngle, EDA_ANGLE &aEndAngle) const
 Calc arc start and end angles such that aStartAngle < aEndAngle.
 
int GetRadius () const
 
void SetArcGeometry (const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
 Set the three controlling points for an arc.
 
void SetCachedArcData (const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd, const VECTOR2I &aCenter)
 Set the data used for mid point caching.
 
const std::vector< VECTOR2I > & GetBezierPoints () const
 
void DupPolyPointsList (std::vector< VECTOR2I > &aBuffer) const
 Duplicate the list of corners in a std::vector<VECTOR2I>
 
int GetPointCount () const
 
SHAPE_POLY_SETGetPolyShape ()
 
const SHAPE_POLY_SETGetPolyShape () const
 
bool IsPolyShapeValid () const
 
void SetPolyShape (const SHAPE_POLY_SET &aShape)
 
void SetPolyPoints (const std::vector< VECTOR2I > &aPoints)
 
void RebuildBezierToSegmentsPointsList (int aMinSegLen)
 Rebuild the m_bezierPoints vertex list that approximate the Bezier curve by a list of segments.
 
virtual std::vector< SHAPE * > MakeEffectiveShapes (bool aEdgeOnly=false) const
 Make a set of SHAPE objects representing the EDA_SHAPE.
 
void ShapeGetMsgPanelInfo (EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
 
void SetLength (const double &aLength)
 
void SetRectangle (const long long int &aHeight, const long long int &aWidth)
 
void SetSegmentAngle (const EDA_ANGLE &aAngle)
 
bool IsClockwiseArc () const
 
double GetLength () const
 
int GetRectangleHeight () const
 
int GetRectangleWidth () const
 
void TransformShapeToPolygon (SHAPE_POLY_SET &aBuffer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const
 Convert the shape to a closed polygon.
 
int Compare (const EDA_SHAPE *aOther) const
 
double Similarity (const EDA_SHAPE &aOther) const
 
bool operator== (const EDA_SHAPE &aOther) const
 

Protected Member Functions

wxString getFriendlyName () const
 
void setPosition (const VECTOR2I &aPos)
 
VECTOR2I getPosition () const
 
virtual void setFilled (bool aFlag)
 
void move (const VECTOR2I &aMoveVector)
 
void rotate (const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle)
 
void flip (const VECTOR2I &aCentre, bool aFlipLeftRight)
 
void scale (double aScale)
 
const BOX2I getBoundingBox () const
 
void computeArcBBox (BOX2I &aBBox) const
 
bool hitTest (const VECTOR2I &aPosition, int aAccuracy=0) const
 
bool hitTest (const BOX2I &aRect, bool aContained, int aAccuracy=0) const
 
const std::vector< VECTOR2IbuildBezierToSegmentsPointsList (int aMinSegLen) const
 
void beginEdit (const VECTOR2I &aStartPoint)
 
bool continueEdit (const VECTOR2I &aPosition)
 
void calcEdit (const VECTOR2I &aPosition)
 
void endEdit (bool aClosed=true)
 Finishes editing the shape.
 
void setEditState (int aState)
 
std::vector< SHAPE * > makeEffectiveShapes (bool aEdgeOnly, bool aLineChainOnly=false) const
 Make a set of SHAPE objects representing the EDA_SHAPE.
 

Protected Attributes

bool m_endsSwapped
 
SHAPE_T m_shape
 
STROKE_PARAMS m_stroke
 
FILL_T m_fill
 
COLOR4D m_fillColor
 
long long int m_rectangleHeight
 
long long int m_rectangleWidth
 
double m_segmentLength
 
EDA_ANGLE m_segmentAngle
 
VECTOR2I m_start
 
VECTOR2I m_end
 
VECTOR2I m_arcCenter
 
ARC_MID m_arcMidData
 
VECTOR2I m_bezierC1
 
VECTOR2I m_bezierC2
 
std::vector< VECTOR2Im_bezierPoints
 
SHAPE_POLY_SET m_poly
 
int m_editState
 
bool m_proxyItem
 

Detailed Description

Definition at line 72 of file eda_shape.h.

Constructor & Destructor Documentation

◆ EDA_SHAPE()

EDA_SHAPE::EDA_SHAPE ( SHAPE_T  aType,
int  aLineWidth,
FILL_T  aFill 
)

Definition at line 40 of file eda_shape.cpp.

◆ ~EDA_SHAPE()

EDA_SHAPE::~EDA_SHAPE ( )
virtual

Definition at line 55 of file eda_shape.cpp.

Member Function Documentation

◆ beginEdit()

◆ buildBezierToSegmentsPointsList()

const std::vector< VECTOR2I > EDA_SHAPE::buildBezierToSegmentsPointsList ( int  aMinSegLen) const
protected

◆ CalcArcAngles()

void EDA_SHAPE::CalcArcAngles ( EDA_ANGLE aStartAngle,
EDA_ANGLE aEndAngle 
) const

Calc arc start and end angles such that aStartAngle < aEndAngle.

Each may be between -360.0 and 360.0.

Definition at line 575 of file eda_shape.cpp.

References ANGLE_360, getCenter(), GetEnd(), and GetStart().

Referenced by computeArcBBox(), KIGFX::PCB_PAINTER::draw(), GetArcAngle(), hitTest(), SCH_SHAPE::Print(), and SCH_IO_KICAD_LEGACY_LIB_CACHE::saveArc().

◆ calcEdit()

◆ Compare()

◆ computeArcBBox()

void EDA_SHAPE::computeArcBBox ( BOX2I aBBox) const
protected

◆ continueEdit()

◆ DupPolyPointsList()

void EDA_SHAPE::DupPolyPointsList ( std::vector< VECTOR2I > &  aBuffer) const

Duplicate the list of corners in a std::vector<VECTOR2I>

It must be used only to convert the SHAPE_POLY_SET internal corner buffer to a list of VECTOR2Is, and nothing else, because it duplicates the buffer, that is inefficient to know for instance the corner count

Definition at line 1305 of file eda_shape.cpp.

References SHAPE_POLY_SET::CIterate(), SHAPE_POLY_SET::COutline(), m_poly, SHAPE_POLY_SET::OutlineCount(), and SHAPE_LINE_CHAIN::PointCount().

Referenced by PCB_POINT_EDITOR::updatePoints().

◆ endEdit()

void EDA_SHAPE::endEdit ( bool  aClosed = true)
protected

Finishes editing the shape.

Parameters
aClosedShould polygon shapes be closed (yes for pcbnew/fpeditor, no for libedit)

Definition at line 1566 of file eda_shape.cpp.

References SHAPE_LINE_CHAIN::CLastPoint(), SHAPE_LINE_CHAIN::CPoint(), SHAPE_LINE_CHAIN::GetPointCount(), GetShape(), m_poly, SHAPE_POLY_SET::Outline(), SHAPE_LINE_CHAIN::Remove(), SHAPE_LINE_CHAIN::SetClosed(), SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by SCH_SHAPE::EndEdit().

◆ EndsSwapped()

bool EDA_SHAPE::EndsSwapped ( ) const
inline

Have the start and end points been swapped since they were set?

Returns
true if they have

Definition at line 210 of file eda_shape.h.

References m_endsSwapped.

Referenced by BOOST_AUTO_TEST_CASE().

◆ flip()

◆ GetArcAngle()

◆ GetArcMid()

◆ GetBezierC1()

◆ GetBezierC2()

◆ GetBezierPoints()

const std::vector< VECTOR2I > & EDA_SHAPE::GetBezierPoints ( ) const
inline

◆ GetBotRight()

virtual VECTOR2I EDA_SHAPE::GetBotRight ( ) const
inlinevirtual

Reimplemented in PCB_TEXTBOX.

Definition at line 178 of file eda_shape.h.

References GetEnd().

Referenced by KIGFX::PCB_PAINTER::draw(), PCB_POINT_EDITOR::makePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ getBoundingBox()

◆ getCenter()

◆ GetEffectiveWidth()

virtual int EDA_SHAPE::GetEffectiveWidth ( ) const
inlinevirtual

Reimplemented in SCH_SHAPE.

Definition at line 111 of file eda_shape.h.

References GetWidth().

Referenced by makeEffectiveShapes().

◆ GetEnd()

const VECTOR2I & EDA_SHAPE::GetEnd ( ) const
inline

Return the ending point of the graphic.

Definition at line 150 of file eda_shape.h.

References m_end.

Referenced by PCB_POINT_EDITOR::addCorner(), BOARD_ADAPTER::addShape(), PCB_IO_IPC2581::addShape(), GRAPHICS_CLEANER::areEquivalent(), BOOST_AUTO_TEST_CASE(), CalcArcAngles(), calcEdit(), KI_TEST::CheckFpShape(), CheckLibSymbolGraphics(), ConnectBoardShapes(), PCB_EDIT_TABLE_TOOL::copyCell(), SCH_EDIT_TABLE_TOOL::copyCell(), doConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), DRAWING_TOOL::DrawLine(), PCB_POINT_EDITOR::editArcEndpointKeepCenter(), PCB_POINT_EDITOR::editArcEndpointKeepTangent(), GENCAD_EXPORTER::FootprintWriteShape(), PCB_IO_KICAD_SEXPR::format(), formatArc(), formatBezier(), formatRect(), GetBotRight(), PCB_TEXTBOX::GetBotRight(), getBoundingBox(), PCB_SHAPE::GetConnectionPoints(), PCB_TABLE::GetEffectiveShape(), GetLength(), SCH_TABLECELL::GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), PCB_TABLECELL::GetMsgPanelInfo(), PCB_TEXTBOX::GetMsgPanelInfo(), GetRectCorners(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), GetSegmentAngle(), SCH_TEXTBOX::GetShownText(), CONVERT_TOOL::getStartEndPoints(), PCB_TEXTBOX::GetTopLeft(), hash_fp_item(), hitTest(), idf_export_outline(), GRAPHICS_CLEANER::isNullShape(), SCH_IO_KICAD_LEGACY_LIB_CACHE::loadArc(), SCH_IO_EAGLE::loadSymbolRectangle(), EDIT_POINTS_FACTORY::Make(), makeEffectiveShapes(), DSN::SPECCTRA_DB::makeIMAGE(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromChainedSegs(), GRAPHICS_CLEANER::mergeRects(), SCH_SHAPE::Normalize(), SCH_TABLE::Normalize(), PCB_SHAPE::Normalize(), PCB_TABLE::Normalize(), FOOTPRINT::cmp_drawings::operator()(), SCH_EDITOR_CONTROL::Paste(), BRDITEMS_PLOTTER::PlotShape(), BRDITEMS_PLOTTER::PlotTableBorders(), SCH_SHAPE::Print(), SCH_TEXTBOX::Print(), SCH_SHAPE::PrintBackground(), LINE_FILLET_ROUTINE::ProcessLinePair(), LINE_CHAMFER_ROUTINE::ProcessLinePair(), LINE_EXTENSION_ROUTINE::ProcessLinePair(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveArc(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveBezier(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveRectangle(), SCH_IO_KICAD_SEXPR::saveTextBox(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveTextBox(), PCB_SELECTION_TOOL::selectAllConnectedShapes(), PCB_SHAPE::Serialize(), ShapeGetMsgPanelInfo(), shapeNeedsUpdate(), PLOTTER::ThickArc(), AR_MATRIX::TraceSegmentPcb(), TransformShapeToPolygon(), EE_POINT_EDITOR::updatePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ GetEndX()

◆ GetEndY()

◆ GetFillColor()

◆ GetFillMode()

◆ getFriendlyName()

wxString EDA_SHAPE::getFriendlyName ( ) const
protected

Definition at line 704 of file eda_shape.cpp.

References _, IsProxyItem(), and m_shape.

Referenced by PCB_SHAPE::GetFriendlyName(), and ShapeGetMsgPanelInfo().

◆ GetLength()

◆ GetLineColor()

COLOR4D EDA_SHAPE::GetLineColor ( ) const
inline

Definition at line 117 of file eda_shape.h.

References STROKE_PARAMS::GetColor(), and m_stroke.

Referenced by EDA_SHAPE_DESC::EDA_SHAPE_DESC().

◆ GetLineStyle()

◆ GetPointCount()

int EDA_SHAPE::GetPointCount ( ) const

◆ GetPolyShape() [1/2]

SHAPE_POLY_SET & EDA_SHAPE::GetPolyShape ( )
inline

Definition at line 262 of file eda_shape.h.

References m_poly.

Referenced by EE_POINT_EDITOR::addCorner(), PCB_POINT_EDITOR::addCorner(), PCB_IO_IPC2581::addShape(), KI_TEST::CheckFpShape(), doConvertOutlineToPolygon(), CADSTAR_SCH_ARCHIVE_LOADER::fixUpLibraryPins(), PCB_IO_KICAD_SEXPR::format(), formatPoly(), PCB_SHAPE::GetConnectionPoints(), PCB_SHAPE::GetCorners(), PCB_SHAPE::GetFocusPosition(), CADSTAR_PCB_ARCHIVE_LOADER::getKiCadPad(), GetPointCount(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), hash_fp_item(), IsPolyShapeValid(), SCH_IO_EAGLE::loadSymbolPolyLine(), EDIT_POINTS_FACTORY::Make(), makeEffectiveShapes(), PCB_POINT_EDITOR::makePoints(), FOOTPRINT::cmp_drawings::operator()(), PCB_IO_EAGLE::packagePolygon(), SCH_IO_KICAD_SEXPR_PARSER::ParseSchematic(), PCB_IO_KICAD_SEXPR_PARSER::parseTextBoxContent(), SCH_EDITOR_CONTROL::Paste(), BRDITEMS_PLOTTER::PlotShape(), POLYGON_BOOLEAN_ROUTINE::ProcessShape(), POLYGON_MERGE_ROUTINE::ProcessSubsequentPolygon(), POLYGON_SUBTRACT_ROUTINE::ProcessSubsequentPolygon(), POLYGON_INTERSECT_ROUTINE::ProcessSubsequentPolygon(), EE_POINT_EDITOR::removeCorner(), PCB_POINT_EDITOR::removeCorner(), EE_POINT_EDITOR::removeCornerCondition(), PCB_POINT_EDITOR::removeCornerCondition(), DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run(), SCH_IO_KICAD_LEGACY_LIB_CACHE::savePolyLine(), PCB_SHAPE::Serialize(), ShapeGetMsgPanelInfo(), shapeNeedsUpdate(), PCB_POINT_EDITOR::updateItem(), EE_POINT_EDITOR::updateParentItem(), and EE_POINT_EDITOR::updatePoints().

◆ GetPolyShape() [2/2]

const SHAPE_POLY_SET & EDA_SHAPE::GetPolyShape ( ) const
inline

Definition at line 263 of file eda_shape.h.

References m_poly.

◆ getPosition()

VECTOR2I EDA_SHAPE::getPosition ( ) const
protected

◆ GetRadius()

◆ GetRectangleHeight()

◆ GetRectangleWidth()

◆ GetRectCorners()

◆ GetSegmentAngle()

EDA_ANGLE EDA_SHAPE::GetSegmentAngle ( ) const

Definition at line 652 of file eda_shape.cpp.

References GetEnd(), GetStart(), and RADIANS_T.

◆ GetShape()

SHAPE_T EDA_SHAPE::GetShape ( ) const
inline

Definition at line 120 of file eda_shape.h.

References m_shape.

Referenced by PCB_POINT_EDITOR::addCorner(), EE_POINT_EDITOR::addCornerCondition(), PCB_IO_IPC2581::addLocationNode(), PCB_IO_IPC2581::addPackage(), SCH_SHAPE::AddPoint(), BOARD_ADAPTER::addShape(), PCB_IO_IPC2581::addShape(), GRAPHICS_CLEANER::areEquivalent(), beginEdit(), calcEdit(), PCB_POINT_EDITOR::canAddCorner(), KI_TEST::CheckFpShape(), CheckLibSymbolGraphics(), ConnectBoardShapes(), continueEdit(), DIALOG_SHAPE_PROPERTIES::DIALOG_SHAPE_PROPERTIES(), doConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), KIGFX::SCH_PAINTER::draw(), EDA_SHAPE_DESC::EDA_SHAPE_DESC(), endEdit(), PAD_TOOL::explodePad(), CADSTAR_SCH_ARCHIVE_LOADER::fixUpLibraryPins(), GENCAD_EXPORTER::FootprintWriteShape(), PCB_IO_KICAD_SEXPR::format(), PCB_SHAPE::GetCorners(), FOOTPRINT::GetCoverageArea(), SCH_SHAPE::GetItemDescription(), SCH_SHAPE::GetMenuImage(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), CONVERT_TOOL::getStartEndPoints(), EE_SELECTION_TOOL::GuessSelectionCandidates(), hash_fp_item(), idf_export_outline(), PCB_SELECTION_TOOL::isExpandableGraphicShape(), GRAPHICS_CLEANER::isNullShape(), EDIT_POINTS_FACTORY::Make(), DSN::SPECCTRA_DB::makeIMAGE(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromChainedSegs(), GRAPHICS_CLEANER::mergeRects(), PCB_SHAPE::Mirror(), ITEM_MODIFICATION_ROUTINE::ModifyLineOrDeleteIfZeroLength(), SCH_SHAPE::Normalize(), PCB_SHAPE::cmp_drawings::operator()(), FOOTPRINT::cmp_drawings::operator()(), operator==(), ALTIUM_PCB::Parse(), SCH_EDITOR_CONTROL::Paste(), SCH_SHAPE::Plot(), BRDITEMS_PLOTTER::PlotShape(), SCH_SHAPE::Print(), SCH_SHAPE::PrintBackground(), POLYGON_BOOLEAN_ROUTINE::ProcessShape(), PCB_POINT_EDITOR::removeCorner(), PCB_POINT_EDITOR::removeCornerCondition(), PCB_TEXTBOX::Rotate(), DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveArc(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveBezier(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveCircle(), SCH_IO_KICAD_LEGACY_LIB_CACHE::savePolyLine(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveRectangle(), SCH_IO_KICAD_SEXPR::saveShape(), SCH_IO_KICAD_LEGACY_LIB_CACHE::SaveSymbol(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveSymbolDrawItem(), PCB_SHAPE::Serialize(), PCB_SHAPE::SetIsProxyItem(), shapeNeedsUpdate(), Similarity(), AR_MATRIX::TraceSegmentPcb(), PCB_TEXTBOX::TransformShapeToPolygon(), PCB_POINT_EDITOR::updateItem(), EE_POINT_EDITOR::updateParentItem(), EE_POINT_EDITOR::updatePoints(), PCB_POINT_EDITOR::updatePoints(), and DIALOG_SHAPE_PROPERTIES::Validate().

◆ GetStart()

const VECTOR2I & EDA_SHAPE::GetStart ( ) const
inline

Return the starting point of the graphic.

Definition at line 125 of file eda_shape.h.

References m_start.

Referenced by PCB_POINT_EDITOR::addCorner(), PCB_IO_IPC2581::addPadStack(), BOARD_ADAPTER::addShape(), PCB_IO_IPC2581::addShape(), GRAPHICS_CLEANER::areEquivalent(), BOOST_AUTO_TEST_CASE(), CalcArcAngles(), calcEdit(), KI_TEST::CheckFpShape(), ConnectBoardShapes(), ALTIUM_PCB::ConvertArcs6ToBoardItemOnLayer(), PCB_EDIT_TABLE_TOOL::copyCell(), SCH_EDIT_TABLE_TOOL::copyCell(), doConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), PCB_POINT_EDITOR::editArcEndpointKeepCenter(), PCB_POINT_EDITOR::editArcEndpointKeepTangent(), GENCAD_EXPORTER::FootprintWriteShape(), PCB_IO_KICAD_SEXPR::format(), formatArc(), formatBezier(), formatCircle(), formatRect(), PCB_TEXTBOX::GetBotRight(), getBoundingBox(), PCB_SHAPE::GetConnectionPoints(), PCB_SHAPE::GetFocusPosition(), GetLength(), SCH_TABLECELL::GetMsgPanelInfo(), SCH_TEXTBOX::GetMsgPanelInfo(), PCB_TABLECELL::GetMsgPanelInfo(), PCB_TEXTBOX::GetMsgPanelInfo(), GetRectCorners(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), GetSegmentAngle(), SCH_TEXTBOX::GetShownText(), CONVERT_TOOL::getStartEndPoints(), GetTopLeft(), PCB_TEXTBOX::GetTopLeft(), hash_fp_item(), hitTest(), idf_export_outline(), GRAPHICS_CLEANER::isNullShape(), SCH_IO_KICAD_LEGACY_LIB_CACHE::loadArc(), EDIT_POINTS_FACTORY::Make(), DSN::SPECCTRA_DB::makeIMAGE(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromChainedSegs(), GRAPHICS_CLEANER::mergeRects(), SCH_TABLE::Normalize(), PCB_SHAPE::Normalize(), PCB_TABLE::Normalize(), FOOTPRINT::cmp_drawings::operator()(), SCH_IO_ALTIUM::ParseEllipse(), SCH_EDITOR_CONTROL::Paste(), BRDITEMS_PLOTTER::PlotPcbTarget(), BRDITEMS_PLOTTER::PlotShape(), SCH_SHAPE::Print(), SCH_TEXTBOX::Print(), SCH_SHAPE::PrintBackground(), LINE_FILLET_ROUTINE::ProcessLinePair(), LINE_CHAMFER_ROUTINE::ProcessLinePair(), LINE_EXTENSION_ROUTINE::ProcessLinePair(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveArc(), SCH_IO_KICAD_LEGACY_LIB_CACHE::saveBezier(), SCH_IO_KICAD_SEXPR::saveTextBox(), SCH_IO_KICAD_SEXPR_LIB_CACHE::saveTextBox(), PCB_SELECTION_TOOL::selectAllConnectedShapes(), PCB_SHAPE::Serialize(), ShapeGetMsgPanelInfo(), shapeNeedsUpdate(), PLOTTER::ThickArc(), AR_MATRIX::TraceSegmentPcb(), TransformShapeToPolygon(), EE_POINT_EDITOR::updatePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ GetStartX()

◆ GetStartY()

◆ GetTopLeft()

virtual VECTOR2I EDA_SHAPE::GetTopLeft ( ) const
inlinevirtual

Reimplemented in PCB_TEXTBOX.

Definition at line 177 of file eda_shape.h.

References GetStart().

Referenced by KIGFX::PCB_PAINTER::draw(), PCB_POINT_EDITOR::makePoints(), and PCB_POINT_EDITOR::updatePoints().

◆ GetWidth()

◆ hitTest() [1/2]

◆ hitTest() [2/2]

◆ IsClockwiseArc()

bool EDA_SHAPE::IsClockwiseArc ( ) const

◆ IsClosed()

◆ IsFilled()

◆ IsPolyShapeValid()

bool EDA_SHAPE::IsPolyShapeValid ( ) const
Returns
true if the polygonal shape is valid (has more than 2 points)

Definition at line 1322 of file eda_shape.cpp.

References GetPolyShape(), SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), and SHAPE_LINE_CHAIN::PointCount().

Referenced by PCB_IO_KICAD_SEXPR::format(), BRDITEMS_PLOTTER::PlotShape(), and TransformShapeToPolygon().

◆ IsProxyItem()

virtual bool EDA_SHAPE::IsProxyItem ( ) const
inlinevirtual

Reimplemented in PCB_SHAPE.

Definition at line 88 of file eda_shape.h.

References m_proxyItem.

Referenced by getFriendlyName(), hitTest(), makeEffectiveShapes(), ShowShape(), and TransformShapeToPolygon().

◆ makeEffectiveShapes()

std::vector< SHAPE * > EDA_SHAPE::makeEffectiveShapes ( bool  aEdgeOnly,
bool  aLineChainOnly = false 
) const
protected

Make a set of SHAPE objects representing the EDA_SHAPE.

Caller owns the objects.

Parameters
aEdgeOnlyindicates only edges should be generated (even if 0 width), and no fill shapes.
aLineChainOnlyindicates SHAPE_POLY_SET is being abused slightly to represent a lineChain rather than a closed polygon

Definition at line 1212 of file eda_shape.cpp.

References ANGLE_360, buildBezierToSegmentsPointsList(), SHAPE_POLY_SET::COutline(), SHAPE_LINE_CHAIN::CSegment(), GetArcAngle(), getCenter(), GetEffectiveWidth(), GetEnd(), GetPolyShape(), GetRadius(), GetRectCorners(), SHAPE_LINE_CHAIN::IsClosed(), IsFilled(), IsProxyItem(), m_arcCenter, m_end, m_shape, m_start, SHAPE_POLY_SET::OutlineCount(), SHAPE_LINE_CHAIN::SegmentCount(), SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

Referenced by MakeEffectiveShapes(), and SCH_SHAPE::MakeEffectiveShapes().

◆ MakeEffectiveShapes()

virtual std::vector< SHAPE * > EDA_SHAPE::MakeEffectiveShapes ( bool  aEdgeOnly = false) const
inlinevirtual

Make a set of SHAPE objects representing the EDA_SHAPE.

Caller owns the objects.

Parameters
aEdgeOnlyindicates only edges should be generated (even if 0 width), and no fill shapes.

Reimplemented in SCH_SHAPE.

Definition at line 304 of file eda_shape.h.

References makeEffectiveShapes().

Referenced by BOARD_ADAPTER::addShape(), KIGFX::PCB_PAINTER::draw(), PCB_SHAPE::GetEffectiveShape(), EE_SELECTION_TOOL::GuessSelectionCandidates(), BRDITEMS_PLOTTER::PlotShape(), and PNS_KICAD_IFACE_BASE::syncGraphicalItem().

◆ move()

void EDA_SHAPE::move ( const VECTOR2I aMoveVector)
protected

◆ operator==()

◆ RebuildBezierToSegmentsPointsList()

void EDA_SHAPE::RebuildBezierToSegmentsPointsList ( int  aMinSegLen)

Rebuild the m_bezierPoints vertex list that approximate the Bezier curve by a list of segments.

Has meaning only for BEZIER shape.

Parameters
aMinSegLenis the min length of segments approximating the bezier. The shape's last segment can be shorter. This parameter avoids having too many very short segment in list. Good values are between m_width/2 and m_width.

Definition at line 478 of file eda_shape.cpp.

References buildBezierToSegmentsPointsList(), EuclideanNorm(), m_bezierPoints, and m_shape.

Referenced by beginEdit(), calcEdit(), doConvertOutlineToPolygon(), hitTest(), GRAPHICS_CLEANER::isNullShape(), SCH_IO_KICAD_LEGACY_LIB_CACHE::loadBezier(), PCB_SHAPE::Mirror(), SCH_IO_ALTIUM::ParseEllipse(), SCH_IO_ALTIUM::ParseEllipticalArc(), PCB_POINT_EDITOR::updateItem(), and EE_POINT_EDITOR::updateParentItem().

◆ rotate()

◆ scale()

◆ SetArcAngleAndEnd()

void EDA_SHAPE::SetArcAngleAndEnd ( const EDA_ANGLE aAngle,
bool  aCheckNegativeAngle = false 
)

◆ SetArcGeometry()

void EDA_SHAPE::SetArcGeometry ( const VECTOR2I aStart,
const VECTOR2I aMid,
const VECTOR2I aEnd 
)

◆ SetBezierC1()

◆ SetBezierC2()

◆ SetBottom()

virtual void EDA_SHAPE::SetBottom ( int  val)
inlinevirtual

Reimplemented in PCB_TEXTBOX.

Definition at line 183 of file eda_shape.h.

References SetEndY().

Referenced by PCB_POINT_EDITOR::updateItem().

◆ SetCachedArcData()

void EDA_SHAPE::SetCachedArcData ( const VECTOR2I aStart,
const VECTOR2I aMid,
const VECTOR2I aEnd,
const VECTOR2I aCenter 
)

Set the data used for mid point caching.

If the controlling points remain constant, then we keep the midpoint the same as it was when read in. This minimizes VCS churn

Parameters
aStartCached start point
aMidCached mid point
aEndCached end point
aCenterCalculated center point using the preceeding three

Definition at line 614 of file eda_shape.cpp.

References ARC_MID::center, ARC_MID::end, m_arcMidData, ARC_MID::mid, and ARC_MID::start.

Referenced by SetArcGeometry().

◆ SetCenter()

◆ setEditState()

void EDA_SHAPE::setEditState ( int  aState)
inlineprotected

Definition at line 380 of file eda_shape.h.

References m_editState.

Referenced by SCH_SHAPE::SetEditState().

◆ SetEnd()

void EDA_SHAPE::SetEnd ( const VECTOR2I aEnd)
inline

Definition at line 154 of file eda_shape.h.

References m_end, and m_endsSwapped.

Referenced by PCB_POINT_EDITOR::addCorner(), SCH_IO_ALTIUM::AddLibTextBox(), PCB_IO_IPC2581::addPadStack(), SCH_IO_ALTIUM::AddTextBox(), PCAD2KICAD::PCAD_LINE::AddToBoard(), PCAD2KICAD::PCAD_POLYGON::AddToBoard(), PCB_IO_IPC2581::addVia(), beginEdit(), calcEdit(), SCH_EDIT_TOOL::ChangeTextType(), ConnectBoardShapes(), ALTIUM_PCB::ConvertArcs6ToPcbShape(), ALTIUM_PCB::ConvertFills6ToBoardItem(), ALTIUM_PCB::ConvertFills6ToFootprintItem(), ALTIUM_PCB::ConvertTracks6ToBoardItem(), ALTIUM_PCB::ConvertTracks6ToFootprintItem(), PCB_EDIT_TABLE_TOOL::copyCell(), SCH_EDIT_TABLE_TOOL::copyCell(), SCH_IO_LTSPICE_PARSER::CreateArc(), SCH_IO_LTSPICE_PARSER::CreateCircle(), MICROWAVE_TOOL::createMicrowaveInductor(), SCH_IO_LTSPICE_PARSER::CreateRect(), PCB_SHAPE::Deserialize(), SCH_DRAWING_TOOLS::DrawTable(), DRAWING_TOOL::DrawTable(), PCB_POINT_EDITOR::editArcEndpointKeepCenter(), PCB_POINT_EDITOR::editArcEndpointKeepTangent(), PCB_POINT_EDITOR::editArcMidKeepCenter(), PCB_IO_IPC2581::generateLayerSetNet(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), CADSTAR_PCB_ARCHIVE_LOADER::getShapeFromVertex(), HelperGeneratePowerPortGraphics(), ALTIUM_PCB::HelperParsePad6NonCopper(), initTextTable(), SCH_IO_KICAD_LEGACY_LIB_CACHE::loadArc(), SCH_IO_KICAD_LEGACY_LIB_CACHE::loadBezier(), SCH_IO_KICAD_LEGACY_LIB_CACHE::loadCircle(), FABMASTER::loadEtch(), FABMASTER::loadFootprints(), FABMASTER::loadGraphics(), CADSTAR_SCH_ARCHIVE_LOADER::loadLibrarySymbolShapeVertices(), FABMASTER::loadOutline(), PCB_IO_EAGLE::loadPlain(), FABMASTER::loadPolygon(), SCH_IO_KICAD_LEGACY_LIB_CACHE::loadRect(), SCH_IO_EAGLE::loadSymbolCircle(), SCH_IO_EAGLE::loadSymbolRectangle(), GRAPHICS_CLEANER::mergeRects(), ITEM_MODIFICATION_ROUTINE::ModifyLineOrDeleteIfZeroLength(), SCH_TABLE::Normalize(), PCB_SHAPE::Normalize(), PCB_TABLE::Normalize(), PCB_IO_EAGLE::packageCircle(), PCB_IO_EAGLE::packageWire(), SCH_IO_ALTIUM::ParseArc(), SCH_IO_ALTIUM::ParseBezier(), SCH_IO_ALTIUM::ParseCircle(), SCH_IO_ALTIUM::ParseEllipse(), SCH_IO_ALTIUM::ParseEllipticalArc(), GPCB_FPL_CACHE::parseFOOTPRINT(), SCH_IO_ALTIUM::ParseRectangle(), SCH_IO_ALTIUM::ParseRoundRectangle(), SCH_IO_KICAD_SEXPR_PARSER::parseSchTextBoxContent(), PCB_IO_KICAD_SEXPR_PARSER::parseTextBoxContent(), DRAWING_TOOL::PlaceCharacteristics(), DRAWING_TOOL::PlaceStackup(), SCH_TEXTBOX::Plot(), BRDITEMS_PLOTTER::PlotDimension(), BRDITEMS_PLOTTER::PlotPcbTarget(), SCH_TEXTBOX::Print(), PCB_TEXTBOX::Rotate(), PCB_TARGET::TransformShapeToPolygon(), updateArcFromConstructionMgr(), PCB_POINT_EDITOR::updateItem(), EE_POINT_EDITOR::updateParentItem(), and updateSegmentFromGeometryMgr().

◆ SetEndX()

◆ SetEndY()

◆ SetFillColor()

◆ SetFilled()

◆ setFilled()

virtual void EDA_SHAPE::setFilled ( bool  aFlag)
inlineprotectedvirtual

Reimplemented in SCH_SHAPE.

Definition at line 352 of file eda_shape.h.

References m_fill.

Referenced by SetFilled().

◆ SetFillMode()

◆ SetIsProxyItem()

virtual void EDA_SHAPE::SetIsProxyItem ( bool  aIsProxy = true)
inlinevirtual

Reimplemented in PCB_SHAPE.

Definition at line 89 of file eda_shape.h.

References m_proxyItem.

◆ SetLeft()

virtual void EDA_SHAPE::SetLeft ( int  val)
inlinevirtual

Reimplemented in PCB_TEXTBOX.

Definition at line 181 of file eda_shape.h.

References SetStartX().

Referenced by PCB_POINT_EDITOR::updateItem().

◆ SetLength()

void EDA_SHAPE::SetLength ( const double &  aLength)

Definition at line 175 of file eda_shape.cpp.

References m_segmentLength, m_shape, SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

◆ SetLineColor()

void EDA_SHAPE::SetLineColor ( const COLOR4D aColor)
inline

Definition at line 116 of file eda_shape.h.

References m_stroke, and STROKE_PARAMS::SetColor().

Referenced by EDA_SHAPE_DESC::EDA_SHAPE_DESC().

◆ SetLineStyle()

void EDA_SHAPE::SetLineStyle ( const LINE_STYLE  aStyle)

◆ SetPolyPoints()

◆ SetPolyShape()

◆ setPosition()

void EDA_SHAPE::setPosition ( const VECTOR2I aPos)
protected

Definition at line 104 of file eda_shape.cpp.

References getPosition(), and move.

Referenced by SCH_SHAPE::SetPosition(), and PCB_SHAPE::SetPosition().

◆ SetRadius()

void EDA_SHAPE::SetRadius ( int  aX)
inline

Definition at line 172 of file eda_shape.h.

References m_end, and m_start.

Referenced by EDA_SHAPE_DESC::EDA_SHAPE_DESC().

◆ SetRectangle()

void EDA_SHAPE::SetRectangle ( const long long int &  aHeight,
const long long int &  aWidth 
)

◆ SetRight()

virtual void EDA_SHAPE::SetRight ( int  val)
inlinevirtual

Reimplemented in PCB_TEXTBOX.

Definition at line 182 of file eda_shape.h.

References SetEndX().

Referenced by PCB_POINT_EDITOR::updateItem().

◆ SetSegmentAngle()

void EDA_SHAPE::SetSegmentAngle ( const EDA_ANGLE aAngle)

Definition at line 200 of file eda_shape.cpp.

References m_segmentAngle, m_shape, SHAPE_T_asString(), and UNIMPLEMENTED_FOR.

◆ SetShape()

◆ SetStart()

void EDA_SHAPE::SetStart ( const VECTOR2I aStart)
inline

Definition at line 129 of file eda_shape.h.

References m_endsSwapped, and m_start.

Referenced by PCB_POINT_EDITOR::addCorner(), SCH_IO_ALTIUM::AddLibTextBox(), PCB_IO_IPC2581::addPadStack(), SCH_IO_ALTIUM::AddTextBox(), PCAD2KICAD::PCAD_ARC::AddToBoard(), PCAD2KICAD::PCAD_LINE::AddToBoard(), PCAD2KICAD::PCAD_POLYGON::AddToBoard(), beginEdit(), BOOST_AUTO_TEST_CASE(), calcEdit(), ConnectBoardShapes(), ALTIUM_PCB::ConvertArcs6ToBoardItemOnLayer(), ALTIUM_PCB::ConvertArcs6ToPcbShape(), ALTIUM_PCB::ConvertFills6ToBoardItem(), ALTIUM_PCB::ConvertFills6ToFootprintItem(), ALTIUM_PCB::ConvertTracks6ToBoardItem(), ALTIUM_PCB::ConvertTracks6ToFootprintItem(), PCB_EDIT_TABLE_TOOL::copyCell(), SCH_EDIT_TABLE_TOOL::copyCell(), SCH_IO_LTSPICE_PARSER::CreateArc(), MICROWAVE_TOOL::createMicrowaveInductor(), PCB_SHAPE::Deserialize(), PCB_POINT_EDITOR::editArcEndpointKeepCenter(), PCB_POINT_EDITOR::editArcEndpointKeepTangent(), PCB_POINT_EDITOR::editArcMidKeepCenter(), PCB_IO_IPC2581::generateLayerSetNet(), CADSTAR_SCH_ARCHIVE_LOADER::getScaledLibPart(), CADSTAR_PCB_ARCHIVE_LOADER::getShapeFromVertex(), HelperGeneratePowerPortGraphics(), ALTIUM_PCB::HelperParsePad6NonCopper(), initTextTable(), SCH_IO_KICAD_LEGACY_LIB_CACHE::loadArc(), SCH_IO_KICAD_LEGACY_LIB_CACHE::loadBezier(), SCH_IO_KICAD_LEGACY_LIB_CACHE::loadCircle(), FABMASTER::loadEtch(), FABMASTER::loadFootprints(), FABMASTER::loadGraphics(), CADSTAR_SCH_ARCHIVE_LOADER::loadLibrarySymbolShapeVertices(), FABMASTER::loadOutline(), PCB_IO_EAGLE::loadPlain(), FABMASTER::loadPolygon(), SCH_IO_EAGLE::loadSymbolWire(), GRAPHICS_CLEANER::mergeRects(), ITEM_MODIFICATION_ROUTINE::ModifyLineOrDeleteIfZeroLength(), PCB_SHAPE::Normalize(), PCB_IO_EAGLE::packageCircle(), PCB_IO_EAGLE::packageWire(), SCH_IO_ALTIUM::ParseArc(), SCH_IO_ALTIUM::ParseBezier(), SCH_IO_ALTIUM::ParseEllipse(), SCH_IO_ALTIUM::ParseEllipticalArc(), GPCB_FPL_CACHE::parseFOOTPRINT(), PCB_IO_KICAD_SEXPR_PARSER::parseTextBoxContent(), DRAWING_TOOL::PlaceCharacteristics(), DRAWING_TOOL::PlaceStackup(), SCH_TEXTBOX::Plot(), BRDITEMS_PLOTTER::PlotDimension(), BRDITEMS_PLOTTER::PlotPcbTarget(), SCH_TEXTBOX::Print(), PCB_TEXTBOX::Rotate(), PCB_TARGET::TransformShapeToPolygon(), updateArcFromConstructionMgr(), PCB_POINT_EDITOR::updateItem(), EE_POINT_EDITOR::updateParentItem(), and updateSegmentFromGeometryMgr().

◆ SetStartX()

◆ SetStartY()

◆ SetTop()

virtual void EDA_SHAPE::SetTop ( int  val)
inlinevirtual

Reimplemented in PCB_TEXTBOX.

Definition at line 180 of file eda_shape.h.

References SetStartY().

Referenced by PCB_POINT_EDITOR::updateItem().

◆ SetWidth()

◆ SHAPE_T_asString()

◆ ShapeGetMsgPanelInfo()

◆ ShowShape()

wxString EDA_SHAPE::ShowShape ( ) const

Definition at line 60 of file eda_shape.cpp.

References _, IsProxyItem(), and m_shape.

◆ Similarity()

◆ SwapShape()

void EDA_SHAPE::SwapShape ( EDA_SHAPE aImage)

◆ TransformShapeToPolygon()

void EDA_SHAPE::TransformShapeToPolygon ( SHAPE_POLY_SET aBuffer,
int  aClearance,
int  aError,
ERROR_LOC  aErrorLoc,
bool  ignoreLineWidth = false 
) const

Convert the shape to a closed polygon.

Circles and arcs are approximated by segments.

Parameters
aBufferis a buffer to store the polygon.
aClearanceis the clearance around the pad.
aErroris the maximum deviation from a true arc.
aErrorLocwhether any approximation error shoule be placed inside or outside
ignoreLineWidthis used for edge cut items where the line width is only for visualization

Definition at line 1667 of file eda_shape.cpp.

References SEG::A, SHAPE_POLY_SET::Append(), SEG::B, ERROR_OUTSIDE, GetArcMid(), GetBezierC1(), GetBezierC2(), getCenter(), GetEnd(), SHAPE_LINE_CHAIN::GetPoint(), SHAPE_LINE_CHAIN::GetPointCount(), BEZIER_POLY::GetPoly(), GetRadius(), GetRectCorners(), SHAPE_LINE_CHAIN::GetSegment(), GetStart(), GetWidth(), SHAPE_POLY_SET::Inflate(), IsFilled(), IsPolyShapeValid(), IsProxyItem(), m_poly, m_shape, SHAPE_POLY_SET::NewOutline(), SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), SHAPE_LINE_CHAIN::SegmentCount(), SHAPE_T_asString(), TransformArcToPolygon(), TransformCircleToPolygon(), TransformOvalToPolygon(), TransformRingToPolygon(), and UNIMPLEMENTED_FOR.

Referenced by PCB_SHAPE::TransformShapeToPolygon().

Member Data Documentation

◆ m_arcCenter

◆ m_arcMidData

ARC_MID EDA_SHAPE::m_arcMidData
protected

Definition at line 410 of file eda_shape.h.

Referenced by PCB_SHAPE::Deserialize(), GetArcMid(), SetArcGeometry(), and SetCachedArcData().

◆ m_bezierC1

◆ m_bezierC2

◆ m_bezierPoints

◆ m_editState

int EDA_SHAPE::m_editState
protected

◆ m_end

◆ m_endsSwapped

bool EDA_SHAPE::m_endsSwapped
protected

◆ m_fill

FILL_T EDA_SHAPE::m_fill
protected

◆ m_fillColor

COLOR4D EDA_SHAPE::m_fillColor
protected

Definition at line 398 of file eda_shape.h.

Referenced by GetFillColor(), operator==(), SetFillColor(), Similarity(), and SwapShape().

◆ m_poly

◆ m_proxyItem

bool EDA_SHAPE::m_proxyItem
protected

◆ m_rectangleHeight

long long int EDA_SHAPE::m_rectangleHeight
protected

Definition at line 400 of file eda_shape.h.

Referenced by SetRectangle().

◆ m_rectangleWidth

long long int EDA_SHAPE::m_rectangleWidth
protected

Definition at line 401 of file eda_shape.h.

Referenced by SetRectangle().

◆ m_segmentAngle

EDA_ANGLE EDA_SHAPE::m_segmentAngle
protected

Definition at line 404 of file eda_shape.h.

Referenced by SetSegmentAngle().

◆ m_segmentLength

double EDA_SHAPE::m_segmentLength
protected

Definition at line 403 of file eda_shape.h.

Referenced by SetLength().

◆ m_shape

◆ m_start

◆ m_stroke


The documentation for this class was generated from the following files: