KiCad PCB EDA Suite
FP_SHAPE Class Reference

#include <fp_shape.h>

Inheritance diagram for FP_SHAPE:
PCB_SHAPE BOARD_ITEM EDA_ITEM KIGFX::VIEW_ITEM INSPECTABLE

Public Member Functions

 FP_SHAPE (FOOTPRINT *parent, PCB_SHAPE_TYPE_T aShape=S_SEGMENT)
 
 ~FP_SHAPE ()
 
bool IsType (const KICAD_T aScanTypes[]) const override
 Check whether the item is one of the listed types. More...
 
void SetAngle (double aAngle, bool aUpdateEnd=true) override
 Sets the angle for arcs, and normalizes it within the range 0 - 360 degrees. More...
 
void Move (const wxPoint &aMoveVector) override
 Move an edge of the footprint. More...
 
void Mirror (const wxPoint &aCentre, bool aMirrorAroundXAxis)
 Mirror an edge of the footprint. More...
 
void Rotate (const wxPoint &aRotCentre, double aAngle) override
 Rotate an edge of the footprint. More...
 
void Flip (const wxPoint &aCentre, bool aFlipLeftRight) override
 Flip entity relative to aCentre. More...
 
bool IsParentFlipped () const
 
void SetStart0 (const wxPoint &aPoint)
 
const wxPoint & GetStart0 () const
 
void SetEnd0 (const wxPoint &aPoint)
 
const wxPoint & GetEnd0 () const
 
void SetThirdPoint0 (const wxPoint &aPoint)
 
const wxPoint & GetThirdPoint0 () const
 
void SetBezier0_C1 (const wxPoint &aPoint)
 
const wxPoint & GetBezier0_C1 () const
 
void SetBezier0_C2 (const wxPoint &aPoint)
 
const wxPoint & GetBezier0_C2 () const
 
void SetLocalCoord ()
 Set relative coordinates from draw coordinates. More...
 
void SetDrawCoord ()
 Set draw coordinates (absolute values ) from relative coordinates. More...
 
void GetMsgPanelInfo (EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
 Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes. More...
 
wxString GetClass () const override
 Return the class name. More...
 
wxString GetParentAsString () const
 
wxString GetSelectMenuText (EDA_UNITS aUnits) const override
 Return the text to display to be used in the selection clarification context menu when multiple items are found at the current cursor position. More...
 
BITMAP_DEF GetMenuImage () const override
 Return a pointer to an image to be used in menus. More...
 
EDA_ITEMClone () const override
 Create a duplicate of this item with linked list members set to NULL. More...
 
double ViewGetLOD (int aLayer, KIGFX::VIEW *aView) const override
 Return the level of detail (LOD) of the item. More...
 
void SetFilled (bool aFlag)
 
bool IsFilled () const
 
void SetWidth (int aWidth)
 
int GetWidth () const
 
double GetAngle () const
 
void SetShape (PCB_SHAPE_TYPE_T aShape)
 
PCB_SHAPE_TYPE_T GetShape () const
 
void SetBezControl1 (const wxPoint &aPoint)
 
const wxPoint & GetBezControl1 () const
 
void SetBezControl2 (const wxPoint &aPoint)
 
const wxPoint & GetBezControl2 () const
 
void SetPosition (const wxPoint &aPos) override
 
wxPoint GetPosition () const override
 
const wxPoint & GetStart () const
 Function GetStart returns the starting point of the graphic. More...
 
int GetStartY ()
 
int GetStartX ()
 
void SetStart (const wxPoint &aStart)
 
void SetStartY (int y)
 
void SetStartX (int x)
 
const wxPoint & GetEnd () const
 Function GetEnd returns the ending point of the graphic. More...
 
int GetEndY ()
 
int GetEndX ()
 
void SetEnd (const wxPoint &aEnd)
 
void SetEndY (int y)
 
void SetEndX (int x)
 
const wxPoint & GetThirdPoint () const
 Function GetThirdPoint returns the third point point of the graphic. More...
 
int GetThirdPointY ()
 
int GetThirdPointX ()
 
void SetThirdPoint (const wxPoint &aPoint)
 
void SetThirdPointY (int y)
 
void SetThirdPointX (int x)
 
wxPoint GetCenter () const override
 This defaults to the center of the bounding box if not overridden. More...
 
wxPoint GetArcStart () const
 
wxPoint GetArcEnd () const
 
wxPoint GetArcMid () const
 
std::vector< wxPoint > GetRectCorners () const
 
double GetArcAngleStart () const
 function GetArcAngleStart() More...
 
double GetArcAngleEnd () const
 function GetArcAngleEnd() More...
 
int GetRadius () const
 Function GetRadius returns the radius of this item Has meaning only for arc and circle. More...
 
void SetArcStart (const wxPoint &aArcStartPoint)
 Initialize the start arc point. More...
 
void SetArcEnd (const wxPoint &aArcEndPoint)
 Initialize the end arc point. More...
 
void SetCenter (const wxPoint &aCenterPoint)
 For arcs and circles: More...
 
void SetArcGeometry (const wxPoint &aStart, const wxPoint &aMid, const wxPoint &aEnd)
 Set the three controlling points for an arc. More...
 
const wxPoint GetFocusPosition () const override
 Similar to GetPosition, but allows items to return their visual center rather than their anchor. More...
 
FOOTPRINTGetParentFootprint () const
 Function GetParentFootprint returns a pointer to the parent footprint, or NULL if PCB_SHAPE does not belong to a footprint. More...
 
const std::vector< wxPoint > & GetBezierPoints () const
 
const std::vector< wxPoint > BuildPolyPointsList () const
 Build and return the list of corners in a std::vector<wxPoint> It must be used only to convert the SHAPE_POLY_SET internal corner buffer to a list of wxPoints, and nothing else, because it duplicates the buffer, that is inefficient to know for instance the corner count. More...
 
int GetPointCount () const
 
SHAPE_POLY_SETGetPolyShape ()
 
const SHAPE_POLY_SETGetPolyShape () const
 
bool IsPolyShapeValid () const
 
void SetPolyShape (const SHAPE_POLY_SET &aShape)
 
void SetBezierPoints (const std::vector< wxPoint > &aPoints)
 
void RebuildBezierToSegmentsPointsList (int aMinSegLen)
 Rebuild the m_BezierPoints vertex list that approximate the Bezier curve by a list of segments Has meaning only for S_CURVE DRAW_SEGMENT shape. More...
 
void SetPolyPoints (const std::vector< wxPoint > &aPoints)
 
std::vector< SHAPE * > MakeEffectiveShapes () const
 Makes a set of SHAPE objects representing the PCB_SHAPE. More...
 
std::shared_ptr< SHAPEGetEffectiveShape (PCB_LAYER_ID aLayer=UNDEFINED_LAYER) const override
 Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes. More...
 
const EDA_RECT GetBoundingBox () const override
 Return the orthogonal bounding box of this object for display purposes. More...
 
bool HitTest (const wxPoint &aPosition, int aAccuracy=0) const override
 Test if aPosition is contained within or on the bounding box of an item. More...
 
bool HitTest (const EDA_RECT &aRect, bool aContained, int aAccuracy=0) const override
 Test if aRect intersects or is contained within the bounding box of an item. More...
 
double GetLength () const
 Function GetLength returns the length of the track using the hypotenuse calculation. More...
 
void Move (const VECTOR2I &aMoveVector)
 
void Rotate (const VECTOR2I &aRotCentre, double aAngle)
 
void Flip (const VECTOR2I &aCentre, bool aFlipLeftRight)
 
void Scale (double aScale)
 
void TransformShapeWithClearanceToPolygon (SHAPE_POLY_SET &aCornerBuffer, PCB_LAYER_ID aLayer, int aClearanceValue, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const override
 Function TransformShapeWithClearanceToPolygon Convert the draw segment to a closed polygon Used in filling zones calculations Circles and arcs are approximated by segments. More...
 
virtual const BOX2I ViewBBox () const override
 Return the bounding box of the item covering all its layers. More...
 
virtual void SwapData (BOARD_ITEM *aImage) override
 Swap data between aItem and aImage. More...
 
void SetParentGroup (PCB_GROUP *aGroup)
 
PCB_GROUPGetParentGroup () const
 
int GetX () const
 
int GetY () const
 
void SetX (int aX)
 
void SetY (int aY)
 
virtual bool IsConnected () const
 Returns information if the object is derived from BOARD_CONNECTED_ITEM. More...
 
virtual bool IsOnCopperLayer () const
 
BOARD_ITEM_CONTAINERGetParent () const
 
virtual PCB_LAYER_ID GetLayer () const
 Return the primary layer this item is on. More...
 
virtual LSET GetLayerSet () const
 Return a std::bitset of all layers on which the item physically resides. More...
 
virtual void SetLayerSet (LSET aLayers)
 
virtual void SetLayer (PCB_LAYER_ID aLayer)
 Set the layer this item is on. More...
 
virtual BOARD_ITEMDuplicate () const
 Create a copy of a of this BOARD_ITEM. More...
 
virtual bool IsOnLayer (PCB_LAYER_ID aLayer) const
 Test to see if this object is on the given layer. More...
 
bool IsTrack () const
 Test to see if this object is a track or via (or microvia). More...
 
virtual bool IsLocked () const
 
virtual void SetLocked (bool aLocked)
 Modify the 'lock' status for of the item. More...
 
void DeleteStructure ()
 Delete this object after removing from its parent if it has one. More...
 
virtual BOARDGetBoard () const
 Return the BOARD in which this BOARD_ITEM resides, or NULL if none. More...
 
wxString GetLayerName () const
 Return the name of the PCB layer on which the item resides. More...
 
virtual void ViewGetLayers (int aLayers[], int &aCount) const override
 Return the all the layers within the VIEW the object is painted on. More...
 
KICAD_T Type () const
 Returns the type of object. More...
 
virtual void SetParent (EDA_ITEM *aParent)
 
bool IsModified () const
 
bool IsNew () const
 
bool IsMoving () const
 
bool IsDragging () const
 
bool IsWireImage () const
 
bool IsSelected () const
 
bool IsEntered () const
 
bool IsResized () const
 
bool IsBrightened () const
 
void SetWireImage ()
 
void SetSelected ()
 
void SetBrightened ()
 
void ClearSelected ()
 
void ClearBrightened ()
 
void SetModified ()
 
int GetState (int type) const
 
void SetState (int type, bool state)
 
STATUS_FLAGS GetStatus () const
 
void SetStatus (STATUS_FLAGS aStatus)
 
void SetFlags (STATUS_FLAGS aMask)
 
void ClearFlags (STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
 
STATUS_FLAGS GetFlags () const
 
bool HasFlag (STATUS_FLAGS aFlag) const
 
STATUS_FLAGS GetEditFlags () const
 
void ClearTempFlags ()
 
void ClearEditFlags ()
 
void SetForceVisible (bool aEnable)
 Set and clear force visible flag used to force the item to be drawn even if it's draw attribute is set to not visible. More...
 
bool IsForceVisible () const
 
virtual SEARCH_RESULT Visit (INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
 May be re-implemented for each derived class in order to handle all the types given by its member data. More...
 
virtual bool Matches (const wxFindReplaceData &aSearchData, void *aAuxData) const
 Compare the item against the search criteria in aSearchData. More...
 
virtual bool Replace (const wxFindReplaceData &aSearchData, void *aAuxData=nullptr)
 Perform a text replace using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
virtual bool IsReplaceable () const
 Override this method in any derived object that supports test find and replace. More...
 
bool operator< (const EDA_ITEM &aItem) const
 Test if another item is less than this object. More...
 
virtual void ViewDraw (int aLayer, VIEW *aView) const
 Draw the parts of the object belonging to layer aLayer. More...
 
VIEW_ITEM_DATA * viewPrivData () const
 
void ClearViewPrivData ()
 
bool Set (PROPERTY_BASE *aProperty, wxAny &aValue)
 
template<typename T >
bool Set (PROPERTY_BASE *aProperty, T aValue)
 
template<typename T >
bool Set (const wxString &aProperty, T aValue)
 
wxAny Get (PROPERTY_BASE *aProperty)
 
template<typename T >
Get (PROPERTY_BASE *aProperty)
 
template<typename T >
boost::optional< T > Get (const wxString &aProperty)
 

Static Public Member Functions

static bool ClassOf (const EDA_ITEM *aItem)
 
static wxString ShowShape (PCB_SHAPE_TYPE_T aShape)
 Convert the enum PCB_SHAPE_TYPE_T integer value to a wxString. More...
 
template<class T >
static SEARCH_RESULT IterateForward (std::deque< T > &aList, INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
 This changes first parameter to avoid the DList and use the main queue instead. More...
 
template<class T >
static SEARCH_RESULT IterateForward (std::vector< T > &aList, INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
 Change first parameter to avoid the DList and use std::vector instead. More...
 
static bool Replace (const wxFindReplaceData &aSearchData, wxString &aText)
 Perform a text replace on aText using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
static bool Sort (const EDA_ITEM *aLeft, const EDA_ITEM *aRight)
 Helper function to be used by the C++ STL sort algorithm for sorting a STL container of EDA_ITEM pointers. More...
 

Public Attributes

wxPoint m_Start0
 Start point or center, relative to footprint origin, orient 0. More...
 
wxPoint m_End0
 End point, relative to footprint origin, orient 0. More...
 
wxPoint m_ThirdPoint0
 End point for an arc. More...
 
wxPoint m_Bezier0_C1
 Bezier Control Point 1, relative to footprint origin, orient 0. More...
 
wxPoint m_Bezier0_C2
 Bezier Control Point 2, relative to footprint origin, orient 0. More...
 
const KIID m_Uuid
 

Static Public Attributes

static wxPoint ZeroOffset
 A value of wxPoint(0,0) which can be passed to the Draw() functions. More...
 

Protected Member Functions

void computeArcBBox (EDA_RECT &aBBox) const
 
const std::vector< wxPoint > buildBezierToSegmentsPointsList (int aMinSegLen) const
 
virtual wxString layerMaskDescribe () const
 Return a string (to be shown to the user) describing a layer mask. More...
 
bool Matches (const wxString &aText, const wxFindReplaceData &aSearchData) const
 Compare aText against search criteria in aSearchData. More...
 

Protected Attributes

int m_width
 
bool m_filled
 
wxPoint m_start
 
wxPoint m_end
 
wxPoint m_thirdPoint
 
PCB_SHAPE_TYPE_T m_shape
 
double m_angle
 
wxPoint m_bezierC1
 
wxPoint m_bezierC2
 
std::vector< wxPoint > m_bezierPoints
 
SHAPE_POLY_SET m_poly
 
PCB_LAYER_ID m_layer
 
PCB_GROUPm_group
 
STATUS_FLAGS m_status
 
EDA_ITEMm_parent
 Linked list: Link (parent struct) More...
 
bool m_forceVisible
 
STATUS_FLAGS m_flags
 

Detailed Description

Definition at line 39 of file fp_shape.h.

Constructor & Destructor Documentation

◆ FP_SHAPE()

FP_SHAPE::FP_SHAPE ( FOOTPRINT parent,
PCB_SHAPE_TYPE_T  aShape = S_SEGMENT 
)

Definition at line 39 of file fp_shape.cpp.

39  :
40  PCB_SHAPE( parent, PCB_FP_SHAPE_T )
41 {
42  m_shape = aShape;
43  m_angle = 0;
44  m_layer = F_SilkS;
45 }
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
double m_angle
Definition: pcb_shape.h:53
PCB_LAYER_ID m_layer
Definition: board_item.h:363
PCB_SHAPE(BOARD_ITEM *aParent=NULL, KICAD_T idtype=PCB_SHAPE_T)
Definition: pcb_shape.cpp:45

References F_SilkS, PCB_SHAPE::m_angle, BOARD_ITEM::m_layer, and PCB_SHAPE::m_shape.

Referenced by Clone().

◆ ~FP_SHAPE()

FP_SHAPE::~FP_SHAPE ( )

Definition at line 48 of file fp_shape.cpp.

49 {
50 }

Member Function Documentation

◆ buildBezierToSegmentsPointsList()

const std::vector< wxPoint > PCB_SHAPE::buildBezierToSegmentsPointsList ( int  aMinSegLen) const
protectedinherited

Definition at line 328 of file pcb_shape.cpp.

329 {
330  std::vector<wxPoint> bezierPoints;
331 
332  // Rebuild the m_BezierPoints vertex list that approximate the Bezier curve
333  std::vector<wxPoint> ctrlPoints = { m_start, m_bezierC1, m_bezierC2, m_end };
334  BEZIER_POLY converter( ctrlPoints );
335  converter.GetPoly( bezierPoints, aMinSegLen );
336 
337  return bezierPoints;
338 }
wxPoint m_end
Definition: pcb_shape.h:49
wxPoint m_start
Definition: pcb_shape.h:48
Bezier curves to polygon converter.
Definition: bezier_curves.h:36
wxPoint m_bezierC1
Definition: pcb_shape.h:54
wxPoint m_bezierC2
Definition: pcb_shape.h:55

References BEZIER_POLY::GetPoly(), PCB_SHAPE::m_bezierC1, PCB_SHAPE::m_bezierC2, PCB_SHAPE::m_end, and PCB_SHAPE::m_start.

Referenced by PCB_SHAPE::MakeEffectiveShapes(), and PCB_SHAPE::RebuildBezierToSegmentsPointsList().

◆ BuildPolyPointsList()

const std::vector< wxPoint > PCB_SHAPE::BuildPolyPointsList ( ) const
inherited

Build and return the list of corners in a std::vector<wxPoint> It must be used only to convert the SHAPE_POLY_SET internal corner buffer to a list of wxPoints, and nothing else, because it duplicates the buffer, that is inefficient to know for instance the corner count.

Definition at line 1206 of file pcb_shape.cpp.

1207 {
1208  std::vector<wxPoint> rv;
1209 
1210  if( m_poly.OutlineCount() )
1211  {
1212  if( m_poly.COutline( 0 ).PointCount() )
1213  {
1214  for ( auto iter = m_poly.CIterate(); iter; iter++ )
1215  rv.emplace_back( iter->x, iter->y );
1216  }
1217  }
1218 
1219  return rv;
1220 }
int OutlineCount() const
Return the number of vertices in a given outline/hole.
int PointCount() const
Function PointCount()
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
CONST_ITERATOR CIterate(int aFirst, int aLast, bool aIterateHoles=false) const
const SHAPE_LINE_CHAIN & COutline(int aIndex) const

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

Referenced by PCB_GRID_HELPER::computeAnchors(), PCB_PARSER::parsePAD(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), PCB_SHAPE::TransformShapeWithClearanceToPolygon(), and PCB_POINT_EDITOR::updatePoints().

◆ ClassOf()

static bool FP_SHAPE::ClassOf ( const EDA_ITEM aItem)
inlinestatic

Definition at line 49 of file fp_shape.h.

50  {
51  return aItem && PCB_FP_SHAPE_T == aItem->Type();
52  }
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:162

References PCB_FP_SHAPE_T, and EDA_ITEM::Type().

◆ ClearBrightened()

void EDA_ITEM::ClearBrightened ( )
inlineinherited

◆ ClearEditFlags()

◆ ClearFlags()

void EDA_ITEM::ClearFlags ( STATUS_FLAGS  aMask = EDA_ITEM_ALL_FLAGS)
inlineinherited

Definition at line 203 of file eda_item.h.

203 { m_flags &= ~aMask; }
STATUS_FLAGS m_flags
Definition: eda_item.h:530

References EDA_ITEM::m_flags.

Referenced by FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), PNS_KICAD_IFACE::AddItem(), SCH_EDIT_FRAME::AddItemToScreenAndUndoList(), SCH_MOVE_TOOL::AlignElements(), FOOTPRINT::BuildPolyCourtyards(), EDA_ITEM::ClearBrightened(), EDA_ITEM::ClearEditFlags(), EDA_ITEM::ClearSelected(), EDA_ITEM::ClearTempFlags(), ConvertOutlineToPolygon(), SCH_EDIT_FRAME::ConvertPart(), SYMBOL_EDITOR_EDIT_TOOL::Copy(), FOOTPRINT_EDITOR_CONTROL::CreateFootprint(), SYMBOL_EDITOR_PIN_TOOL::CreateImagePins(), MICROWAVE_TOOL::createMicrowaveInductor(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), KIGFX::SCH_PAINTER::draw(), SYMBOL_EDITOR_EDIT_TOOL::Duplicate(), SCH_ITEM::Duplicate(), PCB_EDIT_FRAME::ExchangeFootprint(), PCB_SELECTION_TOOL::ExitGroup(), SYMBOL_EDIT_FRAME::GetSymbolFromRedoList(), SYMBOL_EDIT_FRAME::GetSymbolFromUndoList(), FOOTPRINT_EDITOR_CONTROL::ImportFootprint(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromLibrary(), EE_SELECTION_TOOL::Main(), EE_SELECTION_TOOL::narrowSelection(), FOOTPRINT_EDITOR_CONTROL::NewFootprint(), FOOTPRINT_EDIT_FRAME::OpenProjectFiles(), PCB_BASE_FRAME::PlaceFootprint(), SYMBOL_EDITOR_PIN_TOOL::PlacePin(), DRAWING_TOOL::PlaceText(), BOARD_COMMIT::Push(), PCB_SELECTION_TOOL::RebuildSelection(), SCH_EDIT_TOOL::RepeatDrawItem(), SYMBOL_EDITOR_PIN_TOOL::RepeatPin(), SYMBOL_EDIT_FRAME::RollbackSymbolFromUndo(), SCH_EDIT_FRAME::SaveCopyForRepeatItem(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), SCH_SEXPR_PLUGIN_CACHE::savePin(), SCH_EDIT_FRAME::SelectUnit(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ ClearSelected()

◆ ClearTempFlags()

void EDA_ITEM::ClearTempFlags ( )
inlineinherited

Definition at line 215 of file eda_item.h.

216  {
218  DO_NOT_DRAW );
219  }
#define TEMP_SELECTED
flag indicating that the structure has already selected
Definition: eda_item.h:114
#define IS_LINKED
Used in calculation to mark linked items (temporary use)
Definition: eda_item.h:103
#define CANDIDATE
flag indicating that the structure is connected
Definition: eda_item.h:116
#define DO_NOT_DRAW
Used to disable draw function.
Definition: eda_item.h:118
#define STARTPOINT
When a line is selected, these flags indicate which.
Definition: eda_item.h:111
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:203
#define ENDPOINT
ends. (Used to support dragging.)
Definition: eda_item.h:112
#define SKIP_STRUCT
flag indicating that the structure should be ignored
Definition: eda_item.h:117

References CANDIDATE, EDA_ITEM::ClearFlags(), DO_NOT_DRAW, ENDPOINT, IS_LINKED, SKIP_STRUCT, STARTPOINT, and TEMP_SELECTED.

Referenced by SCH_EDIT_FRAME::PutDataInPreviousState().

◆ ClearViewPrivData()

void KIGFX::VIEW_ITEM::ClearViewPrivData ( )
inlineinherited

Definition at line 148 of file view_item.h.

149  {
150  m_viewPrivData = nullptr;
151  }
VIEW_ITEM_DATA * m_viewPrivData
Definition: view_item.h:156

References KIGFX::VIEW_ITEM::m_viewPrivData.

Referenced by KIGFX::VIEW::OnDestroy().

◆ Clone()

EDA_ITEM * FP_SHAPE::Clone ( ) const
overridevirtual

Create a duplicate of this item with linked list members set to NULL.

The default version will return NULL in release builds and likely crash the program. In debug builds, a warning message indicating the derived class has not implemented cloning. This really should be a pure virtual function. Due to the fact that there are so many objects derived from EDA_ITEM, the decision was made to return NULL until all the objects derived from EDA_ITEM implement cloning. Once that happens, this function should be made pure.

Returns
A clone of the item.

Reimplemented from PCB_SHAPE.

Definition at line 135 of file fp_shape.cpp.

136 {
137  return new FP_SHAPE( *this );
138 }
FP_SHAPE(FOOTPRINT *parent, PCB_SHAPE_TYPE_T aShape=S_SEGMENT)
Definition: fp_shape.cpp:39

References FP_SHAPE().

◆ computeArcBBox()

void PCB_SHAPE::computeArcBBox ( EDA_RECT aBBox) const
protectedinherited

Definition at line 1007 of file pcb_shape.cpp.

1008 {
1009  // Do not include the center, which is not necessarily
1010  // inside the BB of a arc with a small angle
1011  aBBox.SetOrigin( m_end );
1012 
1013  wxPoint end = m_end;
1014  RotatePoint( &end, m_start, -m_angle );
1015  aBBox.Merge( end );
1016 
1017  // Determine the starting quarter
1018  // 0 right-bottom
1019  // 1 left-bottom
1020  // 2 left-top
1021  // 3 right-top
1022  unsigned int quarter = 0; // assume right-bottom
1023 
1024  if( m_end.x < m_start.x )
1025  {
1026  if( m_end.y <= m_start.y )
1027  quarter = 2;
1028  else // ( m_End.y > m_Start.y )
1029  quarter = 1;
1030  }
1031  else if( m_end.x >= m_start.x )
1032  {
1033  if( m_end.y < m_start.y )
1034  quarter = 3;
1035  else if( m_end.x == m_start.x )
1036  quarter = 1;
1037  }
1038 
1039  int radius = GetRadius();
1040  int angle = (int) GetArcAngleStart() % 900 + m_angle;
1041  bool directionCW = ( m_angle > 0 ); // Is the direction of arc clockwise?
1042 
1043  // Make the angle positive, so we go clockwise and merge points belonging to the arc
1044  if( !directionCW )
1045  {
1046  angle = 900 - angle;
1047  quarter = ( quarter + 3 ) % 4; // -1 modulo arithmetic
1048  }
1049 
1050  while( angle > 900 )
1051  {
1052  switch( quarter )
1053  {
1054  case 0: aBBox.Merge( wxPoint( m_start.x, m_start.y + radius ) ); break; // down
1055  case 1: aBBox.Merge( wxPoint( m_start.x - radius, m_start.y ) ); break; // left
1056  case 2: aBBox.Merge( wxPoint( m_start.x, m_start.y - radius ) ); break; // up
1057  case 3: aBBox.Merge( wxPoint( m_start.x + radius, m_start.y ) ); break; // right
1058  }
1059 
1060  if( directionCW )
1061  ++quarter;
1062  else
1063  quarter += 3; // -1 modulo arithmetic
1064 
1065  quarter %= 4;
1066  angle -= 900;
1067  }
1068 
1069  aBBox.Inflate( m_width ); // Technically m_width / 2, but it doesn't hurt to have the
1070  // bounding box a bit large to account for drawing clearances,
1071  // etc.
1072 }
wxPoint m_end
Definition: pcb_shape.h:49
void Merge(const EDA_RECT &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: eda_rect.cpp:431
int GetRadius() const
Function GetRadius returns the radius of this item Has meaning only for arc and circle.
Definition: pcb_shape.h:201
double GetArcAngleStart() const
function GetArcAngleStart()
Definition: pcb_shape.cpp:413
void SetOrigin(const wxPoint &pos)
Definition: eda_rect.h:126
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:228
double m_angle
Definition: pcb_shape.h:53
wxPoint m_start
Definition: pcb_shape.h:48
int m_width
Definition: pcb_shape.h:46
static DIRECTION_45::AngleType angle(const VECTOR2I &a, const VECTOR2I &b)
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Inflate the rectangle horizontally by dx and vertically by dy.
Definition: eda_rect.cpp:363

References PNS::angle(), PCB_SHAPE::GetArcAngleStart(), PCB_SHAPE::GetRadius(), EDA_RECT::Inflate(), PCB_SHAPE::m_angle, PCB_SHAPE::m_end, PCB_SHAPE::m_start, PCB_SHAPE::m_width, EDA_RECT::Merge(), RotatePoint(), and EDA_RECT::SetOrigin().

Referenced by PCB_SHAPE::GetBoundingBox(), and PCB_SHAPE::ViewBBox().

◆ DeleteStructure()

void BOARD_ITEM::DeleteStructure ( )
inherited

Delete this object after removing from its parent if it has one.

Definition at line 113 of file board_item.cpp.

114 {
115  BOARD_ITEM_CONTAINER* parent = GetParent();
116 
117  if( parent )
118  parent->Remove( this );
119 
120  delete this;
121 }
virtual void Remove(BOARD_ITEM *aItem, REMOVE_MODE aMode=REMOVE_MODE::NORMAL)=0
Removes an item from the container.
Abstract interface for BOARD_ITEMs capable of storing other items inside.
BOARD_ITEM_CONTAINER * GetParent() const
Definition: board_item.h:168

References BOARD_ITEM::GetParent(), and BOARD_ITEM_CONTAINER::Remove().

Referenced by BOARD::PadDelete(), and DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow().

◆ Duplicate()

virtual BOARD_ITEM* BOARD_ITEM::Duplicate ( ) const
inlinevirtualinherited

Create a copy of a of this BOARD_ITEM.

Reimplemented in FOOTPRINT.

Definition at line 202 of file board_item.h.

203  {
204  EDA_ITEM* dupe = Clone();
205  const_cast<KIID&>( dupe->m_Uuid ) = KIID();
206 
207  return static_cast<BOARD_ITEM*>( dupe );
208  }
virtual EDA_ITEM * Clone() const
Create a duplicate of this item with linked list members set to NULL.
Definition: eda_item.cpp:97
Definition: kiid.h:44
const KIID m_Uuid
Definition: eda_item.h:524
A base class for most all the KiCad significant classes used in schematics and boards.
Definition: eda_item.h:149

References EDA_ITEM::Clone(), and EDA_ITEM::m_Uuid.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), PCB_GROUP::DeepDuplicate(), KIGFX::PCB_PAINTER::draw(), CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarText(), EDIT_TOOL::Duplicate(), and ARRAY_CREATOR::Invoke().

◆ Flip() [1/2]

void FP_SHAPE::Flip ( const wxPoint &  aCentre,
bool  aFlipLeftRight 
)
overridevirtual

Flip entity relative to aCentre.

The item is mirrored, and layer changed to the paired corresponding layer if it is on a paired layer. This function should be called only from FOOTPRINT::Flip because it is not usual to flip an item alone, without flipping the parent footprint (consider Mirror() instead).

Reimplemented from PCB_SHAPE.

Definition at line 157 of file fp_shape.cpp.

158 {
159  wxPoint pt( 0, 0 );
160 
161  switch( GetShape() )
162  {
163  case S_ARC:
164  // Update arc angle but do not yet update m_ThirdPoint0 and m_thirdPoint,
165  // arc center and start point must be updated before calculation arc end.
166  SetAngle( -GetAngle(), false );
168 
169  default:
170  case S_SEGMENT:
171  case S_CURVE:
172  // If Start0 and Start are equal (ie: Footprint Editor), then flip both sets around the
173  // centre point.
174  if( m_start == m_Start0 )
175  pt = aCentre;
176 
177  if( aFlipLeftRight )
178  {
179  MIRROR( m_start.x, aCentre.x );
180  MIRROR( m_end.x, aCentre.x );
181  MIRROR( m_thirdPoint.x, aCentre.x );
182  MIRROR( m_bezierC1.x, aCentre.x );
183  MIRROR( m_bezierC2.x, aCentre.x );
184  MIRROR( m_Start0.x, pt.x );
185  MIRROR( m_End0.x, pt.x );
186  MIRROR( m_ThirdPoint0.x, pt.x );
187  MIRROR( m_Bezier0_C1.x, pt.x );
188  MIRROR( m_Bezier0_C2.x, pt.x );
189  }
190  else
191  {
192  MIRROR( m_start.y, aCentre.y );
193  MIRROR( m_end.y, aCentre.y );
194  MIRROR( m_thirdPoint.y, aCentre.y );
195  MIRROR( m_bezierC1.y, aCentre.y );
196  MIRROR( m_bezierC2.y, aCentre.y );
197  MIRROR( m_Start0.y, pt.y );
198  MIRROR( m_End0.y, pt.y );
199  MIRROR( m_ThirdPoint0.y, pt.y );
200  MIRROR( m_Bezier0_C1.y, pt.y );
201  MIRROR( m_Bezier0_C2.y, pt.y );
202  }
203 
205  break;
206 
207  case S_POLYGON:
208  // polygon corners coordinates are relative to the footprint position, orientation 0
209  m_poly.Mirror( aFlipLeftRight, !aFlipLeftRight );
210  break;
211  }
212 
213  SetLayer( FlipLayer( GetLayer(), GetBoard()->GetCopperLayerCount() ) );
214 }
wxPoint m_end
Definition: pcb_shape.h:49
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition: board_item.h:194
PCB_LAYER_ID FlipLayer(PCB_LAYER_ID aLayerId, int aCopperLayersCount)
Definition: lset.cpp:521
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
usual segment : line with rounded ends
Definition: board_item.h:50
Arcs (with rounded ends)
Definition: board_item.h:52
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83
void Mirror(bool aX=true, bool aY=false, const VECTOR2I &aRef={ 0, 0 })
Mirror the line points about y or x (or both)
void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
Definition: mirror.h:40
wxPoint m_thirdPoint
Definition: pcb_shape.h:50
wxPoint m_ThirdPoint0
End point for an arc.
Definition: fp_shape.h:162
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
void SetAngle(double aAngle, bool aUpdateEnd=true) override
Sets the angle for arcs, and normalizes it within the range 0 - 360 degrees.
Definition: fp_shape.cpp:141
virtual BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:46
wxPoint m_End0
End point, relative to footprint origin, orient 0.
Definition: fp_shape.h:161
wxPoint m_Start0
Start point or center, relative to footprint origin, orient 0.
Definition: fp_shape.h:160
wxPoint m_Bezier0_C2
Bezier Control Point 2, relative to footprint origin, orient 0.
Definition: fp_shape.h:164
wxPoint m_start
Definition: pcb_shape.h:48
int m_width
Definition: pcb_shape.h:46
double GetAngle() const
Definition: pcb_shape.h:127
void RebuildBezierToSegmentsPointsList(int aMinSegLen)
Rebuild the m_BezierPoints vertex list that approximate the Bezier curve by a list of segments Has me...
Definition: pcb_shape.cpp:315
wxPoint m_bezierC1
Definition: pcb_shape.h:54
PCB_SHAPE_TYPE_T GetShape() const
Definition: pcb_shape.h:130
wxPoint m_Bezier0_C1
Bezier Control Point 1, relative to footprint origin, orient 0.
Definition: fp_shape.h:163
wxPoint m_bezierC2
Definition: pcb_shape.h:55
Bezier Curve.
Definition: board_item.h:55
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:173

References FlipLayer(), PCB_SHAPE::GetAngle(), BOARD_ITEM::GetBoard(), BOARD_ITEM::GetLayer(), PCB_SHAPE::GetShape(), KI_FALLTHROUGH, m_Bezier0_C1, m_Bezier0_C2, PCB_SHAPE::m_bezierC1, PCB_SHAPE::m_bezierC2, PCB_SHAPE::m_end, m_End0, PCB_SHAPE::m_poly, PCB_SHAPE::m_start, m_Start0, PCB_SHAPE::m_thirdPoint, m_ThirdPoint0, PCB_SHAPE::m_width, MIRROR(), SHAPE_POLY_SET::Mirror(), PCB_SHAPE::RebuildBezierToSegmentsPointsList(), S_ARC, S_CURVE, S_POLYGON, S_SEGMENT, SetAngle(), and BOARD_ITEM::SetLayer().

◆ Flip() [2/2]

void BOARD_ITEM::Flip ( const VECTOR2I aCentre,
bool  aFlipLeftRight 
)
inlineinherited

Definition at line 315 of file board_item.h.

316  {
317  Flip( wxPoint( aCentre.x, aCentre.y ), aFlipLeftRight );
318  }
virtual void Flip(const wxPoint &aCentre, bool aFlipLeftRight)
Flip this object, i.e.
Definition: board_item.h:310

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

◆ Get() [1/3]

wxAny INSPECTABLE::Get ( PROPERTY_BASE aProperty)
inlineinherited

Definition at line 84 of file inspectable.h.

85  {
87  TYPE_ID thisType = TYPE_HASH( *this );
88  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
89  return object ? aProperty->getter( object ) : wxAny();
90  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:66
#define TYPE_HASH(x)
Definition: property.h:57
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:43
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
virtual wxAny getter(void *aObject) const =0
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:63
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_BASE::getter(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

Referenced by CLASS_D_DESC::CLASS_D_DESC(), PCB_EXPR_VAR_REF::GetValue(), and PAD_DESC::PAD_DESC().

◆ Get() [2/3]

template<typename T >
T INSPECTABLE::Get ( PROPERTY_BASE aProperty)
inlineinherited

Definition at line 93 of file inspectable.h.

94  {
96  TYPE_ID thisType = TYPE_HASH( *this );
97  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
98  return object ? aProperty->get<T>( object ) : T();
99  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:66
#define TYPE_HASH(x)
Definition: property.h:57
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:43
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:63
T get(void *aObject)
Definition: property.h:266
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_BASE::get(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Get() [3/3]

template<typename T >
boost::optional<T> INSPECTABLE::Get ( const wxString &  aProperty)
inlineinherited

Definition at line 102 of file inspectable.h.

103  {
105  TYPE_ID thisType = TYPE_HASH( *this );
106  PROPERTY_BASE* prop = propMgr.GetProperty( thisType, aProperty );
107  boost::optional<T> ret;
108 
109  if( prop )
110  {
111  void* object = propMgr.TypeCast( this, thisType, prop->OwnerHash() );
112 
113  if( object )
114  ret = prop->get<T>( object );
115  }
116 
117  return ret;
118  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:66
#define TYPE_HASH(x)
Definition: property.h:57
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:43
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
PROPERTY_BASE * GetProperty(TYPE_ID aType, const wxString &aProperty) const
Return a property for a specific type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:63
T get(void *aObject)
Definition: property.h:266
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_BASE::get(), PROPERTY_MANAGER::GetProperty(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ GetAngle()

◆ GetArcAngleEnd()

double PCB_SHAPE::GetArcAngleEnd ( ) const
inherited

function GetArcAngleEnd()

Returns
the angle of the ending point of this arc, between 0 and 3600 in 0.1 deg

Definition at line 427 of file pcb_shape.cpp.

428 {
429  // due to the Y axis orient atan2 needs - y value
430  double angleStart = ArcTangente( GetArcEnd().y - GetCenter().y,
431  GetArcEnd().x - GetCenter().x );
432 
433  // Normalize it to 0 ... 360 deg, to avoid discontinuity for angles near 180 deg
434  // because 180 deg and -180 are very near angles when ampping betewwen -180 ... 180 deg.
435  // and this is not easy to handle in calculations
436  NORMALIZE_ANGLE_POS( angleStart );
437 
438  return angleStart;
439 }
wxPoint GetArcEnd() const
Definition: pcb_shape.cpp:373
void NORMALIZE_ANGLE_POS(T &Angle)
Definition: trigo.h:288
wxPoint GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Definition: pcb_shape.cpp:341
double ArcTangente(int dy, int dx)
Definition: trigo.cpp:182

References ArcTangente(), PCB_SHAPE::GetArcEnd(), PCB_SHAPE::GetCenter(), and NORMALIZE_ANGLE_POS().

◆ GetArcAngleStart()

double PCB_SHAPE::GetArcAngleStart ( ) const
inherited

function GetArcAngleStart()

Returns
the angle of the starting point of this arc, between 0 and 3600 in 0.1 deg

Definition at line 413 of file pcb_shape.cpp.

414 {
415  // due to the Y axis orient atan2 needs - y value
416  double angleStart = ArcTangente( GetArcStart().y - GetCenter().y,
417  GetArcStart().x - GetCenter().x );
418 
419  // Normalize it to 0 ... 360 deg, to avoid discontinuity for angles near 180 deg
420  // because 180 deg and -180 are very near angles when ampping betewwen -180 ... 180 deg.
421  // and this is not easy to handle in calculations
422  NORMALIZE_ANGLE_POS( angleStart );
423 
424  return angleStart;
425 }
void NORMALIZE_ANGLE_POS(T &Angle)
Definition: trigo.h:288
wxPoint GetArcStart() const
Definition: pcb_shape.h:179
wxPoint GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Definition: pcb_shape.cpp:341
double ArcTangente(int dy, int dx)
Definition: trigo.cpp:182

References ArcTangente(), PCB_SHAPE::GetArcStart(), PCB_SHAPE::GetCenter(), and NORMALIZE_ANGLE_POS().

Referenced by PCB_SHAPE::computeArcBBox(), KIGFX::PCB_PAINTER::draw(), and PCB_SHAPE::HitTest().

◆ GetArcEnd()

wxPoint PCB_SHAPE::GetArcEnd ( ) const
inherited

Definition at line 373 of file pcb_shape.cpp.

374 {
375  wxPoint endPoint( m_end ); // start of arc
376 
377  switch( m_shape )
378  {
379  case S_ARC:
380  endPoint = m_thirdPoint;
381  break;
382 
383  default:
384  break;
385  }
386 
387  return endPoint; // after rotation, the end of the arc.
388 }
wxPoint m_end
Definition: pcb_shape.h:49
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
Arcs (with rounded ends)
Definition: board_item.h:52
wxPoint m_thirdPoint
Definition: pcb_shape.h:50

References PCB_SHAPE::m_end, PCB_SHAPE::m_shape, PCB_SHAPE::m_thirdPoint, and S_ARC.

Referenced by PCB_GRID_HELPER::computeAnchors(), ConvertOutlineToPolygon(), PCB_POINT_EDITOR::editArcEndpointKeepTangent(), PCB_SHAPE::GetArcAngleEnd(), PCB_POINT_EDITOR::makePoints(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), PCB_SHAPE::TransformShapeWithClearanceToPolygon(), and PCB_POINT_EDITOR::updatePoints().

◆ GetArcMid()

wxPoint PCB_SHAPE::GetArcMid ( ) const
inherited

Definition at line 391 of file pcb_shape.cpp.

392 {
393  wxPoint endPoint( m_end );
394 
395  switch( m_shape )
396  {
397  case S_ARC:
398  // rotate the starting point of the arc, given by m_End, through half
399  // the angle m_Angle to get the middle of the arc.
400  // m_Start is the arc centre
401  endPoint = m_end; // m_End = start point of arc
402  RotatePoint( &endPoint, m_start, -m_angle / 2.0 );
403  break;
404 
405  default:
406  break;
407  }
408 
409  return endPoint; // after rotation, the end of the arc.
410 }
wxPoint m_end
Definition: pcb_shape.h:49
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
Arcs (with rounded ends)
Definition: board_item.h:52
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:228
double m_angle
Definition: pcb_shape.h:53
wxPoint m_start
Definition: pcb_shape.h:48

References PCB_SHAPE::m_angle, PCB_SHAPE::m_end, PCB_SHAPE::m_shape, PCB_SHAPE::m_start, RotatePoint(), and S_ARC.

Referenced by PCB_GRID_HELPER::computeAnchors(), PCB_POINT_EDITOR::editArcMidKeepEndpoints(), PCB_POINT_EDITOR::makePoints(), PCB_SHAPE::TransformShapeWithClearanceToPolygon(), and PCB_POINT_EDITOR::updatePoints().

◆ GetArcStart()

◆ GetBezControl1()

◆ GetBezControl2()

◆ GetBezier0_C1()

const wxPoint& FP_SHAPE::GetBezier0_C1 ( ) const
inline

Definition at line 121 of file fp_shape.h.

121 { return m_Bezier0_C1; }
wxPoint m_Bezier0_C1
Bezier Control Point 1, relative to footprint origin, orient 0.
Definition: fp_shape.h:163

References m_Bezier0_C1.

Referenced by PCB_IO::format().

◆ GetBezier0_C2()

const wxPoint& FP_SHAPE::GetBezier0_C2 ( ) const
inline

Definition at line 124 of file fp_shape.h.

124 { return m_Bezier0_C2; }
wxPoint m_Bezier0_C2
Bezier Control Point 2, relative to footprint origin, orient 0.
Definition: fp_shape.h:164

References m_Bezier0_C2.

Referenced by PCB_IO::format().

◆ GetBezierPoints()

const std::vector<wxPoint>& PCB_SHAPE::GetBezierPoints ( ) const
inlineinherited

Definition at line 253 of file pcb_shape.h.

253 { return m_bezierPoints; }
std::vector< wxPoint > m_bezierPoints
Definition: pcb_shape.h:57

References PCB_SHAPE::m_bezierPoints.

Referenced by GRAPHICS_CLEANER::areEquivalent(), ConvertOutlineToPolygon(), and GRAPHICS_CLEANER::isNullSegment().

◆ GetBoard()

BOARD * BOARD_ITEM::GetBoard ( ) const
virtualinherited

Return the BOARD in which this BOARD_ITEM resides, or NULL if none.

Definition at line 46 of file board_item.cpp.

47 {
48  if( Type() == PCB_T )
49  return (BOARD*) this;
50 
51  BOARD_ITEM* parent = GetParent();
52 
53  if( parent )
54  return parent->GetBoard();
55 
56  return NULL;
57 }
Definition: typeinfo.h:84
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:82
#define NULL
virtual BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:46
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
BOARD_ITEM_CONTAINER * GetParent() const
Definition: board_item.h:168
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:162

References BOARD_ITEM::GetBoard(), BOARD_ITEM::GetParent(), NULL, PCB_T, and EDA_ITEM::Type().

Referenced by PAD::BuildEffectivePolygon(), PAD::BuildEffectiveShapes(), ZONE::BuildSmoothedPoly(), KIGFX::PCB_PAINTER::draw(), exprFromTo(), VIA::FlashLayer(), PAD::FlashLayer(), PCB_TARGET::Flip(), PCB_TEXT::Flip(), TRACK::Flip(), Flip(), FP_TEXT::Flip(), DIMENSION_BASE::Flip(), ARC::Flip(), PCB_SHAPE::Flip(), VIA::Flip(), ZONE::Flip(), BOARD_ITEM::GetBoard(), FOOTPRINT::GetBoundingBox(), FOOTPRINT::GetBoundingHull(), BOARD_CONNECTED_ITEM::GetEffectiveNetclass(), ZONE::GetInteractingZones(), BOARD_ITEM::GetLayerName(), VIA::GetMinAnnulus(), PCB_DRAW_PANEL_GAL::GetMsgPanelInfo(), ZONE::GetMsgPanelInfo(), NETINFO_ITEM::GetMsgPanelInfo(), TRACK::GetMsgPanelInfo(), TRACK::GetMsgPanelInfoBase_Common(), BOARD_CONNECTED_ITEM::GetNetClass(), BOARD_CONNECTED_ITEM::GetNetnameMsg(), BOARD_CONNECTED_ITEM::GetOwnClearance(), ZONE::GetSelectMenuText(), DRC_ENGINE::GetShape(), FP_TEXT::GetShownText(), PAD::GetSolderMaskMargin(), PAD::GetSolderPasteMargin(), BOARD::GetTrackLength(), TRACK::GetWidthConstraints(), insideArea(), insideCourtyard(), isDiffPair(), BOARD_ITEM::layerMaskDescribe(), VIA::layerMaskDescribe(), CONVERT_TOOL::makePolysFromCircles(), PAD::MergePrimitivesAsPolygon(), EAGLE_PLUGIN::packageWire(), PCB_BASE_EDIT_FRAME::PutDataInPreviousState(), BOARD::ResolveDRCExclusions(), BOARD_CONNECTED_ITEM::SetNetCode(), DIALOG_FOOTPRINT_FP_EDITOR::TransferDataToWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataToWindow(), ZONE::TransformSmoothedOutlineToPolygon(), ZONE::TransformSolidAreasShapesToPolygon(), TRACK::ViewBBox(), FOOTPRINT::ViewBBox(), VIA::ViewGetLOD(), and PAD::ViewGetLOD().

◆ GetBoundingBox()

const EDA_RECT PCB_SHAPE::GetBoundingBox ( ) const
overridevirtualinherited

Return the orthogonal bounding box of this object for display purposes.

This box should be an enclosing perimeter for visible components of this object, and the units should be in the pcb or schematic coordinate system. It is OK to overestimate the size by a few counts.

Reimplemented from EDA_ITEM.

Definition at line 568 of file pcb_shape.cpp.

569 {
570  EDA_RECT bbox;
571 
572  bbox.SetOrigin( m_start );
573 
574  switch( m_shape )
575  {
576  case S_RECT:
577  {
578  std::vector<wxPoint> pts = GetRectCorners();
579 
580  bbox = EDA_RECT(); // re-init for merging
581 
582  for( wxPoint& pt : pts )
583  bbox.Merge( pt );
584  }
585  break;
586 
587  case S_SEGMENT:
588  bbox.SetEnd( m_end );
589  break;
590 
591  case S_CIRCLE:
592  bbox.Inflate( GetRadius() );
593  break;
594 
595  case S_ARC:
596  computeArcBBox( bbox );
597  break;
598 
599  case S_POLYGON:
600  {
601  if( m_poly.IsEmpty() )
602  break;
603 
604  FOOTPRINT* parentFootprint = GetParentFootprint();
605  bbox = EDA_RECT(); // re-init for merging
606 
607  for( auto iter = m_poly.CIterate(); iter; iter++ )
608  {
609  wxPoint pt( iter->x, iter->y );
610 
611  if( parentFootprint ) // Transform, if we belong to a footprint
612  {
613  RotatePoint( &pt, parentFootprint->GetOrientation() );
614  pt += parentFootprint->GetPosition();
615  }
616 
617  bbox.Merge( pt );
618  }
619  }
620  break;
621 
622  case S_CURVE:
623  bbox.Merge( m_bezierC1 );
624  bbox.Merge( m_bezierC2 );
625  bbox.Merge( m_end );
626  break;
627 
628  default:
629  wxFAIL_MSG( "PCB_SHAPE::GetBoundingBox not implemented for "
631  break;
632  }
633 
634  bbox.Inflate( m_width / 2 );
635  bbox.Normalize();
636 
637  return bbox;
638 }
wxPoint m_end
Definition: pcb_shape.h:49
void Merge(const EDA_RECT &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: eda_rect.cpp:431
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
int GetRadius() const
Function GetRadius returns the radius of this item Has meaning only for arc and circle.
Definition: pcb_shape.h:201
bool IsEmpty() const
std::vector< wxPoint > GetRectCorners() const
Definition: pcb_shape.cpp:970
void computeArcBBox(EDA_RECT &aBBox) const
Definition: pcb_shape.cpp:1007
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
double GetOrientation() const
Definition: footprint.h:186
void SetOrigin(const wxPoint &pos)
Definition: eda_rect.h:126
usual segment : line with rounded ends
Definition: board_item.h:50
Arcs (with rounded ends)
Definition: board_item.h:52
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:228
segment with non rounded ends
Definition: board_item.h:51
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
void SetEnd(int x, int y)
Definition: eda_rect.h:187
static wxString PCB_SHAPE_TYPE_T_asString(PCB_SHAPE_TYPE_T a)
Definition: board_item.h:59
CONST_ITERATOR CIterate(int aFirst, int aLast, bool aIterateHoles=false) const
wxPoint m_start
Definition: pcb_shape.h:48
void Normalize()
Ensures that the height ant width are positive.
Definition: eda_rect.cpp:35
int m_width
Definition: pcb_shape.h:46
FOOTPRINT * GetParentFootprint() const
Function GetParentFootprint returns a pointer to the parent footprint, or NULL if PCB_SHAPE does not ...
Definition: pcb_shape.cpp:478
Handle the component boundary box.
Definition: eda_rect.h:42
wxPoint GetPosition() const override
Definition: footprint.h:182
ring
Definition: board_item.h:53
wxPoint m_bezierC1
Definition: pcb_shape.h:54
wxPoint m_bezierC2
Definition: pcb_shape.h:55
Bezier Curve.
Definition: board_item.h:55
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Inflate the rectangle horizontally by dx and vertically by dy.
Definition: eda_rect.cpp:363

References SHAPE_POLY_SET::CIterate(), PCB_SHAPE::computeArcBBox(), FOOTPRINT::GetOrientation(), PCB_SHAPE::GetParentFootprint(), FOOTPRINT::GetPosition(), PCB_SHAPE::GetRadius(), PCB_SHAPE::GetRectCorners(), EDA_RECT::Inflate(), SHAPE_POLY_SET::IsEmpty(), PCB_SHAPE::m_bezierC1, PCB_SHAPE::m_bezierC2, PCB_SHAPE::m_end, PCB_SHAPE::m_poly, PCB_SHAPE::m_shape, PCB_SHAPE::m_start, PCB_SHAPE::m_width, EDA_RECT::Merge(), EDA_RECT::Normalize(), PCB_SHAPE_TYPE_T_asString(), RotatePoint(), S_ARC, S_CIRCLE, S_CURVE, S_POLYGON, S_RECT, S_SEGMENT, EDA_RECT::SetEnd(), and EDA_RECT::SetOrigin().

Referenced by BOARD_ADAPTER::addShapeWithClearance(), PCB_SHAPE::GetCenter(), and PCB_SHAPE::HitTest().

◆ GetCenter()

wxPoint PCB_SHAPE::GetCenter ( ) const
overridevirtualinherited

This defaults to the center of the bounding box if not overridden.

Returns
center point of the item

Reimplemented from BOARD_ITEM.

Definition at line 341 of file pcb_shape.cpp.

342 {
343  wxPoint c;
344 
345  switch( m_shape )
346  {
347  case S_ARC:
348  case S_CIRCLE:
349  c = m_start;
350  break;
351 
352  case S_SEGMENT:
353  // Midpoint of the line
354  c = ( GetStart() + GetEnd() ) / 2;
355  break;
356 
357  case S_POLYGON:
358  case S_RECT:
359  case S_CURVE:
360  c = GetBoundingBox().Centre();
361  break;
362 
363  default:
364  wxFAIL_MSG( "PCB_SHAPE::GetCentre not implemented for "
366  break;
367  }
368 
369  return c;
370 }
const wxPoint & GetEnd() const
Function GetEnd returns the ending point of the graphic.
Definition: pcb_shape.h:156
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
usual segment : line with rounded ends
Definition: board_item.h:50
Arcs (with rounded ends)
Definition: board_item.h:52
segment with non rounded ends
Definition: board_item.h:51
static wxString PCB_SHAPE_TYPE_T_asString(PCB_SHAPE_TYPE_T a)
Definition: board_item.h:59
const wxPoint & GetStart() const
Function GetStart returns the starting point of the graphic.
Definition: pcb_shape.h:145
wxPoint m_start
Definition: pcb_shape.h:48
const EDA_RECT GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition: pcb_shape.cpp:568
wxPoint Centre() const
Definition: eda_rect.h:60
ring
Definition: board_item.h:53
Bezier Curve.
Definition: board_item.h:55

References EDA_RECT::Centre(), PCB_SHAPE::GetBoundingBox(), PCB_SHAPE::GetEnd(), PCB_SHAPE::GetStart(), PCB_SHAPE::m_shape, PCB_SHAPE::m_start, PCB_SHAPE_TYPE_T_asString(), S_ARC, S_CIRCLE, S_CURVE, S_POLYGON, S_RECT, and S_SEGMENT.

Referenced by BOARD_ADAPTER::addShapeWithClearance(), GRAPHICS_CLEANER::areEquivalent(), PCB_GRID_HELPER::computeAnchors(), ConvertOutlineToPolygon(), export_vrml_drawsegment(), PCB_SHAPE::GetArcAngleEnd(), PCB_SHAPE::GetArcAngleStart(), PCB_SHAPE::GetFocusPosition(), PCB_SHAPE::HitTest(), idf_export_outline(), GRAPHICS_CLEANER::isNullSegment(), PCB_SHAPE::MakeEffectiveShapes(), PCB_POINT_EDITOR::makePoints(), EAGLE_PLUGIN::packageRectangle(), PCB_PARSER::parsePAD(), PCB_SHAPE::TransformShapeWithClearanceToPolygon(), PCB_POINT_EDITOR::updateItem(), and PCB_POINT_EDITOR::updatePoints().

◆ GetClass()

wxString FP_SHAPE::GetClass ( ) const
inlineoverridevirtual

Return the class name.

Implements EDA_ITEM.

Definition at line 141 of file fp_shape.h.

142  {
143  return wxT( "MGRAPHIC" );
144  }

◆ GetEditFlags()

STATUS_FLAGS EDA_ITEM::GetEditFlags ( ) const
inlineinherited

Definition at line 207 of file eda_item.h.

208  {
209  constexpr int mask = ( IS_NEW | IS_PASTED | IS_MOVED | IS_RESIZED | IS_DRAGGED |
211 
212  return m_flags & mask;
213  }
#define IS_RESIZED
Item being resized.
Definition: eda_item.h:107
#define STRUCT_DELETED
flag indication structures to be erased
Definition: eda_item.h:115
#define IS_MOVED
Item being moved.
Definition: eda_item.h:105
#define IS_DRAGGED
Item being dragged.
Definition: eda_item.h:108
#define IS_PASTED
Modifier on IS_NEW which indicates it came from clipboard.
Definition: eda_item.h:119
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.
Definition: eda_item.h:110
STATUS_FLAGS m_flags
Definition: eda_item.h:530
#define IS_NEW
New item, just created.
Definition: eda_item.h:106

References IS_DRAGGED, IS_MOVED, IS_NEW, IS_PASTED, IS_RESIZED, IS_WIRE_IMAGE, EDA_ITEM::m_flags, and STRUCT_DELETED.

Referenced by SCH_EDIT_TOOL::ChangeTextType(), EDA_ITEM::ClearEditFlags(), SCH_EDIT_FRAME::DeleteJunction(), SCH_EDIT_TOOL::editFieldText(), SYMBOL_EDITOR_PIN_TOOL::EditPinProperties(), SCH_EDITOR_CONTROL::EditWithSymbolEditor(), SCH_COMPONENT::GetMsgPanelInfo(), SELECTION_CONDITIONS::Idle(), SELECTION_CONDITIONS::IdleSelection(), SYMBOL_EDITOR_MOVE_TOOL::Main(), PCB_POINT_EDITOR::OnSelectionChange(), SYMBOL_EDITOR_EDIT_TOOL::Properties(), SCH_EDIT_TOOL::Properties(), PAD_TOOL::recombinePad(), SCH_EDIT_FRAME::SchematicCleanUp(), SCH_EDIT_FRAME::SelectUnit(), DIALOG_DIMENSION_PROPERTIES::TransferDataFromWindow(), DIALOG_TARGET_PROPERTIES::TransferDataFromWindow(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_EDITOR::TransferDataFromWindow(), and DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow().

◆ GetEffectiveShape()

std::shared_ptr< SHAPE > PCB_SHAPE::GetEffectiveShape ( PCB_LAYER_ID  aLayer = UNDEFINED_LAYER) const
overridevirtualinherited

Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.

This routine returns a COMPOUND shape (set of simple shapes which make up the pad for use with routing, collision determination, etc).

Note
This list can contain a SHAPE_SIMPLE (a simple single-outline non-intersecting polygon), but should never contain a SHAPE_POLY_SET (a complex polygon consisting of multiple outlines and/or holes).
Parameters
aLayerin case of items spanning multiple layers, only the shapes belonging to aLayer will be returned. Pass UNDEFINED_LAYER to return shapes for all layers.

Reimplemented from BOARD_ITEM.

Definition at line 1200 of file pcb_shape.cpp.

1201 {
1202  return std::make_shared<SHAPE_COMPOUND>( MakeEffectiveShapes() );
1203 }
std::vector< SHAPE * > MakeEffectiveShapes() const
Makes a set of SHAPE objects representing the PCB_SHAPE.
Definition: pcb_shape.cpp:1085

References PCB_SHAPE::MakeEffectiveShapes().

◆ GetEnd()

◆ GetEnd0()

const wxPoint& FP_SHAPE::GetEnd0 ( ) const
inline

◆ GetEndX()

int PCB_SHAPE::GetEndX ( )
inlineinherited

Definition at line 158 of file pcb_shape.h.

158 { return m_end.x; }
wxPoint m_end
Definition: pcb_shape.h:49

References PCB_SHAPE::m_end.

Referenced by DRAWSEGMENT_DESC::DRAWSEGMENT_DESC(), and DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run().

◆ GetEndY()

int PCB_SHAPE::GetEndY ( )
inlineinherited

Definition at line 157 of file pcb_shape.h.

157 { return m_end.y; }
wxPoint m_end
Definition: pcb_shape.h:49

References PCB_SHAPE::m_end.

Referenced by DRAWSEGMENT_DESC::DRAWSEGMENT_DESC(), and DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run().

◆ GetFlags()

◆ GetFocusPosition()

const wxPoint PCB_SHAPE::GetFocusPosition ( ) const
inlineoverridevirtualinherited

Similar to GetPosition, but allows items to return their visual center rather than their anchor.

Reimplemented from EDA_ITEM.

Definition at line 239 of file pcb_shape.h.

240  {
241  return GetCenter();
242  }
wxPoint GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Definition: pcb_shape.cpp:341

References PCB_SHAPE::GetCenter().

◆ GetLayer()

virtual PCB_LAYER_ID BOARD_ITEM::GetLayer ( ) const
inlinevirtualinherited

Return the primary layer this item is on.

Reimplemented in ZONE.

Definition at line 173 of file board_item.h.

173 { return m_layer; }
PCB_LAYER_ID m_layer
Definition: board_item.h:363

References BOARD_ITEM::m_layer.

Referenced by CN_LIST::Add(), BOARD_ADAPTER::addFootprintShapesWithClearance(), GRAPHICS_CLEANER::areEquivalent(), BOARD_CONNECTED_ITEM_DESC::BOARD_CONNECTED_ITEM_DESC(), BOARD_ITEM_DESC::BOARD_ITEM_DESC(), AR_AUTOPLACER::buildFpAreas(), TRACKS_CLEANER::cleanup(), CreateBoardSection(), MICROWAVE_TOOL::createMicrowaveInductor(), PCB_BASE_FRAME::CreateNewFootprint(), CreateRoutesSection(), DIALOG_DIMENSION_PROPERTIES::DIALOG_DIMENSION_PROPERTIES(), DIALOG_GRAPHIC_ITEM_PROPERTIES::DIALOG_GRAPHIC_ITEM_PROPERTIES(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(), EDIT_TOOL::DragArcTrack(), KIGFX::PCB_PAINTER::draw(), PCB_EDIT_FRAME::ExchangeFootprint(), export_vrml_drawsegment(), export_vrml_footprint(), export_vrml_fp_shape(), export_vrml_fp_text(), export_vrml_pcbtext(), export_vrml_tracks(), extractDiffPairCoupledItems(), EDIT_TOOL::FilletTracks(), PCB_TARGET::Flip(), PCB_TEXT::Flip(), TRACK::Flip(), Flip(), FP_TEXT::Flip(), DIMENSION_BASE::Flip(), FOOTPRINT::Flip(), ARC::Flip(), PCB_SHAPE::Flip(), FOOTPRINT_DESC::FOOTPRINT_DESC(), PCB_IO::FootprintSave(), FootprintWriteShape(), PCB_IO::format(), PCB_IO::formatLayer(), FP_TEXT::FP_TEXT(), DSN::SPECCTRA_DB::FromBOARD(), AR_AUTOPLACER::genModuleOnRoutingMatrix(), FOOTPRINT::GetBoundingBox(), ZONE::GetLayer(), getMatchingTextItem(), TRACK::GetMsgPanelInfo(), VIA::GetMsgPanelInfo(), PAD::GetMsgPanelInfo(), AR_AUTOPLACER::getOptimalFPPlacement(), BOARD::GetPad(), FP_TEXT_GRID_TABLE::GetValueAsLong(), TRACK::GetWidthConstraints(), PCB_SELECTION_TOOL::GuessSelectionCandidates(), idf_export_footprint(), GENERAL_COLLECTOR::Inspect(), BOARD_INSPECTION_TOOL::InspectClearance(), BOARD_INSPECTION_TOOL::InspectConstraints(), isEdge(), PAD::IsFlipped(), PNS_KICAD_IFACE::IsItemVisible(), BOARD_ITEM::IsOnCopperLayer(), IsParentFlipped(), FP_TEXT::IsParentFlipped(), itemIsIncludedByFilter(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), DIALOG_FOOTPRINT_FP_EDITOR::OnAddField(), DIALOG_FOOTPRINT_PROPERTIES::OnAddField(), TRACK::cmp_tracks::operator()(), BOARD_ITEM::ptr_cmp::operator()(), PCB_SHAPE::cmp_drawings::operator()(), FOOTPRINT::cmp_drawings::operator()(), EAGLE_PLUGIN::packagePad(), BRDITEMS_PLOTTER::PlotBoardGraphicItems(), BRDITEMS_PLOTTER::PlotDimension(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), BRDITEMS_PLOTTER::PlotFootprintGraphicItems(), BRDITEMS_PLOTTER::PlotFootprintTextItems(), BRDITEMS_PLOTTER::PlotPcbShape(), BRDITEMS_PLOTTER::PlotPcbTarget(), BRDITEMS_PLOTTER::PlotPcbText(), CONVERT_TOOL::PolyToLines(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), processTextItem(), PAD_TOOL::recombinePad(), CLIPBOARD_IO::SaveSelection(), CONVERT_TOOL::SegmentToArc(), PCB_SELECTION_TOOL::Selectable(), FP_TEXT_GRID_TABLE::SetValueAsLong(), GLOBAL_EDIT_TOOL::swapBoardItem(), PNS_KICAD_IFACE_BASE::syncArc(), PNS_KICAD_IFACE_BASE::syncGraphicalItem(), PNS_KICAD_IFACE_BASE::syncTrack(), DRC_TEST_PROVIDER_EDGE_CLEARANCE::testAgainstEdge(), AR_AUTOPLACER::testFootprintOnBoard(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testTrackAgainstItem(), TRACK_VIA_DESC::TRACK_VIA_DESC(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow(), DIALOG_DIMENSION_PROPERTIES::TransferDataToWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::TransferDataToWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataToWindow(), BOARD_ADAPTER::transformFPShapesToPolygon(), FOOTPRINT::TransformFPShapesWithClearanceToPolygon(), TRACK::ViewGetLayers(), FP_TEXT::ViewGetLayers(), FP_TEXT::ViewGetLOD(), FP_ZONE::ViewGetLOD(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::visitItem(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

◆ GetLayerName()

wxString BOARD_ITEM::GetLayerName ( ) const
inherited

Return the name of the PCB layer on which the item resides.

Returns
the layer name associated with this item.

Definition at line 60 of file board_item.cpp.

61 {
62  BOARD* board = GetBoard();
63 
64  if( board )
65  return board->GetLayerName( m_layer );
66 
67  // If no parent, return standard name
69 }
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition: board.cpp:342
virtual BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:46
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
PCB_LAYER_ID m_layer
Definition: board_item.h:363
static wxString GetStandardLayerName(PCB_LAYER_ID aLayerId)
Return an "English Standard" name of a PCB layer when given aLayerNumber.
Definition: board.h:674

References BOARD_ITEM::GetBoard(), BOARD::GetLayerName(), BOARD::GetStandardLayerName(), and BOARD_ITEM::m_layer.

Referenced by PCB_TEXT::GetMsgPanelInfo(), PCB_TARGET::GetMsgPanelInfo(), FP_TEXT::GetMsgPanelInfo(), DIMENSION_BASE::GetMsgPanelInfo(), PCB_SHAPE::GetMsgPanelInfo(), LEADER::GetMsgPanelInfo(), PCB_TEXT::GetSelectMenuText(), GetSelectMenuText(), TRACK::GetSelectMenuText(), DIMENSION_BASE::GetSelectMenuText(), PCB_SHAPE::GetSelectMenuText(), PCB_TEXT::GetShownText(), FP_TEXT_GRID_TABLE::GetValue(), and FOOTPRINT::ResolveTextVar().

◆ GetLayerSet()

◆ GetLength()

double PCB_SHAPE::GetLength ( ) const
inherited

Function GetLength returns the length of the track using the hypotenuse calculation.

Returns
double - the length of the track

Definition at line 76 of file pcb_shape.cpp.

77 {
78  double length = 0.0;
79 
80  switch( m_shape )
81  {
82  case S_CURVE:
83  for( size_t ii = 1; ii < m_bezierPoints.size(); ++ii )
84  length += GetLineLength( m_bezierPoints[ ii - 1], m_bezierPoints[ii] );
85 
86  break;
87 
88  case S_SEGMENT:
89  length = GetLineLength( GetStart(), GetEnd() );
90  break;
91 
92  case S_POLYGON:
93  for( int ii = 0; ii < m_poly.COutline( 0 ).SegmentCount(); ii++ )
94  length += m_poly.COutline( 0 ).CSegment( ii ).Length();
95 
96  break;
97 
98  case S_ARC:
99  length = 2 * M_PI * GetRadius() * ( GetAngle() / 3600.0 );
100  break;
101 
102  default:
103  wxASSERT_MSG( false, "PCB_SHAPE::GetLength not implemented for shape"
104  + ShowShape( GetShape() ) );
105  break;
106  }
107 
108  return length;
109 }
int Length() const
Return the length (this).
Definition: seg.h:340
double GetLineLength(const wxPoint &aPointA, const wxPoint &aPointB)
Return the length of a line segment defined by aPointA and aPointB.
Definition: trigo.h:223
const wxPoint & GetEnd() const
Function GetEnd returns the ending point of the graphic.
Definition: pcb_shape.h:156
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
int GetRadius() const
Function GetRadius returns the radius of this item Has meaning only for arc and circle.
Definition: pcb_shape.h:201
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
static wxString ShowShape(PCB_SHAPE_TYPE_T aShape)
Convert the enum PCB_SHAPE_TYPE_T integer value to a wxString.
Definition: board_item.cpp:31
usual segment : line with rounded ends
Definition: board_item.h:50
Arcs (with rounded ends)
Definition: board_item.h:52
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
const wxPoint & GetStart() const
Function GetStart returns the starting point of the graphic.
Definition: pcb_shape.h:145
int SegmentCount() const
Function SegmentCount()
const SEG CSegment(int aIndex) const
Function CSegment()
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
double GetAngle() const
Definition: pcb_shape.h:127
PCB_SHAPE_TYPE_T GetShape() const
Definition: pcb_shape.h:130
std::vector< wxPoint > m_bezierPoints
Definition: pcb_shape.h:57
Bezier Curve.
Definition: board_item.h:55

References SHAPE_POLY_SET::COutline(), SHAPE_LINE_CHAIN::CSegment(), PCB_SHAPE::GetAngle(), PCB_SHAPE::GetEnd(), GetLineLength(), PCB_SHAPE::GetRadius(), PCB_SHAPE::GetShape(), PCB_SHAPE::GetStart(), SEG::Length(), PCB_SHAPE::m_bezierPoints, PCB_SHAPE::m_poly, PCB_SHAPE::m_shape, S_ARC, S_CURVE, S_POLYGON, S_SEGMENT, SHAPE_LINE_CHAIN::SegmentCount(), and BOARD_ITEM::ShowShape().

Referenced by PCB_SHAPE::GetMsgPanelInfo().

◆ GetMenuImage()

BITMAP_DEF FP_SHAPE::GetMenuImage ( ) const
overridevirtual

Return a pointer to an image to be used in menus.

The default version returns the right arrow image. Override this function to provide object specific menu images.

Returns
The menu image associated with the item.

Reimplemented from PCB_SHAPE.

Definition at line 129 of file fp_shape.cpp.

130 {
131  return show_mod_edge_xpm;
132 }
const BITMAP_OPAQUE show_mod_edge_xpm[1]

References show_mod_edge_xpm.

◆ GetMsgPanelInfo()

void FP_SHAPE::GetMsgPanelInfo ( EDA_DRAW_FRAME aFrame,
std::vector< MSG_PANEL_ITEM > &  aList 
)
overridevirtual

Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.

Parameters
aListis the list to populate.

Reimplemented from EDA_ITEM.

Definition at line 110 of file fp_shape.cpp.

111 {
112  FOOTPRINT* fp = static_cast<FOOTPRINT*>( m_parent );
113 
114  aList.emplace_back( _( "Footprint" ), fp ? fp->GetReference() : _( "<invalid>" ) );
115 
116  // append the features shared with the base class
117  PCB_SHAPE::GetMsgPanelInfo( aFrame, aList );
118 }
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:528
const wxString & GetReference() const
Definition: footprint.h:423
#define _(s)
Definition: 3d_actions.cpp:33
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
Definition: pcb_shape.cpp:487

References _, PCB_SHAPE::GetMsgPanelInfo(), FOOTPRINT::GetReference(), and EDA_ITEM::m_parent.

◆ GetParent()

BOARD_ITEM_CONTAINER* BOARD_ITEM::GetParent ( void  ) const
inlineinherited

Definition at line 168 of file board_item.h.

168 { return (BOARD_ITEM_CONTAINER*) m_parent; }
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:528
Abstract interface for BOARD_ITEMs capable of storing other items inside.

References EDA_ITEM::m_parent.

Referenced by PCB_POINT_EDITOR::addCorner(), ALIGN_DISTRIBUTE_TOOL::AlignBottom(), ALIGN_DISTRIBUTE_TOOL::AlignCenterX(), ALIGN_DISTRIBUTE_TOOL::AlignCenterY(), ALIGN_DISTRIBUTE_TOOL::AlignTop(), PNS_KICAD_IFACE::Commit(), EDIT_TOOL::copyToClipboard(), FOOTPRINT::CoverageRatio(), EDIT_TOOL::CreateArray(), BOARD_ITEM::DeleteStructure(), ALIGN_DISTRIBUTE_TOOL::doAlignLeft(), ALIGN_DISTRIBUTE_TOOL::doAlignRight(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersVertically(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsVertically(), EDIT_TOOL::doMoveSelection(), EDIT_TOOL::Drag(), EDIT_TOOL::DragArcTrack(), KIGFX::PCB_PAINTER::draw(), EDIT_TOOL::Duplicate(), PCB_SELECTION_TOOL::FilterCollectorForGroups(), EDIT_TOOL::Flip(), PCB_IO::format(), FormatProbeItem(), BOARD_ITEM::GetBoard(), PCB_MARKER::GetColorLayer(), ALIGN_DISTRIBUTE_TOOL::GetSelections(), FP_TEXT::GetSelectMenuText(), PCB_TEXT::GetShownText(), FP_TEXT::GetShownText(), insideArea(), GENERAL_COLLECTOR::Inspect(), ARRAY_CREATOR::Invoke(), DRC_ENGINE::IsNetTie(), IsParentFlipped(), FP_TEXT::IsParentFlipped(), LEGACY_PLUGIN::loadMODULE_TEXT(), memberOf(), EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), ALTIUM_PCB::ParseTexts6Data(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), BRDITEMS_PLOTTER::PlotFootprintTextItem(), POSITION_RELATIVE_TOOL::PositionRelative(), BOARD_COMMIT::Push(), PCB_PARSER::resolveGroups(), EDIT_TOOL::Rotate(), DRC_TEST_PROVIDER_SILK_CLEARANCE::Run(), PCB_BASE_EDIT_FRAME::SaveCopyInUndoList(), CLIPBOARD_IO::SaveSelection(), PCB_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::Selectable(), SwapItemData(), DRC_TEST_PROVIDER_COPPER_CLEARANCE::testPadAgainstItem(), PCB_GROUP::TopLevelGroup(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), PCB_MARKER::ViewGetLayers(), FP_ZONE::ViewGetLOD(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem(), and PCB_GROUP::WithinScope().

◆ GetParentAsString()

wxString FP_SHAPE::GetParentAsString ( ) const
inline

Definition at line 146 of file fp_shape.h.

146 { return m_parent->m_Uuid.AsString(); }
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:528
wxString AsString() const
Definition: kiid.cpp:213
const KIID m_Uuid
Definition: eda_item.h:524

References KIID::AsString(), EDA_ITEM::m_parent, and EDA_ITEM::m_Uuid.

Referenced by FP_SHAPE_DESC::FP_SHAPE_DESC().

◆ GetParentFootprint()

FOOTPRINT * PCB_SHAPE::GetParentFootprint ( ) const
inherited

Function GetParentFootprint returns a pointer to the parent footprint, or NULL if PCB_SHAPE does not belong to a footprint.

Returns
FOOTPRINT* - pointer to the parent footprint or NULL.

Definition at line 478 of file pcb_shape.cpp.

479 {
480  if( !m_parent || m_parent->Type() != PCB_FOOTPRINT_T )
481  return NULL;
482 
483  return (FOOTPRINT*) m_parent;
484 }
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:528
#define NULL
class FOOTPRINT, a footprint
Definition: typeinfo.h:88
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:162

References EDA_ITEM::m_parent, NULL, PCB_FOOTPRINT_T, and EDA_ITEM::Type().

Referenced by ConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), PCB_SHAPE::GetBoundingBox(), PCB_SHAPE::GetRectCorners(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), and PCB_SHAPE::TransformShapeWithClearanceToPolygon().

◆ GetParentGroup()

◆ GetPointCount()

int PCB_SHAPE::GetPointCount ( ) const
inherited
Returns
the number of corners of the polygonal shape

Definition at line 1235 of file pcb_shape.cpp.

1236 {
1237  // return the number of corners of the polygonal shape
1238  // this shape is expected to be only one polygon without hole
1239  if( GetPolyShape().OutlineCount() )
1240  return GetPolyShape().VertexCount( 0 );
1241 
1242  return 0;
1243 }
SHAPE_POLY_SET & GetPolyShape()
Definition: pcb_shape.h:268
int VertexCount(int aOutline=-1, int aHole=-1) const
Returns the number of holes in a given outline.

References PCB_SHAPE::GetPolyShape(), and SHAPE_POLY_SET::VertexCount().

Referenced by GRAPHICS_CLEANER::isNullSegment().

◆ GetPolyShape() [1/2]

◆ GetPolyShape() [2/2]

const SHAPE_POLY_SET& PCB_SHAPE::GetPolyShape ( ) const
inlineinherited

Definition at line 269 of file pcb_shape.h.

269 { return m_poly; }
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58

References PCB_SHAPE::m_poly.

◆ GetPosition()

wxPoint PCB_SHAPE::GetPosition ( ) const
overridevirtualinherited

Reimplemented from EDA_ITEM.

Definition at line 67 of file pcb_shape.cpp.

68 {
69  if( m_shape == S_POLYGON )
70  return (wxPoint) m_poly.CVertex( 0 );
71  else
72  return m_start;
73 }
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
const VECTOR2I & CVertex(int aIndex, int aOutline, int aHole) const
Return the aGlobalIndex-th vertex in the poly set.
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
wxPoint m_start
Definition: pcb_shape.h:48

References SHAPE_POLY_SET::CVertex(), PCB_SHAPE::m_poly, PCB_SHAPE::m_shape, PCB_SHAPE::m_start, and S_POLYGON.

Referenced by CONVERT_TOOL::makePolysFromCircles().

◆ GetRadius()

int PCB_SHAPE::GetRadius ( ) const
inlineinherited

Function GetRadius returns the radius of this item Has meaning only for arc and circle.

Definition at line 201 of file pcb_shape.h.

202  {
203  double radius = GetLineLength( m_start, m_end );
204 
205  // don't allow degenerate arcs
206  return std::max( 1, KiROUND( radius ) );
207  }
wxPoint m_end
Definition: pcb_shape.h:49
double GetLineLength(const wxPoint &aPointA, const wxPoint &aPointB)
Return the length of a line segment defined by aPointA and aPointB.
Definition: trigo.h:223
wxPoint m_start
Definition: pcb_shape.h:48
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:68

References GetLineLength(), KiROUND(), PCB_SHAPE::m_end, and PCB_SHAPE::m_start.

Referenced by BOARD_ADAPTER::addShapeWithClearance(), PCB_SHAPE::computeArcBBox(), ConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), PCB_SHAPE::GetBoundingBox(), PCB_SHAPE::GetLength(), hash_fp_item(), PCB_SHAPE::HitTest(), idf_export_outline(), GRAPHICS_CLEANER::isNullSegment(), PCB_SHAPE::MakeEffectiveShapes(), CONVERT_TOOL::makePolysFromCircles(), PCB_PARSER::parsePAD(), PCB_SHAPE::Scale(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), and PCB_SHAPE::TransformShapeWithClearanceToPolygon().

◆ GetRectCorners()

std::vector< wxPoint > PCB_SHAPE::GetRectCorners ( ) const
inherited

Definition at line 970 of file pcb_shape.cpp.

971 {
972  std::vector<wxPoint> pts;
973  FOOTPRINT* parentFootprint = GetParentFootprint();
974  wxPoint topLeft = GetStart();
975  wxPoint botRight = GetEnd();
976 
977  // Un-rotate rect topLeft and botRight
978  if( parentFootprint && KiROUND( parentFootprint->GetOrientation() ) % 900 != 0 )
979  {
980  topLeft -= parentFootprint->GetPosition();
981  RotatePoint( &topLeft, -parentFootprint->GetOrientation() );
982 
983  botRight -= parentFootprint->GetPosition();
984  RotatePoint( &botRight, -parentFootprint->GetOrientation() );
985  }
986 
987  // Set up the un-rotated 4 corners
988  pts.emplace_back( topLeft );
989  pts.emplace_back( botRight.x, topLeft.y );
990  pts.emplace_back( botRight );
991  pts.emplace_back( topLeft.x, botRight.y );
992 
993  // Now re-rotate the 4 corners to get a diamond
994  if( parentFootprint && KiROUND( parentFootprint->GetOrientation() ) % 900 != 0 )
995  {
996  for( wxPoint& pt : pts )
997  {
998  RotatePoint( &pt, parentFootprint->GetOrientation() );
999  pt += parentFootprint->GetPosition();
1000  }
1001  }
1002 
1003  return pts;
1004 }
const wxPoint & GetEnd() const
Function GetEnd returns the ending point of the graphic.
Definition: pcb_shape.h:156
double GetOrientation() const
Definition: footprint.h:186
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:228
const wxPoint & GetStart() const
Function GetStart returns the starting point of the graphic.
Definition: pcb_shape.h:145
FOOTPRINT * GetParentFootprint() const
Function GetParentFootprint returns a pointer to the parent footprint, or NULL if PCB_SHAPE does not ...
Definition: pcb_shape.cpp:478
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:68
wxPoint GetPosition() const override
Definition: footprint.h:182

References PCB_SHAPE::GetEnd(), FOOTPRINT::GetOrientation(), PCB_SHAPE::GetParentFootprint(), FOOTPRINT::GetPosition(), PCB_SHAPE::GetStart(), KiROUND(), and RotatePoint().

Referenced by BOARD_ADAPTER::addShapeWithClearance(), ConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), PCB_SHAPE::GetBoundingBox(), PCB_SHAPE::HitTest(), PCB_SHAPE::MakeEffectiveShapes(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), BRDITEMS_PLOTTER::PlotPcbShape(), and PCB_SHAPE::TransformShapeWithClearanceToPolygon().

◆ GetSelectMenuText()

wxString FP_SHAPE::GetSelectMenuText ( EDA_UNITS  aUnits) const
overridevirtual

Return the text to display to be used in the selection clarification context menu when multiple items are found at the current cursor position.

The default version of this function raises an assertion in the debug mode and returns a string to indicate that it was not overridden to provide the object specific text.

Returns
The menu text string.

Reimplemented from PCB_SHAPE.

Definition at line 121 of file fp_shape.cpp.

122 {
123  return wxString::Format( _( "%s on %s" ),
124  ShowShape( m_shape ),
125  GetLayerName() );
126 }
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
static wxString ShowShape(PCB_SHAPE_TYPE_T aShape)
Convert the enum PCB_SHAPE_TYPE_T integer value to a wxString.
Definition: board_item.cpp:31
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
#define _(s)
Definition: 3d_actions.cpp:33
wxString GetLayerName() const
Return the name of the PCB layer on which the item resides.
Definition: board_item.cpp:60

References _, Format(), BOARD_ITEM::GetLayerName(), PCB_SHAPE::m_shape, and BOARD_ITEM::ShowShape().

◆ GetShape()

PCB_SHAPE_TYPE_T PCB_SHAPE::GetShape ( ) const
inlineinherited

Definition at line 130 of file pcb_shape.h.

130 { return m_shape; }
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52

References PCB_SHAPE::m_shape.

Referenced by PCB_POINT_EDITOR::addCorner(), BOARD_ADAPTER::addShapeWithClearance(), GRAPHICS_CLEANER::areEquivalent(), PCB_POINT_EDITOR::canAddCorner(), GRAPHICS_CLEANER::cleanupSegments(), PCB_GRID_HELPER::computeAnchors(), ConvertOutlineToPolygon(), KIGFX::PCB_PAINTER::draw(), export_vrml_drawsegment(), export_vrml_fp_shape(), Flip(), FootprintWriteShape(), PCB_IO::format(), PCB_SHAPE::GetLength(), hash_fp_item(), idf_export_outline(), GRAPHICS_CLEANER::isNullSegment(), DSN::SPECCTRA_DB::makeIMAGE(), PCB_POINT_EDITOR::makePoints(), CONVERT_TOOL::makePolysFromCircles(), CONVERT_TOOL::makePolysFromRects(), GRAPHICS_CLEANER::mergeRects(), Mirror(), Move(), DIALOG_GRAPHIC_ITEM_PROPERTIES::onLayer(), PCB_SHAPE::cmp_drawings::operator()(), FOOTPRINT::cmp_drawings::operator()(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), BRDITEMS_PLOTTER::PlotPcbShape(), CONVERT_TOOL::PolyToLines(), PCB_POINT_EDITOR::removeCorner(), DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run(), PCB_POINT_EDITOR::setAltConstraint(), PNS_KICAD_IFACE_BASE::syncGraphicalItem(), AR_MATRIX::TraceSegmentPcb(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), PCB_POINT_EDITOR::updateItem(), PCB_POINT_EDITOR::updatePoints(), and DIALOG_GRAPHIC_ITEM_PROPERTIES::Validate().

◆ GetStart()

◆ GetStart0()

const wxPoint& FP_SHAPE::GetStart0 ( ) const
inline

Definition at line 112 of file fp_shape.h.

112 { return m_Start0; }
wxPoint m_Start0
Start point or center, relative to footprint origin, orient 0.
Definition: fp_shape.h:160

References m_Start0.

Referenced by FootprintWriteShape(), PCB_IO::format(), CADSTAR_PCB_ARCHIVE_LOADER::getLineChainFromDrawsegments(), hash_fp_item(), DSN::SPECCTRA_DB::makeIMAGE(), and CADSTAR_PCB_ARCHIVE_LOADER::makeTracksFromDrawsegments().

◆ GetStartX()

int PCB_SHAPE::GetStartX ( )
inlineinherited

Definition at line 147 of file pcb_shape.h.

147 { return m_start.x; }
wxPoint m_start
Definition: pcb_shape.h:48

References PCB_SHAPE::m_start.

Referenced by DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run().

◆ GetStartY()

int PCB_SHAPE::GetStartY ( )
inlineinherited

Definition at line 146 of file pcb_shape.h.

146 { return m_start.y; }
wxPoint m_start
Definition: pcb_shape.h:48

References PCB_SHAPE::m_start.

Referenced by DRC_TEST_PROVIDER_EDGE_CLEARANCE::Run().

◆ GetState()

int EDA_ITEM::GetState ( int  type) const
inlineinherited

Definition at line 186 of file eda_item.h.

187  {
188  return m_status & type;
189  }
STATUS_FLAGS m_status
Definition: eda_item.h:527

References EDA_ITEM::m_status.

Referenced by BOARD_ITEM::IsLocked().

◆ GetStatus()

STATUS_FLAGS EDA_ITEM::GetStatus ( ) const
inlineinherited

Definition at line 199 of file eda_item.h.

199 { return m_status; }
STATUS_FLAGS m_status
Definition: eda_item.h:527

References EDA_ITEM::m_status.

◆ GetThirdPoint()

const wxPoint& PCB_SHAPE::GetThirdPoint ( ) const
inlineinherited

Function GetThirdPoint returns the third point point of the graphic.

Definition at line 167 of file pcb_shape.h.

167 { return m_thirdPoint; }
wxPoint m_thirdPoint
Definition: pcb_shape.h:50

References PCB_SHAPE::m_thirdPoint.

◆ GetThirdPoint0()

const wxPoint& FP_SHAPE::GetThirdPoint0 ( ) const
inline

Definition at line 118 of file fp_shape.h.

118 { return m_ThirdPoint0; }
wxPoint m_ThirdPoint0
End point for an arc.
Definition: fp_shape.h:162

References m_ThirdPoint0.

◆ GetThirdPointX()

int PCB_SHAPE::GetThirdPointX ( )
inlineinherited

Definition at line 169 of file pcb_shape.h.

169 { return m_thirdPoint.x; }
wxPoint m_thirdPoint
Definition: pcb_shape.h:50

References PCB_SHAPE::m_thirdPoint.

◆ GetThirdPointY()

int PCB_SHAPE::GetThirdPointY ( )
inlineinherited

Definition at line 168 of file pcb_shape.h.

168 { return m_thirdPoint.y; }
wxPoint m_thirdPoint
Definition: pcb_shape.h:50

References PCB_SHAPE::m_thirdPoint.

◆ GetWidth()

◆ GetX()

int BOARD_ITEM::GetX ( ) const
inlineinherited

◆ GetY()

int BOARD_ITEM::GetY ( ) const
inlineinherited

◆ HasFlag()

◆ HitTest() [1/2]

bool PCB_SHAPE::HitTest ( const wxPoint &  aPosition,
int  aAccuracy = 0 
) const
overridevirtualinherited

Test if aPosition is contained within or on the bounding box of an item.

Parameters
aPositionA reference to a wxPoint object containing the coordinates to test.
aAccuracyIncrease the item bounding box by this amount.
Returns
True if aPosition is within the item bounding box.

Reimplemented from EDA_ITEM.

Definition at line 641 of file pcb_shape.cpp.

642 {
643  int maxdist = aAccuracy + ( m_width / 2 );
644 
645  switch( m_shape )
646  {
647  case S_CIRCLE:
648  {
649  int radius = GetRadius();
650  int dist = KiROUND( EuclideanNorm( aPosition - GetCenter() ) );
651 
652  if( IsFilled() ) // Filled circle hit-test
653  {
654  if( dist <= radius + maxdist )
655  return true;
656  }
657  else // Ring hit-test
658  {
659  if( abs( radius - dist ) <= maxdist )
660  return true;
661  }
662  }
663  break;
664 
665  case S_ARC:
666  {
667  wxPoint relPos = aPosition - GetCenter();
668  int radius = GetRadius();
669  int dist = KiROUND( EuclideanNorm( relPos ) );
670 
671  if( abs( radius - dist ) <= maxdist )
672  {
673  // For arcs, the test point angle must be >= arc angle start
674  // and <= arc angle end
675  // However angle values > 360 deg are not easy to handle
676  // so we calculate the relative angle between arc start point and teast point
677  // this relative arc should be < arc angle if arc angle > 0 (CW arc)
678  // and > arc angle if arc angle < 0 (CCW arc)
679  double arc_angle_start = GetArcAngleStart(); // Always 0.0 ... 360 deg, in 0.1 deg
680 
681  double arc_hittest = ArcTangente( relPos.y, relPos.x );
682 
683  // Calculate relative angle between the starting point of the arc, and the test point
684  arc_hittest -= arc_angle_start;
685 
686  // Normalise arc_hittest between 0 ... 360 deg
687  NORMALIZE_ANGLE_POS( arc_hittest );
688 
689  // Check angle: inside the arc angle when it is > 0
690  // and outside the not drawn arc when it is < 0
691  if( GetAngle() >= 0.0 )
692  {
693  if( arc_hittest <= GetAngle() )
694  return true;
695  }
696  else
697  {
698  if( arc_hittest >= ( 3600.0 + GetAngle() ) )
699  return true;
700  }
701  }
702  }
703  break;
704 
705  case S_CURVE:
706  const_cast<PCB_SHAPE*>( this )->RebuildBezierToSegmentsPointsList( m_width );
707 
708  for( unsigned int i= 1; i < m_bezierPoints.size(); i++)
709  {
710  if( TestSegmentHit( aPosition, m_bezierPoints[ i - 1], m_bezierPoints[i], maxdist ) )
711  return true;
712  }
713 
714  break;
715 
716  case S_SEGMENT:
717  if( TestSegmentHit( aPosition, m_start, m_end, maxdist ) )
718  return true;
719 
720  break;
721 
722  case S_RECT:
723  {
724  std::vector<wxPoint> pts = GetRectCorners();
725 
726  if( IsFilled() ) // Filled rect hit-test
727  {
728  SHAPE_POLY_SET poly;
729  poly.NewOutline();
730 
731  for( const wxPoint& pt : pts )
732  poly.Append( pt );
733 
734  if( poly.Collide( VECTOR2I( aPosition ), maxdist ) )
735  return true;
736  }
737  else // Open rect hit-test
738  {
739  if( TestSegmentHit( aPosition, pts[0], pts[1], maxdist )
740  || TestSegmentHit( aPosition, pts[1], pts[2], maxdist )
741  || TestSegmentHit( aPosition, pts[2], pts[3], maxdist )
742  || TestSegmentHit( aPosition, pts[3], pts[0], maxdist ) )
743  {
744  return true;
745  }
746  }
747  }
748  break;
749 
750  case S_POLYGON:
751  if( IsFilled() )
752  {
753  return m_poly.Collide( VECTOR2I( aPosition ), maxdist );
754  }
755  else
756  {
758  return m_poly.CollideEdge( VECTOR2I( aPosition ), dummy, maxdist );
759  }
760 
761  break;
762 
763  default:
764  wxFAIL_MSG( "PCB_SHAPE::HitTest (point) not implemented for "
766  break;
767  }
768 
769  return false;
770 }
double EuclideanNorm(const wxPoint &vector)
Euclidean norm of a 2D vector.
Definition: trigo.h:148
bool IsFilled() const
Definition: pcb_shape.h:96
wxPoint m_end
Definition: pcb_shape.h:49
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
int GetRadius() const
Function GetRadius returns the radius of this item Has meaning only for arc and circle.
Definition: pcb_shape.h:201
std::vector< wxPoint > GetRectCorners() const
Definition: pcb_shape.cpp:970
double GetArcAngleStart() const
function GetArcAngleStart()
Definition: pcb_shape.cpp:413
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
Structure to hold the necessary information in order to index a vertex on a SHAPE_POLY_SET object: th...
usual segment : line with rounded ends
Definition: board_item.h:50
static LIB_PART * dummy()
Used to draw a dummy shape when a LIB_PART is not found in library.
Definition: sch_symbol.cpp:69
Arcs (with rounded ends)
Definition: board_item.h:52
void NORMALIZE_ANGLE_POS(T &Angle)
Definition: trigo.h:288
segment with non rounded ends
Definition: board_item.h:51
VECTOR2< int > VECTOR2I
Definition: vector2d.h:623
bool TestSegmentHit(const wxPoint &aRefPoint, wxPoint aStart, wxPoint aEnd, int aDist)
Test if aRefPoint is with aDistance on the line defined by aStart and aEnd.
Definition: trigo.cpp:129
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
Represent a set of closed polygons.
static wxString PCB_SHAPE_TYPE_T_asString(PCB_SHAPE_TYPE_T a)
Definition: board_item.h:59
wxPoint GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Definition: pcb_shape.cpp:341
int NewOutline()
Creates a new hole in a given outline.
wxPoint m_start
Definition: pcb_shape.h:48
bool Collide(const SHAPE *aShape, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const override
Check if the boundary of shape (this) lies closer to the shape aShape than aClearance,...
bool CollideEdge(const VECTOR2I &aPoint, VERTEX_INDEX &aClosestVertex, int aClearance=0) const
Check whether aPoint collides with any edge of any of the contours of the polygon.
int m_width
Definition: pcb_shape.h:46
double GetAngle() const
Definition: pcb_shape.h:127
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:68
ring
Definition: board_item.h:53
double ArcTangente(int dy, int dx)
Definition: trigo.cpp:182
std::vector< wxPoint > m_bezierPoints
Definition: pcb_shape.h:57
Bezier Curve.
Definition: board_item.h:55
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Add a new vertex to the contour indexed by aOutline and aHole (defaults to the outline of the last po...

References SHAPE_POLY_SET::Append(), ArcTangente(), SHAPE_POLY_SET::Collide(), SHAPE_POLY_SET::CollideEdge(), dummy(), EuclideanNorm(), PCB_SHAPE::GetAngle(), PCB_SHAPE::GetArcAngleStart(), PCB_SHAPE::GetCenter(), PCB_SHAPE::GetRadius(), PCB_SHAPE::GetRectCorners(), PCB_SHAPE::IsFilled(), KiROUND(), PCB_SHAPE::m_bezierPoints, PCB_SHAPE::m_end, PCB_SHAPE::m_poly, PCB_SHAPE::m_shape, PCB_SHAPE::m_start, PCB_SHAPE::m_width, SHAPE_POLY_SET::NewOutline(), NORMALIZE_ANGLE_POS(), PCB_SHAPE_TYPE_T_asString(), S_ARC, S_CIRCLE, S_CURVE, S_POLYGON, S_RECT, S_SEGMENT, and TestSegmentHit().

Referenced by GENERAL_COLLECTOR::Inspect().

◆ HitTest() [2/2]

bool PCB_SHAPE::HitTest ( const EDA_RECT aRect,
bool  aContained,
int  aAccuracy = 0 
) const
overridevirtualinherited

Test if aRect intersects or is contained within the bounding box of an item.

Parameters
aRectA reference to a EDA_RECT object containing the rectangle to test.
aContainedSet to true to test for containment instead of an intersection.
aAccuracyIncrease aRect by this amount.
Returns
True if aRect contains or intersects the item bounding box.

Reimplemented from EDA_ITEM.

Definition at line 773 of file pcb_shape.cpp.

774 {
775  EDA_RECT arect = aRect;
776  arect.Normalize();
777  arect.Inflate( aAccuracy );
778 
779  EDA_RECT arcRect;
780  EDA_RECT bb = GetBoundingBox();
781 
782  switch( m_shape )
783  {
784  case S_CIRCLE:
785  // Test if area intersects or contains the circle:
786  if( aContained )
787  return arect.Contains( bb );
788  else
789  {
790  // If the rectangle does not intersect the bounding box, this is a much quicker test
791  if( !aRect.Intersects( bb ) )
792  {
793  return false;
794  }
795  else
796  {
797  return arect.IntersectsCircleEdge( GetCenter(), GetRadius(), GetWidth() );
798  }
799  }
800  break;
801 
802  case S_ARC:
803  // Test for full containment of this arc in the rect
804  if( aContained )
805  {
806  return arect.Contains( bb );
807  }
808  // Test if the rect crosses the arc
809  else
810  {
811  arcRect = bb.Common( arect );
812 
813  /* All following tests must pass:
814  * 1. Rectangle must intersect arc BoundingBox
815  * 2. Rectangle must cross the outside of the arc
816  */
817  return arcRect.Intersects( arect ) &&
819  }
820  break;
821 
822  case S_RECT:
823  if( aContained )
824  {
825  return arect.Contains( bb );
826  }
827  else
828  {
829  std::vector<wxPoint> pts = GetRectCorners();
830 
831  // Account for the width of the lines
832  arect.Inflate( GetWidth() / 2 );
833  return ( arect.Intersects( pts[0], pts[1] )
834  || arect.Intersects( pts[1], pts[2] )
835  || arect.Intersects( pts[2], pts[3] )
836  || arect.Intersects( pts[3], pts[0] ) );
837  }
838 
839  break;
840 
841  case S_SEGMENT:
842  if( aContained )
843  {
844  return arect.Contains( GetStart() ) && aRect.Contains( GetEnd() );
845  }
846  else
847  {
848  // Account for the width of the line
849  arect.Inflate( GetWidth() / 2 );
850  return arect.Intersects( GetStart(), GetEnd() );
851  }
852 
853  break;
854 
855  case S_POLYGON:
856  if( aContained )
857  {
858  return arect.Contains( bb );
859  }
860  else
861  {
862  // Fast test: if aRect is outside the polygon bounding box,
863  // rectangles cannot intersect
864  if( !arect.Intersects( bb ) )
865  return false;
866 
867  // Account for the width of the line
868  arect.Inflate( GetWidth() / 2 );
869  int count = m_poly.TotalVertices();
870 
871  for( int ii = 0; ii < count; ii++ )
872  {
873  auto vertex = m_poly.CVertex( ii );
874  auto vertexNext = m_poly.CVertex(( ii + 1 ) % count );
875 
876  // Test if the point is within aRect
877  if( arect.Contains( ( wxPoint ) vertex ) )
878  return true;
879 
880  // Test if this edge intersects aRect
881  if( arect.Intersects( ( wxPoint ) vertex, ( wxPoint ) vertexNext ) )
882  return true;
883  }
884  }
885  break;
886 
887  case S_CURVE:
888  if( aContained )
889  {
890  return arect.Contains( bb );
891  }
892  else
893  {
894  // Fast test: if aRect is outside the polygon bounding box,
895  // rectangles cannot intersect
896  if( !arect.Intersects( bb ) )
897  return false;
898 
899  // Account for the width of the line
900  arect.Inflate( GetWidth() / 2 );
901  unsigned count = m_bezierPoints.size();
902 
903  for( unsigned ii = 1; ii < count; ii++ )
904  {
905  wxPoint vertex = m_bezierPoints[ ii - 1];
906  wxPoint vertexNext = m_bezierPoints[ii];
907 
908  // Test if the point is within aRect
909  if( arect.Contains( ( wxPoint ) vertex ) )
910  return true;
911 
912  // Test if this edge intersects aRect
913  if( arect.Intersects( vertex, vertexNext ) )
914  return true;
915  }
916  }
917  break;
918 
919 
920  default:
921  wxFAIL_MSG( "PCB_SHAPE::HitTest (rect) not implemented for "
923  break;
924  }
925 
926  return false;
927 }
int TotalVertices() const
Delete aIdx-th polygon from the set.
const wxPoint & GetEnd() const
Function GetEnd returns the ending point of the graphic.
Definition: pcb_shape.h:156
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
const VECTOR2I & CVertex(int aIndex, int aOutline, int aHole) const
Return the aGlobalIndex-th vertex in the poly set.
int GetRadius() const
Function GetRadius returns the radius of this item Has meaning only for arc and circle.
Definition: pcb_shape.h:201
std::vector< wxPoint > GetRectCorners() const
Definition: pcb_shape.cpp:970
int GetWidth() const
Definition: pcb_shape.h:118
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
usual segment : line with rounded ends
Definition: board_item.h:50
bool IntersectsCircleEdge(const wxPoint &aCenter, const int aRadius, const int aWidth) const
Test for intersection between this rect and the edge (radius) of a circle.
Definition: eda_rect.cpp:330
EDA_RECT Common(const EDA_RECT &aRect) const
Return the area that is common with another rectangle.
Definition: eda_rect.cpp:487
Arcs (with rounded ends)
Definition: board_item.h:52
segment with non rounded ends
Definition: board_item.h:51
bool Contains(const wxPoint &aPoint) const
Definition: eda_rect.cpp:57
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
static wxString PCB_SHAPE_TYPE_T_asString(PCB_SHAPE_TYPE_T a)
Definition: board_item.h:59
wxPoint GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Definition: pcb_shape.cpp:341
const wxPoint & GetStart() const
Function GetStart returns the starting point of the graphic.
Definition: pcb_shape.h:145
void Normalize()
Ensures that the height ant width are positive.
Definition: eda_rect.cpp:35
const EDA_RECT GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition: pcb_shape.cpp:568
Handle the component boundary box.
Definition: eda_rect.h:42
bool Intersects(const EDA_RECT &aRect) const
Test for a common area between rectangles.
Definition: eda_rect.cpp:150
ring
Definition: board_item.h:53
std::vector< wxPoint > m_bezierPoints
Definition: pcb_shape.h:57
Bezier Curve.
Definition: board_item.h:55
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Inflate the rectangle horizontally by dx and vertically by dy.
Definition: eda_rect.cpp:363

References EDA_RECT::Common(), EDA_RECT::Contains(), SHAPE_POLY_SET::CVertex(), PCB_SHAPE::GetBoundingBox(), PCB_SHAPE::GetCenter(), PCB_SHAPE::GetEnd(), PCB_SHAPE::GetRadius(), PCB_SHAPE::GetRectCorners(), PCB_SHAPE::GetStart(), PCB_SHAPE::GetWidth(), EDA_RECT::Inflate(), EDA_RECT::Intersects(), EDA_RECT::IntersectsCircleEdge(), PCB_SHAPE::m_bezierPoints, PCB_SHAPE::m_poly, PCB_SHAPE::m_shape, EDA_RECT::Normalize(), PCB_SHAPE_TYPE_T_asString(), S_ARC, S_CIRCLE, S_CURVE, S_POLYGON, S_RECT, S_SEGMENT, and SHAPE_POLY_SET::TotalVertices().

◆ IsBrightened()

◆ IsConnected()

◆ IsDragging()

bool EDA_ITEM::IsDragging ( ) const
inlineinherited

Definition at line 170 of file eda_item.h.

170 { return m_flags & IS_DRAGGED; }
#define IS_DRAGGED
Item being dragged.
Definition: eda_item.h:108
STATUS_FLAGS m_flags
Definition: eda_item.h:530

References IS_DRAGGED, and EDA_ITEM::m_flags.

Referenced by DIALOG_SYMBOL_PROPERTIES::DIALOG_SYMBOL_PROPERTIES(), and KIGFX::SCH_PAINTER::setDeviceColors().

◆ IsEntered()

bool EDA_ITEM::IsEntered ( ) const
inlineinherited

Definition at line 173 of file eda_item.h.

173 { return m_flags & ENTERED; }
#define ENTERED
indicates a group has been entered
Definition: eda_item.h:137
STATUS_FLAGS m_flags
Definition: eda_item.h:530

References ENTERED, and EDA_ITEM::m_flags.

Referenced by KIGFX::PCB_PAINTER::draw().

◆ IsFilled()

bool PCB_SHAPE::IsFilled ( ) const
inlineinherited

Definition at line 96 of file pcb_shape.h.

97  {
98  switch( m_shape )
99  {
100  case S_RECT:
101  case S_CIRCLE:
102  case S_POLYGON:
103  return m_filled;
104 
105  case S_SEGMENT:
106  case S_ARC:
107  case S_CURVE:
108  return false;
109 
110  case S_LAST: // Make CLang compiler happy
111  return false;
112  }
113 
114  return false; // Make GCC compiler happy
115  }
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
usual segment : line with rounded ends
Definition: board_item.h:50
Arcs (with rounded ends)
Definition: board_item.h:52
segment with non rounded ends
Definition: board_item.h:51
last value for this list
Definition: board_item.h:56
ring
Definition: board_item.h:53
bool m_filled
Definition: pcb_shape.h:47
Bezier Curve.
Definition: board_item.h:55

References PCB_SHAPE::m_filled, PCB_SHAPE::m_shape, S_ARC, S_CIRCLE, S_CURVE, S_LAST, S_POLYGON, S_RECT, and S_SEGMENT.

Referenced by BOARD_ADAPTER::addShapeWithClearance(), KIGFX::PCB_PAINTER::draw(), PCB_IO::format(), hash_fp_item(), PCB_SHAPE::HitTest(), PCB_SHAPE::MakeEffectiveShapes(), PCB_PARSER::parsePAD(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), BRDITEMS_PLOTTER::PlotPcbShape(), PNS_KICAD_IFACE_BASE::syncGraphicalItem(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataToWindow(), DIALOG_PAD_PRIMITIVE_POLY_PROPS::TransferDataToWindow(), and PCB_SHAPE::TransformShapeWithClearanceToPolygon().

◆ IsForceVisible()

bool EDA_ITEM::IsForceVisible ( ) const
inlineinherited

Definition at line 255 of file eda_item.h.

255 { return m_forceVisible; }
bool m_forceVisible
Definition: eda_item.h:529

References EDA_ITEM::m_forceVisible.

Referenced by KIGFX::SCH_PAINTER::draw(), and SCH_FIELD::Print().

◆ IsLocked()

◆ IsModified()

bool EDA_ITEM::IsModified ( ) const
inlineinherited

Definition at line 167 of file eda_item.h.

167 { return m_flags & IS_CHANGED; }
#define IS_CHANGED
Item was edited, and modified.
Definition: eda_item.h:102
STATUS_FLAGS m_flags
Definition: eda_item.h:530

References IS_CHANGED, and EDA_ITEM::m_flags.

Referenced by PCB_EDIT_FRAME::OpenProjectFiles().

◆ IsMoving()

◆ IsNew()

◆ IsOnCopperLayer()

virtual bool BOARD_ITEM::IsOnCopperLayer ( ) const
inlinevirtualinherited
Returns
true if the object is on any copper layer, false otherwise.

Reimplemented in TRACK, PAD, and ZONE.

Definition at line 144 of file board_item.h.

145  {
146  return IsCopperLayer( GetLayer() );
147  }
bool IsCopperLayer(LAYER_NUM aLayerId)
Tests whether a layer is a copper layer.
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:173

References BOARD_ITEM::GetLayer(), and IsCopperLayer().

Referenced by CN_CONNECTIVITY_ALGO::Add(), DRC_ENGINE::EvalRules(), and BOARD_CONNECTED_ITEM::SetNetCode().

◆ IsOnLayer()

virtual bool BOARD_ITEM::IsOnLayer ( PCB_LAYER_ID  aLayer) const
inlinevirtualinherited

Test to see if this object is on the given layer.

Virtual so objects like PAD, which reside on multiple layers can do their own form of testing.

Parameters
aLayerThe layer to test for.
Returns
true if on given layer, else false.

Reimplemented in PAD, VIA, FOOTPRINT, ZONE, and PCB_GROUP.

Definition at line 231 of file board_item.h.

232  {
233  return m_layer == aLayer;
234  }
PCB_LAYER_ID m_layer
Definition: board_item.h:363

References BOARD_ITEM::m_layer.

Referenced by BOARD_ADAPTER::createLayers(), existsOnLayer(), GENERAL_COLLECTOR::Inspect(), PCB_LAYER_COLLECTOR::Inspect(), and PNS_KICAD_IFACE::IsItemVisible().

◆ IsParentFlipped()

bool FP_SHAPE::IsParentFlipped ( ) const

Definition at line 216 of file fp_shape.cpp.

217 {
218  if( GetParent() && GetParent()->GetLayer() == B_Cu )
219  return true;
220  return false;
221 }
BOARD_ITEM_CONTAINER * GetParent() const
Definition: board_item.h:168
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:173

References B_Cu, BOARD_ITEM::GetLayer(), and BOARD_ITEM::GetParent().

Referenced by ViewGetLOD().

◆ IsPolyShapeValid()

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

Definition at line 1223 of file pcb_shape.cpp.

1224 {
1225  // return true if the polygonal shape is valid (has more than 2 points)
1226  if( GetPolyShape().OutlineCount() == 0 )
1227  return false;
1228 
1229  const SHAPE_LINE_CHAIN& outline = ( (SHAPE_POLY_SET&)GetPolyShape() ).Outline( 0 );
1230 
1231  return outline.PointCount() > 2;
1232 }
SHAPE_POLY_SET & GetPolyShape()
Definition: pcb_shape.h:268
int PointCount() const
Function PointCount()
Represent a set of closed polygons.
SHAPE_LINE_CHAIN.

References PCB_SHAPE::GetPolyShape(), and SHAPE_LINE_CHAIN::PointCount().

Referenced by export_vrml_polygon(), PCB_IO::format(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), BRDITEMS_PLOTTER::PlotPcbShape(), and PCB_SHAPE::TransformShapeWithClearanceToPolygon().

◆ IsReplaceable()

virtual bool EDA_ITEM::IsReplaceable ( ) const
inlinevirtualinherited

Override this method in any derived object that supports test find and replace.

Returns
True if the item has replaceable text that can be modified using the find and replace dialog.

Reimplemented in SCH_COMPONENT, SCH_SHEET, SCH_LABEL, SCH_TEXT, SCH_SHEET_PIN, and SCH_FIELD.

Definition at line 452 of file eda_item.h.

452 { return false; }

Referenced by EDA_ITEM::Matches().

◆ IsResized()

bool EDA_ITEM::IsResized ( ) const
inlineinherited

Definition at line 174 of file eda_item.h.

174 { return m_flags & IS_RESIZED; }
#define IS_RESIZED
Item being resized.
Definition: eda_item.h:107
STATUS_FLAGS m_flags
Definition: eda_item.h:530

References IS_RESIZED, and EDA_ITEM::m_flags.

Referenced by KIGFX::SCH_PAINTER::setDeviceColors().

◆ IsSelected()

◆ IsTrack()

bool BOARD_ITEM::IsTrack ( ) const
inlineinherited

Test to see if this object is a track or via (or microvia).

Returns
true if a track or via, else false.

Definition at line 241 of file board_item.h.

242  {
243  return ( Type() == PCB_TRACE_T ) || ( Type() == PCB_VIA_T );
244  }
class TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
class VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:162

References PCB_TRACE_T, PCB_VIA_T, and EDA_ITEM::Type().

◆ IsType()

bool FP_SHAPE::IsType ( const KICAD_T  aScanTypes[]) const
inlineoverridevirtual

Check whether the item is one of the listed types.

Parameters
aScanTypesList of item types
Returns
true if the item type is contained in the list aScanTypes

Reimplemented from EDA_ITEM.

Definition at line 54 of file fp_shape.h.

55  {
56  if( BOARD_ITEM::IsType( aScanTypes ) )
57  return true;
58 
59  for( const KICAD_T* p = aScanTypes; *p != EOT; ++p )
60  {
61  if( *p == PCB_LOCATE_GRAPHIC_T )
62  return true;
63  else if( *p == PCB_LOCATE_BOARD_EDGE_T )
64  return m_layer == Edge_Cuts;
65  }
66 
67  return false;
68  }
search types array terminator (End Of Types)
Definition: typeinfo.h:81
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
Definition: typeinfo.h:77
virtual bool IsType(const KICAD_T aScanTypes[]) const
Check whether the item is one of the listed types.
Definition: eda_item.h:232
PCB_LAYER_ID m_layer
Definition: board_item.h:363

References Edge_Cuts, EOT, EDA_ITEM::IsType(), BOARD_ITEM::m_layer, PCB_LOCATE_BOARD_EDGE_T, and PCB_LOCATE_GRAPHIC_T.

◆ IsWireImage()

bool EDA_ITEM::IsWireImage ( ) const
inlineinherited

Definition at line 171 of file eda_item.h.

171 { return m_flags & IS_WIRE_IMAGE; }
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.
Definition: eda_item.h:110
STATUS_FLAGS m_flags
Definition: eda_item.h:530

References IS_WIRE_IMAGE, and EDA_ITEM::m_flags.

◆ IterateForward() [1/2]

template<class T >
static SEARCH_RESULT EDA_ITEM::IterateForward ( std::deque< T > &  aList,
INSPECTOR  inspector,
void *  testData,
const KICAD_T  scanTypes[] 
)
inlinestaticinherited

This changes first parameter to avoid the DList and use the main queue instead.

Definition at line 344 of file eda_item.h.

348  {
349  for( auto it : aList )
350  {
351  if( static_cast<EDA_ITEM*>( it )->Visit( inspector, testData, scanTypes )
353  return SEARCH_RESULT::QUIT;
354  }
355 
357  }
virtual SEARCH_RESULT Visit(INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
May be re-implemented for each derived class in order to handle all the types given by its member dat...
Definition: eda_item.cpp:107

References CONTINUE, QUIT, and EDA_ITEM::Visit().

Referenced by GERBER_FILE_IMAGE::Visit().

◆ IterateForward() [2/2]

template<class T >
static SEARCH_RESULT EDA_ITEM::IterateForward ( std::vector< T > &  aList,
INSPECTOR  inspector,
void *  testData,
const KICAD_T  scanTypes[] 
)
inlinestaticinherited

Change first parameter to avoid the DList and use std::vector instead.

Definition at line 363 of file eda_item.h.

365  {
366  for( auto it : aList )
367  {
368  if( static_cast<EDA_ITEM*>( it )->Visit( inspector, testData, scanTypes )
370  return SEARCH_RESULT::QUIT;
371  }
372 
374  }
virtual SEARCH_RESULT Visit(INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
May be re-implemented for each derived class in order to handle all the types given by its member dat...
Definition: eda_item.cpp:107

References CONTINUE, QUIT, and EDA_ITEM::Visit().

◆ layerMaskDescribe()

wxString BOARD_ITEM::layerMaskDescribe ( ) const
protectedvirtualinherited

Return a string (to be shown to the user) describing a layer mask.

The BOARD is needed because layer names are customizable.

Reimplemented in VIA.

Definition at line 72 of file board_item.cpp.

73 {
74  BOARD* board = GetBoard();
75  LSET layers = GetLayerSet();
76 
77  // Try to be smart and useful. Check all copper first.
78  if( layers[F_Cu] && layers[B_Cu] )
79  return _( "all copper layers" );
80 
81  LSET copperLayers = layers & board->GetEnabledLayers().AllCuMask();
82  LSET techLayers = layers & board->GetEnabledLayers().AllTechMask();
83 
84  for( LSET testLayers : { copperLayers, techLayers, layers } )
85  {
86  for( int bit = PCBNEW_LAYER_ID_START; bit < PCB_LAYER_ID_COUNT; ++bit )
87  {
88  if( testLayers[ bit ] )
89  {
90  wxString layerInfo = board->GetLayerName( static_cast<PCB_LAYER_ID>( bit ) );
91 
92  if( testLayers.count() > 1 )
93  layerInfo << wxS( " " ) + _( "and others" );
94 
95  return layerInfo;
96  }
97  }
98  }
99 
100  // No copper, no technicals: no layer
101  return _( "no layers" );
102 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:750
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition: board.cpp:342
LSET GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings Returns a bit-mask of all t...
Definition: board.cpp:447
static LSET AllTechMask()
Return a mask holding all technical layers (no CU layer) on both side.
Definition: lset.cpp:820
LSET is a set of PCB_LAYER_IDs.
virtual BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:46
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
#define _(s)
Definition: 3d_actions.cpp:33
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
Definition: board_item.h:178

References _, LSET::AllCuMask(), LSET::AllTechMask(), B_Cu, F_Cu, BOARD_ITEM::GetBoard(), BOARD::GetEnabledLayers(), BOARD::GetLayerName(), BOARD_ITEM::GetLayerSet(), PCB_LAYER_ID_COUNT, and PCBNEW_LAYER_ID_START.

Referenced by TRACK::GetMsgPanelInfo(), PAD::GetMsgPanelInfo(), and PAD::GetSelectMenuText().

◆ MakeEffectiveShapes()

std::vector< SHAPE * > PCB_SHAPE::MakeEffectiveShapes ( ) const
inherited

Makes a set of SHAPE objects representing the PCB_SHAPE.

Caller owns the objects.

Definition at line 1085 of file pcb_shape.cpp.

1086 {
1087  std::vector<SHAPE*> effectiveShapes;
1088 
1089  switch( m_shape )
1090  {
1091  case S_ARC:
1092  {
1093  SHAPE_ARC arc( GetCenter(), GetArcStart(), (double) GetAngle() / 10.0 );
1094  SHAPE_LINE_CHAIN l = arc.ConvertToPolyline();
1095 
1096  for( int i = 0; i < l.SegmentCount(); i++ )
1097  {
1098  effectiveShapes.emplace_back( new SHAPE_SEGMENT( l.Segment( i ).A,
1099  l.Segment( i ).B, m_width ) );
1100  }
1101 
1102  break;
1103  }
1104 
1105  case S_SEGMENT:
1106  effectiveShapes.emplace_back( new SHAPE_SEGMENT( GetStart(), GetEnd(), m_width ) );
1107  break;
1108 
1109  case S_RECT:
1110  {
1111  std::vector<wxPoint> pts = GetRectCorners();
1112 
1113  if( IsFilled() )
1114  {
1115  effectiveShapes.emplace_back( new SHAPE_SIMPLE( pts ) );
1116  }
1117 
1118  if( m_width > 0 || !IsFilled() )
1119  {
1120  effectiveShapes.emplace_back( new SHAPE_SEGMENT( pts[0], pts[1], m_width ) );
1121  effectiveShapes.emplace_back( new SHAPE_SEGMENT( pts[1], pts[2], m_width ) );
1122  effectiveShapes.emplace_back( new SHAPE_SEGMENT( pts[2], pts[3], m_width ) );
1123  effectiveShapes.emplace_back( new SHAPE_SEGMENT( pts[3], pts[0], m_width ) );
1124  }
1125  }
1126  break;
1127 
1128  case S_CIRCLE:
1129  {
1130  if( IsFilled() )
1131  {
1132  effectiveShapes.emplace_back( new SHAPE_CIRCLE( GetCenter(), GetRadius() ) );
1133  }
1134 
1135  if( m_width > 0 || !IsFilled() )
1136  {
1137  // SHAPE_CIRCLE has no ConvertToPolyline() method, so use a 360.0 SHAPE_ARC
1138  SHAPE_ARC circle( GetCenter(), GetEnd(), 360.0 );
1139  SHAPE_LINE_CHAIN l = circle.ConvertToPolyline();
1140 
1141  for( int i = 0; i < l.SegmentCount(); i++ )
1142  {
1143  effectiveShapes.emplace_back( new SHAPE_SEGMENT( l.Segment( i ).A,
1144  l.Segment( i ).B, m_width ) );
1145  }
1146  }
1147 
1148  break;
1149  }
1150 
1151  case S_CURVE:
1152  {
1153  auto bezierPoints = buildBezierToSegmentsPointsList( GetWidth() );
1154  wxPoint start_pt = bezierPoints[0];
1155 
1156  for( unsigned int jj = 1; jj < bezierPoints.size(); jj++ )
1157  {
1158  wxPoint end_pt = bezierPoints[jj];
1159  effectiveShapes.emplace_back( new SHAPE_SEGMENT( start_pt, end_pt, m_width ) );
1160  start_pt = end_pt;
1161  }
1162 
1163  break;
1164  }
1165 
1166  case S_POLYGON:
1167  {
1169  FOOTPRINT* parentFootprint = dynamic_cast<FOOTPRINT*>( m_parent );
1170 
1171  if( parentFootprint )
1172  {
1173  l.Rotate( -parentFootprint->GetOrientationRadians() );
1174  l.Move( parentFootprint->GetPosition() );
1175  }
1176 
1177  if( IsFilled() )
1178  {
1179  effectiveShapes.emplace_back( new SHAPE_SIMPLE( l ) );
1180  }
1181 
1182  if( m_width > 0 || !IsFilled() )
1183  {
1184  for( int i = 0; i < l.SegmentCount(); i++ )
1185  effectiveShapes.emplace_back( new SHAPE_SEGMENT( l.Segment( i ), m_width ) );
1186  }
1187  }
1188  break;
1189 
1190  default:
1191  wxFAIL_MSG( "PCB_SHAPE::MakeEffectiveShapes unsupported PCB_SHAPE shape: "
1193  break;
1194  }
1195 
1196  return effectiveShapes;
1197 }
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:528
bool IsFilled() const
Definition: pcb_shape.h:96
SHAPE_SIMPLE.
Definition: shape_simple.h:43
double GetOrientationRadians() const
Definition: footprint.h:188
SHAPE_POLY_SET & GetPolyShape()
Definition: pcb_shape.h:268
const wxPoint & GetEnd() const
Function GetEnd returns the ending point of the graphic.
Definition: pcb_shape.h:156
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
int GetRadius() const
Function GetRadius returns the radius of this item Has meaning only for arc and circle.
Definition: pcb_shape.h:201
void Move(const VECTOR2I &aVector) override
std::vector< wxPoint > GetRectCorners() const
Definition: pcb_shape.cpp:970
int GetWidth() const
Definition: pcb_shape.h:118
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
usual segment : line with rounded ends
Definition: board_item.h:50
Arcs (with rounded ends)
Definition: board_item.h:52
segment with non rounded ends
Definition: board_item.h:51
wxPoint GetArcStart() const
Definition: pcb_shape.h:179
static wxString PCB_SHAPE_TYPE_T_asString(PCB_SHAPE_TYPE_T a)
Definition: board_item.h:59
wxPoint GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Definition: pcb_shape.cpp:341
const wxPoint & GetStart() const
Function GetStart returns the starting point of the graphic.
Definition: pcb_shape.h:145
int SegmentCount() const
Function SegmentCount()
void Rotate(double aAngle, const VECTOR2I &aCenter=VECTOR2I(0, 0)) override
Function Rotate rotates all vertices by a given angle.
SEG Segment(int aIndex)
Function Segment()
int m_width
Definition: pcb_shape.h:46
SHAPE_LINE_CHAIN.
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
VECTOR2I A
Definition: seg.h:49
double GetAngle() const
Definition: pcb_shape.h:127
wxPoint GetPosition() const override
Definition: footprint.h:182
ring
Definition: board_item.h:53
Bezier Curve.
Definition: board_item.h:55
const std::vector< wxPoint > buildBezierToSegmentsPointsList(int aMinSegLen) const
Definition: pcb_shape.cpp:328
VECTOR2I B
Definition: seg.h:50

References SEG::A, SEG::B, PCB_SHAPE::buildBezierToSegmentsPointsList(), SHAPE_ARC::ConvertToPolyline(), SHAPE_POLY_SET::COutline(), PCB_SHAPE::GetAngle(), PCB_SHAPE::GetArcStart(), PCB_SHAPE::GetCenter(), PCB_SHAPE::GetEnd(), FOOTPRINT::GetOrientationRadians(), PCB_SHAPE::GetPolyShape(), FOOTPRINT::GetPosition(), PCB_SHAPE::GetRadius(), PCB_SHAPE::GetRectCorners(), PCB_SHAPE::GetStart(), PCB_SHAPE::GetWidth(), PCB_SHAPE::IsFilled(), EDA_ITEM::m_parent, PCB_SHAPE::m_shape, PCB_SHAPE::m_width, SHAPE_LINE_CHAIN::Move(), PCB_SHAPE_TYPE_T_asString(), SHAPE_LINE_CHAIN::Rotate(), S_ARC, S_CIRCLE, S_CURVE, S_POLYGON, S_RECT, S_SEGMENT, SHAPE_LINE_CHAIN::Segment(), and SHAPE_LINE_CHAIN::SegmentCount().

Referenced by PCB_SHAPE::GetEffectiveShape(), and PNS_KICAD_IFACE_BASE::syncGraphicalItem().

◆ Matches() [1/2]

virtual bool EDA_ITEM::Matches ( const wxFindReplaceData &  aSearchData,
void *  aAuxData 
) const
inlinevirtualinherited

Compare the item against the search criteria in aSearchData.

The base class returns false since many of the objects derived from EDA_ITEM do not have any text to search.

Parameters
aSearchDataA reference to a wxFindReplaceData object containing the search criteria.
aAuxDataA pointer to optional data required for the search or NULL if not used.
Returns
True if the item's text matches the search criteria in aSearchData.

Reimplemented in SCH_COMPONENT, SCH_SHEET, SCH_TEXT, SCH_SHEET_PIN, SCH_FIELD, ZONE, SCH_PIN, SCH_MARKER, PCB_MARKER, FP_TEXT, and PCB_TEXT.

Definition at line 414 of file eda_item.h.

415  {
416  return false;
417  }

Referenced by SCH_EDITOR_CONTROL::HasMatch(), PCB_TEXT::Matches(), FP_TEXT::Matches(), PCB_MARKER::Matches(), SCH_MARKER::Matches(), SCH_PIN::Matches(), ZONE::Matches(), SCH_FIELD::Matches(), SCH_SHEET_PIN::Matches(), SCH_TEXT::Matches(), SCH_EDITOR_CONTROL::ReplaceAndFindNext(), and SCH_EDITOR_CONTROL::UpdateFind().

◆ Matches() [2/2]

bool EDA_ITEM::Matches ( const wxString &  aText,
const wxFindReplaceData &  aSearchData 
) const
protectedinherited

Compare aText against search criteria in aSearchData.

This is a helper function for simplify derived class logic.

Parameters
aTextA reference to a wxString object containing the string to test.
aSearchDataThe criteria to search against.
Returns
True if aText matches the search criteria in aSearchData.

Definition at line 132 of file eda_item.cpp.

133 {
134  wxString text = aText;
135  wxString searchText = aSearchData.GetFindString();
136 
137  // Don't match if searching for replaceable item and the item doesn't support text replace.
138  if( (aSearchData.GetFlags() & FR_SEARCH_REPLACE) && !IsReplaceable() )
139  return false;
140 
141  if( aSearchData.GetFlags() & wxFR_WHOLEWORD )
142  return aText.IsSameAs( searchText, aSearchData.GetFlags() & wxFR_MATCHCASE );
143 
144  if( aSearchData.GetFlags() & FR_MATCH_WILDCARD )
145  {
146  if( aSearchData.GetFlags() & wxFR_MATCHCASE )
147  return text.Matches( searchText );
148 
149  return text.MakeUpper().Matches( searchText.MakeUpper() );
150  }
151 
152  if( aSearchData.GetFlags() & wxFR_MATCHCASE )
153  return aText.Find( searchText ) != wxNOT_FOUND;
154 
155  return text.MakeUpper().Find( searchText.MakeUpper() ) != wxNOT_FOUND;
156 }
virtual bool IsReplaceable() const
Override this method in any derived object that supports test find and replace.
Definition: eda_item.h:452

References FR_MATCH_WILDCARD, FR_SEARCH_REPLACE, and EDA_ITEM::IsReplaceable().

◆ Mirror()

void FP_SHAPE::Mirror ( const wxPoint &  aCentre,
bool  aMirrorAroundXAxis 
)

Mirror an edge of the footprint.

Do not change the layer This is a footprint shape modification. (should be only called by a footprint editing function)

Definition at line 223 of file fp_shape.cpp.

224 {
225  // Mirror an edge of the footprint. the layer is not modified
226  // This is a footprint shape modification.
227 
228  switch( GetShape() )
229  {
230  case S_ARC:
231  // Update arc angle but do not yet update m_ThirdPoint0 and m_thirdPoint,
232  // arc center and start point must be updated before calculation arc end.
233  SetAngle( -GetAngle(), false );
235 
236  default:
237  case S_CURVE:
238  case S_SEGMENT:
239  if( aMirrorAroundXAxis )
240  {
241  MIRROR( m_Start0.y, aCentre.y );
242  MIRROR( m_End0.y, aCentre.y );
243  MIRROR( m_ThirdPoint0.y, aCentre.y );
244  MIRROR( m_Bezier0_C1.y, aCentre.y );
245  MIRROR( m_Bezier0_C2.y, aCentre.y );
246  }
247  else
248  {
249  MIRROR( m_Start0.x, aCentre.x );
250  MIRROR( m_End0.x, aCentre.x );
251  MIRROR( m_ThirdPoint0.x, aCentre.x );
252  MIRROR( m_Bezier0_C1.x, aCentre.x );
253  MIRROR( m_Bezier0_C2.x, aCentre.x );
254  }
255 
256  for( unsigned ii = 0; ii < m_bezierPoints.size(); ii++ )
257  {
258  if( aMirrorAroundXAxis )
259  MIRROR( m_bezierPoints[ii].y, aCentre.y );
260  else
261  MIRROR( m_bezierPoints[ii].x, aCentre.x );
262  }
263 
264  break;
265 
266  case S_POLYGON:
267  // polygon corners coordinates are always relative to the
268  // footprint position, orientation 0
269  m_poly.Mirror( !aMirrorAroundXAxis, aMirrorAroundXAxis );
270  break;
271  }
272 
273  SetDrawCoord();
274 }
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
usual segment : line with rounded ends
Definition: board_item.h:50
Arcs (with rounded ends)
Definition: board_item.h:52
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83
void Mirror(bool aX=true, bool aY=false, const VECTOR2I &aRef={ 0, 0 })
Mirror the line points about y or x (or both)
void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
Definition: mirror.h:40
wxPoint m_ThirdPoint0
End point for an arc.
Definition: fp_shape.h:162
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
void SetAngle(double aAngle, bool aUpdateEnd=true) override
Sets the angle for arcs, and normalizes it within the range 0 - 360 degrees.
Definition: fp_shape.cpp:141
wxPoint m_End0
End point, relative to footprint origin, orient 0.
Definition: fp_shape.h:161
wxPoint m_Start0
Start point or center, relative to footprint origin, orient 0.
Definition: fp_shape.h:160
void SetDrawCoord()
Set draw coordinates (absolute values ) from relative coordinates.
Definition: fp_shape.cpp:81
wxPoint m_Bezier0_C2
Bezier Control Point 2, relative to footprint origin, orient 0.
Definition: fp_shape.h:164
double GetAngle() const
Definition: pcb_shape.h:127
PCB_SHAPE_TYPE_T GetShape() const
Definition: pcb_shape.h:130
wxPoint m_Bezier0_C1
Bezier Control Point 1, relative to footprint origin, orient 0.
Definition: fp_shape.h:163
std::vector< wxPoint > m_bezierPoints
Definition: pcb_shape.h:57
Bezier Curve.
Definition: board_item.h:55

References PCB_SHAPE::GetAngle(), PCB_SHAPE::GetShape(), KI_FALLTHROUGH, m_Bezier0_C1, m_Bezier0_C2, PCB_SHAPE::m_bezierPoints, m_End0, PCB_SHAPE::m_poly, m_Start0, m_ThirdPoint0, MIRROR(), SHAPE_POLY_SET::Mirror(), S_ARC, S_CURVE, S_POLYGON, S_SEGMENT, SetAngle(), and SetDrawCoord().

Referenced by EDIT_TOOL::Mirror().

◆ Move() [1/2]

void FP_SHAPE::Move ( const wxPoint &  aMoveVector)
overridevirtual

Move an edge of the footprint.

This is a footprint shape modification. (should be only called by a footprint editing function)

Reimplemented from PCB_SHAPE.

Definition at line 288 of file fp_shape.cpp.

289 {
290  // Move an edge of the footprint.
291  // This is a footprint shape modification.
292  m_Start0 += aMoveVector;
293  m_End0 += aMoveVector;
294  m_ThirdPoint0 += aMoveVector;
295  m_Bezier0_C1 += aMoveVector;
296  m_Bezier0_C2 += aMoveVector;
297 
298  switch( GetShape() )
299  {
300  default:
301  break;
302 
303  case S_POLYGON:
304  // polygon corners coordinates are always relative to the
305  // footprint position, orientation 0
306  m_poly.Move( VECTOR2I( aMoveVector ) );
307 
308  break;
309  }
310 
311  SetDrawCoord();
312 }
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
VECTOR2< int > VECTOR2I
Definition: vector2d.h:623
wxPoint m_ThirdPoint0
End point for an arc.
Definition: fp_shape.h:162
void Move(const VECTOR2I &aVector) override
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
wxPoint m_End0
End point, relative to footprint origin, orient 0.
Definition: fp_shape.h:161
wxPoint m_Start0
Start point or center, relative to footprint origin, orient 0.
Definition: fp_shape.h:160
void SetDrawCoord()
Set draw coordinates (absolute values ) from relative coordinates.
Definition: fp_shape.cpp:81
wxPoint m_Bezier0_C2
Bezier Control Point 2, relative to footprint origin, orient 0.
Definition: fp_shape.h:164
PCB_SHAPE_TYPE_T GetShape() const
Definition: pcb_shape.h:130
wxPoint m_Bezier0_C1
Bezier Control Point 1, relative to footprint origin, orient 0.
Definition: fp_shape.h:163

References PCB_SHAPE::GetShape(), m_Bezier0_C1, m_Bezier0_C2, m_End0, PCB_SHAPE::m_poly, m_Start0, m_ThirdPoint0, SHAPE_POLY_SET::Move(), S_POLYGON, and SetDrawCoord().

Referenced by PAD_TOOL::explodePad(), and FOOTPRINT::MoveAnchorPosition().

◆ Move() [2/2]

void BOARD_ITEM::Move ( const VECTOR2I aMoveVector)
inlineinherited

Definition at line 283 of file board_item.h.

284  {
285  Move( wxPoint( aMoveVector.x, aMoveVector.y ) );
286  }
virtual void Move(const wxPoint &aMoveVector)
Move this object.
Definition: board_item.h:277

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

◆ operator<()

bool EDA_ITEM::operator< ( const EDA_ITEM aItem) const
inherited

Test if another item is less than this object.

Parameters
aItem- Item to compare against.
Returns
- True if aItem is less than the item.

Definition at line 185 of file eda_item.cpp.

186 {
187  wxFAIL_MSG( wxString::Format( wxT( "Less than operator not defined for item type %s." ),
188  GetClass() ) );
189 
190  return false;
191 }
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, const CPTREE &aTree)
Output a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:200
virtual wxString GetClass() const =0
Return the class name.

References Format(), and EDA_ITEM::GetClass().

◆ RebuildBezierToSegmentsPointsList()

void PCB_SHAPE::RebuildBezierToSegmentsPointsList ( int  aMinSegLen)
inherited

Rebuild the m_BezierPoints vertex list that approximate the Bezier curve by a list of segments Has meaning only for S_CURVE DRAW_SEGMENT shape.

Parameters
aMinSegLenis the min length of segments approximating the shape. the last segment can be shorter This param avoid having too many very short segment in list. a good value is m_Width/2 to m_Width

Definition at line 315 of file pcb_shape.cpp.

316 {
317  // Has meaning only for S_CURVE DRAW_SEGMENT shape
318  if( m_shape != S_CURVE )
319  {
320  m_bezierPoints.clear();
321  return;
322  }
323  // Rebuild the m_BezierPoints vertex list that approximate the Bezier curve
325 }
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
std::vector< wxPoint > m_bezierPoints
Definition: pcb_shape.h:57
Bezier Curve.
Definition: board_item.h:55
const std::vector< wxPoint > buildBezierToSegmentsPointsList(int aMinSegLen) const
Definition: pcb_shape.cpp:328

References PCB_SHAPE::buildBezierToSegmentsPointsList(), PCB_SHAPE::m_bezierPoints, PCB_SHAPE::m_shape, and S_CURVE.

Referenced by ConvertOutlineToPolygon(), Flip(), GRAPHICS_CLEANER::isNullSegment(), SetDrawCoord(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), and PCB_POINT_EDITOR::updateItem().

◆ Replace() [1/2]

bool EDA_ITEM::Replace ( const wxFindReplaceData &  aSearchData,
wxString &  aText 
)
staticinherited

Perform a text replace on aText using the find and replace criteria in aSearchData on items that support text find and replace.

Parameters
aSearchDataA reference to a wxFindReplaceData object containing the search and replace criteria.
aTextA reference to a wxString object containing the text to be replaced.
Returns
True if aText was modified, otherwise false.

Definition at line 159 of file eda_item.cpp.

160 {
161  wxString searchString = (aSearchData.GetFlags() & wxFR_MATCHCASE) ? aText : aText.Upper();
162 
163  int result = searchString.Find( (aSearchData.GetFlags() & wxFR_MATCHCASE) ?
164  aSearchData.GetFindString() :
165  aSearchData.GetFindString().Upper() );
166 
167  if( result == wxNOT_FOUND )
168  return false;
169 
170  wxString prefix = aText.Left( result );
171  wxString suffix;
172 
173  if( aSearchData.GetFindString().length() + result < aText.length() )
174  suffix = aText.Right( aText.length() - ( aSearchData.GetFindString().length() + result ) );
175 
176  wxLogTrace( traceFindReplace, wxT( "Replacing '%s', prefix '%s', replace '%s', suffix '%s'." ),
177  aText, prefix, aSearchData.GetReplaceString(), suffix );
178 
179  aText = prefix + aSearchData.GetReplaceString() + suffix;
180 
181  return true;
182 }
const wxChar *const traceFindReplace
Flag to enable find and replace debug tracing.

References traceFindReplace.

Referenced by SCH_FIELD::Replace(), EDA_TEXT::Replace(), and SCH_EDITOR_CONTROL::ReplaceAndFindNext().

◆ Replace() [2/2]

virtual bool EDA_ITEM::Replace ( const wxFindReplaceData &  aSearchData,
void *  aAuxData = nullptr 
)
inlinevirtualinherited

Perform a text replace using the find and replace criteria in aSearchData on items that support text find and replace.

This function must be overridden for items that support text replace.

Parameters
aSearchDataA reference to a wxFindReplaceData object containing the search and replace criteria.
aAuxDataA pointer to optional data required for the search or NULL if not used.
Returns
True if the item text was modified, otherwise false.

Reimplemented in SCH_TEXT, SCH_SHEET_PIN, SCH_FIELD, and SCH_PIN.

Definition at line 441 of file eda_item.h.

442  {
443  return false;
444  }

◆ Rotate() [1/2]

void FP_SHAPE::Rotate ( const wxPoint &  aRotCentre,
double  aAngle 
)
overridevirtual

Rotate an edge of the footprint.

This is a footprint shape modification. (should be only called by a footprint editing function )

Reimplemented from PCB_SHAPE.

Definition at line 276 of file fp_shape.cpp.

277 {
278  // We should rotate the relative coordinates, but to avoid duplicate code do the base class
279  // rotation of draw coordinates, which is acceptable because in the footprint editor
280  // m_Pos0 = m_Pos
281  PCB_SHAPE::Rotate( aRotCentre, aAngle );
282 
283  // and now update the relative coordinates, which are the reference in most transforms.
284  SetLocalCoord();
285 }
virtual void Rotate(const wxPoint &aRotCentre, double aAngle) override
Rotate this object.
Definition: pcb_shape.cpp:197
void SetLocalCoord()
Set relative coordinates from draw coordinates.
Definition: fp_shape.cpp:53

References PCB_SHAPE::Rotate(), and SetLocalCoord().

Referenced by PAD_TOOL::explodePad(), and EAGLE_PLUGIN::packageRectangle().

◆ Rotate() [2/2]

void BOARD_ITEM::Rotate ( const VECTOR2I aRotCentre,
double  aAngle 
)
inlineinherited

Definition at line 299 of file board_item.h.

300  {
301  Rotate( wxPoint( aRotCentre.x, aRotCentre.y ), aAngle );
302  }
virtual void Rotate(const wxPoint &aRotCentre, double aAngle)
Rotate this object.
Definition: board_item.h:294

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

◆ Scale()

void PCB_SHAPE::Scale ( double  aScale)
inherited

Definition at line 147 of file pcb_shape.cpp.

148 {
149  auto scalePt = [&]( wxPoint& pt )
150  {
151  pt.x = KiROUND( pt.x * aScale );
152  pt.y = KiROUND( pt.y * aScale );
153  };
154 
155  int radius = GetRadius();
156 
157  scalePt( m_start );
158  scalePt( m_end );
159 
160  // specific parameters:
161  switch( m_shape )
162  {
163  case S_CURVE:
164  scalePt( m_bezierC1 );
165  scalePt( m_bezierC2 );
166  break;
167 
168  case S_ARC:
169  scalePt( m_thirdPoint );
170  break;
171 
172  case S_CIRCLE: // ring or circle
173  m_end.x = m_start.x + KiROUND( radius * aScale );
174  m_end.y = m_start.y;
175  break;
176 
177  case S_POLYGON: // polygon
178  {
179  std::vector<wxPoint> pts;
180 
181  for( const VECTOR2I& pt : m_poly.Outline( 0 ).CPoints() )
182  {
183  pts.emplace_back( pt );
184  scalePt( pts.back() );
185  }
186 
187  SetPolyPoints( pts );
188  }
189  break;
190 
191  default:
192  break;
193  }
194 }
wxPoint m_end
Definition: pcb_shape.h:49
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
int GetRadius() const
Function GetRadius returns the radius of this item Has meaning only for arc and circle.
Definition: pcb_shape.h:201
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
Arcs (with rounded ends)
Definition: board_item.h:52
wxPoint m_thirdPoint
Definition: pcb_shape.h:50
const std::vector< VECTOR2I > & CPoints() const
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
SHAPE_LINE_CHAIN & Outline(int aIndex)
wxPoint m_start
Definition: pcb_shape.h:48
constexpr ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: util.h:68
ring
Definition: board_item.h:53
wxPoint m_bezierC1
Definition: pcb_shape.h:54
wxPoint m_bezierC2
Definition: pcb_shape.h:55
Bezier Curve.
Definition: board_item.h:55
void SetPolyPoints(const std::vector< wxPoint > &aPoints)
Definition: pcb_shape.cpp:1075

References SHAPE_LINE_CHAIN::CPoints(), PCB_SHAPE::GetRadius(), KiROUND(), PCB_SHAPE::m_bezierC1, PCB_SHAPE::m_bezierC2, PCB_SHAPE::m_end, PCB_SHAPE::m_poly, PCB_SHAPE::m_shape, PCB_SHAPE::m_start, PCB_SHAPE::m_thirdPoint, SHAPE_POLY_SET::Outline(), S_ARC, S_CIRCLE, S_CURVE, S_POLYGON, and PCB_SHAPE::SetPolyPoints().

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::getDrawSegmentFromVertex().

◆ Set() [1/3]

bool INSPECTABLE::Set ( PROPERTY_BASE aProperty,
wxAny &  aValue 
)
inlineinherited

Definition at line 40 of file inspectable.h.

41  {
43  TYPE_ID thisType = TYPE_HASH( *this );
44  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
45 
46  if( object )
47  aProperty->setter( object, aValue );
48 
49  return object != nullptr;
50  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:66
#define TYPE_HASH(x)
Definition: property.h:57
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:43
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
virtual void setter(void *aObject, wxAny &aValue)=0
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:63
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::setter(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Set() [2/3]

template<typename T >
bool INSPECTABLE::Set ( PROPERTY_BASE aProperty,
aValue 
)
inlineinherited

Definition at line 53 of file inspectable.h.

54  {
56  TYPE_ID thisType = TYPE_HASH( *this );
57  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
58 
59  if( object )
60  aProperty->set<T>( object, aValue );
61 
62  return object != nullptr;
63  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:66
#define TYPE_HASH(x)
Definition: property.h:57
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:43
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:63
void set(void *aObject, T aValue)
Definition: property.h:259
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::set(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ Set() [3/3]

template<typename T >
bool INSPECTABLE::Set ( const wxString &  aProperty,
aValue 
)
inlineinherited

Definition at line 66 of file inspectable.h.

67  {
69  TYPE_ID thisType = TYPE_HASH( *this );
70  PROPERTY_BASE* prop = propMgr.GetProperty( thisType, aProperty );
71  void* object = nullptr;
72 
73  if( prop )
74  {
75  object = propMgr.TypeCast( this, thisType, prop->OwnerHash() );
76 
77  if( object )
78  prop->set<T>( object, aValue );
79  }
80 
81  return object != nullptr;
82  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:66
#define TYPE_HASH(x)
Definition: property.h:57
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:43
const void * TypeCast(const void *aSource, TYPE_ID aBase, TYPE_ID aTarget) const
Cast a type to another type.
PROPERTY_BASE * GetProperty(TYPE_ID aType, const wxString &aProperty) const
Return a property for a specific type.
Provide class metadata.Helper macro to map type hashes to names.
Definition: property_mgr.h:63
void set(void *aObject, T aValue)
Definition: property.h:259
virtual size_t OwnerHash() const =0
Return type-id of the Owner class.

References PROPERTY_MANAGER::GetProperty(), PROPERTY_MANAGER::Instance(), PROPERTY_BASE::OwnerHash(), PROPERTY_BASE::set(), TYPE_HASH, and PROPERTY_MANAGER::TypeCast().

◆ SetAngle()

void FP_SHAPE::SetAngle ( double  aAngle,
bool  aUpdateEnd = true 
)
overridevirtual

Sets the angle for arcs, and normalizes it within the range 0 - 360 degrees.

Parameters
aAngleis tenths of degrees, but will soon be degrees.
aUpdateEnd= true to update also arc end coordinates m_thirdPoint and m_ThirdPoint0, so must be called after setting m_Start, m_Start0, m_End and m_End0

Reimplemented from PCB_SHAPE.

Definition at line 141 of file fp_shape.cpp.

142 {
143  // Mark as depreciated.
144  // m_Angle does not define the arc anymore
145  // Update the parent class (updates the global m_ThirdPoint)
146  PCB_SHAPE::SetAngle( aAngle, aUpdateEnd );
147 
148  // Also update the local m_ThirdPoint0 if requested
149  if( aUpdateEnd )
150  {
153  }
154 }
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:228
wxPoint m_ThirdPoint0
End point for an arc.
Definition: fp_shape.h:162
wxPoint m_End0
End point, relative to footprint origin, orient 0.
Definition: fp_shape.h:161
wxPoint m_Start0
Start point or center, relative to footprint origin, orient 0.
Definition: fp_shape.h:160
double m_angle
Definition: pcb_shape.h:53
virtual void SetAngle(double aAngle, bool aUpdateEnd=true)
Sets the angle for arcs, and normalizes it within the range 0 - 360 degrees.
Definition: pcb_shape.cpp:465

References PCB_SHAPE::m_angle, m_End0, m_Start0, m_ThirdPoint0, RotatePoint(), and PCB_SHAPE::SetAngle().

Referenced by PCAD2KICAD::PCB_ARC::AddToFootprint(), PAD_TOOL::explodePad(), Flip(), Mirror(), EAGLE_PLUGIN::packageWire(), and GPCB_FPL_CACHE::parseFOOTPRINT().

◆ SetArcEnd()

void PCB_SHAPE::SetArcEnd ( const wxPoint &  aArcEndPoint)
inlineinherited

Initialize the end arc point.

can be used for circles to initialize one point of the cicumference

Definition at line 222 of file pcb_shape.h.

223  {
224  m_thirdPoint = aArcEndPoint;
225  }
wxPoint m_thirdPoint
Definition: pcb_shape.h:50

References PCB_SHAPE::m_thirdPoint.

Referenced by PCB_POINT_EDITOR::editArcEndpointKeepCenter(), PCB_POINT_EDITOR::editArcEndpointKeepTangent(), PCB_POINT_EDITOR::editArcMidKeepCenter(), CONVERT_TOOL::SegmentToArc(), PCB_SHAPE::SetArcGeometry(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), and updateArcFromConstructionMgr().

◆ SetArcGeometry()

void PCB_SHAPE::SetArcGeometry ( const wxPoint &  aStart,
const wxPoint &  aMid,
const wxPoint &  aEnd 
)
inherited

Set the three controlling points for an arc.

NB: these are NOT what's currently stored, so we have to do some calculations behind the scenes. However, they are what SHOULD be stored.

Definition at line 442 of file pcb_shape.cpp.

443 {
444  SetArcStart( aStart );
445  SetArcEnd( aEnd );
446 
447  // Sadly we currently store center and angle rather than mid. So we have to calculate
448  // those.
449  wxPoint center = GetArcCenter( aStart, aMid, aEnd );
450  VECTOR2D startLine = aStart - center;
451  VECTOR2D endLine = aEnd - center;
452  bool clockwise = GetAngle() > 0;
453  double angle = RAD2DECIDEG( endLine.Angle() - startLine.Angle() );
454 
455  if( clockwise && angle < 0.0 )
456  angle += 3600.0;
457  else if( !clockwise && angle > 0.0 )
458  angle -= 3600.0;
459 
460  SetAngle( angle, false );
461  SetCenter( center );
462 }
double RAD2DECIDEG(double rad)
Definition: trigo.h:236
void SetCenter(const wxPoint &aCenterPoint)
For arcs and circles:
Definition: pcb_shape.h:229
double Angle() const
Compute the angle of the vector.
Definition: vector2d.h:307
static DIRECTION_45::AngleType angle(const VECTOR2I &a, const VECTOR2I &b)
double GetAngle() const
Definition: pcb_shape.h:127
void SetArcEnd(const wxPoint &aArcEndPoint)
Initialize the end arc point.
Definition: pcb_shape.h:222
const VECTOR2I GetArcCenter(const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
Determine the center of an arc or circle given three points on its circumference.
Definition: trigo.cpp:450
virtual void SetAngle(double aAngle, bool aUpdateEnd=true)
Sets the angle for arcs, and normalizes it within the range 0 - 360 degrees.
Definition: pcb_shape.cpp:465
void SetArcStart(const wxPoint &aArcStartPoint)
Initialize the start arc point.
Definition: pcb_shape.h:213

References VECTOR2< T >::Angle(), PNS::angle(), PCB_SHAPE::GetAngle(), GetArcCenter(), RAD2DECIDEG(), PCB_SHAPE::SetAngle(), PCB_SHAPE::SetArcEnd(), PCB_SHAPE::SetArcStart(), and PCB_SHAPE::SetCenter().

Referenced by PCB_POINT_EDITOR::editArcMidKeepEndpoints().

◆ SetArcStart()

◆ SetBezControl1()

void PCB_SHAPE::SetBezControl1 ( const wxPoint &  aPoint)
inlineinherited

◆ SetBezControl2()

void PCB_SHAPE::SetBezControl2 ( const wxPoint &  aPoint)
inlineinherited

◆ SetBezier0_C1()

void FP_SHAPE::SetBezier0_C1 ( const wxPoint &  aPoint)
inline

Definition at line 120 of file fp_shape.h.

120 { m_Bezier0_C1 = aPoint; }
wxPoint m_Bezier0_C1
Bezier Control Point 1, relative to footprint origin, orient 0.
Definition: fp_shape.h:163

References m_Bezier0_C1.

Referenced by DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow().

◆ SetBezier0_C2()

void FP_SHAPE::SetBezier0_C2 ( const wxPoint &  aPoint)
inline

Definition at line 123 of file fp_shape.h.

123 { m_Bezier0_C2 = aPoint; }
wxPoint m_Bezier0_C2
Bezier Control Point 2, relative to footprint origin, orient 0.
Definition: fp_shape.h:164

References m_Bezier0_C2.

Referenced by DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow().

◆ SetBezierPoints()

void PCB_SHAPE::SetBezierPoints ( const std::vector< wxPoint > &  aPoints)
inlineinherited

Definition at line 278 of file pcb_shape.h.

279  {
280  m_bezierPoints = aPoints;
281  }
std::vector< wxPoint > m_bezierPoints
Definition: pcb_shape.h:57

References PCB_SHAPE::m_bezierPoints.

◆ SetBrightened()

void EDA_ITEM::SetBrightened ( )
inlineinherited

◆ SetCenter()

◆ SetDrawCoord()

void FP_SHAPE::SetDrawCoord ( )

Set draw coordinates (absolute values ) from relative coordinates.

Must be called when a relative coordinate has changed in order to see the changes on screen

Definition at line 81 of file fp_shape.cpp.

82 {
83  FOOTPRINT* fp = static_cast<FOOTPRINT*>( m_parent );
84 
85  m_start = m_Start0;
86  m_end = m_End0;
90 
91  if( fp )
92  {
93  RotatePoint( &m_start.x, &m_start.y, fp->GetOrientation() );
94  RotatePoint( &m_end.x, &m_end.y, fp->GetOrientation() );
98 
99  m_start += fp->GetPosition();
100  m_end += fp->GetPosition();
101  m_thirdPoint += fp->GetPosition();
102  m_bezierC1 += fp->GetPosition();
103  m_bezierC2 += fp->GetPosition();
104  }
105 
107 }
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:528
wxPoint m_end
Definition: pcb_shape.h:49
double GetOrientation() const
Definition: footprint.h:186
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:228
wxPoint m_thirdPoint
Definition: pcb_shape.h:50
wxPoint m_ThirdPoint0
End point for an arc.
Definition: fp_shape.h:162
wxPoint m_End0
End point, relative to footprint origin, orient 0.
Definition: fp_shape.h:161
wxPoint m_Start0
Start point or center, relative to footprint origin, orient 0.
Definition: fp_shape.h:160
wxPoint m_Bezier0_C2
Bezier Control Point 2, relative to footprint origin, orient 0.
Definition: fp_shape.h:164
wxPoint m_start
Definition: pcb_shape.h:48
int m_width
Definition: pcb_shape.h:46
wxPoint GetPosition() const override
Definition: footprint.h:182
void RebuildBezierToSegmentsPointsList(int aMinSegLen)
Rebuild the m_BezierPoints vertex list that approximate the Bezier curve by a list of segments Has me...
Definition: pcb_shape.cpp:315
wxPoint m_bezierC1
Definition: pcb_shape.h:54
wxPoint m_Bezier0_C1
Bezier Control Point 1, relative to footprint origin, orient 0.
Definition: fp_shape.h:163
wxPoint m_bezierC2
Definition: pcb_shape.h:55

References FOOTPRINT::GetOrientation(), FOOTPRINT::GetPosition(), m_Bezier0_C1, m_Bezier0_C2, PCB_SHAPE::m_bezierC1, PCB_SHAPE::m_bezierC2, PCB_SHAPE::m_end, m_End0, EDA_ITEM::m_parent, PCB_SHAPE::m_start, m_Start0, PCB_SHAPE::m_thirdPoint, m_ThirdPoint0, PCB_SHAPE::m_width, PCB_SHAPE::RebuildBezierToSegmentsPointsList(), and RotatePoint().

Referenced by PCAD2KICAD::PCB_ARC::AddToFootprint(), PCAD2KICAD::PCB_LINE::AddToFootprint(), PCAD2KICAD::PCB_POLYGON::AddToFootprint(), LEGACY_PLUGIN::loadFP_SHAPE(), Mirror(), Move(), EAGLE_PLUGIN::packageCircle(), EAGLE_PLUGIN::packagePolygon(), EAGLE_PLUGIN::packageWire(), GPCB_FPL_CACHE::parseFOOTPRINT(), PCB_PARSER::parseFOOTPRINT_unchecked(), and FOOTPRINT::SetPosition().

◆ SetEnd()

◆ SetEnd0()

◆ SetEndX()

void PCB_SHAPE::SetEndX ( int  x)
inlineinherited

◆ SetEndY()

void PCB_SHAPE::SetEndY ( int  y)
inlineinherited

◆ SetFilled()

◆ SetFlags()

void EDA_ITEM::SetFlags ( STATUS_FLAGS  aMask)
inlineinherited

Definition at line 202 of file eda_item.h.

202 { m_flags |= aMask; }
STATUS_FLAGS m_flags
Definition: eda_item.h:530

References EDA_ITEM::m_flags.

Referenced by SCH_EAGLE_PLUGIN::addBusEntries(), PCB_BASE_FRAME::AddFootprintToBoard(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), SCH_MOVE_TOOL::AlignElements(), PCB_CONTROL::AppendBoard(), FOOTPRINT::BuildPolyCourtyards(), SCH_EDIT_TOOL::ChangeTextType(), TRACKS_CLEANER::cleanup(), GRAPHICS_CLEANER::cleanupSegments(), ConvertOutlineToPolygon(), SCH_EDIT_FRAME::ConvertPart(), SCH_DRAWING_TOOLS::createNewText(), SYMBOL_EDITOR_PIN_TOOL::CreatePin(), SCH_DRAWING_TOOLS::createSheetPin(), SCH_EDIT_TOOL::DoDelete(), SCH_LINE_WIRE_BUS_TOOL::doDrawSegments(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), EDIT_TOOL::DragArcTrack(), KIGFX::SCH_PAINTER::draw(), SYMBOL_EDITOR_DRAWING_TOOLS::DrawShape(), SCH_DRAWING_TOOLS::DrawSheet(), SCH_EDIT_TOOL::Duplicate(), PCB_SELECTION_TOOL::EnterGroup(), SCH_MOVE_TOOL::getConnectedDragItems(), SYMBOL_EDIT_FRAME::GetSymbolFromRedoList(), SYMBOL_EDIT_FRAME::GetSymbolFromUndoList(), EE_SELECTION_TOOL::Main(), TRACKS_CLEANER::mergeCollinearSegments(), SYMBOL_EDITOR_MOVE_TOOL::moveItem(), SCH_MOVE_TOOL::moveItem(), EE_SELECTION_TOOL::narrowSelection(), KIGFX::ORIGIN_VIEWITEM::ORIGIN_VIEWITEM(), SCH_ALTIUM_PLUGIN::ParseBezier(), SCH_ALTIUM_PLUGIN::ParseBus(), SCH_ALTIUM_PLUGIN::ParseBusEntry(), SCH_ALTIUM_PLUGIN::ParseJunction(), SCH_ALTIUM_PLUGIN::ParseLabel(), SCH_ALTIUM_PLUGIN::ParseLine(), SCH_ALTIUM_PLUGIN::ParseNetLabel(), SCH_ALTIUM_PLUGIN::ParseNoERC(), SCH_ALTIUM_PLUGIN::ParsePolygon(), SCH_ALTIUM_PLUGIN::ParsePolyline(), SCH_ALTIUM_PLUGIN::ParsePort(), SCH_ALTIUM_PLUGIN::ParseRectangle(), SCH_ALTIUM_PLUGIN::ParseRoundRectangle(), SCH_ALTIUM_PLUGIN::ParseSheetSymbol(), SCH_ALTIUM_PLUGIN::ParseWire(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), SCH_EDITOR_CONTROL::Paste(), SCH_DRAWING_TOOLS::PlaceComponent(), BOARD_EDITOR_CONTROL::PlaceFootprint(), SCH_DRAWING_TOOLS::PlaceImage(), PL_DRAWING_TOOLS::PlaceItem(), DRAWING_TOOL::PlaceText(), BACK_ANNOTATE::processNetNameChange(), SCH_EDIT_FRAME::PutDataInPreviousState(), PCB_SELECTION_TOOL::RebuildSelection(), FOOTPRINT::Remove(), BOARD::Remove(), SCH_EDIT_TOOL::RepeatDrawItem(), SYMBOL_EDITOR_PIN_TOOL::RepeatPin(), SYMBOL_EDIT_FRAME::SaveCopyInUndoList(), EE_SELECTION_TOOL::selectMultiple(), SCH_EDIT_FRAME::SelectUnit(), EDA_ITEM::SetBrightened(), EDA_ITEM::SetModified(), EDA_ITEM::SetSelected(), EDA_ITEM::SetWireImage(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_LINE_WIRE_BUS_TOOL::startSegments(), DS_DATA_ITEM::SyncDrawItems(), DS_DATA_ITEM_TEXT::SyncDrawItems(), DS_DATA_ITEM_BITMAP::SyncDrawItems(), DIALOG_DIMENSION_PROPERTIES::TransferDataFromWindow(), DIALOG_TARGET_PROPERTIES::TransferDataFromWindow(), DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), SYMBOL_EDITOR_DRAWING_TOOLS::TwoClickPlace(), and SCH_DRAWING_TOOLS::TwoClickPlace().

◆ SetForceVisible()

void EDA_ITEM::SetForceVisible ( bool  aEnable)
inlineinherited

Set and clear force visible flag used to force the item to be drawn even if it's draw attribute is set to not visible.

Parameters
aEnableTrue forces the item to be drawn. False uses the item's visibility setting to determine if the item is to be drawn.

Definition at line 253 of file eda_item.h.

253 { m_forceVisible = aEnable; }
bool m_forceVisible
Definition: eda_item.h:529

References EDA_ITEM::m_forceVisible.

Referenced by SCH_EDITOR_CONTROL::UpdateFind().

◆ SetLayer()

virtual void BOARD_ITEM::SetLayer ( PCB_LAYER_ID  aLayer)
inlinevirtualinherited

Set the layer this item is on.

This method is virtual because some items (in fact: class DIMENSION) have a slightly different initialization.

Parameters
aLayerThe layer number.

Reimplemented in DIMENSION_BASE, ZONE, and PCB_GROUP.

Definition at line 194 of file board_item.h.

195  {
196  m_layer = aLayer;
197  }
PCB_LAYER_ID m_layer
Definition: board_item.h:363

References BOARD_ITEM::m_layer.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), PNS_KICAD_IFACE::AddItem(), PCAD2KICAD::PCB_ARC::AddToBoard(), PCAD2KICAD::PCB_LINE::AddToBoard(), PCAD2KICAD::PCB_PAD::AddToBoard(), PCAD2KICAD::PCB_FOOTPRINT::AddToBoard(), PCAD2KICAD::PCB_LINE::AddToFootprint(), PCAD2KICAD::PCB_ARC::AddToFootprint(), PCAD2KICAD::PCB_POLYGON::AddToFootprint(), BOARD_CONNECTED_ITEM_DESC::BOARD_CONNECTED_ITEM_DESC(), BOARD_ITEM_DESC::BOARD_ITEM_DESC(), BOOST_AUTO_TEST_CASE(), MICROWAVE_TOOL::createMicrowaveInductor(), PCB_BASE_FRAME::CreateNewFootprint(), MICROWAVE_TOOL::createPolygonShape(), EDIT_TOOL::DragArcTrack(), DRAWING_TOOL::drawArc(), CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarShape(), CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarText(), PAD_TOOL::explodePad(), EDIT_TOOL::FilletTracks(), PCB_TARGET::Flip(), PCB_TEXT::Flip(), TRACK::Flip(), Flip(), FP_TEXT::Flip(), FOOTPRINT::Flip(), ARC::Flip(), PCB_SHAPE::Flip(), FOOTPRINT_DESC::FOOTPRINT_DESC(), FP_TEXT::FP_TEXT(), ALTIUM_PCB::HelperCreateBoardOutline(), ALTIUM_PCB::HelperParseDimensions6Datum(), ALTIUM_PCB::HelperParseDimensions6Leader(), ALTIUM_PCB::HelperParsePad6NonCopper(), CONVERT_TOOL::LinesToPoly(), LEGACY_PLUGIN::loadFOOTPRINT(), FABMASTER::loadFootprints(), FABMASTER::loadGraphics(), LEGACY_PLUGIN::loadMODULE_TEXT(), CADSTAR_PCB_ARCHIVE_LOADER::loadNetTracks(), LEGACY_PLUGIN::loadPCB_TEXT(), EAGLE_PLUGIN::loadPlain(), FABMASTER::loadPolygon(), EAGLE_PLUGIN::loadSignals(), LEGACY_PLUGIN::loadTrackList(), main(), DSN::SPECCTRA_DB::makeTRACK(), CADSTAR_PCB_ARCHIVE_LOADER::makeTracksFromDrawsegments(), GRAPHICS_CLEANER::mergeRects(), DIALOG_FOOTPRINT_FP_EDITOR::OnAddField(), DIALOG_FOOTPRINT_PROPERTIES::OnAddField(), EAGLE_PLUGIN::packageCircle(), EAGLE_PLUGIN::packagePolygon(), EAGLE_PLUGIN::packageRectangle(), EAGLE_PLUGIN::packageSMD(), EAGLE_PLUGIN::packageText(), EAGLE_PLUGIN::packageWire(), ALTIUM_PCB::ParseArcs6Data(), ALTIUM_PCB::ParseComponents6Data(), ALTIUM_PCB::ParseFills6Data(), GPCB_FPL_CACHE::parseFOOTPRINT(), ALTIUM_PCB::ParsePads6Data(), ALTIUM_PCB::ParseShapeBasedRegions6Data(), ALTIUM_PCB::ParseTexts6Data(), ALTIUM_PCB::ParseTracks6Data(), BOARD_EDITOR_CONTROL::PlaceTarget(), DRAWING_TOOL::PlaceText(), BRDITEMS_PLOTTER::PlotDimension(), BRDITEMS_PLOTTER::PlotPcbTarget(), CONVERT_TOOL::PolyToLines(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::processItem(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), processTextItem(), PNS_PCBNEW_RULE_RESOLVER::QueryConstraint(), DIALOG_PAD_PROPERTIES::redraw(), CLIPBOARD_IO::SaveSelection(), CONVERT_TOOL::SegmentToArc(), DIMENSION_BASE::SetLayer(), FP_TEXT_GRID_TABLE::SetValueAsLong(), GLOBAL_EDIT_TOOL::swapBoardItem(), TRACK_VIA_DESC::TRACK_VIA_DESC(), DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), and DIALOG_TEXT_PROPERTIES::TransferDataFromWindow().

◆ SetLayerSet()

virtual void BOARD_ITEM::SetLayerSet ( LSET  aLayers)
inlinevirtualinherited

Reimplemented in VIA, PAD, and ZONE.

Definition at line 179 of file board_item.h.

180  {
181  wxFAIL_MSG( "Attempted to SetLayerSet() on a single-layer object." );
182 
183  // Derived classes which support multiple layers must implement this
184  }

Referenced by PANEL_SETUP_LAYERS::TransferDataFromWindow().

◆ SetLocalCoord()

void FP_SHAPE::SetLocalCoord ( )

Set relative coordinates from draw coordinates.

Call in only when the geometry or the footprint is modified and therefore the relative coordinates have to be updated from the draw coordinates.

Definition at line 53 of file fp_shape.cpp.

54 {
55  FOOTPRINT* fp = static_cast<FOOTPRINT*>( m_parent );
56 
57  if( fp == NULL )
58  {
59  m_Start0 = m_start;
60  m_End0 = m_end;
64  return;
65  }
66 
67  m_Start0 = m_start - fp->GetPosition();
68  m_End0 = m_end - fp->GetPosition();
72  double angle = fp->GetOrientation();
73  RotatePoint( &m_Start0.x, &m_Start0.y, -angle );
74  RotatePoint( &m_End0.x, &m_End0.y, -angle );
78 }
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:528
wxPoint m_end
Definition: pcb_shape.h:49
double GetOrientation() const
Definition: footprint.h:186
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:228
wxPoint m_thirdPoint
Definition: pcb_shape.h:50
wxPoint m_ThirdPoint0
End point for an arc.
Definition: fp_shape.h:162
#define NULL
wxPoint m_End0
End point, relative to footprint origin, orient 0.
Definition: fp_shape.h:161
wxPoint m_Start0
Start point or center, relative to footprint origin, orient 0.
Definition: fp_shape.h:160
wxPoint m_Bezier0_C2
Bezier Control Point 2, relative to footprint origin, orient 0.
Definition: fp_shape.h:164
wxPoint m_start
Definition: pcb_shape.h:48
static DIRECTION_45::AngleType angle(const VECTOR2I &a, const VECTOR2I &b)
wxPoint GetPosition() const override
Definition: footprint.h:182
wxPoint m_bezierC1
Definition: pcb_shape.h:54
wxPoint m_Bezier0_C1
Bezier Control Point 1, relative to footprint origin, orient 0.
Definition: fp_shape.h:163
wxPoint m_bezierC2
Definition: pcb_shape.h:55

References PNS::angle(), FOOTPRINT::GetOrientation(), FOOTPRINT::GetPosition(), m_Bezier0_C1, m_Bezier0_C2, PCB_SHAPE::m_bezierC1, PCB_SHAPE::m_bezierC2, PCB_SHAPE::m_end, m_End0, EDA_ITEM::m_parent, PCB_SHAPE::m_start, m_Start0, PCB_SHAPE::m_thirdPoint, m_ThirdPoint0, NULL, and RotatePoint().

Referenced by PAD_TOOL::explodePad(), ALTIUM_PCB::HelperDrawsegmentSetLocalCoord(), PCB_CONTROL::Paste(), pasteFootprintItemsToFootprintEditor(), and Rotate().

◆ SetLocked()

◆ SetModified()

void EDA_ITEM::SetModified ( )
inherited

◆ SetParent()

virtual void EDA_ITEM::SetParent ( EDA_ITEM aParent)
inlinevirtualinherited

Reimplemented in DIMENSION_BASE.

Definition at line 165 of file eda_item.h.

165 { m_parent = aParent; }
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:528

References EDA_ITEM::m_parent.

Referenced by FOOTPRINT::Add(), BOARD::Add(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), BOARD_NETLIST_UPDATER::addNewComponent(), SCH_SHEET::AddPin(), PAD::AddPrimitive(), PAD::AddPrimitiveArc(), PAD::AddPrimitiveCircle(), PAD::AddPrimitiveCurve(), PAD::AddPrimitivePoly(), PAD::AddPrimitiveRect(), PAD::AddPrimitiveSegment(), SYMBOL_EDITOR_CONTROL::AddSymbolToSchematic(), SCH_SCREEN::Append(), LIB_FIELD::Copy(), SYMBOL_EDIT_FRAME::CreateNewPart(), SCH_DRAWING_TOOLS::createNewText(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), SCH_LINE_WIRE_BUS_TOOL::doUnfoldBus(), SCH_EDIT_TOOL::Duplicate(), PCB_EDIT_FRAME::ExchangeFootprint(), LIB_PART::Flatten(), FOOTPRINT::FOOTPRINT(), GPCB_PLUGIN::FootprintLoad(), LEGACY_PLUGIN::FootprintLoad(), EAGLE_PLUGIN::FootprintLoad(), PCB_IO::FootprintLoad(), PCB_IO::FootprintSave(), DISPLAY_FOOTPRINTS_FRAME::GetFootprint(), LIB_PART::LIB_PART(), SCH_LEGACY_PLUGIN_CACHE::loadAliases(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), SCH_SEXPR_PLUGIN::loadHierarchy(), SCH_LEGACY_PLUGIN::loadHierarchy(), FOOTPRINT::operator=(), LIB_PART::operator=(), PCB_PARSER::parseFOOTPRINT_unchecked(), SCH_SEXPR_PARSER::ParseSchematic(), SCH_SEXPR_PARSER::ParseSymbol(), SYMBOL_EDITOR_EDIT_TOOL::Paste(), PCB_CONTROL::Paste(), SCH_EDITOR_CONTROL::Paste(), pasteFootprintItemsToFootprintEditor(), SCH_DRAWING_TOOLS::PlaceComponent(), BOARD_EDITOR_CONTROL::PlaceFootprint(), BACK_ANNOTATE::processNetNameChange(), BOARD_COMMIT::Push(), SCH_SEXPR_PLUGIN_CACHE::removeSymbol(), SCH_LEGACY_PLUGIN_CACHE::removeSymbol(), PCB_BASE_EDIT_FRAME::SaveCopyInUndoList(), SaveCopyOfZones(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), SCH_SHEET_PIN::SCH_SHEET_PIN(), LIB_PART::SetFields(), DIMENSION_BASE::SetParent(), SCH_DRAWING_TOOLS::SingleClickPlace(), SCH_LINE_WIRE_BUS_TOOL::startSegments(), SCH_GLOBALLABEL::SwapData(), SCH_SHEET::SwapData(), SCH_COMPONENT::SwapData(), and SwapItemData().

◆ SetParentGroup()

void BOARD_ITEM::SetParentGroup ( PCB_GROUP aGroup)
inlineinherited

Definition at line 92 of file board_item.h.

92 { m_group = aGroup; }
PCB_GROUP * m_group
Definition: board_item.h:364

References BOARD_ITEM::m_group.

Referenced by PCB_GROUP::AddItem(), and PCB_GROUP::RemoveItem().

◆ SetPolyPoints()

void PCB_SHAPE::SetPolyPoints ( const std::vector< wxPoint > &  aPoints)
inherited

Definition at line 1075 of file pcb_shape.cpp.

1076 {
1078  m_poly.NewOutline();
1079 
1080  for ( const wxPoint& p : aPoints )
1081  m_poly.Append( p.x, p.y );
1082 }
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
int NewOutline()
Creates a new hole in a given outline.
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Add a new vertex to the contour indexed by aOutline and aHole (defaults to the outline of the last po...

References SHAPE_POLY_SET::Append(), PCB_SHAPE::m_poly, SHAPE_POLY_SET::NewOutline(), and SHAPE_POLY_SET::RemoveAllContours().

Referenced by PAD::AddPrimitivePoly(), PCAD2KICAD::PCB_POLYGON::AddToFootprint(), MICROWAVE_TOOL::createPolygonShape(), ALTIUM_PCB::HelperParsePad6NonCopper(), EAGLE_PLUGIN::packagePolygon(), EAGLE_PLUGIN::packageRectangle(), ALTIUM_PCB::ParseFills6Data(), PCB_SHAPE::Scale(), and DIALOG_PAD_PRIMITIVE_POLY_PROPS::TransferDataFromWindow().

◆ SetPolyShape()

◆ SetPosition()

void PCB_SHAPE::SetPosition ( const wxPoint &  aPos)
overridevirtualinherited

Reimplemented from EDA_ITEM.

Definition at line 61 of file pcb_shape.cpp.

62 {
63  m_start = aPos;
64 }
wxPoint m_start
Definition: pcb_shape.h:48

References PCB_SHAPE::m_start.

◆ SetSelected()

◆ SetShape()

void PCB_SHAPE::SetShape ( PCB_SHAPE_TYPE_T  aShape)
inlineinherited

◆ SetStart()

◆ SetStart0()

◆ SetStartX()

void PCB_SHAPE::SetStartX ( int  x)
inlineinherited

Definition at line 150 of file pcb_shape.h.

150 { m_start.x = x; }
wxPoint m_start
Definition: pcb_shape.h:48

References PCB_SHAPE::m_start.

Referenced by DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), and PCB_POINT_EDITOR::updateItem().

◆ SetStartY()

void PCB_SHAPE::SetStartY ( int  y)
inlineinherited

Definition at line 149 of file pcb_shape.h.

149 { m_start.y = y; }
wxPoint m_start
Definition: pcb_shape.h:48

References PCB_SHAPE::m_start.

Referenced by DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), and PCB_POINT_EDITOR::updateItem().

◆ SetState()

void EDA_ITEM::SetState ( int  type,
bool  state 
)
inlineinherited

Definition at line 191 of file eda_item.h.

192  {
193  if( state )
194  m_status |= type; // state = ON or OFF
195  else
196  m_status &= ~type;
197  }
STATUS_FLAGS m_status
Definition: eda_item.h:527

References EDA_ITEM::m_status.

Referenced by LEGACY_PLUGIN::loadTrackList(), TRACKS_CLEANER::mergeCollinearSegments(), PCB_SELECTION_TOOL::selectConnectedTracks(), and BOARD_ITEM::SetLocked().

◆ SetStatus()

void EDA_ITEM::SetStatus ( STATUS_FLAGS  aStatus)
inlineinherited

Definition at line 200 of file eda_item.h.

200 { m_status = aStatus; }
STATUS_FLAGS m_status
Definition: eda_item.h:527

References EDA_ITEM::m_status.

Referenced by BOARD_NETLIST_UPDATER::UpdateNetlist().

◆ SetThirdPoint()

void PCB_SHAPE::SetThirdPoint ( const wxPoint &  aPoint)
inlineinherited

Definition at line 170 of file pcb_shape.h.

170 { m_thirdPoint = aPoint; }
wxPoint m_thirdPoint
Definition: pcb_shape.h:50

References PCB_SHAPE::m_thirdPoint.

◆ SetThirdPoint0()

void FP_SHAPE::SetThirdPoint0 ( const wxPoint &  aPoint)
inline

Definition at line 117 of file fp_shape.h.

117 { m_ThirdPoint0 = aPoint; }
wxPoint m_ThirdPoint0
End point for an arc.
Definition: fp_shape.h:162

References m_ThirdPoint0.

◆ SetThirdPointX()

void PCB_SHAPE::SetThirdPointX ( int  x)
inlineinherited

Definition at line 172 of file pcb_shape.h.

172 { m_thirdPoint.x = x; }
wxPoint m_thirdPoint
Definition: pcb_shape.h:50

References PCB_SHAPE::m_thirdPoint.

◆ SetThirdPointY()

void PCB_SHAPE::SetThirdPointY ( int  y)
inlineinherited

Definition at line 171 of file pcb_shape.h.

171 { m_thirdPoint.y = y; }
wxPoint m_thirdPoint
Definition: pcb_shape.h:50

References PCB_SHAPE::m_thirdPoint.

◆ SetWidth()

void PCB_SHAPE::SetWidth ( int  aWidth)
inlineinherited

Definition at line 117 of file pcb_shape.h.

117 { m_width = aWidth; }
int m_width
Definition: pcb_shape.h:46

References PCB_SHAPE::m_width.

Referenced by PAD::AddPrimitiveArc(), PAD::AddPrimitiveCircle(), PAD::AddPrimitiveCurve(), PAD::AddPrimitivePoly(), PAD::AddPrimitiveRect(), PAD::AddPrimitiveSegment(), PCAD2KICAD::PCB_ARC::AddToBoard(), PCAD2KICAD::PCB_LINE::AddToBoard(), PCAD2KICAD::PCB_ARC::AddToFootprint(), PCAD2KICAD::PCB_LINE::AddToFootprint(), PCAD2KICAD::PCB_POLYGON::AddToFootprint(), MICROWAVE_TOOL::createMicrowaveInductor(), MICROWAVE_TOOL::createPolygonShape(), DRAWING_TOOL::drawArc(), CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarShape(), DRAWSEGMENT_DESC::DRAWSEGMENT_DESC(), PAD_TOOL::explodePad(), CADSTAR_PCB_ARCHIVE_LOADER::getKiCadPad(), ALTIUM_PCB::HelperCreateBoardOutline(), ALTIUM_PCB::HelperParseDimensions6Datum(), ALTIUM_PCB::HelperParseDimensions6Leader(), ALTIUM_PCB::HelperParsePad6NonCopper(), FABMASTER::loadGraphics(), CADSTAR_PCB_ARCHIVE_LOADER::loadNetTracks(), EAGLE_PLUGIN::loadPlain(), FABMASTER::loadPolygon(), GRAPHICS_CLEANER::mergeRects(), DIALOG_PAD_PROPERTIES::onAddPrimitive(), EAGLE_PLUGIN::packageCircle(), EAGLE_PLUGIN::packagePolygon(), EAGLE_PLUGIN::packageRectangle(), EAGLE_PLUGIN::packageWire(), ALTIUM_PCB::ParseArcs6Data(), ALTIUM_PCB::ParseFills6Data(), GPCB_FPL_CACHE::parseFOOTPRINT(), ALTIUM_PCB::ParseShapeBasedRegions6Data(), ALTIUM_PCB::ParseTracks6Data(), BRDITEMS_PLOTTER::PlotDimension(), BRDITEMS_PLOTTER::PlotPcbTarget(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), PAD_TOOL::recombinePad(), CONVERT_TOOL::SegmentToArc(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PRIMITIVES_PROPERTIES::TransferDataFromWindow(), and DIALOG_PAD_PRIMITIVE_POLY_PROPS::TransferDataFromWindow().

◆ SetWireImage()

void EDA_ITEM::SetWireImage ( )
inlineinherited

Definition at line 177 of file eda_item.h.

177 { SetFlags( IS_WIRE_IMAGE ); }
void SetFlags(STATUS_FLAGS aMask)
Definition: eda_item.h:202
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.
Definition: eda_item.h:110

References IS_WIRE_IMAGE, and EDA_ITEM::SetFlags().

◆ SetX()

void BOARD_ITEM::SetX ( int  aX)
inlineinherited

Definition at line 119 of file board_item.h.

120  {
121  wxPoint p( aX, GetY() );
122  SetPosition( p );
123  }
virtual void SetPosition(const wxPoint &aPos)
Definition: eda_item.h:302
int GetY() const
Definition: board_item.h:103

References BOARD_ITEM::GetY(), and EDA_ITEM::SetPosition().

Referenced by BOARD_ITEM_DESC::BOARD_ITEM_DESC(), and TRACK_VIA_DESC::TRACK_VIA_DESC().

◆ SetY()

void BOARD_ITEM::SetY ( int  aY)
inlineinherited

Definition at line 125 of file board_item.h.

126  {
127  wxPoint p( GetX(), aY );
128  SetPosition( p );
129  }
virtual void SetPosition(const wxPoint &aPos)
Definition: eda_item.h:302
int GetX() const
Definition: board_item.h:97

References BOARD_ITEM::GetX(), and EDA_ITEM::SetPosition().

Referenced by BOARD_ITEM_DESC::BOARD_ITEM_DESC(), and TRACK_VIA_DESC::TRACK_VIA_DESC().

◆ ShowShape()

wxString BOARD_ITEM::ShowShape ( PCB_SHAPE_TYPE_T  aShape)
staticinherited

Convert the enum PCB_SHAPE_TYPE_T integer value to a wxString.

Definition at line 31 of file board_item.cpp.

32 {
33  switch( aShape )
34  {
35  case S_SEGMENT: return _( "Line" );
36  case S_RECT: return _( "Rect" );
37  case S_ARC: return _( "Arc" );
38  case S_CIRCLE: return _( "Circle" );
39  case S_CURVE: return _( "Bezier Curve" );
40  case S_POLYGON: return _( "Polygon" );
41  default: return wxT( "??" );
42  }
43 }
polygon (not yet used for tracks, but could be in microwave apps)
Definition: board_item.h:54
usual segment : line with rounded ends
Definition: board_item.h:50
Arcs (with rounded ends)
Definition: board_item.h:52
segment with non rounded ends
Definition: board_item.h:51
#define _(s)
Definition: 3d_actions.cpp:33
ring
Definition: board_item.h:53
Bezier Curve.
Definition: board_item.h:55

References _, S_ARC, S_CIRCLE, S_CURVE, S_POLYGON, S_RECT, and S_SEGMENT.

Referenced by ConvertOutlineToPolygon(), PCB_SHAPE::GetLength(), GetSelectMenuText(), PCB_SHAPE::GetSelectMenuText(), and DIALOG_GRAPHIC_ITEM_PROPERTIES::Validate().

◆ Sort()

static bool EDA_ITEM::Sort ( const EDA_ITEM aLeft,
const EDA_ITEM aRight 
)
inlinestaticinherited

Helper function to be used by the C++ STL sort algorithm for sorting a STL container of EDA_ITEM pointers.

Parameters
aLeftThe left hand item to compare.
aRightThe right hand item to compare.
Returns
True if aLeft is less than aRight.

Definition at line 470 of file eda_item.h.

470 { return *aLeft < *aRight; }

◆ SwapData()

void PCB_SHAPE::SwapData ( BOARD_ITEM aImage)
overridevirtualinherited

Swap data between aItem and aImage.

aItem and aImage should have the same type.

Used in undo and redo commands to swap values between an item and its copy. Only values like layer, size .. which are modified by editing are swapped.

Parameters
aImagethe item image which contains data to swap.

Reimplemented from BOARD_ITEM.

Definition at line 1246 of file pcb_shape.cpp.

1247 {
1248  PCB_SHAPE* image = dynamic_cast<PCB_SHAPE*>( aImage );
1249  assert( image );
1250 
1251  std::swap( m_width, image->m_width );
1252  std::swap( m_start, image->m_start );
1253  std::swap( m_end, image->m_end );
1254  std::swap( m_thirdPoint, image->m_thirdPoint );
1255  std::swap( m_shape, image->m_shape );
1256  std::swap( m_angle, image->m_angle );
1257  std::swap( m_bezierC1, image->m_bezierC1 );
1258  std::swap( m_bezierC2, image->m_bezierC2 );
1259  std::swap( m_bezierPoints, image->m_bezierPoints );
1260  std::swap( m_poly, image->m_poly );
1261  std::swap( m_layer, image->m_layer );
1262  std::swap( m_flags, image->m_flags );
1263  std::swap( m_status, image->m_status );
1264  std::swap( m_parent, image->m_parent );
1265  std::swap( m_forceVisible, image->m_forceVisible );
1266 }
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:528
wxPoint m_end
Definition: pcb_shape.h:49
PCB_SHAPE_TYPE_T m_shape
Definition: pcb_shape.h:52
STATUS_FLAGS m_status
Definition: eda_item.h:527
wxPoint m_thirdPoint
Definition: pcb_shape.h:50
SHAPE_POLY_SET m_poly
Definition: pcb_shape.h:58
double m_angle
Definition: pcb_shape.h:53
wxPoint m_start
Definition: pcb_shape.h:48
int m_width
Definition: pcb_shape.h:46
PCB_LAYER_ID m_layer
Definition: board_item.h:363
wxPoint m_bezierC1
Definition: pcb_shape.h:54
std::vector< wxPoint > m_bezierPoints
Definition: pcb_shape.h:57
STATUS_FLAGS m_flags
Definition: eda_item.h:530
bool m_forceVisible
Definition: eda_item.h:529
wxPoint m_bezierC2
Definition: pcb_shape.h:55

References PCB_SHAPE::m_angle, PCB_SHAPE::m_bezierC1, PCB_SHAPE::m_bezierC2, PCB_SHAPE::m_bezierPoints, PCB_SHAPE::m_end, EDA_ITEM::m_flags, EDA_ITEM::m_forceVisible, BOARD_ITEM::m_layer, EDA_ITEM::m_parent, PCB_SHAPE::m_poly, PCB_SHAPE::m_shape, PCB_SHAPE::m_start, EDA_ITEM::m_status, PCB_SHAPE::m_thirdPoint, and PCB_SHAPE::m_width.

◆ TransformShapeWithClearanceToPolygon()

void PCB_SHAPE::TransformShapeWithClearanceToPolygon ( SHAPE_POLY_SET aCornerBuffer,
PCB_LAYER_ID  aLayer,
int  aClearanceValue,
int  aError,
ERROR_LOC  aErrorLoc,
bool  ignoreLineWidth = false 
) const
overridevirtualinherited

Function TransformShapeWithClearanceToPolygon Convert the draw segment to a closed polygon Used in filling zones calculations Circles and arcs are approximated by segments.

Parameters
aCornerBuffer= a buffer to store the polygon
aClearanceValue= the clearance around the pad
aError= the maximum deviation from a true arc
ignoreLineWidth= used for edge cut items where the line width is only for visualization

Reimplemented from BOARD_ITEM.

Definition at line 439 of file board_items_to_polygon_shape_transform.cpp.

443 {
444  int width = ignoreLineWidth ? 0 : m_width;
445 
446  width += 2 * aClearanceValue;
447 
448  switch( m_shape )
449  {
450  case S_CIRCLE:
451