KiCad PCB EDA Suite
FOOTPRINT Class Reference

#include <footprint.h>

Inheritance diagram for FOOTPRINT:
BOARD_ITEM_CONTAINER BOARD_ITEM EDA_ITEM KIGFX::VIEW_ITEM INSPECTABLE

Classes

struct  cmp_drawings
 
struct  cmp_pads
 

Public Member Functions

 FOOTPRINT (BOARD *parent)
 
 FOOTPRINT (const FOOTPRINT &aFootprint)
 
 FOOTPRINT (FOOTPRINT &&aFootprint)
 
 ~FOOTPRINT ()
 
FOOTPRINToperator= (const FOOTPRINT &aOther)
 
FOOTPRINToperator= (FOOTPRINT &&aOther)
 
void Add (BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT) override
 Removes an item from the container. More...
 
void Remove (BOARD_ITEM *aItem, REMOVE_MODE aMode=REMOVE_MODE::NORMAL) override
 Removes an item from the container. More...
 
void ClearAllNets ()
 Clear (i.e. More...
 
EDA_RECT GetFpPadsLocalBbox () const
 Return the bounding box containing pads when the footprint is on the front side, orientation 0, position 0,0. More...
 
SHAPE_POLY_SET GetBoundingHull () const
 Return a bounding polygon for the shapes and pads in the footprint. More...
 
const EDA_RECT GetBoundingBox () const override
 Return the orthogonal bounding box of this object for display purposes. More...
 
const EDA_RECT GetBoundingBox (bool aIncludeText, bool aIncludeInvisibleText) const
 
PADS & Pads ()
 
const PADS & Pads () const
 
DRAWINGS & GraphicalItems ()
 
const DRAWINGS & GraphicalItems () const
 
FP_ZONES & Zones ()
 
const FP_ZONES & Zones () const
 
FP_GROUPS & Groups ()
 
const FP_GROUPS & Groups () const
 
bool HasThroughHolePads () const
 
std::list< FP_3DMODEL > & Models ()
 
const std::list< FP_3DMODEL > & Models () const
 
void SetPosition (const wxPoint &aPos) override
 
wxPoint GetPosition () const override
 
void SetOrientation (double aNewAngle)
 
void SetOrientationDegrees (double aOrientation)
 
double GetOrientation () const
 
double GetOrientationDegrees () const
 
double GetOrientationRadians () const
 
const LIB_IDGetFPID () const
 
void SetFPID (const LIB_ID &aFPID)
 
const wxString & GetDescription () const
 
void SetDescription (const wxString &aDoc)
 
const wxString & GetKeywords () const
 
void SetKeywords (const wxString &aKeywords)
 
const KIID_PATHGetPath () const
 
void SetPath (const KIID_PATH &aPath)
 
int GetLocalSolderMaskMargin () const
 
void SetLocalSolderMaskMargin (int aMargin)
 
int GetLocalClearance () const
 
void SetLocalClearance (int aClearance)
 
int GetLocalClearance (wxString *aSource) const
 
int GetLocalSolderPasteMargin () const
 
void SetLocalSolderPasteMargin (int aMargin)
 
double GetLocalSolderPasteMarginRatio () const
 
void SetLocalSolderPasteMarginRatio (double aRatio)
 
void SetZoneConnection (ZONE_CONNECTION aType)
 
ZONE_CONNECTION GetZoneConnection () const
 
void SetThermalWidth (int aWidth)
 
int GetThermalWidth () const
 
void SetThermalGap (int aGap)
 
int GetThermalGap () const
 
int GetAttributes () const
 
void SetAttributes (int aAttributes)
 
void SetFlag (int aFlag)
 
void IncrementFlag ()
 
int GetFlag () const
 
bool IsNetTie () const
 
void Move (const wxPoint &aMoveVector) override
 Move this object. More...
 
void Rotate (const wxPoint &aRotCentre, double aAngle) override
 Rotate this object. More...
 
void Flip (const wxPoint &aCentre, bool aFlipLeftRight) override
 Flip this object, i.e. More...
 
void MoveAnchorPosition (const wxPoint &aMoveVector)
 Move the reference point of the footprint. More...
 
bool IsFlipped () const
 
bool IsOnLayer (PCB_LAYER_ID aLayer) const override
 A special IsOnLayer for footprints: return true if the footprint contains only items on the given layer, even if that layer is not one of the valid footprint layers F_Cu and B_Cu. More...
 
bool IsLocked () const override
 
void SetLocked (bool isLocked) override
 Set the #MODULE_is_LOCKED bit in the m_ModuleStatus. More...
 
bool IsPlaced () const
 
void SetIsPlaced (bool isPlaced)
 
bool NeedsPlaced () const
 
void SetNeedsPlaced (bool needsPlaced)
 
bool LegacyPadsLocked () const
 
void SetLastEditTime (timestamp_t aTime)
 
void SetLastEditTime ()
 
timestamp_t GetLastEditTime () const
 
void TransformPadsWithClearanceToPolygon (SHAPE_POLY_SET &aCornerBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc, bool aSkipNPTHPadsWihNoCopper=false, bool aSkipPlatedPads=false, bool aSkipNonPlatedPads=false) const
 Generate pads shapes on layer aLayer as polygons and adds these polygons to aCornerBuffer. More...
 
void TransformFPShapesWithClearanceToPolygon (SHAPE_POLY_SET &aCornerBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool aIncludeText=true, bool aIncludeShapes=true) const
 Generate shapes of graphic items (outlines) on layer aLayer as polygons and adds these polygons to aCornerBuffer. More...
 
void TransformFPTextWithClearanceToPolygonSet (SHAPE_POLY_SET &aCornerBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc) const
 This function is the same as TransformGraphicShapesWithClearanceToPolygonSet but only generate text. More...
 
void GetContextualTextVars (wxArrayString *aVars) const
 Return the list of system text vars for this footprint. More...
 
bool ResolveTextVar (wxString *token, int aDepth=0) const
 Resolve any references to system tokens supported by the component. 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...
 
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 HitTestAccurate (const wxPoint &aPosition, int aAccuracy=0) const
 Test if a point is inside the bounding polygon of the footprint. 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...
 
const wxString & GetReference () const
 
void SetReference (const wxString &aReference)
 
void IncrementReference (int aDelta)
 Bump the current reference by aDelta. More...
 
const wxString & GetValue () const
 
void SetValue (const wxString &aValue)
 
FP_TEXTValue ()
 read/write accessors: More...
 
FP_TEXTReference ()
 
FP_TEXTValue () const
 The const versions to keep the compiler happy. More...
 
FP_TEXTReference () const
 
const std::map< wxString, wxString > & GetProperties () const
 
void SetProperties (const std::map< wxString, wxString > &aProps)
 
const wxString & GetProperty (const wxString &aKey)
 
bool HasProperty (const wxString &aKey)
 
void SetProperty (const wxString &aKey, const wxString &aVal)
 
PADFindPadByName (const wxString &aPadName) const
 Return a PAD with a matching name. More...
 
PADGetPad (const wxPoint &aPosition, LSET aLayerMask=LSET::AllLayersMask())
 Get a pad at aPosition on aLayerMask in the footprint. More...
 
PADGetTopLeftPad ()
 
unsigned GetPadCount (INCLUDE_NPTH_T aIncludeNPTH=INCLUDE_NPTH_T(INCLUDE_NPTH)) const
 Return the number of pads. More...
 
unsigned GetUniquePadCount (INCLUDE_NPTH_T aIncludeNPTH=INCLUDE_NPTH_T(INCLUDE_NPTH)) const
 Return the number of unique non-blank pads. More...
 
wxString GetNextPadName (const wxString &aLastPadName) const
 Return the next available pad name in the footprint. More...
 
double GetArea (int aPadding=0) const
 
KIID GetLink () const
 
void SetLink (const KIID &aLink)
 
int GetPlacementCost180 () const
 
void SetPlacementCost180 (int aCost)
 
int GetPlacementCost90 () const
 
void SetPlacementCost90 (int aCost)
 
BOARD_ITEMDuplicate () const override
 Create a copy of this BOARD_ITEM. More...
 
BOARD_ITEMDuplicateItem (const BOARD_ITEM *aItem, bool aAddToFootprint=false)
 Duplicate a given item within the footprint, optionally adding it to the board. More...
 
void Add3DModel (FP_3DMODEL *a3DModel)
 Add a3DModel definition to the end of the 3D model list. More...
 
SEARCH_RESULT Visit (INSPECTOR inspector, void *testData, const KICAD_T scanTypes[]) override
 May be re-implemented for each derived class in order to handle all the types given by its member data. More...
 
wxString GetClass () const override
 Return the class name. More...
 
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...
 
BITMAPS 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...
 
void RunOnChildren (const std::function< void(BOARD_ITEM *)> &aFunction) const
 Invoke a function on all BOARD_ITEMs that belong to the footprint (pads, drawings, texts). More...
 
void GetAllDrawingLayers (int aLayers[], int &aCount, bool aIncludePads=true) const
 Return a set of all layers that this footprint has drawings on similar to ViewGetLayers(). More...
 
virtual void ViewGetLayers (int aLayers[], int &aCount) const override
 Return the all the layers within the VIEW the object is painted on. More...
 
double ViewGetLOD (int aLayer, KIGFX::VIEW *aView) const override
 Return the level of detail (LOD) of the item. More...
 
virtual const BOX2I ViewBBox () const override
 Return the bounding box of the item covering all its layers. More...
 
void SetInitialComments (wxArrayString *aInitialComments)
 Take ownership of caller's heap allocated aInitialComments block. More...
 
double CoverageRatio (const GENERAL_COLLECTOR &aCollector) const
 Calculate the ratio of total area of the footprint pads and graphical items to the area of the footprint. More...
 
const wxArrayString * GetInitialComments () const
 
const SHAPE_POLY_SETGetPolyCourtyardFront () const
 Used in DRC to test the courtyard area (a complex polygon). More...
 
const SHAPE_POLY_SETGetPolyCourtyardBack () const
 
void BuildPolyCourtyards (OUTLINE_ERROR_HANDLER *aErrorHandler=nullptr)
 Build complex polygons of the courtyard areas from graphic items on the courtyard layers. More...
 
virtual 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...
 
virtual void SwapData (BOARD_ITEM *aImage) override
 Swap data between aItem and aImage. More...
 
virtual void Delete (BOARD_ITEM *aItem)
 Removes an item from the container and deletes it. More...
 
virtual const ZONE_SETTINGSGetZoneSettings () const
 Fetch the zone settings for this container. More...
 
virtual void SetZoneSettings (const ZONE_SETTINGS &aSettings)
 Set the zone settings for this container. More...
 
void SetParentGroup (PCB_GROUP *aGroup)
 
PCB_GROUPGetParentGroup () const
 
int GetX () const
 
int GetY () const
 
virtual wxPoint GetCenter () const
 This defaults to the center of the bounding box if not overridden. More...
 
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...
 
bool IsTrack () const
 Test to see if this object is a track or via (or microvia). More...
 
void DeleteStructure ()
 Delete this object after removing from its parent if it has one. More...
 
void Move (const VECTOR2I &aMoveVector)
 
void Rotate (const VECTOR2I &aRotCentre, double aAngle)
 
void Flip (const VECTOR2I &aCentre, bool aFlipLeftRight)
 
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 TransformShapeWithClearanceToPolygon (SHAPE_POLY_SET &aCornerBuffer, PCB_LAYER_ID aLayer, int aClearanceValue, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const
 Convert the item shape to a closed polygon. 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 (EDA_ITEM_FLAGS type) const
 
void SetState (EDA_ITEM_FLAGS type, bool state)
 
EDA_ITEM_FLAGS GetStatus () const
 
void SetStatus (EDA_ITEM_FLAGS aStatus)
 
void SetFlags (EDA_ITEM_FLAGS aMask)
 
void ClearFlags (EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
 
EDA_ITEM_FLAGS GetFlags () const
 
bool HasFlag (EDA_ITEM_FLAGS aFlag) const
 
EDA_ITEM_FLAGS GetEditFlags () const
 
void ClearTempFlags ()
 
void ClearEditFlags ()
 
virtual bool IsType (const KICAD_T aScanTypes[]) const
 Check whether the item is one of the listed types. More...
 
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 const wxPoint GetFocusPosition () const
 Similar to GetPosition, but allows items to return their visual center rather than their anchor. 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)
 Adds an item to the container. More...
 
static bool IsLibNameValid (const wxString &aName)
 Test for validity of a name of a footprint to be used in a footprint library ( no spaces, dir separators ... More...
 
static const wxChar * StringLibNameInvalidChars (bool aUserReadable)
 Test for validity of the name in a library of the footprint ( no spaces, dir separators ... More...
 
static double GetCoverageArea (const BOARD_ITEM *aItem, const GENERAL_COLLECTOR &aCollector)
 Return the initial comments block or NULL if none, without transfer of ownership. More...
 
static wxString ShowShape (SHAPE_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

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

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

PCB_LAYER_ID m_layer
 
PCB_GROUPm_group
 
EDA_ITEM_FLAGS m_status
 
EDA_ITEMm_parent
 Linked list: Link (parent struct) More...
 
bool m_forceVisible
 
EDA_ITEM_FLAGS m_flags
 

Private Attributes

DRAWINGS m_drawings
 
PADS m_pads
 
FP_ZONES m_fp_zones
 
FP_GROUPS m_fp_groups
 
double m_orient
 
wxPoint m_pos
 
FP_TEXTm_reference
 
FP_TEXTm_value
 
LIB_ID m_fpid
 
int m_attributes
 
int m_fpStatus
 
EDA_RECT m_cachedBoundingBox
 
int m_boundingBoxCacheTimeStamp
 
EDA_RECT m_cachedVisibleBBox
 
int m_visibleBBoxCacheTimeStamp
 
EDA_RECT m_cachedTextExcludedBBox
 
int m_textExcludedBBoxCacheTimeStamp
 
SHAPE_POLY_SET m_cachedHull
 
int m_hullCacheTimeStamp
 
ZONE_CONNECTION m_zoneConnection
 
int m_thermalWidth
 
int m_thermalGap
 
int m_localClearance
 
int m_localSolderMaskMargin
 
int m_localSolderPasteMargin
 
double m_localSolderPasteMarginRatio
 
wxString m_doc
 
wxString m_keywords
 
KIID_PATH m_path
 
timestamp_t m_lastEditTime
 
int m_arflag
 
KIID m_link
 
int m_rot90Cost
 
int m_rot180Cost
 
std::list< FP_3DMODELm_3D_Drawings
 
std::map< wxString, wxString > m_properties
 
wxArrayString * m_initial_comments
 
SHAPE_POLY_SET m_poly_courtyard_front
 
SHAPE_POLY_SET m_poly_courtyard_back
 

Detailed Description

Definition at line 102 of file footprint.h.

Constructor & Destructor Documentation

◆ FOOTPRINT() [1/3]

FOOTPRINT::FOOTPRINT ( BOARD parent)

Definition at line 51 of file footprint.cpp.

51  :
57  m_initial_comments( nullptr )
58 {
59  m_attributes = 0;
60  m_layer = F_Cu;
61  m_orient = 0;
63  m_arflag = 0;
65  m_link = 0;
66  m_lastEditTime = 0;
67  m_localClearance = 0;
71  m_zoneConnection = ZONE_CONNECTION::INHERITED; // Use zone setting by default
72  m_thermalWidth = 0; // Use zone setting by default
73  m_thermalGap = 0; // Use zone setting by default
74 
75  // These are special and mandatory text fields
77  m_value = new FP_TEXT( this, FP_TEXT::TEXT_is_VALUE );
78 
79  m_3D_Drawings.clear();
80 }
int m_localSolderPasteMargin
Definition: footprint.h:714
ZONE_CONNECTION m_zoneConnection
Definition: footprint.h:709
double m_localSolderPasteMarginRatio
Definition: footprint.h:715
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
#define FP_PADS_are_LOCKED
Definition: footprint.h:274
double m_orient
Definition: footprint.h:682
timestamp_t m_lastEditTime
Definition: footprint.h:720
FP_TEXT * m_reference
Definition: footprint.h:684
int m_visibleBBoxCacheTimeStamp
Definition: footprint.h:703
int m_rot90Cost
Definition: footprint.h:723
FP_TEXT * m_value
Definition: footprint.h:685
int m_arflag
Definition: footprint.h:721
KIID m_link
Definition: footprint.h:722
int m_localSolderMaskMargin
Definition: footprint.h:713
int m_fpStatus
Definition: footprint.h:688
int m_thermalGap
Definition: footprint.h:711
int m_boundingBoxCacheTimeStamp
Definition: footprint.h:701
class FOOTPRINT, a footprint
Definition: typeinfo.h:88
int m_thermalWidth
Definition: footprint.h:710
int m_localClearance
Definition: footprint.h:712
int m_rot180Cost
Definition: footprint.h:724
int m_textExcludedBBoxCacheTimeStamp
Definition: footprint.h:705
PCB_LAYER_ID m_layer
Definition: board_item.h:352
wxArrayString * m_initial_comments
Definition: footprint.h:728
BOARD_ITEM_CONTAINER(BOARD_ITEM *aParent, KICAD_T aType)
std::list< FP_3DMODEL > m_3D_Drawings
Definition: footprint.h:726
int m_hullCacheTimeStamp
Definition: footprint.h:707
int m_attributes
Definition: footprint.h:687

References F_Cu, FP_PADS_are_LOCKED, INHERITED, m_3D_Drawings, m_arflag, m_attributes, m_fpStatus, m_lastEditTime, BOARD_ITEM::m_layer, m_link, m_localClearance, m_localSolderMaskMargin, m_localSolderPasteMargin, m_localSolderPasteMarginRatio, m_orient, m_reference, m_rot180Cost, m_rot90Cost, m_thermalGap, m_thermalWidth, m_value, m_zoneConnection, FP_TEXT::TEXT_is_REFERENCE, and FP_TEXT::TEXT_is_VALUE.

Referenced by Clone().

◆ FOOTPRINT() [2/3]

FOOTPRINT::FOOTPRINT ( const FOOTPRINT aFootprint)

Definition at line 83 of file footprint.cpp.

83  :
84  BOARD_ITEM_CONTAINER( aFootprint )
85 {
86  m_pos = aFootprint.m_pos;
87  m_fpid = aFootprint.m_fpid;
88  m_attributes = aFootprint.m_attributes;
89  m_fpStatus = aFootprint.m_fpStatus;
90  m_orient = aFootprint.m_orient;
91  m_rot90Cost = aFootprint.m_rot90Cost;
92  m_rot180Cost = aFootprint.m_rot180Cost;
93  m_lastEditTime = aFootprint.m_lastEditTime;
94  m_link = aFootprint.m_link;
95  m_path = aFootprint.m_path;
96 
103  m_cachedHull = aFootprint.m_cachedHull;
105 
106  m_localClearance = aFootprint.m_localClearance;
110  m_zoneConnection = aFootprint.m_zoneConnection;
111  m_thermalWidth = aFootprint.m_thermalWidth;
112  m_thermalGap = aFootprint.m_thermalGap;
113 
114  std::map<BOARD_ITEM*, BOARD_ITEM*> ptrMap;
115 
116  // Copy reference and value.
117  m_reference = new FP_TEXT( *aFootprint.m_reference );
118  m_reference->SetParent( this );
119  ptrMap[ aFootprint.m_reference ] = m_reference;
120 
121  m_value = new FP_TEXT( *aFootprint.m_value );
122  m_value->SetParent( this );
123  ptrMap[ aFootprint.m_value ] = m_value;
124 
125  // Copy pads
126  for( PAD* pad : aFootprint.Pads() )
127  {
128  PAD* newPad = static_cast<PAD*>( pad->Clone() );
129  ptrMap[ pad ] = newPad;
130  Add( newPad, ADD_MODE::APPEND ); // Append to ensure indexes are identical
131  }
132 
133  // Copy zones
134  for( FP_ZONE* zone : aFootprint.Zones() )
135  {
136  FP_ZONE* newZone = static_cast<FP_ZONE*>( zone->Clone() );
137  ptrMap[ zone ] = newZone;
138  Add( newZone, ADD_MODE::APPEND ); // Append to ensure indexes are identical
139 
140  // Ensure the net info is OK and especially uses the net info list
141  // living in the current board
142  // Needed when copying a fp from fp editor that has its own board
143  // Must be NETINFO_LIST::ORPHANED_ITEM for a keepout that has no net.
144  newZone->SetNetCode( -1 );
145  }
146 
147  // Copy drawings
148  for( BOARD_ITEM* item : aFootprint.GraphicalItems() )
149  {
150  BOARD_ITEM* newItem = static_cast<BOARD_ITEM*>( item->Clone() );
151  ptrMap[ item ] = newItem;
152  Add( newItem, ADD_MODE::APPEND ); // Append to ensure indexes are identical
153  }
154 
155  // Copy groups
156  for( PCB_GROUP* group : aFootprint.Groups() )
157  {
158  PCB_GROUP* newGroup = static_cast<PCB_GROUP*>( group->Clone() );
159  ptrMap[ group ] = newGroup;
160  Add( newGroup, ADD_MODE::APPEND ); // Append to ensure indexes are identical
161  }
162 
163  // Rebuild groups
164  for( PCB_GROUP* group : aFootprint.Groups() )
165  {
166  PCB_GROUP* newGroup = static_cast<PCB_GROUP*>( ptrMap[ group ] );
167 
168  newGroup->GetItems().clear();
169 
170  for( BOARD_ITEM* member : group->GetItems() )
171  newGroup->AddItem( ptrMap[ member ] );
172  }
173 
174  // Copy auxiliary data: 3D_Drawings info
175  m_3D_Drawings = aFootprint.m_3D_Drawings;
176 
177  m_doc = aFootprint.m_doc;
178  m_keywords = aFootprint.m_keywords;
179  m_properties = aFootprint.m_properties;
180 
181  m_arflag = 0;
182 
184  new wxArrayString( *aFootprint.m_initial_comments ) : nullptr;
185 }
int m_localSolderPasteMargin
Definition: footprint.h:714
bool AddItem(BOARD_ITEM *aItem)
Add item to group.
Definition: pcb_group.cpp:38
EDA_RECT m_cachedVisibleBBox
Definition: footprint.h:702
ZONE_CONNECTION m_zoneConnection
Definition: footprint.h:709
double m_localSolderPasteMarginRatio
Definition: footprint.h:715
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
A set of BOARD_ITEMs (i.e., without duplicates).
Definition: pcb_group.h:50
double m_orient
Definition: footprint.h:682
timestamp_t m_lastEditTime
Definition: footprint.h:720
bool SetNetCode(int aNetCode, bool aNoAssert)
Set net using a net code.
FP_TEXT * m_reference
Definition: footprint.h:684
int m_visibleBBoxCacheTimeStamp
Definition: footprint.h:703
std::unordered_set< BOARD_ITEM * > & GetItems()
Definition: pcb_group.h:68
virtual void SetParent(EDA_ITEM *aParent)
Definition: eda_item.h:116
int m_rot90Cost
Definition: footprint.h:723
PADS & Pads()
Definition: footprint.h:159
FP_TEXT * m_value
Definition: footprint.h:685
int m_arflag
Definition: footprint.h:721
KIID m_link
Definition: footprint.h:722
int m_localSolderMaskMargin
Definition: footprint.h:713
EDA_RECT m_cachedBoundingBox
Definition: footprint.h:700
FP_ZONES & Zones()
Definition: footprint.h:165
int m_fpStatus
Definition: footprint.h:688
SHAPE_POLY_SET m_cachedHull
Definition: footprint.h:706
int m_thermalGap
Definition: footprint.h:711
DRAWINGS & GraphicalItems()
Definition: footprint.h:162
wxPoint m_pos
Definition: footprint.h:683
int m_boundingBoxCacheTimeStamp
Definition: footprint.h:701
KIID_PATH m_path
Definition: footprint.h:719
FP_GROUPS & Groups()
Definition: footprint.h:168
int m_thermalWidth
Definition: footprint.h:710
wxString m_keywords
Definition: footprint.h:718
int m_localClearance
Definition: footprint.h:712
int m_rot180Cost
Definition: footprint.h:724
int m_textExcludedBBoxCacheTimeStamp
Definition: footprint.h:705
LIB_ID m_fpid
Definition: footprint.h:686
EDA_RECT m_cachedTextExcludedBBox
Definition: footprint.h:704
std::map< wxString, wxString > m_properties
Definition: footprint.h:727
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT) override
Removes an item from the container.
Definition: footprint.cpp:472
wxArrayString * m_initial_comments
Definition: footprint.h:728
Definition: pad.h:57
BOARD_ITEM_CONTAINER(BOARD_ITEM *aParent, KICAD_T aType)
wxString m_doc
Definition: footprint.h:717
std::list< FP_3DMODEL > m_3D_Drawings
Definition: footprint.h:726
A specialization of ZONE for use in footprints.
Definition: zone.h:946
int m_hullCacheTimeStamp
Definition: footprint.h:707
int m_attributes
Definition: footprint.h:687

References Add(), PCB_GROUP::AddItem(), APPEND, PCB_GROUP::GetItems(), GraphicalItems(), group, Groups(), m_3D_Drawings, m_arflag, m_attributes, m_boundingBoxCacheTimeStamp, m_cachedBoundingBox, m_cachedHull, m_cachedTextExcludedBBox, m_cachedVisibleBBox, m_doc, m_fpid, m_fpStatus, m_hullCacheTimeStamp, m_initial_comments, m_keywords, m_lastEditTime, m_link, m_localClearance, m_localSolderMaskMargin, m_localSolderPasteMargin, m_localSolderPasteMarginRatio, m_orient, m_path, m_pos, m_properties, m_reference, m_rot180Cost, m_rot90Cost, m_textExcludedBBoxCacheTimeStamp, m_thermalGap, m_thermalWidth, m_value, m_visibleBBoxCacheTimeStamp, m_zoneConnection, pad, Pads(), BOARD_CONNECTED_ITEM::SetNetCode(), EDA_ITEM::SetParent(), and Zones().

◆ FOOTPRINT() [3/3]

FOOTPRINT::FOOTPRINT ( FOOTPRINT &&  aFootprint)

Definition at line 188 of file footprint.cpp.

188  :
189  BOARD_ITEM_CONTAINER( aFootprint )
190 {
191  *this = std::move( aFootprint );
192 }
BOARD_ITEM_CONTAINER(BOARD_ITEM *aParent, KICAD_T aType)

◆ ~FOOTPRINT()

FOOTPRINT::~FOOTPRINT ( )

Definition at line 195 of file footprint.cpp.

196 {
197  // Clean up the owned elements
198  delete m_reference;
199  delete m_value;
200  delete m_initial_comments;
201 
202  for( PAD* p : m_pads )
203  delete p;
204 
205  m_pads.clear();
206 
207  for( FP_ZONE* zone : m_fp_zones )
208  delete zone;
209 
210  m_fp_zones.clear();
211 
212  for( PCB_GROUP* group : m_fp_groups )
213  delete group;
214 
215  m_fp_groups.clear();
216 
217  for( BOARD_ITEM* d : m_drawings )
218  delete d;
219 
220  m_drawings.clear();
221 }
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
A set of BOARD_ITEMs (i.e., without duplicates).
Definition: pcb_group.h:50
FP_TEXT * m_reference
Definition: footprint.h:684
FP_TEXT * m_value
Definition: footprint.h:685
FP_ZONES m_fp_zones
Definition: footprint.h:679
DRAWINGS m_drawings
Definition: footprint.h:677
wxArrayString * m_initial_comments
Definition: footprint.h:728
Definition: pad.h:57
FP_GROUPS m_fp_groups
Definition: footprint.h:680
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:678

References group, m_drawings, m_fp_groups, m_fp_zones, m_initial_comments, m_pads, m_reference, and m_value.

Member Function Documentation

◆ Add()

void FOOTPRINT::Add ( BOARD_ITEM aItem,
ADD_MODE  aMode = ADD_MODE::INSERT 
)
overridevirtual

Removes an item from the container.

Implements BOARD_ITEM_CONTAINER.

Definition at line 472 of file footprint.cpp.

473 {
474  switch( aBoardItem->Type() )
475  {
476  case PCB_FP_TEXT_T:
477  // Only user text can be added this way.
478  assert( static_cast<FP_TEXT*>( aBoardItem )->GetType() == FP_TEXT::TEXT_is_DIVERS );
480 
481  case PCB_FP_SHAPE_T:
482  if( aMode == ADD_MODE::APPEND )
483  m_drawings.push_back( aBoardItem );
484  else
485  m_drawings.push_front( aBoardItem );
486  break;
487 
488  case PCB_PAD_T:
489  if( aMode == ADD_MODE::APPEND )
490  m_pads.push_back( static_cast<PAD*>( aBoardItem ) );
491  else
492  m_pads.push_front( static_cast<PAD*>( aBoardItem ) );
493  break;
494 
495  case PCB_FP_ZONE_T:
496  if( aMode == ADD_MODE::APPEND )
497  m_fp_zones.push_back( static_cast<FP_ZONE*>( aBoardItem ) );
498  else
499  m_fp_zones.insert( m_fp_zones.begin(), static_cast<FP_ZONE*>( aBoardItem ) );
500  break;
501 
502  case PCB_GROUP_T:
503  if( aMode == ADD_MODE::APPEND )
504  m_fp_groups.push_back( static_cast<PCB_GROUP*>( aBoardItem ) );
505  else
506  m_fp_groups.insert( m_fp_groups.begin(), static_cast<PCB_GROUP*>( aBoardItem ) );
507  break;
508 
509  default:
510  {
511  wxString msg;
512  msg.Printf( wxT( "FOOTPRINT::Add() needs work: BOARD_ITEM type (%d) not handled" ),
513  aBoardItem->Type() );
514  wxFAIL_MSG( msg );
515 
516  return;
517  }
518  }
519 
520  aBoardItem->ClearEditFlags();
521  aBoardItem->SetParent( this );
522 }
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
class PCB_GROUP, a set of BOARD_ITEMs
Definition: typeinfo.h:108
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
class PAD, a pad in a footprint
Definition: typeinfo.h:89
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83
FP_ZONES m_fp_zones
Definition: footprint.h:679
class ZONE, managed by a footprint
Definition: typeinfo.h:94
DRAWINGS m_drawings
Definition: footprint.h:677
FP_GROUPS m_fp_groups
Definition: footprint.h:680
PADS m_pads
Definition: footprint.h:678

References APPEND, EDA_ITEM::ClearEditFlags(), KI_FALLTHROUGH, m_drawings, m_fp_groups, m_fp_zones, m_pads, PCB_FP_SHAPE_T, PCB_FP_TEXT_T, PCB_FP_ZONE_T, PCB_GROUP_T, PCB_PAD_T, EDA_ITEM::SetParent(), FP_TEXT::TEXT_is_DIVERS, and EDA_ITEM::Type().

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), PCAD2KICAD::PCB_ARC::AddToFootprint(), PCAD2KICAD::PCB_LINE::AddToFootprint(), PCAD2KICAD::PCB_POLYGON::AddToFootprint(), PCAD2KICAD::PCB_PAD::AddToFootprint(), MICROWAVE_TOOL::createBaseFootprint(), MICROWAVE_TOOL::createMicrowaveInductor(), MICROWAVE_TOOL::createPolygonShape(), KI_TEST::DrawArc(), KI_TEST::DrawSegment(), DuplicateItem(), PCB_EDIT_FRAME::ExchangeFootprint(), FOOTPRINT(), PCB_BASE_FRAME::GetFootprintFromBoardByReference(), GROUP_TOOL::Group(), ALTIUM_PCB::HelperCreateAndAddDrawsegment(), LEGACY_PLUGIN::loadFOOTPRINT(), FABMASTER::loadFootprints(), LEGACY_PLUGIN::loadFP_SHAPE(), CADSTAR_PCB_ARCHIVE_LOADER::loadLibraryAreas(), CADSTAR_PCB_ARCHIVE_LOADER::loadLibraryCoppers(), CADSTAR_PCB_ARCHIVE_LOADER::loadLibraryPads(), LEGACY_PLUGIN::loadPAD(), operator=(), EAGLE_PLUGIN::packageCircle(), EAGLE_PLUGIN::packageHole(), EAGLE_PLUGIN::packagePad(), EAGLE_PLUGIN::packagePolygon(), EAGLE_PLUGIN::packageRectangle(), EAGLE_PLUGIN::packageSMD(), EAGLE_PLUGIN::packageText(), EAGLE_PLUGIN::packageWire(), ALTIUM_PCB::ParsePads6Data(), ALTIUM_PCB::ParseTexts6Data(), CLIPBOARD_IO::SaveSelection(), FOOTPRINT_EDIT_FRAME::SelectFootprintFromBoard(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataFromWindow(), and DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow().

◆ Add3DModel()

void FOOTPRINT::Add3DModel ( FP_3DMODEL a3DModel)

Add a3DModel definition to the end of the 3D model list.

Parameters
a3DModelA pointer to a FP_3DMODEL to add to the list.

Definition at line 1070 of file footprint.cpp.

1071 {
1072  if( nullptr == a3DModel )
1073  return;
1074 
1075  if( !a3DModel->m_Filename.empty() )
1076  m_3D_Drawings.push_back( *a3DModel );
1077 }
wxString m_Filename
The 3D shape filename in 3D library.
Definition: footprint.h:97
std::list< FP_3DMODEL > m_3D_Drawings
Definition: footprint.h:726

References m_3D_Drawings, and FP_3DMODEL::m_Filename.

◆ BuildPolyCourtyards()

void FOOTPRINT::BuildPolyCourtyards ( OUTLINE_ERROR_HANDLER aErrorHandler = nullptr)

Build complex polygons of the courtyard areas from graphic items on the courtyard layers.

Note
Set the MALFORMED_F_COURTYARD and MALFORMED_B_COURTYARD status flags if the given courtyard layer does not contain a (single) closed shape.

Definition at line 1945 of file footprint.cpp.

1946 {
1950 
1951  // Build the courtyard area from graphic items on the courtyard.
1952  // Only PCB_FP_SHAPE_T have meaning, graphic texts are ignored.
1953  // Collect items:
1954  std::vector<PCB_SHAPE*> list_front;
1955  std::vector<PCB_SHAPE*> list_back;
1956 
1957  for( BOARD_ITEM* item : GraphicalItems() )
1958  {
1959  if( item->GetLayer() == B_CrtYd && item->Type() == PCB_FP_SHAPE_T )
1960  list_back.push_back( static_cast<PCB_SHAPE*>( item ) );
1961 
1962  if( item->GetLayer() == F_CrtYd && item->Type() == PCB_FP_SHAPE_T )
1963  list_front.push_back( static_cast<PCB_SHAPE*>( item ) );
1964  }
1965 
1966  if( !list_front.size() && !list_back.size() )
1967  return;
1968 
1969  int errorMax = Millimeter2iu( 0.02 ); // max error for polygonization
1970  int chainingEpsilon = Millimeter2iu( 0.02 ); // max dist from one endPt to next startPt
1971 
1972  if( ConvertOutlineToPolygon( list_front, m_poly_courtyard_front, errorMax, chainingEpsilon,
1973  aErrorHandler ) )
1974  {
1975  // Touching courtyards, or courtyards -at- the clearance distance are legal.
1977 
1979  }
1980  else
1981  {
1983  }
1984 
1985  if( ConvertOutlineToPolygon( list_back, m_poly_courtyard_back, errorMax, chainingEpsilon,
1986  aErrorHandler ) )
1987  {
1988  // Touching courtyards, or courtyards -at- the clearance distance are legal.
1990 
1992  }
1993  else
1994  {
1996  }
1997 }
#define MALFORMED_B_COURTYARD
SHAPE_POLY_SET m_poly_courtyard_back
Definition: footprint.h:732
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
#define MALFORMED_F_COURTYARD
void SetFlags(EDA_ITEM_FLAGS aMask)
Definition: eda_item.h:153
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
SHAPE_POLY_SET m_poly_courtyard_front
Definition: footprint.h:731
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:154
DRAWINGS & GraphicalItems()
Definition: footprint.h:162
Acute angles are chamfered.
bool ConvertOutlineToPolygon(std::vector< PCB_SHAPE * > &aSegList, SHAPE_POLY_SET &aPolygons, int aErrorMax, int aChainingEpsilon, OUTLINE_ERROR_HANDLER *aErrorHandler)
Function ConvertOutlineToPolygon Build a polygon (with holes) from a PCB_SHAPE list,...
void Inflate(int aAmount, int aCircleSegCount, CORNER_STRATEGY aCornerStrategy=ROUND_ALL_CORNERS)
Perform outline inflation/deflation.
void CacheTriangulation(bool aPartition=true)
#define MALFORMED_COURTYARDS
static constexpr int Millimeter2iu(double mm)

References B_CrtYd, SHAPE_POLY_SET::CacheTriangulation(), SHAPE_POLY_SET::CHAMFER_ACUTE_CORNERS, EDA_ITEM::ClearFlags(), ConvertOutlineToPolygon(), F_CrtYd, GraphicalItems(), SHAPE_POLY_SET::Inflate(), m_poly_courtyard_back, m_poly_courtyard_front, MALFORMED_B_COURTYARD, MALFORMED_COURTYARDS, MALFORMED_F_COURTYARD, Millimeter2iu(), PCB_FP_SHAPE_T, SHAPE_POLY_SET::RemoveAllContours(), and EDA_ITEM::SetFlags().

Referenced by AR_AUTOPLACER::buildFpAreas(), BOARD_INSPECTION_TOOL::InspectConstraints(), BOARD_INSPECTION_TOOL::reportClearance(), and DIALOG_FOOTPRINT_CHECKER::runChecks().

◆ ClassOf()

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

Adds an item to the container.

Parameters
aModedecides whether the item is added in the beginning or at the end of the list.

Definition at line 117 of file footprint.h.

References PCB_FOOTPRINT_T, and EDA_ITEM::Type().

◆ ClearAllNets()

void FOOTPRINT::ClearAllNets ( )

Clear (i.e.

force the ORPHANED dummy net info) the net info which depends on a given board for all pads of the footprint.

This is needed when a footprint is copied between the fp editor and the board editor for instance, because net info become fully broken

Definition at line 463 of file footprint.cpp.

464 {
465  // Force the ORPHANED dummy net info for all pads.
466  // ORPHANED dummy net does not depend on a board
467  for( PAD* pad : m_pads )
468  pad->SetNetCode( NETINFO_LIST::ORPHANED );
469 }
static const int ORPHANED
NETINFO_ITEM meaning that there was no net assigned for an item, as there was no board storing net li...
Definition: netinfo.h:369
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:678

References m_pads, NETINFO_LIST::ORPHANED, and pad.

Referenced by PCB_BASE_FRAME::loadFootprint(), and FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard().

◆ ClearBrightened()

void EDA_ITEM::ClearBrightened ( )
inlineinherited

◆ ClearEditFlags()

◆ ClearFlags()

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

Definition at line 154 of file eda_item.h.

154 { m_flags &= ~aMask; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:481

References EDA_ITEM::m_flags.

Referenced by FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), PNS_KICAD_IFACE::AddItem(), SCH_EDIT_FRAME::AddItemToScreenAndUndoList(), SCH_MOVE_TOOL::AlignElements(), 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(), BOARD_COMMIT::Push(), PCB_SELECTION_TOOL::RebuildSelection(), SCH_EDIT_TOOL::RepeatDrawItem(), 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 166 of file eda_item.h.

167  {
169  DO_NOT_DRAW );
170  }
#define DO_NOT_DRAW
Used to disable draw function.
#define STARTPOINT
When a line is selected, these flags indicate which.
#define ENDPOINT
ends. (Used to support dragging.)
#define IS_LINKED
Used in calculation to mark linked items (temporary use)
#define CANDIDATE
flag indicating that the structure is connected
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:154
#define SKIP_STRUCT
flag indicating that the structure should be ignored
#define TEMP_SELECTED
flag indicating that the structure has already selected

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 * FOOTPRINT::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 EDA_ITEM.

Definition at line 1183 of file footprint.cpp.

1184 {
1185  return new FOOTPRINT( *this );
1186 }
FOOTPRINT(BOARD *parent)
Definition: footprint.cpp:51

References FOOTPRINT().

Referenced by FOOTPRINT_EDIT_FRAME::AddFootprintToBoard(), Duplicate(), PCB_IO::FootprintLoad(), PCB_IO::FootprintSave(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), BOARD_NETLIST_UPDATER::updateComponentPadConnections(), and BOARD_NETLIST_UPDATER::updateFootprintParameters().

◆ CoverageRatio()

double FOOTPRINT::CoverageRatio ( const GENERAL_COLLECTOR aCollector) const

Calculate the ratio of total area of the footprint pads and graphical items to the area of the footprint.

Used by selection tool heuristics.

Returns
the ratio.

Definition at line 1845 of file footprint.cpp.

1846 {
1847  int textMargin = KiROUND( 5 * aCollector.GetGuide()->OnePixelInIU() );
1848 
1849  SHAPE_POLY_SET footprintRegion( GetBoundingHull() );
1850  SHAPE_POLY_SET coveredRegion;
1851 
1852  TransformPadsWithClearanceToPolygon( coveredRegion, UNDEFINED_LAYER, 0, ARC_LOW_DEF,
1853  ERROR_OUTSIDE );
1854 
1855  TransformFPShapesWithClearanceToPolygon( coveredRegion, UNDEFINED_LAYER, textMargin,
1856  ARC_LOW_DEF, ERROR_OUTSIDE,
1857  true, /* include text */
1858  false /* include shapes */ );
1859 
1860  for( int i = 0; i < aCollector.GetCount(); ++i )
1861  {
1862  const BOARD_ITEM* item = aCollector[i];
1863 
1864  switch( item->Type() )
1865  {
1866  case PCB_FP_TEXT_T:
1867  case PCB_FP_SHAPE_T:
1868  if( item->GetParent() != this )
1869  {
1870  item->TransformShapeWithClearanceToPolygon( coveredRegion, UNDEFINED_LAYER, 0,
1871  ARC_LOW_DEF, ERROR_OUTSIDE );
1872  }
1873  break;
1874 
1875  case PCB_TEXT_T:
1876  case PCB_SHAPE_T:
1877  case PCB_TRACE_T:
1878  case PCB_ARC_T:
1879  case PCB_VIA_T:
1880  item->TransformShapeWithClearanceToPolygon( coveredRegion, UNDEFINED_LAYER, 0,
1881  ARC_LOW_DEF, ERROR_OUTSIDE );
1882  break;
1883 
1884  case PCB_FOOTPRINT_T:
1885  if( item != this )
1886  {
1887  const FOOTPRINT* footprint = static_cast<const FOOTPRINT*>( item );
1888  coveredRegion.AddOutline( footprint->GetBoundingHull().Outline( 0 ) );
1889  }
1890  break;
1891 
1892  default:
1893  break;
1894  }
1895  }
1896 
1897  SHAPE_POLY_SET uncoveredRegion;
1898 
1899  try
1900  {
1901  uncoveredRegion.BooleanSubtract( footprintRegion, coveredRegion,
1903  uncoveredRegion.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
1904  uncoveredRegion.Fracture( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
1905  }
1906  catch( ClipperLib::clipperException& )
1907  {
1908  // better to be conservative (this will result in the disambiguate dialog)
1909  return 1.0;
1910  }
1911 
1912  double footprintRegionArea = polygonArea( footprintRegion );
1913  double uncoveredRegionArea = polygonArea( uncoveredRegion );
1914  double coveredArea = footprintRegionArea - uncoveredRegionArea;
1915  double ratio = ( coveredArea / footprintRegionArea );
1916 
1917  return std::min( ratio, 1.0 );
1918 }
SHAPE_POLY_SET GetBoundingHull() const
Return a bounding polygon for the shapes and pads in the footprint.
Definition: footprint.cpp:746
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
virtual double OnePixelInIU() const =0
class PCB_TEXT, text on a layer
Definition: typeinfo.h:91
class PCB_ARC, an arc track segment on a copper layer
Definition: typeinfo.h:97
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
class PCB_TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
int GetCount() const
Return the number of objects in the list.
Definition: collector.h:87
const COLLECTORS_GUIDE * GetGuide() const
Definition: collectors.h:339
Represent a set of closed polygons.
SHAPE_LINE_CHAIN & Outline(int aIndex)
void Simplify(POLYGON_MODE aFastMode)
void TransformPadsWithClearanceToPolygon(SHAPE_POLY_SET &aCornerBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc, bool aSkipNPTHPadsWihNoCopper=false, bool aSkipPlatedPads=false, bool aSkipNonPlatedPads=false) const
Generate pads shapes on layer aLayer as polygons and adds these polygons to aCornerBuffer.
void Fracture(POLYGON_MODE aFastMode)
Convert a single outline slitted ("fractured") polygon into a set ouf outlines with holes.
class FOOTPRINT, a footprint
Definition: typeinfo.h:88
int AddOutline(const SHAPE_LINE_CHAIN &aOutline)
Adds a new hole to the given outline (default: last) and returns its index.
void TransformFPShapesWithClearanceToPolygon(SHAPE_POLY_SET &aCornerBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool aIncludeText=true, bool aIncludeShapes=true) const
Generate shapes of graphic items (outlines) on layer aLayer as polygons and adds these polygons to aC...
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:73
class PCB_VIA, a via (like a track segment on a copper layer)
Definition: typeinfo.h:96
virtual void TransformShapeWithClearanceToPolygon(SHAPE_POLY_SET &aCornerBuffer, PCB_LAYER_ID aLayer, int aClearanceValue, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const
Convert the item shape to a closed polygon.
Definition: board_item.cpp:143
void BooleanSubtract(const SHAPE_POLY_SET &b, POLYGON_MODE aFastMode)
Perform boolean polyset intersection For aFastMode meaning, see function booleanOp.
BOARD_ITEM_CONTAINER * GetParent() const
Definition: board_item.h:166
class PCB_SHAPE, a segment not on copper layers
Definition: typeinfo.h:90
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:113
static double polygonArea(SHAPE_POLY_SET &aPolySet)
Definition: footprint.cpp:1746

References SHAPE_POLY_SET::AddOutline(), SHAPE_POLY_SET::BooleanSubtract(), ERROR_OUTSIDE, SHAPE_POLY_SET::Fracture(), GetBoundingHull(), COLLECTOR::GetCount(), GENERAL_COLLECTOR::GetGuide(), BOARD_ITEM::GetParent(), KiROUND(), COLLECTORS_GUIDE::OnePixelInIU(), SHAPE_POLY_SET::Outline(), PCB_ARC_T, PCB_FOOTPRINT_T, PCB_FP_SHAPE_T, PCB_FP_TEXT_T, PCB_SHAPE_T, PCB_TEXT_T, PCB_TRACE_T, PCB_VIA_T, SHAPE_POLY_SET::PM_STRICTLY_SIMPLE, polygonArea(), SHAPE_POLY_SET::Simplify(), TransformFPShapesWithClearanceToPolygon(), TransformPadsWithClearanceToPolygon(), BOARD_ITEM::TransformShapeWithClearanceToPolygon(), EDA_ITEM::Type(), and UNDEFINED_LAYER.

Referenced by PCB_SELECTION_TOOL::GuessSelectionCandidates().

◆ Delete()

virtual void BOARD_ITEM_CONTAINER::Delete ( BOARD_ITEM aItem)
inlinevirtualinherited

Removes an item from the container and deletes it.

Definition at line 74 of file board_item_container.h.

75  {
76  Remove( aItem );
77  delete aItem;
78  }
virtual void Remove(BOARD_ITEM *aItem, REMOVE_MODE aMode=REMOVE_MODE::NORMAL)=0
Removes an item from the container.

References BOARD_ITEM_CONTAINER::Remove().

Referenced by BOARD_DRC_ITEMS_PROVIDER::DeleteItem(), and BOARD_COMMIT::Push().

◆ DeleteStructure()

void BOARD_ITEM::DeleteStructure ( )
inherited

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

Definition at line 127 of file board_item.cpp.

128 {
129  BOARD_ITEM_CONTAINER* parent = GetParent();
130 
131  if( parent )
132  parent->Remove( this );
133 
134  delete this;
135 }
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:166

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

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

◆ Duplicate()

BOARD_ITEM * FOOTPRINT::Duplicate ( ) const
overridevirtual

Create a copy of this BOARD_ITEM.

Reimplemented from BOARD_ITEM.

Definition at line 1615 of file footprint.cpp.

1616 {
1617  FOOTPRINT* dupe = (FOOTPRINT*) Clone();
1618  const_cast<KIID&>( dupe->m_Uuid ) = KIID();
1619 
1620  dupe->RunOnChildren( [&]( BOARD_ITEM* child )
1621  {
1622  const_cast<KIID&>( child->m_Uuid ) = KIID();
1623  });
1624 
1625  return static_cast<BOARD_ITEM*>( dupe );
1626 }
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
Definition: kiid.h:44
const KIID m_Uuid
Definition: eda_item.h:475
void RunOnChildren(const std::function< void(BOARD_ITEM *)> &aFunction) const
Invoke a function on all BOARD_ITEMs that belong to the footprint (pads, drawings,...
Definition: footprint.cpp:1189
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
Definition: footprint.cpp:1183

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

Referenced by FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), FOOTPRINT_PREVIEW_PANEL::DisplayFootprint(), GPCB_PLUGIN::FootprintLoad(), PCB_IO::FootprintLoad(), DISPLAY_FOOTPRINTS_FRAME::GetFootprint(), and CADSTAR_PCB_ARCHIVE_LOADER::loadComponents().

◆ DuplicateItem()

BOARD_ITEM * FOOTPRINT::DuplicateItem ( const BOARD_ITEM aItem,
bool  aAddToFootprint = false 
)

Duplicate a given item within the footprint, optionally adding it to the board.

Returns
the new item, or NULL if the item could not be duplicated.

Definition at line 1629 of file footprint.cpp.

1630 {
1631  BOARD_ITEM* new_item = nullptr;
1632  FP_ZONE* new_zone = nullptr;
1633 
1634  switch( aItem->Type() )
1635  {
1636  case PCB_PAD_T:
1637  {
1638  PAD* new_pad = new PAD( *static_cast<const PAD*>( aItem ) );
1639  const_cast<KIID&>( new_pad->m_Uuid ) = KIID();
1640 
1641  if( aAddToFootprint )
1642  m_pads.push_back( new_pad );
1643 
1644  new_item = new_pad;
1645  break;
1646  }
1647 
1648  case PCB_FP_ZONE_T:
1649  {
1650  new_zone = new FP_ZONE( *static_cast<const FP_ZONE*>( aItem ) );
1651  const_cast<KIID&>( new_zone->m_Uuid ) = KIID();
1652 
1653  if( aAddToFootprint )
1654  m_fp_zones.push_back( new_zone );
1655 
1656  new_item = new_zone;
1657  break;
1658  }
1659 
1660  case PCB_FP_TEXT_T:
1661  {
1662  FP_TEXT* new_text = new FP_TEXT( *static_cast<const FP_TEXT*>( aItem ) );
1663  const_cast<KIID&>( new_text->m_Uuid ) = KIID();
1664 
1665  if( new_text->GetType() == FP_TEXT::TEXT_is_REFERENCE )
1666  {
1667  new_text->SetText( wxT( "${REFERENCE}" ) );
1668  new_text->SetType( FP_TEXT::TEXT_is_DIVERS );
1669  }
1670  else if( new_text->GetType() == FP_TEXT::TEXT_is_VALUE )
1671  {
1672  new_text->SetText( wxT( "${VALUE}" ) );
1673  new_text->SetType( FP_TEXT::TEXT_is_DIVERS );
1674  }
1675 
1676  if( aAddToFootprint )
1677  Add( new_text );
1678 
1679  new_item = new_text;
1680 
1681  break;
1682  }
1683 
1684  case PCB_FP_SHAPE_T:
1685  {
1686  FP_SHAPE* new_shape = new FP_SHAPE( *static_cast<const FP_SHAPE*>( aItem ) );
1687  const_cast<KIID&>( new_shape->m_Uuid ) = KIID();
1688 
1689  if( aAddToFootprint )
1690  Add( new_shape );
1691 
1692  new_item = new_shape;
1693  break;
1694  }
1695 
1696  case PCB_GROUP_T:
1697  new_item = static_cast<const PCB_GROUP*>( aItem )->DeepDuplicate();
1698  break;
1699 
1700  case PCB_FOOTPRINT_T:
1701  // Ignore the footprint itself
1702  break;
1703 
1704  default:
1705  // Un-handled item for duplication
1706  wxFAIL_MSG( "Duplication not supported for items of class " + aItem->GetClass() );
1707  break;
1708  }
1709 
1710  return new_item;
1711 }
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
class PCB_GROUP, a set of BOARD_ITEMs
Definition: typeinfo.h:108
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
class PAD, a pad in a footprint
Definition: typeinfo.h:89
void SetType(TEXT_TYPE aType)
Definition: fp_text.h:140
Definition: kiid.h:44
FP_ZONES m_fp_zones
Definition: footprint.h:679
virtual void SetText(const wxString &aText)
Definition: eda_text.cpp:114
TEXT_TYPE GetType() const
Definition: fp_text.h:141
class FOOTPRINT, a footprint
Definition: typeinfo.h:88
const KIID m_Uuid
Definition: eda_item.h:475
virtual wxString GetClass() const =0
Return the class name.
class ZONE, managed by a footprint
Definition: typeinfo.h:94
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT) override
Removes an item from the container.
Definition: footprint.cpp:472
Definition: pad.h:57
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:678
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:113

References Add(), EDA_ITEM::GetClass(), FP_TEXT::GetType(), m_fp_zones, m_pads, EDA_ITEM::m_Uuid, PAD, PCB_FOOTPRINT_T, PCB_FP_SHAPE_T, PCB_FP_TEXT_T, PCB_FP_ZONE_T, PCB_GROUP_T, PCB_PAD_T, EDA_TEXT::SetText(), FP_TEXT::SetType(), FP_TEXT::TEXT_is_DIVERS, FP_TEXT::TEXT_is_REFERENCE, FP_TEXT::TEXT_is_VALUE, and EDA_ITEM::Type().

Referenced by EDIT_TOOL::Duplicate(), and ARRAY_CREATOR::Invoke().

◆ FindPadByName()

PAD * FOOTPRINT::FindPadByName ( const wxString &  aPadName) const

Return a PAD with a matching name.

Note
Names may not be unique depending on how the footprint was created.
Parameters
aPadNamethe pad name to find.
Returns
the first matching named PAD is returned or NULL if not found.

Definition at line 971 of file footprint.cpp.

972 {
973  for( PAD* pad : m_pads )
974  {
975  if( pad->GetName() == aPadName )
976  return pad;
977  }
978 
979  return nullptr;
980 }
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:678

References m_pads, and pad.

Referenced by PCB_EDIT_FRAME::ExchangeFootprint(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), BOARD_NETLIST_UPDATER::testConnectivity(), and DRC_TEST_PROVIDER_LVS::testFootprints().

◆ Flip() [1/2]

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

Flip this object, i.e.

change the board side for this object.

Parameters
aCentrethe rotation point.
aFlipLeftRightmirror across Y axis instead of X (the default).

Mirror the Y position (around the X axis)

Reimplemented from BOARD_ITEM.

Definition at line 1381 of file footprint.cpp.

1382 {
1383  // Move footprint to its final position:
1384  wxPoint finalPos = m_pos;
1385 
1386  // Now Flip the footprint.
1387  // Flipping a footprint is a specific transform: it is not mirrored like a text.
1388  // We have to change the side, and ensure the footprint rotation is modified according to the
1389  // transform, because this parameter is used in pick and place files, and when updating the
1390  // footprint from library.
1391  // When flipped around the X axis (Y coordinates changed) orientation is negated
1392  // When flipped around the Y axis (X coordinates changed) orientation is 180 - old orient.
1393  // Because it is specific to a footprint, we flip around the X axis, and after rotate 180 deg
1394 
1395  MIRROR( finalPos.y, aCentre.y );
1396 
1397  SetPosition( finalPos );
1398 
1399  // Flip layer
1400  SetLayer( FlipLayer( GetLayer() ) );
1401 
1402  // Reverse mirror orientation.
1403  m_orient = -m_orient;
1404 
1406 
1407  // Mirror pads to other side of board.
1408  for( PAD* pad : m_pads )
1409  pad->Flip( m_pos, false );
1410 
1411  // Mirror zones to other side of board.
1412  for( ZONE* zone : m_fp_zones )
1413  zone->Flip( m_pos, false );
1414 
1415  // Mirror reference and value.
1416  m_reference->Flip( m_pos, false );
1417  m_value->Flip( m_pos, false );
1418 
1419  // Reverse mirror footprint graphics and texts.
1420  for( BOARD_ITEM* item : m_drawings )
1421  {
1422  switch( item->Type() )
1423  {
1424  case PCB_FP_SHAPE_T:
1425  static_cast<FP_SHAPE*>( item )->Flip( m_pos, false );
1426  break;
1427 
1428  case PCB_FP_TEXT_T:
1429  static_cast<FP_TEXT*>( item )->Flip( m_pos, false );
1430  break;
1431 
1432  default:
1433  wxMessageBox( wxT( "FOOTPRINT::Flip() error: Unknown Draw Type" ) );
1434  break;
1435  }
1436  }
1437 
1438  // Now rotate 180 deg if required
1439  if( aFlipLeftRight )
1440  Rotate( aCentre, 1800.0 );
1441 
1445 
1446  m_cachedHull.Mirror( aFlipLeftRight, !aFlipLeftRight, m_pos );
1447 
1449 }
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
SHAPE_POLY_SET m_poly_courtyard_back
Definition: footprint.h:732
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition: board_item.h:192
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
double m_orient
Definition: footprint.h:682
PCB_LAYER_ID FlipLayer(PCB_LAYER_ID aLayerId, int aCopperLayersCount)
Definition: lset.cpp:521
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
FP_TEXT * m_reference
Definition: footprint.h:684
int m_visibleBBoxCacheTimeStamp
Definition: footprint.h:703
void NORMALIZE_ANGLE_180(T &Angle)
Definition: trigo.h:398
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
FP_TEXT * m_value
Definition: footprint.h:685
FP_ZONES m_fp_zones
Definition: footprint.h:679
void Flip(const wxPoint &aCentre, bool aFlipLeftRight) override
Flip entity during footprint flip.
Definition: fp_text.cpp:137
SHAPE_POLY_SET m_poly_courtyard_front
Definition: footprint.h:731
SHAPE_POLY_SET m_cachedHull
Definition: footprint.h:706
Handle a list of polygons defining a copper zone.
Definition: zone.h:56
wxPoint m_pos
Definition: footprint.h:683
void Rotate(const wxPoint &aRotCentre, double aAngle) override
Rotate this object.
Definition: footprint.cpp:1356
int m_boundingBoxCacheTimeStamp
Definition: footprint.h:701
int m_textExcludedBBoxCacheTimeStamp
Definition: footprint.h:705
DRAWINGS m_drawings
Definition: footprint.h:677
Definition: pad.h:57
void SetPosition(const wxPoint &aPos) override
Definition: footprint.cpp:1452
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:171
PADS m_pads
Definition: footprint.h:678

References FP_TEXT::Flip(), FlipLayer(), BOARD_ITEM::GetLayer(), m_boundingBoxCacheTimeStamp, m_cachedHull, m_drawings, m_fp_zones, m_orient, m_pads, m_poly_courtyard_back, m_poly_courtyard_front, m_pos, m_reference, m_textExcludedBBoxCacheTimeStamp, m_value, m_visibleBBoxCacheTimeStamp, MIRROR(), SHAPE_POLY_SET::Mirror(), NORMALIZE_ANGLE_180(), pad, PCB_FP_SHAPE_T, PCB_FP_TEXT_T, Rotate(), BOARD_ITEM::SetLayer(), and SetPosition().

Referenced by PCB_BASE_FRAME::AddFootprintToBoard(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), PCB_EDIT_FRAME::ExchangeFootprint(), PCB_IO::FootprintSave(), CADSTAR_PCB_ARCHIVE_LOADER::loadComponents(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), FABMASTER::loadFootprints(), EAGLE_PLUGIN::orientFootprintAndText(), BOARD_EDITOR_CONTROL::PlaceFootprint(), and DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow().

◆ Flip() [2/2]

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

Definition at line 304 of file board_item.h.

305  {
306  Flip( wxPoint( aCentre.x, aCentre.y ), aFlipLeftRight );
307  }
virtual void Flip(const wxPoint &aCentre, bool aFlipLeftRight)
Flip this object, i.e.
Definition: board_item.cpp:184

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

◆ Get() [1/3]

wxAny INSPECTABLE::Get ( PROPERTY_BASE aProperty)
inlineinherited

Definition at line 86 of file inspectable.h.

87  {
89  TYPE_ID thisType = TYPE_HASH( *this );
90  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
91  return object ? aProperty->getter( object ) : wxAny();
92  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
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:62
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 BOOST_AUTO_TEST_CASE(), 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 95 of file inspectable.h.

96  {
98  TYPE_ID thisType = TYPE_HASH( *this );
99  void* object = propMgr.TypeCast( this, thisType, aProperty->OwnerHash() );
100  return object ? aProperty->get<T>( object ) : T();
101  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
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:62
T get(void *aObject)
Definition: property.h:268
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 104 of file inspectable.h.

105  {
107  TYPE_ID thisType = TYPE_HASH( *this );
108  PROPERTY_BASE* prop = propMgr.GetProperty( thisType, aProperty );
109  boost::optional<T> ret = T();
110 
111  if( prop )
112  {
113  void* object = propMgr.TypeCast( this, thisType, prop->OwnerHash() );
114 
115  if( object )
116  ret = prop->get<T>( object );
117  }
118 
119  return ret;
120  }
static PROPERTY_MANAGER & Instance()
Definition: property_mgr.h:65
#define TYPE_HASH(x)
Definition: property.h:59
size_t TYPE_ID
Unique type identifier.
Definition: property_mgr.h:42
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:62
T get(void *aObject)
Definition: property.h:268
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().

◆ GetAllDrawingLayers()

void FOOTPRINT::GetAllDrawingLayers ( int  aLayers[],
int &  aCount,
bool  aIncludePads = true 
) const

Return a set of all layers that this footprint has drawings on similar to ViewGetLayers().

Parameters
aLayersis an array to store layer ids.
aCountis the number of layers stored in the array.
aIncludePadscontrols whether to also include pad layers.

Definition at line 1215 of file footprint.cpp.

1216 {
1217  std::unordered_set<int> layers;
1218 
1219  for( BOARD_ITEM* item : m_drawings )
1220  layers.insert( static_cast<int>( item->GetLayer() ) );
1221 
1222  if( aIncludePads )
1223  {
1224  for( PAD* pad : m_pads )
1225  {
1226  int pad_layers[KIGFX::VIEW::VIEW_MAX_LAYERS], pad_layers_count;
1227  pad->ViewGetLayers( pad_layers, pad_layers_count );
1228 
1229  for( int i = 0; i < pad_layers_count; i++ )
1230  layers.insert( pad_layers[i] );
1231  }
1232  }
1233 
1234  aCount = layers.size();
1235  int i = 0;
1236 
1237  for( int layer : layers )
1238  aLayers[i++] = layer;
1239 }
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:680
DRAWINGS m_drawings
Definition: footprint.h:677
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:678

References m_drawings, m_pads, pad, and KIGFX::VIEW::VIEW_MAX_LAYERS.

◆ GetArea()

double FOOTPRINT::GetArea ( int  aPadding = 0) const

Definition at line 602 of file footprint.cpp.

603 {
604  EDA_RECT bbox = GetBoundingBox( false, false );
605 
606  double w = std::abs( static_cast<double>( bbox.GetWidth() ) ) + aPadding;
607  double h = std::abs( static_cast<double>( bbox.GetHeight() ) ) + aPadding;
608  return w * h;
609 }
int GetWidth() const
Definition: eda_rect.h:109
int GetHeight() const
Definition: eda_rect.h:110
const EDA_RECT GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition: footprint.cpp:635
Handle the component boundary box.
Definition: eda_rect.h:42

References GetBoundingBox(), EDA_RECT::GetHeight(), and EDA_RECT::GetWidth().

Referenced by sortFootprintsByComplexity(), sortFootprintsByRatsnestSize(), and SpreadFootprints().

◆ GetAttributes()

◆ GetBoard()

BOARD * BOARD_ITEM::GetBoard ( ) const
virtualinherited

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

Definition at line 51 of file board_item.cpp.

52 {
53  if( Type() == PCB_T )
54  return (BOARD*) this;
55 
56  BOARD_ITEM* parent = GetParent();
57 
58  if( parent )
59  return parent->GetBoard();
60 
61  return nullptr;
62 }
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:80
virtual BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:51
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
BOARD_ITEM_CONTAINER * GetParent() const
Definition: board_item.h:166
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:113

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

Referenced by PAD::BuildEffectivePolygon(), PAD::BuildEffectiveShapes(), ZONE::BuildSmoothedPoly(), KIGFX::PCB_PAINTER::draw(), exprFromTo(), PCB_VIA::FlashLayer(), PAD::FlashLayer(), PCB_TARGET::Flip(), PCB_TEXT::Flip(), PCB_TRACK::Flip(), FP_SHAPE::Flip(), FP_TEXT::Flip(), PCB_DIMENSION_BASE::Flip(), PCB_ARC::Flip(), PCB_SHAPE::Flip(), PCB_VIA::Flip(), ZONE::Flip(), BOARD_ITEM::GetBoard(), GetBoundingBox(), GetBoundingHull(), BOARD_CONNECTED_ITEM::GetEffectiveNetclass(), ZONE::GetInteractingZones(), BOARD_ITEM::GetLayerName(), PCB_VIA::GetMinAnnulus(), PCB_DRAW_PANEL_GAL::GetMsgPanelInfo(), ZONE::GetMsgPanelInfo(), NETINFO_ITEM::GetMsgPanelInfo(), PCB_TRACK::GetMsgPanelInfo(), PCB_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(), PCB_TRACK::GetWidthConstraints(), inDiffPair(), insideArea(), insideBackCourtyard(), insideCourtyard(), insideFrontCourtyard(), BOARD_ITEM::layerMaskDescribe(), PCB_VIA::layerMaskDescribe(), CONVERT_TOOL::makePolysFromCircles(), PAD::MergePrimitivesAsPolygon(), EAGLE_PLUGIN::packageWire(), PCB_BASE_EDIT_FRAME::PutDataInPreviousState(), BOARD::ResolveDRCExclusions(), BOARD_CONNECTED_ITEM::SetNetCode(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataToWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataToWindow(), ZONE::TransformSmoothedOutlineToPolygon(), ZONE::TransformSolidAreasShapesToPolygon(), PCB_TRACK::ViewBBox(), ViewBBox(), PCB_VIA::ViewGetLOD(), and PAD::ViewGetLOD().

◆ GetBoundingBox() [1/2]

const EDA_RECT FOOTPRINT::GetBoundingBox ( ) const
overridevirtual

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 635 of file footprint.cpp.

636 {
637  return GetBoundingBox( true, true );
638 }
const EDA_RECT GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition: footprint.cpp:635

Referenced by AR_AUTOPLACER::buildFpAreas(), PCB_GRID_HELPER::computeAnchors(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), AR_AUTOPLACER::genModuleOnRoutingMatrix(), GetArea(), GetBoundingBoxes(), FOOTPRINT_EDIT_FRAME::GetDocumentExtents(), AR_AUTOPLACER::getOptimalFPPlacement(), HitTest(), PCB_SELECTION_TOOL::hitTestDistance(), insideFootprintCourtyard(), moveFootprintsInArea(), SpreadFootprints(), AR_AUTOPLACER::testFootprintOnBoard(), and ViewBBox().

◆ GetBoundingBox() [2/2]

const EDA_RECT FOOTPRINT::GetBoundingBox ( bool  aIncludeText,
bool  aIncludeInvisibleText 
) const

Definition at line 641 of file footprint.cpp.

642 {
643  BOARD* board = GetBoard();
644 
645  if( board )
646  {
647  if( aIncludeText && aIncludeInvisibleText )
648  {
649  if( m_boundingBoxCacheTimeStamp >= board->GetTimeStamp() )
650  return m_cachedBoundingBox;
651  }
652  else if( aIncludeText )
653  {
654  if( m_visibleBBoxCacheTimeStamp >= board->GetTimeStamp() )
655  return m_cachedVisibleBBox;
656  }
657  else
658  {
661  }
662  }
663 
664  EDA_RECT area;
665 
666  area.SetOrigin( m_pos );
667  area.SetEnd( m_pos );
668  area.Inflate( Millimeter2iu( 0.25 ) ); // Give a min size to the area
669 
670  for( BOARD_ITEM* item : m_drawings )
671  {
672  if( item->Type() == PCB_FP_SHAPE_T )
673  area.Merge( item->GetBoundingBox() );
674  }
675 
676  for( PAD* pad : m_pads )
677  area.Merge( pad->GetBoundingBox() );
678 
679  for( FP_ZONE* zone : m_fp_zones )
680  area.Merge( zone->GetBoundingBox() );
681 
682  bool noDrawItems = ( m_drawings.empty() && m_pads.empty() && m_fp_zones.empty() );
683 
684  // Groups do not contribute to the rect, only their members
685  if( aIncludeText || noDrawItems )
686  {
687  for( BOARD_ITEM* item : m_drawings )
688  {
689  if( item->Type() == PCB_FP_TEXT_T )
690  area.Merge( item->GetBoundingBox() );
691  }
692 
693  // This can be further optimized when aIncludeInvisibleText is true, but currently
694  // leaving this as is until it's determined there is a noticeable speed hit.
695  bool valueLayerIsVisible = true;
696  bool refLayerIsVisible = true;
697 
698  if( board )
699  {
700  // The first "&&" conditional handles the user turning layers off as well as layers
701  // not being present in the current PCB stackup. Values, references, and all
702  // footprint text can also be turned off via the GAL meta-layers, so the 2nd and
703  // 3rd "&&" conditionals handle that.
704  valueLayerIsVisible = board->IsLayerVisible( m_value->GetLayer() )
706  && board->IsElementVisible( LAYER_MOD_TEXT_FR );
707 
708  refLayerIsVisible = board->IsLayerVisible( m_reference->GetLayer() )
710  && board->IsElementVisible( LAYER_MOD_TEXT_FR );
711  }
712 
713 
714  if( ( m_value->IsVisible() && valueLayerIsVisible )
715  || aIncludeInvisibleText || noDrawItems )
716  area.Merge( m_value->GetBoundingBox() );
717 
718  if( ( m_reference->IsVisible() && refLayerIsVisible )
719  || aIncludeInvisibleText || noDrawItems )
720  area.Merge( m_reference->GetBoundingBox() );
721  }
722 
723  if( board )
724  {
725  if( ( aIncludeText && aIncludeInvisibleText ) || noDrawItems )
726  {
728  m_cachedBoundingBox = area;
729  }
730  else if( aIncludeText )
731  {
733  m_cachedVisibleBBox = area;
734  }
735  else
736  {
739  }
740  }
741 
742  return area;
743 }
EDA_RECT m_cachedVisibleBBox
Definition: footprint.h:702
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
void Merge(const EDA_RECT &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: eda_rect.cpp:432
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
void SetOrigin(const wxPoint &pos)
Definition: eda_rect.h:121
show footprints values (when texts are visible)
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
FP_TEXT * m_reference
Definition: footprint.h:684
int m_visibleBBoxCacheTimeStamp
Definition: footprint.h:703
FP_TEXT * m_value
Definition: footprint.h:685
EDA_RECT m_cachedBoundingBox
Definition: footprint.h:700
FP_ZONES m_fp_zones
Definition: footprint.h:679
virtual bool IsVisible() const
Definition: eda_text.h:186
void SetEnd(int x, int y)
Definition: eda_rect.h:182
virtual BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:51
wxPoint m_pos
Definition: footprint.h:683
int m_boundingBoxCacheTimeStamp
Definition: footprint.h:701
bool IsElementVisible(GAL_LAYER_ID aLayer) const
Test whether a given element category is visible.
Definition: board.cpp:531
bool IsLayerVisible(PCB_LAYER_ID aLayer) const
A proxy function that calls the correspondent function in m_BoardSettings tests whether a given layer...
Definition: board.cpp:471
const EDA_RECT GetBoundingBox() const override
Set absolute coordinates.
Definition: fp_text.cpp:227
int m_textExcludedBBoxCacheTimeStamp
Definition: footprint.h:705
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
int GetTimeStamp()
Definition: board.h:214
Handle the component boundary box.
Definition: eda_rect.h:42
EDA_RECT m_cachedTextExcludedBBox
Definition: footprint.h:704
DRAWINGS m_drawings
Definition: footprint.h:677
Definition: pad.h:57
static constexpr int Millimeter2iu(double mm)
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:171
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:678
show footprints references (when texts are visible)
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Inflate the rectangle horizontally by dx and vertically by dy.
Definition: eda_rect.cpp:364

References BOARD_ITEM::GetBoard(), FP_TEXT::GetBoundingBox(), BOARD_ITEM::GetLayer(), BOARD::GetTimeStamp(), EDA_RECT::Inflate(), BOARD::IsElementVisible(), BOARD::IsLayerVisible(), EDA_TEXT::IsVisible(), LAYER_MOD_REFERENCES, LAYER_MOD_TEXT_FR, LAYER_MOD_VALUES, m_boundingBoxCacheTimeStamp, m_cachedBoundingBox, m_cachedTextExcludedBBox, m_cachedVisibleBBox, m_drawings, m_fp_zones, m_pads, m_pos, m_reference, m_textExcludedBBoxCacheTimeStamp, m_value, m_visibleBBoxCacheTimeStamp, EDA_RECT::Merge(), Millimeter2iu(), pad, PCB_FP_SHAPE_T, PCB_FP_TEXT_T, EDA_RECT::SetEnd(), and EDA_RECT::SetOrigin().

◆ GetBoundingHull()

SHAPE_POLY_SET FOOTPRINT::GetBoundingHull ( ) const

Return a bounding polygon for the shapes and pads in the footprint.

This operation is slower but more accurate than calculating a bounding box.

Definition at line 746 of file footprint.cpp.

747 {
748  BOARD* board = GetBoard();
749 
750  if( board )
751  {
752  if( m_hullCacheTimeStamp >= board->GetTimeStamp() )
753  return m_cachedHull;
754  }
755 
756  SHAPE_POLY_SET rawPolys;
757  SHAPE_POLY_SET hull;
758 
759  for( BOARD_ITEM* item : m_drawings )
760  {
761  if( item->Type() == PCB_FP_SHAPE_T )
762  {
763  item->TransformShapeWithClearanceToPolygon( rawPolys, UNDEFINED_LAYER, 0, ARC_LOW_DEF,
764  ERROR_OUTSIDE );
765  }
766 
767  // We intentionally exclude footprint text from the bounding hull.
768  }
769 
770  for( PAD* pad : m_pads )
771  {
772  pad->TransformShapeWithClearanceToPolygon( rawPolys, UNDEFINED_LAYER, 0, ARC_LOW_DEF,
773  ERROR_OUTSIDE );
774  }
775 
776  for( FP_ZONE* zone : m_fp_zones )
777  {
778  for( PCB_LAYER_ID layer : zone->GetLayerSet().Seq() )
779  {
780  SHAPE_POLY_SET layerPoly = zone->GetFilledPolysList( layer );
781 
782  for( int ii = 0; ii < layerPoly.OutlineCount(); ii++ )
783  {
784  const SHAPE_LINE_CHAIN& poly = layerPoly.COutline( ii );
785  rawPolys.AddOutline( poly );
786  }
787  }
788  }
789 
790  // If there are some graphic items, build the actual hull.
791  // However if no items, create a minimal polygon (can happen if a footprint
792  // is created with no item: it contains only 2 texts.
793  if( rawPolys.OutlineCount() == 0 )
794  {
795  // generate a small dummy rectangular outline around the anchor
796  const int halfsize = Millimeter2iu( 1.0 );
797 
798  rawPolys.NewOutline();
799 
800  // add a square:
801  rawPolys.Append( GetPosition().x - halfsize, GetPosition().y - halfsize );
802  rawPolys.Append( GetPosition().x + halfsize, GetPosition().y - halfsize );
803  rawPolys.Append( GetPosition().x + halfsize, GetPosition().y + halfsize );
804  rawPolys.Append( GetPosition().x - halfsize, GetPosition().y + halfsize );
805  }
806 
807  std::vector<wxPoint> convex_hull;
808  BuildConvexHull( convex_hull, rawPolys );
809 
812 
813  for( const wxPoint& pt : convex_hull )
814  m_cachedHull.Append( pt );
815 
816  if( board )
818 
819  return m_cachedHull;
820 }
int OutlineCount() const
Return the number of vertices in a given outline/hole.
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
PCB_LAYER_ID
A quick note on layer IDs:
FP_ZONES m_fp_zones
Definition: footprint.h:679
Represent a set of closed polygons.
SHAPE_POLY_SET m_cachedHull
Definition: footprint.h:706
virtual BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:51
int NewOutline()
Creates a new hole in a given outline.
int AddOutline(const SHAPE_LINE_CHAIN &aOutline)
Adds a new hole to the given outline (default: last) and returns its index.
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
Represent a polyline (an zero-thickness chain of connected line segments).
int GetTimeStamp()
Definition: board.h:214
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
wxPoint GetPosition() const override
Definition: footprint.h:177
DRAWINGS m_drawings
Definition: footprint.h:677
Definition: pad.h:57
static constexpr int Millimeter2iu(double mm)
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:678
int m_hullCacheTimeStamp
Definition: footprint.h:707
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...
void BuildConvexHull(std::vector< wxPoint > &aResult, const std::vector< wxPoint > &aPoly)
Calculate the convex hull of a list of points in counter-clockwise order.
Definition: convex_hull.cpp:87

References SHAPE_POLY_SET::AddOutline(), SHAPE_POLY_SET::Append(), BuildConvexHull(), SHAPE_POLY_SET::COutline(), ERROR_OUTSIDE, BOARD_ITEM::GetBoard(), GetPosition(), BOARD::GetTimeStamp(), m_cachedHull, m_drawings, m_fp_zones, m_hullCacheTimeStamp, m_pads, Millimeter2iu(), SHAPE_POLY_SET::NewOutline(), SHAPE_POLY_SET::OutlineCount(), pad, PCB_FP_SHAPE_T, SHAPE_POLY_SET::RemoveAllContours(), and UNDEFINED_LAYER.

Referenced by CoverageRatio(), KIGFX::PCB_PAINTER::Draw(), GetCoverageArea(), HitTestAccurate(), and PCB_SELECTION_TOOL::hitTestDistance().

◆ GetCenter()

virtual wxPoint BOARD_ITEM::GetCenter ( ) const
inlinevirtualinherited

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

Returns
center point of the item

Reimplemented in PCB_ARC, PAD, PCB_SHAPE, and PCB_MARKER.

Definition at line 112 of file board_item.h.

113  {
114  return GetBoundingBox().GetCenter();
115  }
virtual const EDA_RECT GetBoundingBox() const
Return the orthogonal bounding box of this object for display purposes.
Definition: eda_item.cpp:75
const wxPoint GetCenter() const
Definition: eda_rect.h:104

References EDA_ITEM::GetBoundingBox(), and EDA_RECT::GetCenter().

Referenced by PCB_GRID_HELPER::computeAnchors(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersVertically(), and ALTIUM_PCB::HelperParseDimensions6Radial().

◆ GetClass()

wxString FOOTPRINT::GetClass ( ) const
inlineoverridevirtual

Return the class name.

Implements EDA_ITEM.

Definition at line 553 of file footprint.h.

554  {
555  return wxT( "FOOTPRINT" );
556  }

Referenced by Visit().

◆ GetContextualTextVars()

void FOOTPRINT::GetContextualTextVars ( wxArrayString *  aVars) const

Return the list of system text vars for this footprint.

Definition at line 428 of file footprint.cpp.

429 {
430  aVars->push_back( wxT( "REFERENCE" ) );
431  aVars->push_back( wxT( "VALUE" ) );
432  aVars->push_back( wxT( "LAYER" ) );
433 }

◆ GetCoverageArea()

double FOOTPRINT::GetCoverageArea ( const BOARD_ITEM aItem,
const GENERAL_COLLECTOR aCollector 
)
static

Return the initial comments block or NULL if none, without transfer of ownership.

Definition at line 1763 of file footprint.cpp.

1764 {
1765  int textMargin = KiROUND( 5 * aCollector.GetGuide()->OnePixelInIU() );
1766  SHAPE_POLY_SET poly;
1767 
1768  if( aItem->Type() == PCB_MARKER_T )
1769  {
1770  const PCB_MARKER* marker = static_cast<const PCB_MARKER*>( aItem );
1771  SHAPE_LINE_CHAIN markerShape;
1772 
1773  marker->ShapeToPolygon( markerShape );
1774  return markerShape.Area();
1775  }
1776  else if( aItem->Type() == PCB_GROUP_T )
1777  {
1778  double combinedArea = 0.0;
1779 
1780  for( BOARD_ITEM* member : static_cast<const PCB_GROUP*>( aItem )->GetItems() )
1781  combinedArea += GetCoverageArea( member, aCollector );
1782 
1783  return combinedArea;
1784  }
1785  if( aItem->Type() == PCB_FOOTPRINT_T )
1786  {
1787  const FOOTPRINT* footprint = static_cast<const FOOTPRINT*>( aItem );
1788 
1789  poly = footprint->GetBoundingHull();
1790  }
1791  else if( aItem->Type() == PCB_FP_TEXT_T )
1792  {
1793  const FP_TEXT* text = static_cast<const FP_TEXT*>( aItem );
1794 
1795  text->TransformTextShapeWithClearanceToPolygon( poly, UNDEFINED_LAYER, textMargin,
1796  ARC_LOW_DEF, ERROR_OUTSIDE );
1797  }
1798  else if( aItem->Type() == PCB_SHAPE_T )
1799  {
1800  // Approximate "linear" shapes with just their width squared, as we don't want to consider
1801  // a linear shape as being much bigger than another for purposes of selection filtering
1802  // just because it happens to be really long.
1803 
1804  const PCB_SHAPE* shape = static_cast<const PCB_SHAPE*>( aItem );
1805 
1806  switch( shape->GetShape() )
1807  {
1808  case SHAPE_T::SEGMENT:
1809  case SHAPE_T::ARC:
1810  case SHAPE_T::BEZIER:
1811  return shape->GetWidth() * shape->GetWidth();
1812 
1813  case SHAPE_T::RECT:
1814  case SHAPE_T::CIRCLE:
1815  case SHAPE_T::POLY:
1816  {
1817  if( !shape->IsFilled() )
1818  return shape->GetWidth() * shape->GetWidth();
1819 
1821  }
1822 
1823  default:
1825  ARC_LOW_DEF, ERROR_OUTSIDE );
1826  }
1827  }
1828  else if( aItem->Type() == PCB_TRACE_T || aItem->Type() == PCB_ARC_T )
1829  {
1830  double width = static_cast<const PCB_TRACK*>( aItem )->GetWidth();
1831  return width * width;
1832  }
1833  else
1834  {
1836  ARC_LOW_DEF, ERROR_OUTSIDE );
1837  }
1838 
1839  poly.Simplify( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
1840  poly.Fracture( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
1841  return polygonArea( poly );
1842 }
static double GetCoverageArea(const BOARD_ITEM *aItem, const GENERAL_COLLECTOR &aCollector)
Return the initial comments block or NULL if none, without transfer of ownership.
Definition: footprint.cpp:1763
Arcs (with rounded ends)
bool IsFilled() const
Definition: pcb_shape.h:75
Bezier Curve.
SHAPE_POLY_SET GetBoundingHull() const
Return a bounding polygon for the shapes and pads in the footprint.
Definition: footprint.cpp:746
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
polygon (not yet used for tracks, but could be in microwave apps)
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
class PCB_GROUP, a set of BOARD_ITEMs
Definition: typeinfo.h:108
SHAPE_T GetShape() const
Definition: pcb_shape.h:110
virtual double OnePixelInIU() const =0
int GetWidth() const
Definition: pcb_shape.h:97
usual segment : line with rounded ends
class PCB_ARC, an arc track segment on a copper layer
Definition: typeinfo.h:97
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
Definition: macros.h:83
double Area(bool aAbsolute=true) const
Return the area of this chain.
class PCB_TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
const COLLECTORS_GUIDE * GetGuide() const
Definition: collectors.h:339
Represent a set of closed polygons.
class FOOTPRINT, a footprint
Definition: typeinfo.h:88
void ShapeToPolygon(SHAPE_LINE_CHAIN &aPolygon, int aScale=-1) const
Return the shape polygon in internal units in a SHAPE_LINE_CHAIN the coordinates are relatives to the...
class PCB_MARKER, a marker used to show something
Definition: typeinfo.h:98
Represent a polyline (an zero-thickness chain of connected line segments).
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:73
virtual void TransformShapeWithClearanceToPolygon(SHAPE_POLY_SET &aCornerBuffer, PCB_LAYER_ID aLayer, int aClearanceValue, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const
Convert the item shape to a closed polygon.
Definition: board_item.cpp:143
segment with non rounded ends
class PCB_SHAPE, a segment not on copper layers
Definition: typeinfo.h:90
KICAD_T Type() const
Returns the type of object.
Definition: eda_item.h:113
static double polygonArea(SHAPE_POLY_SET &aPolySet)
Definition: footprint.cpp:1746

References ARC, SHAPE_LINE_CHAIN::Area(), BEZIER, CIRCLE, ERROR_OUTSIDE, GetBoundingHull(), GENERAL_COLLECTOR::GetGuide(), PCB_SHAPE::GetShape(), PCB_SHAPE::GetWidth(), PCB_SHAPE::IsFilled(), KI_FALLTHROUGH, KiROUND(), COLLECTORS_GUIDE::OnePixelInIU(), PCB_ARC_T, PCB_FOOTPRINT_T, PCB_FP_TEXT_T, PCB_GROUP_T, PCB_MARKER_T, PCB_SHAPE_T, PCB_TRACE_T, SHAPE_POLY_SET::PM_STRICTLY_SIMPLE, POLY, polygonArea(), RECT, SEGMENT, MARKER_BASE::ShapeToPolygon(), text, BOARD_ITEM::TransformShapeWithClearanceToPolygon(), EDA_ITEM::Type(), and UNDEFINED_LAYER.

Referenced by PCB_SELECTION_TOOL::GuessSelectionCandidates().

◆ GetDescription()

◆ GetEditFlags()

EDA_ITEM_FLAGS EDA_ITEM::GetEditFlags ( ) const
inlineinherited

Definition at line 158 of file eda_item.h.

159  {
160  constexpr int mask = ( IS_NEW | IS_PASTED | IS_MOVING | IS_RESIZING | IS_DRAGGING
162 
163  return m_flags & mask;
164  }
#define IS_NEW
New item, just created.
#define IS_RESIZING
Item being resized.
#define IS_DRAGGING
Item being dragged.
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:481
#define IS_PASTED
Modifier on IS_NEW which indicates it came from clipboard.
#define IS_MOVING
Item being moved.
#define STRUCT_DELETED
flag indication structures to be erased
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.

References IS_DRAGGING, IS_MOVING, IS_NEW, IS_PASTED, IS_RESIZING, IS_WIRE_IMAGE, EDA_ITEM::m_flags, and STRUCT_DELETED.

Referenced by EDA_ITEM::ClearEditFlags(), SCH_EDIT_FRAME::DeleteJunction(), SCH_EDIT_TOOL::editFieldText(), SYMBOL_EDITOR_PIN_TOOL::EditPinProperties(), SCH_EDITOR_CONTROL::EditWithSymbolEditor(), SCH_SYMBOL::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_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_EDITOR::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow(), and DIALOG_SYMBOL_PROPERTIES::TransferDataFromWindow().

◆ GetEffectiveShape()

std::shared_ptr< SHAPE > FOOTPRINT::GetEffectiveShape ( PCB_LAYER_ID  aLayer = UNDEFINED_LAYER) const
overridevirtual

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 1921 of file footprint.cpp.

1922 {
1923  std::shared_ptr<SHAPE_COMPOUND> shape = std::make_shared<SHAPE_COMPOUND>();
1924 
1925  // There are several possible interpretations here:
1926  // 1) the bounding box (without or without invisible items)
1927  // 2) just the pads and "edges" (ie: non-text graphic items)
1928  // 3) the courtyard
1929 
1930  // We'll go with (2) for now....
1931 
1932  for( PAD* pad : Pads() )
1933  shape->AddShape( pad->GetEffectiveShape( aLayer )->Clone() );
1934 
1935  for( BOARD_ITEM* item : GraphicalItems() )
1936  {
1937  if( item->Type() == PCB_FP_SHAPE_T )
1938  shape->AddShape( item->GetEffectiveShape( aLayer )->Clone() );
1939  }
1940 
1941  return shape;
1942 }
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
PADS & Pads()
Definition: footprint.h:159
DRAWINGS & GraphicalItems()
Definition: footprint.h:162
Definition: pad.h:57

References GraphicalItems(), pad, Pads(), and PCB_FP_SHAPE_T.

◆ GetFlag()

int FOOTPRINT::GetFlag ( ) const
inline

Definition at line 231 of file footprint.h.

231 { return m_arflag; }
int m_arflag
Definition: footprint.h:721

References m_arflag.

Referenced by DSN::SPECCTRA_DB::FromBOARD(), AR_AUTOPLACER::pickFootprint(), and sortFootprintsByRatsnestSize().

◆ GetFlags()

◆ GetFocusPosition()

virtual const wxPoint EDA_ITEM::GetFocusPosition ( ) const
inlinevirtualinherited

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

Reimplemented in BOARD, PCB_SHAPE, and PCB_TRACK.

Definition at line 259 of file eda_item.h.

259 { return GetPosition(); }
virtual wxPoint GetPosition() const
Definition: eda_item.h:252

References EDA_ITEM::GetPosition().

Referenced by PCB_BASE_FRAME::FocusOnItem(), and SCH_EDIT_FRAME::FocusOnItem().

◆ GetFPID()

const LIB_ID& FOOTPRINT::GetFPID ( ) const
inline

Definition at line 185 of file footprint.h.

185 { return m_fpid; }
LIB_ID m_fpid
Definition: footprint.h:686

References m_fpid.

Referenced by FOOTPRINT_EDIT_FRAME::AddFootprintToBoard(), BASIC_FOOTPRINT_INFO::BASIC_FOOTPRINT_INFO(), FOOTPRINT_EDIT_FRAME::canCloseWindow(), FOOTPRINT_EDIT_FRAME::ClearModify(), CreateDevicesSection(), FOOTPRINT_EDITOR_CONTROL::CreateFootprint(), DIALOG_EXCHANGE_FOOTPRINTS::DIALOG_EXCHANGE_FOOTPRINTS(), doPushPadProperties(), FOOTPRINT_EDIT_FRAME::editFootprintProperties(), PCB_EDIT_FRAME::ExchangeFootprint(), FOOTPRINT_EDIT_FRAME::ExportFootprint(), BOARD_EDITOR_CONTROL::ExportNetlist(), PCB_IO::FootprintSave(), FP_LIB_TABLE::FootprintSave(), PCB_IO::format(), PLACE_FILE_EXPORTER::GenPositionData(), FOOTPRINT_EDIT_FRAME::GetLoadedFPID(), DIALOG_EXCHANGE_FOOTPRINTS::isMatch(), LEGACY_PLUGIN::loadFOOTPRINT(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), PCB_EDIT_FRAME::LoadFootprints(), LEGACY_PLUGIN::loadFP_SHAPE(), LEGACY_PLUGIN::loadPAD(), DSN::SPECCTRA_DB::makeIMAGE(), FOOTPRINT_EDITOR_CONTROL::NewFootprint(), DIALOG_EXCHANGE_FOOTPRINTS::processFootprint(), BOARD_NETLIST_UPDATER::replaceFootprint(), FOOTPRINT_EDIT_FRAME::SaveFootprint(), FOOTPRINT_EDIT_FRAME::SaveFootprintAs(), FOOTPRINT_EDIT_FRAME::SaveFootprintInLibrary(), setLibNickname(), PCB_EDIT_FRAME::ShowFootprintPropertiesDialog(), BOARD_NETLIST_UPDATER::testConnectivity(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::TransferDataToWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataToWindow(), PCB_CONTROL::UpdateMessagePanel(), FOOTPRINT_EDIT_FRAME::UpdateTitle(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

◆ GetFpPadsLocalBbox()

EDA_RECT FOOTPRINT::GetFpPadsLocalBbox ( ) const

Return the bounding box containing pads when the footprint is on the front side, orientation 0, position 0,0.

Mainly used in Gerber place file to draw a footprint outline when the courtyard is missing or broken.

Returns
The rectangle containing the pads for the normalized footprint.

Definition at line 612 of file footprint.cpp.

613 {
614  EDA_RECT area;
615 
616  // We want the bounding box of the footprint pads at rot 0, not flipped
617  // Create such a image:
618  FOOTPRINT dummy( *this );
619 
620  dummy.SetPosition( wxPoint( 0, 0 ) );
621 
622  if( dummy.IsFlipped() )
623  dummy.Flip( wxPoint( 0, 0 ) , false );
624 
625  if( dummy.GetOrientation() )
626  dummy.SetOrientation( 0 );
627 
628  for( PAD* pad : dummy.Pads() )
629  area.Merge( pad->GetBoundingBox() );
630 
631  return area;
632 }
void Merge(const EDA_RECT &aRect)
Modify the position and size of the rectangle in order to contain aRect.
Definition: eda_rect.cpp:432
virtual void SetPosition(const wxPoint &aPos)
Definition: eda_item.h:253
static LIB_SYMBOL * dummy()
Used to draw a dummy shape when a LIB_SYMBOL is not found in library.
Definition: sch_symbol.cpp:71
Handle the component boundary box.
Definition: eda_rect.h:42
Definition: pad.h:57

References dummy(), EDA_RECT::Merge(), pad, and EDA_ITEM::SetPosition().

◆ GetInitialComments()

const wxArrayString* FOOTPRINT::GetInitialComments ( ) const
inline

Definition at line 639 of file footprint.h.

639 { return m_initial_comments; }
wxArrayString * m_initial_comments
Definition: footprint.h:728

References m_initial_comments.

Referenced by PCB_IO::format().

◆ GetKeywords()

◆ GetLastEditTime()

timestamp_t FOOTPRINT::GetLastEditTime ( ) const
inline

Definition at line 327 of file footprint.h.

327 { return m_lastEditTime; }
timestamp_t m_lastEditTime
Definition: footprint.h:720

References m_lastEditTime.

Referenced by PCB_IO::format(), and PCB_CONTROL::UpdateMessagePanel().

◆ GetLayer()

virtual PCB_LAYER_ID BOARD_ITEM::GetLayer ( ) const
inlinevirtualinherited

Return the primary layer this item is on.

Reimplemented in ZONE.

Definition at line 171 of file board_item.h.

171 { return m_layer; }
PCB_LAYER_ID m_layer
Definition: board_item.h:352

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(), EXPORTER_PCB_VRML::ExportVrmlFootprint(), extractDiffPairCoupledItems(), EDIT_TOOL::FilletTracks(), PCB_TARGET::Flip(), PCB_TEXT::Flip(), PCB_TRACK::Flip(), FP_SHAPE::Flip(), FP_TEXT::Flip(), PCB_DIMENSION_BASE::Flip(), Flip(), PCB_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(), GetBoundingBox(), ZONE::GetLayer(), getMatchingTextItem(), PCB_TRACK::GetMsgPanelInfo(), PCB_VIA::GetMsgPanelInfo(), PAD::GetMsgPanelInfo(), AR_AUTOPLACER::getOptimalFPPlacement(), BOARD::GetPad(), PCB_TRACK::GetWidthConstraints(), PCB_SELECTION_TOOL::GuessSelectionCandidates(), idf_export_footprint(), GENERAL_COLLECTOR::Inspect(), BOARD_INSPECTION_TOOL::InspectClearance(), BOARD_INSPECTION_TOOL::InspectConstraints(), BOARD_INSPECTION_TOOL::InspectDRCError(), isEdge(), PAD::IsFlipped(), IsFlipped(), PNS_KICAD_IFACE::IsItemVisible(), BOARD_ITEM::IsOnCopperLayer(), FP_SHAPE::IsParentFlipped(), FP_TEXT::IsParentFlipped(), itemIsIncludedByFilter(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), CADSTAR_PCB_ARCHIVE_LOADER::makeTracksFromShapes(), DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::OnAddField(), DIALOG_FOOTPRINT_PROPERTIES::OnAddField(), DIALOG_FOOTPRINT_CHECKER::OnSelectItem(), PCB_TRACK::cmp_tracks::operator()(), PCB_SHAPE::cmp_drawings::operator()(), BOARD_ITEM::ptr_cmp::operator()(), FOOTPRINT::cmp_drawings::operator()(), EAGLE_PLUGIN::packagePad(), BRDITEMS_PLOTTER::PlotDimension(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), BRDITEMS_PLOTTER::PlotFootprintGraphicItems(), BRDITEMS_PLOTTER::PlotFootprintTextItem(), 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(), 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_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataToWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::TransferDataToWindow(), BOARD_ADAPTER::transformFPShapesToPolygon(), TransformFPShapesWithClearanceToPolygon(), PCB_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 74 of file board_item.cpp.

75 {
76  BOARD* board = GetBoard();
77 
78  if( board )
79  return board->GetLayerName( m_layer );
80 
81  // If no parent, return standard name
83 }
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition: board.cpp:360
virtual BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:51
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
PCB_LAYER_ID m_layer
Definition: board_item.h:352
static wxString GetStandardLayerName(PCB_LAYER_ID aLayerId)
Return an "English Standard" name of a PCB layer when given aLayerNumber.
Definition: board.h:605

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

Referenced by PCB_TARGET::GetMsgPanelInfo(), PCB_TEXT::GetMsgPanelInfo(), FP_TEXT::GetMsgPanelInfo(), PCB_DIMENSION_BASE::GetMsgPanelInfo(), PCB_SHAPE::GetMsgPanelInfo(), PCB_DIM_LEADER::GetMsgPanelInfo(), PCB_TEXT::GetSelectMenuText(), FP_SHAPE::GetSelectMenuText(), PCB_TRACK::GetSelectMenuText(), PCB_DIMENSION_BASE::GetSelectMenuText(), PCB_SHAPE::GetSelectMenuText(), PCB_TEXT::GetShownText(), and ResolveTextVar().

◆ GetLayerSet()

◆ GetLink()

◆ GetLocalClearance() [1/2]

◆ GetLocalClearance() [2/2]

int FOOTPRINT::GetLocalClearance ( wxString *  aSource) const
inline

Definition at line 203 of file footprint.h.

204  {
205  if( aSource )
206  *aSource = wxString::Format( _( "footprint %s" ), GetReference() );
207 
208  return m_localClearance;
209  }
const wxString & GetReference() const
Definition: footprint.h:421
#define _(s)
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
int m_localClearance
Definition: footprint.h:712

References _, Format(), GetReference(), and m_localClearance.

◆ GetLocalSolderMaskMargin()

int FOOTPRINT::GetLocalSolderMaskMargin ( ) const
inline

◆ GetLocalSolderPasteMargin()

◆ GetLocalSolderPasteMarginRatio()

◆ GetMenuImage()

BITMAPS FOOTPRINT::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 EDA_ITEM.

Definition at line 1177 of file footprint.cpp.

1178 {
1179  return BITMAPS::module;
1180 }

References module.

◆ GetMsgPanelInfo()

void FOOTPRINT::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 823 of file footprint.cpp.

824 {
825  wxString msg, msg2;
826 
827  aList.emplace_back( m_reference->GetShownText(), m_value->GetShownText() );
828 
829  if( aFrame->IsType( FRAME_FOOTPRINT_VIEWER )
831  || aFrame->IsType( FRAME_FOOTPRINT_EDITOR ) )
832  {
833  wxDateTime date( static_cast<time_t>( m_lastEditTime ) );
834 
835  // Date format: see http://www.cplusplus.com/reference/ctime/strftime
836  if( m_lastEditTime && date.IsValid() )
837  msg = date.Format( wxT( "%b %d, %Y" ) ); // Abbreviated_month_name Day, Year
838  else
839  msg = _( "Unknown" );
840 
841  aList.emplace_back( _( "Last Change" ), msg );
842  }
843  else if( aFrame->IsType( FRAME_PCB_EDITOR ) )
844  {
845  aList.emplace_back( _( "Board Side" ), IsFlipped() ? _( "Back (Flipped)" ) : _( "Front" ) );
846  }
847 
848  auto addToken = []( wxString* aStr, const wxString& aAttr )
849  {
850  if( !aStr->IsEmpty() )
851  *aStr += wxT( ", " );
852 
853  *aStr += aAttr;
854  };
855 
856  wxString status;
857  wxString attrs;
858 
859  if( IsLocked() )
860  addToken( &status, _( "Locked" ) );
861 
862  if( m_fpStatus & FP_is_PLACED )
863  addToken( &status, _( "autoplaced" ) );
864 
866  addToken( &attrs, _( "not in schematic" ) );
867 
869  addToken( &attrs, _( "exclude from pos files" ) );
870 
872  addToken( &attrs, _( "exclude from BOM" ) );
873 
874  aList.emplace_back( _( "Status: " ) + status, _( "Attributes:" ) + wxS( " " ) + attrs );
875 
876  aList.emplace_back( _( "Rotation" ), wxString::Format( "%.4g", GetOrientationDegrees() ) );
877 
878  msg.Printf( _( "Footprint: %s" ), m_fpid.Format().c_str() );
879  msg2.Printf( _( "3D-Shape: %s" ), m_3D_Drawings.empty() ? _( "<none>" )
880  : m_3D_Drawings.front().m_Filename );
881  aList.emplace_back( msg, msg2 );
882 
883  msg.Printf( _( "Doc: %s" ), m_doc );
884  msg2.Printf( _( "Keywords: %s" ), m_keywords );
885  aList.emplace_back( msg, msg2 );
886 }
bool IsLocked() const override
Definition: footprint.h:277
timestamp_t m_lastEditTime
Definition: footprint.h:720
FP_TEXT * m_reference
Definition: footprint.h:684
const char * c_str() const
Definition: utf8.h:102
FP_TEXT * m_value
Definition: footprint.h:685
int m_fpStatus
Definition: footprint.h:688
#define _(s)
UTF8 Format() const
Definition: lib_id.cpp:116
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
bool IsFlipped() const
Definition: footprint.h:261
double GetOrientationDegrees() const
Definition: footprint.h:182
wxString m_keywords
Definition: footprint.h:718
bool IsType(FRAME_T aType) const
LIB_ID m_fpid
Definition: footprint.h:686
#define FP_is_PLACED
In autoplace: footprint automatically placed.
Definition: footprint.h:272
virtual wxString GetShownText(int aDepth=0) const override
Return the string actually shown after processing of the base text.
Definition: fp_text.cpp:414
wxString m_doc
Definition: footprint.h:717
std::list< FP_3DMODEL > m_3D_Drawings
Definition: footprint.h:726
int m_attributes
Definition: footprint.h:687

References _, UTF8::c_str(), LIB_ID::Format(), Format(), FP_BOARD_ONLY, FP_EXCLUDE_FROM_BOM, FP_EXCLUDE_FROM_POS_FILES, FP_is_PLACED, FRAME_FOOTPRINT_EDITOR, FRAME_FOOTPRINT_VIEWER, FRAME_FOOTPRINT_VIEWER_MODAL, FRAME_PCB_EDITOR, GetOrientationDegrees(), FP_TEXT::GetShownText(), IsFlipped(), IsLocked(), EDA_BASE_FRAME::IsType(), m_3D_Drawings, m_attributes, m_doc, m_fpid, m_fpStatus, m_keywords, m_lastEditTime, m_reference, and m_value.

Referenced by DISPLAY_FOOTPRINTS_FRAME::UpdateMsgPanel().

◆ GetNextPadName()

wxString FOOTPRINT::GetNextPadName ( const wxString &  aLastPadName) const

Return the next available pad name in the footprint.

Parameters
aFillSequenceGapstrue if the numbering should "fill in" gaps in the sequence, else return the highest value + 1
Returns
the next available pad name

Definition at line 1714 of file footprint.cpp.

1715 {
1716  std::set<wxString> usedNames;
1717 
1718  // Create a set of used pad numbers
1719  for( PAD* pad : m_pads )
1720  usedNames.insert( pad->GetName() );
1721 
1722  // Pad names aren't technically reference designators, but the formatting is close enough
1723  // for these to give us what we need.
1724  wxString prefix = UTIL::GetRefDesPrefix( aLastPadName );
1725  int num = GetTrailingInt( aLastPadName );
1726 
1727  while( usedNames.count( wxString::Format( "%s%d", prefix, num ) ) )
1728  num++;
1729 
1730  return wxString::Format( "%s%d", prefix, num );
1731 }
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
int GetTrailingInt(const wxString &aStr)
Gets the trailing int, if any, from a string.
Definition: string.cpp:819
wxString GetRefDesPrefix(const wxString &aRefDes)
Get the (non-numeric) prefix from a refdes - e.g.
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:678

References Format(), UTIL::GetRefDesPrefix(), GetTrailingInt(), m_pads, and pad.

Referenced by EDIT_TOOL::Duplicate().

◆ GetOrientation()

◆ GetOrientationDegrees()

double FOOTPRINT::GetOrientationDegrees ( ) const
inline

◆ GetOrientationRadians()

double FOOTPRINT::GetOrientationRadians ( ) const
inline

Definition at line 183 of file footprint.h.

183 { return m_orient * M_PI / 1800; }
double m_orient
Definition: footprint.h:682

References m_orient.

Referenced by KIGFX::PCB_PAINTER::draw(), ALTIUM_PCB::HelperDrawsegmentSetLocalCoord(), ROUTER_TOOL::InlineDrag(), and PCB_SHAPE::MakeEffectiveShapes().

◆ GetPad()

PAD * FOOTPRINT::GetPad ( const wxPoint &  aPosition,
LSET  aLayerMask = LSET::AllLayersMask() 
)

Get a pad at aPosition on aLayerMask in the footprint.

Parameters
aPositionA wxPoint object containing the position to hit test.
aLayerMaskA layer or layers to mask the hit test.
Returns
A pointer to a PAD object if found otherwise NULL.

Definition at line 983 of file footprint.cpp.

984 {
985  for( PAD* pad : m_pads )
986  {
987  // ... and on the correct layer.
988  if( !( pad->GetLayerSet() & aLayerMask ).any() )
989  continue;
990 
991  if( pad->HitTest( aPosition ) )
992  return pad;
993  }
994 
995  return nullptr;
996 }
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:678

References m_pads, and pad.

◆ GetPadCount()

unsigned FOOTPRINT::GetPadCount ( INCLUDE_NPTH_T  aIncludeNPTH = INCLUDE_NPTH_T(INCLUDE_NPTH)) const

Return the number of pads.

Parameters
aIncludeNPTHincludes non-plated through holes when true. Does not include non-plated through holes when false.
Returns
the number of pads according to aIncludeNPTH.

Definition at line 1018 of file footprint.cpp.

1019 {
1020  if( aIncludeNPTH )
1021  return m_pads.size();
1022 
1023  unsigned cnt = 0;
1024 
1025  for( PAD* pad : m_pads )
1026  {
1027  if( pad->GetAttribute() == PAD_ATTRIB::NPTH )
1028  continue;
1029 
1030  cnt++;
1031  }
1032 
1033  return cnt;
1034 }
like PAD_PTH, but not plated
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:678

References m_pads, NPTH, and pad.

Referenced by BASIC_FOOTPRINT_INFO::BASIC_FOOTPRINT_INFO(), AR_AUTOPLACER::genModuleOnRoutingMatrix(), FOOTPRINT_INFO_IMPL::load(), sortFootprintsByComplexity(), AR_AUTOPLACER::testFootprintOnBoard(), and PCB_CONTROL::UpdateMessagePanel().

◆ GetParent()

BOARD_ITEM_CONTAINER* BOARD_ITEM::GetParent ( void  ) const
inlineinherited

Definition at line 166 of file board_item.h.

166 { return (BOARD_ITEM_CONTAINER*) m_parent; }
EDA_ITEM * m_parent
Linked list: Link (parent struct)
Definition: eda_item.h:479
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(), CoverageRatio(), 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::FilterCollectorForHierarchy(), PCB_IO::format(), FormatProbeItem(), BOARD_ITEM::GetBoard(), PCB_MARKER::GetColorLayer(), ALIGN_DISTRIBUTE_TOOL::GetSelections(), FP_TEXT::GetSelectMenuText(), PCB_TEXT::GetShownText(), FP_TEXT::GetShownText(), getTopLevelGroup(), insideArea(), GENERAL_COLLECTOR::Inspect(), ARRAY_CREATOR::Invoke(), DRC_ENGINE::IsNetTie(), FP_SHAPE::IsParentFlipped(), FP_TEXT::IsParentFlipped(), LEGACY_PLUGIN::loadMODULE_TEXT(), memberOf(), EDIT_TOOL::MoveExact(), ALTIUM_PCB::ParseTexts6Data(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), BRDITEMS_PLOTTER::PlotFootprintTextItem(), POSITION_RELATIVE_TOOL::PositionRelative(), BOARD_COMMIT::Push(), 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(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), PCB_MARKER::ViewGetLayers(), FP_ZONE::ViewGetLOD(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

◆ GetParentGroup()

◆ GetPath()

◆ GetPlacementCost180()

int FOOTPRINT::GetPlacementCost180 ( ) const
inline

◆ GetPlacementCost90()

int FOOTPRINT::GetPlacementCost90 ( ) const
inline

◆ GetPolyCourtyardBack()

const SHAPE_POLY_SET& FOOTPRINT::GetPolyCourtyardBack ( ) const
inline

◆ GetPolyCourtyardFront()

const SHAPE_POLY_SET& FOOTPRINT::GetPolyCourtyardFront ( ) const
inline

Used in DRC to test the courtyard area (a complex polygon).

Returns
the courtyard polygon.

Definition at line 646 of file footprint.h.

646 { return m_poly_courtyard_front; }
SHAPE_POLY_SET m_poly_courtyard_front
Definition: footprint.h:731

References m_poly_courtyard_front.

Referenced by AR_AUTOPLACER::buildFpAreas(), DRC_ENGINE::EvalRules(), insideArea(), insideFootprintCourtyard(), and DRC_TEST_PROVIDER_COURTYARD_CLEARANCE::testCourtyardClearances().

◆ GetPosition()

wxPoint FOOTPRINT::GetPosition ( ) const
inlineoverridevirtual

Reimplemented from EDA_ITEM.

Definition at line 177 of file footprint.h.

177 { return m_pos; }
wxPoint m_pos
Definition: footprint.h:683

References m_pos.

Referenced by CADSTAR_PCB_ARCHIVE_LOADER::addAttribute(), PCB_BASE_FRAME::AddFootprintToBoard(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), PCAD2KICAD::PCB_PAD::AddToFootprint(), PNS_KICAD_IFACE::Commit(), PCB_GRID_HELPER::computeAnchors(), ConvertOutlineToPolygon(), MICROWAVE_TOOL::createBaseFootprint(), MICROWAVE_TOOL::createMicrowaveInductor(), KIGFX::PCB_PAINTER::draw(), PCB_EDIT_FRAME::ExchangeFootprint(), EXPORTER_PCB_VRML::ExportVrmlFootprint(), PCB_IO::FootprintSave(), PCB_IO::format(), FP_TEXT::FP_TEXT(), DSN::SPECCTRA_DB::FromBOARD(), PCB_SHAPE::GetBoundingBox(), GetBoundingHull(), CADSTAR_PCB_ARCHIVE_LOADER::getKiCadPad(), AR_AUTOPLACER::getOptimalFPPlacement(), PCB_SHAPE::GetRectCorners(), hash_fp_item(), ALTIUM_PCB::HelperDrawsegmentSetLocalCoord(), idf_export_footprint(), ROUTER_TOOL::InlineDrag(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), FABMASTER::loadFootprints(), CADSTAR_PCB_ARCHIVE_LOADER::loadLibraryCoppers(), LEGACY_PLUGIN::loadPAD(), PCB_SHAPE::MakeEffectiveShapes(), DSN::SPECCTRA_DB::makeIMAGE(), moveFootprintsInArea(), EAGLE_PLUGIN::orientFootprintAndText(), EAGLE_PLUGIN::packageHole(), EAGLE_PLUGIN::packageText(), PAD::PAD(), ALTIUM_PCB::ParseComponentsBodies6Data(), BOARD_EDITOR_CONTROL::PlaceFootprint(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), RENDER_3D_LEGACY::renderFootprint(), CLIPBOARD_IO::SaveSelection(), DRAWING_TOOL::SetAnchor(), FP_SHAPE::SetDrawCoord(), FP_TEXT::SetDrawCoord(), PAD::SetDrawCoord(), FP_SHAPE::SetLocalCoord(), FP_TEXT::SetLocalCoord(), PAD::SetLocalCoord(), SetOrientation(), DRC_TEST_PROVIDER_LVS::testFootprints(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), DIALOG_FOOTPRINT_PROPERTIES::TransferDataToWindow(), EAGLE_PLUGIN::transferPad(), and PCB_SHAPE::TransformShapeWithClearanceToPolygon().

◆ GetProperties()

const std::map<wxString, wxString>& FOOTPRINT::GetProperties ( ) const
inline

Definition at line 464 of file footprint.h.

464 { return m_properties; }
std::map< wxString, wxString > m_properties
Definition: footprint.h:727

References m_properties.

Referenced by PCB_EDIT_FRAME::ExchangeFootprint(), PCB_IO::format(), and BOARD_NETLIST_UPDATER::updateFootprintParameters().

◆ GetProperty()

const wxString& FOOTPRINT::GetProperty ( const wxString &  aKey)
inline

Definition at line 466 of file footprint.h.

466 { return m_properties[ aKey ]; }
std::map< wxString, wxString > m_properties
Definition: footprint.h:727

References m_properties.

◆ GetReference()

const wxString& FOOTPRINT::GetReference ( void  ) const
inline
Returns
reference designator text.

Definition at line 421 of file footprint.h.

422  {
423  return m_reference->GetText();
424  }
FP_TEXT * m_reference
Definition: footprint.h:684
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition: eda_text.h:133

References EDA_TEXT::GetText(), and m_reference.

Referenced by FOOTPRINT_EDIT_FRAME::AddFootprintToBoard(), AR_AUTOPLACER::AutoplaceFootprints(), CollisionMatchesExpected(), DIALOG_TRACK_VIA_PROPERTIES::confirmPadChange(), PCB_BASE_FRAME::CreateNewFootprint(), DIALOG_EXCHANGE_FOOTPRINTS::DIALOG_EXCHANGE_FOOTPRINTS(), BOARD_EDITOR_CONTROL::ExportNetlist(), FOOTPRINT_DESC::FOOTPRINT_DESC(), FormatProbeItem(), DSN::SPECCTRA_DB::FromBOARD(), PLACE_FILE_EXPORTER::GenReportData(), GetLocalClearance(), FP_SHAPE::GetMsgPanelInfo(), FP_TEXT::GetMsgPanelInfo(), PAD::GetMsgPanelInfo(), DIALOG_BOARD_REANNOTATE::GetNewRefDes(), GetSelectMenuText(), getShapeName(), IncrementReference(), GENERAL_COLLECTOR::Inspect(), DIALOG_EXCHANGE_FOOTPRINTS::isMatch(), EAGLE_PLUGIN::loadElements(), CADSTAR_PCB_ARCHIVE_LOADER::loadNets(), EDA_3D_CANVAS::OnMouseMove(), ALTIUM_PCB::ParsePads6Data(), BRDITEMS_PLOTTER::PlotFootprintGraphicItem(), BRDITEMS_PLOTTER::PlotFootprintTextItem(), BRDITEMS_PLOTTER::PlotPad(), DIALOG_EXCHANGE_FOOTPRINTS::processFootprint(), BOARD_REANNOTATE_TOOL::ReannotateDuplicatesInSelection(), BOARD_NETLIST_UPDATER::replaceFootprint(), CLIPBOARD_IO::SaveSelection(), DRC_TEST_PROVIDER_LVS::testFootprints(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), BOARD_NETLIST_UPDATER::updateComponentPadConnections(), BOARD_NETLIST_UPDATER::updateFootprintParameters(), FOOTPRINT_EDIT_FRAME::UpdateTitle(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

◆ GetSelectMenuText()

wxString FOOTPRINT::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 EDA_ITEM.

Definition at line 1166 of file footprint.cpp.

1167 {
1168  wxString reference = GetReference();
1169 
1170  if( reference.IsEmpty() )
1171  reference = _( "<no reference designator>" );
1172 
1173  return wxString::Format( _( "Footprint %s" ), reference );
1174 }
const wxString & GetReference() const
Definition: footprint.h:421
#define _(s)
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

References _, Format(), and GetReference().

◆ GetState()

int EDA_ITEM::GetState ( EDA_ITEM_FLAGS  type) const
inlineinherited

Definition at line 137 of file eda_item.h.

138  {
139  return m_status & type;
140  }
EDA_ITEM_FLAGS m_status
Definition: eda_item.h:478

References EDA_ITEM::m_status.

Referenced by BOARD_ITEM::IsLocked().

◆ GetStatus()

EDA_ITEM_FLAGS EDA_ITEM::GetStatus ( ) const
inlineinherited

Definition at line 150 of file eda_item.h.

150 { return m_status; }
EDA_ITEM_FLAGS m_status
Definition: eda_item.h:478

References EDA_ITEM::m_status.

◆ GetThermalGap()

int FOOTPRINT::GetThermalGap ( ) const
inline

Definition at line 224 of file footprint.h.

224 { return m_thermalGap; }
int m_thermalGap
Definition: footprint.h:711

References m_thermalGap.

Referenced by FOOTPRINT_DESC::FOOTPRINT_DESC(), PCB_IO::format(), and PAD::GetEffectiveThermalGap().

◆ GetThermalWidth()

int FOOTPRINT::GetThermalWidth ( ) const
inline

Definition at line 221 of file footprint.h.

221 { return m_thermalWidth; }
int m_thermalWidth
Definition: footprint.h:710

References m_thermalWidth.

Referenced by FOOTPRINT_DESC::FOOTPRINT_DESC(), PCB_IO::format(), and PAD::GetEffectiveThermalSpokeWidth().

◆ GetTopLeftPad()

PAD * FOOTPRINT::GetTopLeftPad ( )

Definition at line 999 of file footprint.cpp.

1000 {
1001  PAD* topLeftPad = m_pads.front();
1002 
1003  for( PAD* p : m_pads )
1004  {
1005  wxPoint pnt = p->GetPosition(); // GetPosition() returns the center of the pad
1006 
1007  if( ( pnt.x < topLeftPad->GetPosition().x ) ||
1008  ( topLeftPad->GetPosition().x == pnt.x && pnt.y < topLeftPad->GetPosition().y ) )
1009  {
1010  topLeftPad = p;
1011  }
1012  }
1013 
1014  return topLeftPad;
1015 }
wxPoint GetPosition() const override
Definition: pad.h:174
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:678

References PAD::GetPosition(), and m_pads.

◆ GetUniquePadCount()

unsigned FOOTPRINT::GetUniquePadCount ( INCLUDE_NPTH_T  aIncludeNPTH = INCLUDE_NPTH_T(INCLUDE_NPTH)) const

Return the number of unique non-blank pads.

A complex pad can be built with many pads having the same pad name to create a complex shape or fragmented solder paste areas.

Parameters
aIncludeNPTHincludes non-plated through holes when true. Does not include non-plated through holes when false.
Returns
the number of unique pads according to aIncludeNPTH.

Definition at line 1037 of file footprint.cpp.

1038 {
1039  std::set<wxString> usedNames;
1040 
1041  // Create a set of used pad numbers
1042  for( PAD* pad : m_pads )
1043  {
1044  // Skip pads not on copper layers (used to build complex
1045  // solder paste shapes for instance)
1046  if( ( pad->GetLayerSet() & LSET::AllCuMask() ).none() )
1047  continue;
1048 
1049  // Skip pads with no name, because they are usually "mechanical"
1050  // pads, not "electrical" pads
1051  if( pad->GetName().IsEmpty() )
1052  continue;
1053 
1054  if( !aIncludeNPTH )
1055  {
1056  // skip NPTH
1057  if( pad->GetAttribute() == PAD_ATTRIB::NPTH )
1058  {
1059  continue;
1060  }
1061  }
1062 
1063  usedNames.insert( pad->GetName() );
1064  }
1065 
1066  return usedNames.size();
1067 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:750
like PAD_PTH, but not plated
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:678

References LSET::AllCuMask(), m_pads, NPTH, and pad.

Referenced by BASIC_FOOTPRINT_INFO::BASIC_FOOTPRINT_INFO(), and FOOTPRINT_INFO_IMPL::load().

◆ GetValue()

◆ GetX()

int BOARD_ITEM::GetX ( ) const
inlineinherited

◆ GetY()

int BOARD_ITEM::GetY ( ) const
inlineinherited

◆ GetZoneConnection()

ZONE_CONNECTION FOOTPRINT::GetZoneConnection ( ) const
inline

◆ GetZoneSettings()

virtual const ZONE_SETTINGS& BOARD_ITEM_CONTAINER::GetZoneSettings ( ) const
inlinevirtualinherited

Fetch the zone settings for this container.

Reimplemented in BOARD.

Definition at line 83 of file board_item_container.h.

84  {
85  return m_zoneSettings;
86  }

References BOARD_ITEM_CONTAINER::m_zoneSettings.

Referenced by ZONE::ZONE().

◆ GraphicalItems() [1/2]

◆ GraphicalItems() [2/2]

const DRAWINGS& FOOTPRINT::GraphicalItems ( ) const
inline

Definition at line 163 of file footprint.h.

163 { return m_drawings; }
DRAWINGS m_drawings
Definition: footprint.h:677

References m_drawings.

◆ Groups() [1/2]

FP_GROUPS& FOOTPRINT::Groups ( )
inline

◆ Groups() [2/2]

const FP_GROUPS& FOOTPRINT::Groups ( ) const
inline

Definition at line 169 of file footprint.h.

169 { return m_fp_groups; }
FP_GROUPS m_fp_groups
Definition: footprint.h:680

References m_fp_groups.

◆ HasFlag()

◆ HasProperty()

bool FOOTPRINT::HasProperty ( const wxString &  aKey)
inline

Definition at line 467 of file footprint.h.

468  {
469  return m_properties.find( aKey ) != m_properties.end();
470  }
std::map< wxString, wxString > m_properties
Definition: footprint.h:727

References m_properties.

◆ HasThroughHolePads()

bool FOOTPRINT::HasThroughHolePads ( ) const

Definition at line 2008 of file footprint.cpp.

2009 {
2010  for( PAD* pad : Pads() )
2011  {
2012  if( pad->GetAttribute() != PAD_ATTRIB::SMD )
2013  return true;
2014  }
2015 
2016  return false;
2017 }
Smd pad, appears on the solder paste layer (default)
PADS & Pads()
Definition: footprint.h:159
Definition: pad.h:57

References pad, Pads(), and SMD.

◆ HitTest() [1/2]

bool FOOTPRINT::HitTest ( const wxPoint &  aPosition,
int  aAccuracy = 0 
) const
overridevirtual

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 912 of file footprint.cpp.

913 {
914  EDA_RECT rect = GetBoundingBox( false, false );
915  return rect.Inflate( aAccuracy ).Contains( aPosition );
916 }
bool Contains(const wxPoint &aPoint) const
Definition: eda_rect.cpp:57
const EDA_RECT GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition: footprint.cpp:635
Handle the component boundary box.
Definition: eda_rect.h:42
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Inflate the rectangle horizontally by dx and vertically by dy.
Definition: eda_rect.cpp:364

References EDA_RECT::Contains(), GetBoundingBox(), and EDA_RECT::Inflate().

Referenced by GENERAL_COLLECTOR::Inspect().

◆ HitTest() [2/2]

bool FOOTPRINT::HitTest ( const EDA_RECT aRect,
bool  aContained,
int  aAccuracy = 0 
) const
overridevirtual

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 925 of file footprint.cpp.

926 {
927  EDA_RECT arect = aRect;
928  arect.Inflate( aAccuracy );
929 
930  if( aContained )
931  {
932  return arect.Contains( GetBoundingBox( false, false ) );
933  }
934  else
935  {
936  // If the rect does not intersect the bounding box, skip any tests
937  if( !aRect.Intersects( GetBoundingBox( false, false ) ) )
938  return false;
939 
940  // The empty footprint dummy rectangle intersects the selection area.
941  if( m_pads.empty() && m_fp_zones.empty() && m_drawings.empty() )
942  return GetBoundingBox( true, false ).Intersects( arect );
943 
944  // Determine if any elements in the FOOTPRINT intersect the rect
945  for( PAD* pad : m_pads )
946  {
947  if( pad->HitTest( arect, false, 0 ) )
948  return true;
949  }
950 
951  for( FP_ZONE* zone : m_fp_zones )
952  {
953  if( zone->HitTest( arect, false, 0 ) )
954  return true;
955  }
956 
957  for( BOARD_ITEM* item : m_drawings )
958  {
959  if( item->Type() != PCB_FP_TEXT_T && item->HitTest( arect, false, 0 ) )
960  return true;
961  }
962 
963  // Groups are not hit-tested; only their members
964 
965  // No items were hit
966  return false;
967  }
968 }
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
bool Contains(const wxPoint &aPoint) const
Definition: eda_rect.cpp:57
FP_ZONES m_fp_zones
Definition: footprint.h:679
const EDA_RECT GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition: footprint.cpp:635
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
DRAWINGS m_drawings
Definition: footprint.h:677
Definition: pad.h:57
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:678
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Inflate the rectangle horizontally by dx and vertically by dy.
Definition: eda_rect.cpp:364

References EDA_RECT::Contains(), GetBoundingBox(), EDA_RECT::Inflate(), EDA_RECT::Intersects(), m_drawings, m_fp_zones, m_pads, pad, and PCB_FP_TEXT_T.

◆ HitTestAccurate()

bool FOOTPRINT::HitTestAccurate ( const wxPoint &  aPosition,
int  aAccuracy = 0 
) const

Test if a point is inside the bounding polygon of the footprint.

The other hit test methods are just checking the bounding box, which can be quite inaccurate for rotated or oddly-shaped footprints.

Parameters
aPositionis the point to test
Returns
true if aPosition is inside the bounding polygon

Definition at line 919 of file footprint.cpp.

920 {
921  return GetBoundingHull().Collide( aPosition, aAccuracy );
922 }
SHAPE_POLY_SET GetBoundingHull() const
Return a bounding polygon for the shapes and pads in the footprint.
Definition: footprint.cpp:746
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,...

References SHAPE_POLY_SET::Collide(), and GetBoundingHull().

Referenced by GENERAL_COLLECTOR::Inspect().

◆ IncrementFlag()

void FOOTPRINT::IncrementFlag ( )
inline

Definition at line 230 of file footprint.h.

230 { m_arflag += 1; }
int m_arflag
Definition: footprint.h:721

References m_arflag.

◆ IncrementReference()

void FOOTPRINT::IncrementReference ( int  aDelta)

Bump the current reference by aDelta.

Definition at line 1734 of file footprint.cpp.

1735 {
1736  const wxString& refdes = GetReference();
1737 
1738  SetReference( wxString::Format( wxT( "%s%i" ),
1739  UTIL::GetRefDesPrefix( refdes ),
1740  GetTrailingInt( refdes ) + aDelta ) );
1741 }
void SetReference(const wxString &aReference)
Definition: footprint.h:430
const wxString & GetReference() const
Definition: footprint.h:421
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
int GetTrailingInt(const wxString &aStr)
Gets the trailing int, if any, from a string.
Definition: string.cpp:819
wxString GetRefDesPrefix(const wxString &aRefDes)
Get the (non-numeric) prefix from a refdes - e.g.

References Format(), UTIL::GetRefDesPrefix(), GetReference(), GetTrailingInt(), and SetReference().

◆ IsBrightened()

◆ IsConnected()

◆ IsDragging()

bool EDA_ITEM::IsDragging ( ) const
inlineinherited

Definition at line 121 of file eda_item.h.

121 { return m_flags & IS_DRAGGING; }
#define IS_DRAGGING
Item being dragged.
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:481

References IS_DRAGGING, and EDA_ITEM::m_flags.

Referenced by DIALOG_SYMBOL_PROPERTIES::DIALOG_SYMBOL_PROPERTIES().

◆ IsEntered()

bool EDA_ITEM::IsEntered ( ) const
inlineinherited

Definition at line 124 of file eda_item.h.

124 { return m_flags & ENTERED; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:481
#define ENTERED
indicates a group has been entered

References ENTERED, and EDA_ITEM::m_flags.

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

◆ IsFlipped()

bool FOOTPRINT::IsFlipped ( ) const
inline

◆ IsForceVisible()

bool EDA_ITEM::IsForceVisible ( ) const
inlineinherited

Definition at line 206 of file eda_item.h.

206 { return m_forceVisible; }
bool m_forceVisible
Definition: eda_item.h:480

References EDA_ITEM::m_forceVisible.

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

◆ IsLibNameValid()

bool FOOTPRINT::IsLibNameValid ( const wxString &  aName)
static

Test for validity of a name of a footprint to be used in a footprint library ( no spaces, dir separators ...

).

Parameters
aNameis the name in library to validate.
Returns
true if the given name is valid

Definition at line 1323 of file footprint.cpp.

1324 {
1325  const wxChar * invalids = StringLibNameInvalidChars( false );
1326 
1327  if( aName.find_first_of( invalids ) != std::string::npos )
1328  return false;
1329 
1330  return true;
1331 }
static const wxChar * StringLibNameInvalidChars(bool aUserReadable)
Test for validity of the name in a library of the footprint ( no spaces, dir separators ....
Definition: footprint.cpp:1334

References StringLibNameInvalidChars().

Referenced by DIALOG_FOOTPRINT_PROPERTIES_FP_EDITOR::checkFootprintName().

◆ IsLocked()

bool FOOTPRINT::IsLocked ( ) const
inlineoverridevirtual
Returns
true if the object is locked, else false.

Reimplemented from BOARD_ITEM.

Definition at line 277 of file footprint.h.

278  {
279  return ( m_fpStatus & FP_is_LOCKED ) != 0;
280  }
int m_fpStatus
Definition: footprint.h:688
#define FP_is_LOCKED
footprint LOCKED: no autoplace allowed
Definition: footprint.h:271

References FP_is_LOCKED, and m_fpStatus.

Referenced by PCB_EDIT_FRAME::ExchangeFootprint(), PCB_IO::format(), GetMsgPanelInfo(), itemIsIncludedByFilter(), and DIALOG_FOOTPRINT_PROPERTIES::TransferDataToWindow().

◆ IsModified()

bool EDA_ITEM::IsModified ( ) const
inlineinherited

Definition at line 118 of file eda_item.h.

118 { return m_flags & IS_CHANGED; }
#define IS_CHANGED
Item was edited, and modified.
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:481

References IS_CHANGED, and EDA_ITEM::m_flags.

Referenced by PCB_EDIT_FRAME::OpenProjectFiles().

◆ IsMoving()

◆ IsNetTie()

bool FOOTPRINT::IsNetTie ( ) const
inline

Definition at line 234 of file footprint.h.

235  {
236  return GetKeywords().StartsWith( wxT( "net tie" ) );
237  }
const wxString & GetKeywords() const
Definition: footprint.h:191

References GetKeywords().

Referenced by DRC_TEST_PROVIDER_COPPER_CLEARANCE::testPadAgainstItem().

◆ IsNew()

◆ IsOnCopperLayer()

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

Reimplemented in PAD, PCB_TRACK, and ZONE.

Definition at line 142 of file board_item.h.

143  {
144  return IsCopperLayer( GetLayer() );
145  }
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:171

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

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

◆ IsOnLayer()

bool FOOTPRINT::IsOnLayer ( PCB_LAYER_ID  aLayer) const
overridevirtual

A special IsOnLayer for footprints: return true if the footprint contains only items on the given layer, even if that layer is not one of the valid footprint layers F_Cu and B_Cu.

This allows selection of "graphic" footprints that contain only silkscreen, for example.

Reimplemented from BOARD_ITEM.

Definition at line 889 of file footprint.cpp.

890 {
891  // If we have any pads, fall back on normal checking
892  if( !m_pads.empty() )
893  return m_layer == aLayer;
894 
895  // No pads? Check if this entire footprint exists on the given layer
896  for( FP_ZONE* zone : m_fp_zones )
897  {
898  if( !zone->IsOnLayer( aLayer ) )
899  return false;
900  }
901 
902  for( BOARD_ITEM* item : m_drawings )
903  {
904  if( !item->IsOnLayer( aLayer ) )
905  return false;
906  }
907 
908  return true;
909 }
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
FP_ZONES m_fp_zones
Definition: footprint.h:679
PCB_LAYER_ID m_layer
Definition: board_item.h:352
DRAWINGS m_drawings
Definition: footprint.h:677
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:678

References m_drawings, m_fp_zones, BOARD_ITEM::m_layer, and m_pads.

◆ IsPlaced()

bool FOOTPRINT::IsPlaced ( ) const
inline

Definition at line 295 of file footprint.h.

295 { return m_fpStatus & FP_is_PLACED; }
int m_fpStatus
Definition: footprint.h:688
#define FP_is_PLACED
In autoplace: footprint automatically placed.
Definition: footprint.h:272

References FP_is_PLACED, and m_fpStatus.

Referenced by PCB_IO::format().

◆ 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_SYMBOL, SCH_SHEET, SCH_LABEL, SCH_TEXT, SCH_FIELD, and SCH_SHEET_PIN.

Definition at line 403 of file eda_item.h.

403 { return false; }

Referenced by EDA_ITEM::Matches().

◆ IsResized()

bool EDA_ITEM::IsResized ( ) const
inlineinherited

Definition at line 125 of file eda_item.h.

125 { return m_flags & IS_RESIZING; }
#define IS_RESIZING
Item being resized.
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:481

References IS_RESIZING, and EDA_ITEM::m_flags.

◆ IsSelected()

bool EDA_ITEM::IsSelected ( ) const
inlineinherited

Definition at line 123 of file eda_item.h.

123 { return m_flags & SELECTED; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:481
#define SELECTED

References EDA_ITEM::m_flags, and SELECTED.

Referenced by ALIGN_DISTRIBUTE_TOOL::AlignBottom(), ALIGN_DISTRIBUTE_TOOL::AlignCenterX(), ALIGN_DISTRIBUTE_TOOL::AlignCenterY(), ALIGN_DISTRIBUTE_TOOL::AlignTop(), SCH_EDIT_FRAME::ConvertPart(), DIALOG_CHANGE_SYMBOLS::DIALOG_CHANGE_SYMBOLS(), ALIGN_DISTRIBUTE_TOOL::doAlignLeft(), ALIGN_DISTRIBUTE_TOOL::doAlignRight(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeCentersVertically(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsHorizontally(), ALIGN_DISTRIBUTE_TOOL::doDistributeGapsVertically(), KIGFX::SCH_PAINTER::draw(), KIGFX::PCB_PAINTER::Draw(), KIGFX::PCB_PAINTER::draw(), DS_PROXY_UNDO_ITEM::DS_PROXY_UNDO_ITEM(), KIGFX::DS_RENDER_SETTINGS::GetColor(), KIGFX::GERBVIEW_RENDER_SETTINGS::GetColor(), KIGFX::PCB_RENDER_SETTINGS::GetColor(), SCH_MOVE_TOOL::getConnectedDragItems(), KIGFX::SCH_PAINTER::getLineWidth(), KIGFX::SCH_PAINTER::getRenderColor(), KIGFX::SCH_PAINTER::getTextThickness(), DIALOG_EXCHANGE_FOOTPRINTS::isMatch(), DIALOG_CHANGE_SYMBOLS::isMatch(), SCH_LINE::MergeOverlap(), SCH_EDIT_TOOL::Mirror(), EDIT_TOOL::MoveExact(), SCH_MOVE_TOOL::moveItem(), BOARD_COMMIT::Push(), PCB_SELECTION_TOOL::RebuildSelection(), EE_SELECTION_TOOL::RebuildSelection(), RENDER_3D_LEGACY::renderFootprint(), SCH_EDIT_TOOL::Rotate(), EE_TOOL_BASE< SCH_BASE_FRAME >::saveCopyInUndoList(), SCH_EDIT_FRAME::SchematicCleanUp(), GERBVIEW_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::select(), PCB_SELECTION_TOOL::selectionContains(), EE_SELECTION_TOOL::selectMultiple(), PCB_SELECTION_TOOL::selectMultiple(), GERBVIEW_SELECTION_TOOL::selectPoint(), KIGFX::SCH_PAINTER::setDeviceColors(), and GERBVIEW_SELECTION_TOOL::unselect().

◆ 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 239 of file board_item.h.

240  {
241  return ( Type() == PCB_TRACE_T ) || ( Type() == PCB_VIA_T );
242  }
class PCB_TRACK, a track segment (segment on a copper layer)
Definition: typeinfo.h:95
class PCB_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:113

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

◆ IsType()

virtual bool EDA_ITEM::IsType ( const KICAD_T  aScanTypes[]) const
inlinevirtualinherited

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 in PCB_VIA, SCH_LABEL, PCB_DIMENSION_BASE, PAD, SCH_FIELD, FP_TEXT, SCH_LINE, PCB_SHAPE, FP_SHAPE, and PCB_TEXT.

Definition at line 183 of file eda_item.h.

184  {
185  if( aScanTypes[0] == SCH_LOCATE_ANY_T )
186  return true;
187 
188  for( const KICAD_T* p = aScanTypes; *p != EOT; ++p )
189  {
190  if( m_structType == *p )
191  return true;
192  }
193 
194  return false;
195  }
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
KICAD_T m_structType
Run time identification, keep private so it can never be changed after a ctor sets it.
Definition: eda_item.h:488

References EOT, EDA_ITEM::m_structType, and SCH_LOCATE_ANY_T.

Referenced by ROUTER_TOOL::CanInlineDrag(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingBus(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingLine(), SCH_LINE_WIRE_BUS_TOOL::IsDrawingWire(), PCB_TEXT::IsType(), FP_SHAPE::IsType(), PCB_SHAPE::IsType(), SCH_LINE::IsType(), FP_TEXT::IsType(), SCH_FIELD::IsType(), PAD::IsType(), PCB_DIMENSION_BASE::IsType(), SCH_LABEL::IsType(), PCB_VIA::IsType(), EE_POINT_EDITOR::Main(), PL_POINT_EDITOR::Main(), EE_SELECTION_TOOL::RequestSelection(), SCH_BASE_FRAME::UpdateItem(), EDA_ITEM::Visit(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

◆ IsWireImage()

bool EDA_ITEM::IsWireImage ( ) const
inlineinherited

Definition at line 122 of file eda_item.h.

122 { return m_flags & IS_WIRE_IMAGE; }
EDA_ITEM_FLAGS m_flags
Definition: eda_item.h:481
#define IS_WIRE_IMAGE
Item to be drawn as wireframe while editing.

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 295 of file eda_item.h.

299  {
300  for( auto it : aList )
301  {
302  if( static_cast<EDA_ITEM*>( it )->Visit( inspector, testData, scanTypes )
304  return SEARCH_RESULT::QUIT;
305  }
306 
308  }
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:93

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 314 of file eda_item.h.

316  {
317  for( auto it : aList )
318  {
319  if( static_cast<EDA_ITEM*>( it )->Visit( inspector, testData, scanTypes )
321  return SEARCH_RESULT::QUIT;
322  }
323 
325  }
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:93

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 PCB_VIA.

Definition at line 86 of file board_item.cpp.

87 {
88  BOARD* board = GetBoard();
89  LSET layers = GetLayerSet();
90 
91  // Try to be smart and useful. Check all copper first.
92  if( layers[F_Cu] && layers[B_Cu] )
93  return _( "all copper layers" );
94 
95  LSET copperLayers = layers & board->GetEnabledLayers().AllCuMask();
96  LSET techLayers = layers & board->GetEnabledLayers().AllTechMask();
97 
98  for( LSET testLayers : { copperLayers, techLayers, layers } )
99  {
100  for( int bit = PCBNEW_LAYER_ID_START; bit < PCB_LAYER_ID_COUNT; ++bit )
101  {
102  if( testLayers[ bit ] )
103  {
104  wxString layerInfo = board->GetLayerName( static_cast<PCB_LAYER_ID>( bit ) );
105 
106  if( testLayers.count() > 1 )
107  layerInfo << wxS( " " ) + _( "and others" );
108 
109  return layerInfo;
110  }
111  }
112  }
113 
114  // No copper, no technicals: no layer
115  return _( "no layers" );
116 }
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:360
LSET GetEnabledLayers() const
A proxy function that calls the corresponding function in m_BoardSettings.
Definition: board.cpp:465
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:51
#define _(s)
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
Definition: board_item.h:176

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 PCB_TRACK::GetMsgPanelInfo(), PAD::GetMsgPanelInfo(), and PAD::GetSelectMenuText().

◆ LegacyPadsLocked()

bool FOOTPRINT::LegacyPadsLocked ( ) const
inline

Definition at line 313 of file footprint.h.

313 { return m_fpStatus & FP_PADS_are_LOCKED; }
#define FP_PADS_are_LOCKED
Definition: footprint.h:274
int m_fpStatus
Definition: footprint.h:688

References FP_PADS_are_LOCKED, and m_fpStatus.

◆ 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_SYMBOL, SCH_SHEET, SCH_TEXT, SCH_FIELD, SCH_SHEET_PIN, ZONE, SCH_PIN, SCH_MARKER, PCB_MARKER, FP_TEXT, and PCB_TEXT.

Definition at line 365 of file eda_item.h.

366  {
367  return false;
368  }

Referenced by SCH_EDITOR_CONTROL::HasMatch(), PCB_TEXT::Matches(), FP_TEXT::Matches(), PCB_MARKER::Matches(), SCH_MARKER::Matches(), SCH_PIN::Matches(), ZONE::Matches(), SCH_SHEET_PIN::Matches(), SCH_FIELD::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 118 of file eda_item.cpp.

119 {
120  wxString text = aText;
121  wxString searchText = aSearchData.GetFindString();
122 
123  // Don't match if searching for replaceable item and the item doesn't support text replace.
124  if( (aSearchData.GetFlags() & FR_SEARCH_REPLACE) && !IsReplaceable() )
125  return false;
126 
127  if( aSearchData.GetFlags() & wxFR_WHOLEWORD )
128  return aText.IsSameAs( searchText, aSearchData.GetFlags() & wxFR_MATCHCASE );
129 
130  if( aSearchData.GetFlags() & FR_MATCH_WILDCARD )
131  {
132  if( aSearchData.GetFlags() & wxFR_MATCHCASE )
133  return text.Matches( searchText );
134 
135  return text.MakeUpper().Matches( searchText.MakeUpper() );
136  }
137 
138  if( aSearchData.GetFlags() & wxFR_MATCHCASE )
139  return aText.Find( searchText ) != wxNOT_FOUND;
140 
141  return text.MakeUpper().Find( searchText.MakeUpper() ) != wxNOT_FOUND;
142 }
virtual bool IsReplaceable() const
Override this method in any derived object that supports test find and replace.
Definition: eda_item.h:403

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

◆ Models() [1/2]

◆ Models() [2/2]

const std::list<FP_3DMODEL>& FOOTPRINT::Models ( ) const
inline

Definition at line 174 of file footprint.h.

174 { return m_3D_Drawings; }
std::list< FP_3DMODEL > m_3D_Drawings
Definition: footprint.h:726

References m_3D_Drawings.

◆ Move() [1/2]

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

Move this object.

Parameters
aMoveVectorthe move vector for this object.

Reimplemented from BOARD_ITEM.

Definition at line 1349 of file footprint.cpp.

1350 {
1351  wxPoint newpos = m_pos + aMoveVector;
1352  SetPosition( newpos );
1353 }
wxPoint m_pos
Definition: footprint.h:683
void SetPosition(const wxPoint &aPos) override
Definition: footprint.cpp:1452

References m_pos, and SetPosition().

Referenced by moveFootprintsInArea().

◆ Move() [2/2]

void BOARD_ITEM::Move ( const VECTOR2I aMoveVector)
inlineinherited

Definition at line 278 of file board_item.h.

279  {
280  Move( wxPoint( aMoveVector.x, aMoveVector.y ) );
281  }
virtual void Move(const wxPoint &aMoveVector)
Move this object.
Definition: board_item.h:272

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

◆ MoveAnchorPosition()

void FOOTPRINT::MoveAnchorPosition ( const wxPoint &  aMoveVector)

Move the reference point of the footprint.

It looks like a move footprint: the footprints elements (pads, outlines, edges .. ) are moved However:

  • the footprint position is not modified.
  • the relative (local) coordinates of these items are modified (a move footprint does not change these local coordinates, but changes the footprint position)

Definition at line 1498 of file footprint.cpp.

1499 {
1500  /* Move the reference point of the footprint
1501  * the footprints elements (pads, outlines, edges .. ) are moved
1502  * but:
1503  * - the footprint position is not modified.
1504  * - the relative (local) coordinates of these items are modified
1505  * - Draw coordinates are updated
1506  */
1507 
1508 
1509  // Update (move) the relative coordinates relative to the new anchor point.
1510  wxPoint moveVector = aMoveVector;
1511  RotatePoint( &moveVector, -GetOrientation() );
1512 
1513  // Update of the reference and value.
1514  m_reference->SetPos0( m_reference->GetPos0() + moveVector );
1516  m_value->SetPos0( m_value->GetPos0() + moveVector );
1517  m_value->SetDrawCoord();
1518 
1519  // Update the pad local coordinates.
1520  for( PAD* pad : m_pads )
1521  {
1522  pad->SetPos0( pad->GetPos0() + moveVector );
1523  pad->SetDrawCoord();
1524  }
1525 
1526  // Update the draw element coordinates.
1527  for( BOARD_ITEM* item : GraphicalItems() )
1528  {
1529  switch( item->Type() )
1530  {
1531  case PCB_FP_SHAPE_T:
1532  {
1533  FP_SHAPE* shape = static_cast<FP_SHAPE*>( item );
1534  shape->Move( moveVector );
1535  }
1536  break;
1537 
1538  case PCB_FP_TEXT_T:
1539  {
1540  FP_TEXT* text = static_cast<FP_TEXT*>( item );
1541  text->SetPos0( text->GetPos0() + moveVector );
1542  text->SetDrawCoord();
1543  }
1544  break;
1545 
1546  default:
1547  break;
1548  }
1549  }
1550 
1551  // Update the keepout zones
1552  for( ZONE* zone : Zones() )
1553  {
1554  zone->Move( moveVector );
1555  }
1556 
1557  // Update the 3D models
1558  for( FP_3DMODEL& model : Models() )
1559  {
1560  model.m_Offset.x += Iu2Millimeter( moveVector.x );
1561  model.m_Offset.y -= Iu2Millimeter( moveVector.y );
1562  }
1563 
1564  m_cachedBoundingBox.Move( moveVector );
1565  m_cachedVisibleBBox.Move( moveVector );
1566  m_cachedTextExcludedBBox.Move( moveVector );
1567  m_cachedHull.Move( moveVector );
1568 }
EDA_RECT m_cachedVisibleBBox
Definition: footprint.h:702
void Move(const wxPoint &aMoveVector)
Move the rectangle by the aMoveVector.
Definition: eda_rect.cpp:51
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
std::list< FP_3DMODEL > & Models()
Definition: footprint.h:173
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
double GetOrientation() const
Definition: footprint.h:181
void SetDrawCoord()
Set relative coordinates.
Definition: fp_text.cpp:190
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
FP_TEXT * m_reference
Definition: footprint.h:684
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:229
FP_TEXT * m_value
Definition: footprint.h:685
EDA_RECT m_cachedBoundingBox
Definition: footprint.h:700
FP_ZONES & Zones()
Definition: footprint.h:165
void Move(const VECTOR2I &aVector) override
SHAPE_POLY_SET m_cachedHull
Definition: footprint.h:706
DRAWINGS & GraphicalItems()
Definition: footprint.h:162
Handle a list of polygons defining a copper zone.
Definition: zone.h:56
void SetPos0(const wxPoint &aPos)
Definition: fp_text.h:165
const wxPoint & GetPos0() const
Definition: fp_text.h:166
EDA_RECT m_cachedTextExcludedBBox
Definition: footprint.h:704
void Move(const wxPoint &aMoveVector) override
Move an edge of the footprint.
Definition: fp_shape.cpp:289
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:678

References GetOrientation(), FP_TEXT::GetPos0(), GraphicalItems(), m_cachedBoundingBox, m_cachedHull, m_cachedTextExcludedBBox, m_cachedVisibleBBox, m_pads, m_reference, m_value, Models(), EDA_RECT::Move(), FP_SHAPE::Move(), SHAPE_POLY_SET::Move(), pad, PCB_FP_SHAPE_T, PCB_FP_TEXT_T, RotatePoint(), FP_TEXT::SetDrawCoord(), FP_TEXT::SetPos0(), text, and Zones().

Referenced by CLIPBOARD_IO::SaveSelection(), and DRAWING_TOOL::SetAnchor().

◆ NeedsPlaced()

bool FOOTPRINT::NeedsPlaced ( ) const
inline

Definition at line 304 of file footprint.h.

304 { return m_fpStatus & FP_to_PLACE; }
int m_fpStatus
Definition: footprint.h:688
#define FP_to_PLACE
In autoplace: footprint waiting for autoplace.
Definition: footprint.h:273

References FP_to_PLACE, and m_fpStatus.

Referenced by AR_AUTOPLACER::pickFootprint().

◆ 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 171 of file eda_item.cpp.

172 {
173  wxFAIL_MSG( wxString::Format( wxT( "Less than operator not defined for item type %s." ),
174  GetClass() ) );
175 
176  return false;
177 }
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().

◆ operator=() [1/2]

FOOTPRINT & FOOTPRINT::operator= ( const FOOTPRINT aOther)

Definition at line 324 of file footprint.cpp.

325 {
326  BOARD_ITEM::operator=( aOther );
327 
328  m_pos = aOther.m_pos;
329  m_fpid = aOther.m_fpid;
330  m_attributes = aOther.m_attributes;
331  m_fpStatus = aOther.m_fpStatus;
332  m_orient = aOther.m_orient;
333  m_rot90Cost = aOther.m_rot90Cost;
334  m_rot180Cost = aOther.m_rot180Cost;
336  m_link = aOther.m_link;
337  m_path = aOther.m_path;
338 
345  m_cachedHull = aOther.m_cachedHull;
347 
354  m_thermalGap = aOther.m_thermalGap;
355 
356  // Copy reference and value
357  *m_reference = *aOther.m_reference;
358  m_reference->SetParent( this );
359  *m_value = *aOther.m_value;
360  m_value->SetParent( this );
361 
362  std::map<BOARD_ITEM*, BOARD_ITEM*> ptrMap;
363 
364  // Copy pads
365  m_pads.clear();
366 
367  for( PAD* pad : aOther.Pads() )
368  {
369  PAD* newPad = new PAD( *pad );
370  ptrMap[ pad ] = newPad;
371  Add( newPad );
372  }
373 
374  // Copy zones
375  m_fp_zones.clear();
376 
377  for( FP_ZONE* zone : aOther.Zones() )
378  {
379  FP_ZONE* newZone = static_cast<FP_ZONE*>( zone->Clone() );
380  ptrMap[ zone ] = newZone;
381  Add( newZone );
382 
383  // Ensure the net info is OK and especially uses the net info list
384  // living in the current board
385  // Needed when copying a fp from fp editor that has its own board
386  // Must be NETINFO_LIST::ORPHANED_ITEM for a keepout that has no net.
387  newZone->SetNetCode( -1 );
388  }
389 
390  // Copy drawings
391  m_drawings.clear();
392 
393  for( BOARD_ITEM* item : aOther.GraphicalItems() )
394  {
395  BOARD_ITEM* newItem = static_cast<BOARD_ITEM*>( item->Clone() );
396  ptrMap[ item ] = newItem;
397  Add( newItem );
398  }
399 
400  // Copy groups
401  m_fp_groups.clear();
402 
403  for( PCB_GROUP* group : aOther.Groups() )
404  {
405  PCB_GROUP* newGroup = static_cast<PCB_GROUP*>( group->Clone() );
406  newGroup->GetItems().clear();
407 
408  for( BOARD_ITEM* member : group->GetItems() )
409  newGroup->AddItem( ptrMap[ member ] );
410 
411  Add( newGroup );
412  }
413 
414  // Copy auxiliary data: 3D_Drawings info
415  m_3D_Drawings.clear();
416  m_3D_Drawings = aOther.m_3D_Drawings;
417  m_doc = aOther.m_doc;
418  m_keywords = aOther.m_keywords;
419  m_properties = aOther.m_properties;
420 
422  new wxArrayString( *aOther.m_initial_comments ) : nullptr;
423 
424  return *this;
425 }
int m_localSolderPasteMargin
Definition: footprint.h:714
bool AddItem(BOARD_ITEM *aItem)
Add item to group.
Definition: pcb_group.cpp:38
EDA_RECT m_cachedVisibleBBox
Definition: footprint.h:702
ZONE_CONNECTION m_zoneConnection
Definition: footprint.h:709
double m_localSolderPasteMarginRatio
Definition: footprint.h:715
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
A set of BOARD_ITEMs (i.e., without duplicates).
Definition: pcb_group.h:50
double m_orient
Definition: footprint.h:682
timestamp_t m_lastEditTime
Definition: footprint.h:720
bool SetNetCode(int aNetCode, bool aNoAssert)
Set net using a net code.
FP_TEXT * m_reference
Definition: footprint.h:684
int m_visibleBBoxCacheTimeStamp
Definition: footprint.h:703
std::unordered_set< BOARD_ITEM * > & GetItems()
Definition: pcb_group.h:68
virtual void SetParent(EDA_ITEM *aParent)
Definition: eda_item.h:116
int m_rot90Cost
Definition: footprint.h:723
PADS & Pads()
Definition: footprint.h:159
FP_TEXT * m_value
Definition: footprint.h:685
KIID m_link
Definition: footprint.h:722
int m_localSolderMaskMargin
Definition: footprint.h:713
EDA_RECT m_cachedBoundingBox
Definition: footprint.h:700
FP_ZONES & Zones()
Definition: footprint.h:165
int m_fpStatus
Definition: footprint.h:688
FP_ZONES m_fp_zones
Definition: footprint.h:679
SHAPE_POLY_SET m_cachedHull
Definition: footprint.h:706
int m_thermalGap
Definition: footprint.h:711
DRAWINGS & GraphicalItems()
Definition: footprint.h:162
wxPoint m_pos
Definition: footprint.h:683
EDA_ITEM & operator=(const EDA_ITEM &aItem)
Assign the members of aItem to another object.
Definition: eda_item.cpp:180
int m_boundingBoxCacheTimeStamp
Definition: footprint.h:701
KIID_PATH m_path
Definition: footprint.h:719
FP_GROUPS & Groups()
Definition: footprint.h:168
int m_thermalWidth
Definition: footprint.h:710
wxString m_keywords
Definition: footprint.h:718
int m_localClearance
Definition: footprint.h:712
int m_rot180Cost
Definition: footprint.h:724
int m_textExcludedBBoxCacheTimeStamp
Definition: footprint.h:705
LIB_ID m_fpid
Definition: footprint.h:686
EDA_RECT m_cachedTextExcludedBBox
Definition: footprint.h:704
DRAWINGS m_drawings
Definition: footprint.h:677
std::map< wxString, wxString > m_properties
Definition: footprint.h:727
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT) override
Removes an item from the container.
Definition: footprint.cpp:472
wxArrayString * m_initial_comments
Definition: footprint.h:728
Definition: pad.h:57
FP_GROUPS m_fp_groups
Definition: footprint.h:680
wxString m_doc
Definition: footprint.h:717
std::list< FP_3DMODEL > m_3D_Drawings
Definition: footprint.h:726
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:678
int m_hullCacheTimeStamp
Definition: footprint.h:707
int m_attributes
Definition: footprint.h:687

References Add(), PCB_GROUP::AddItem(), PCB_GROUP::GetItems(), GraphicalItems(), group, Groups(), m_3D_Drawings, m_attributes, m_boundingBoxCacheTimeStamp, m_cachedBoundingBox, m_cachedHull, m_cachedTextExcludedBBox, m_cachedVisibleBBox, m_doc, m_drawings, m_fp_groups, m_fp_zones, m_fpid, m_fpStatus, m_hullCacheTimeStamp, m_initial_comments, m_keywords, m_lastEditTime, m_link, m_localClearance, m_localSolderMaskMargin, m_localSolderPasteMargin, m_localSolderPasteMarginRatio, m_orient, m_pads, m_path, m_pos, m_properties, m_reference, m_rot180Cost, m_rot90Cost, m_textExcludedBBoxCacheTimeStamp, m_thermalGap, m_thermalWidth, m_value, m_visibleBBoxCacheTimeStamp, m_zoneConnection, EDA_ITEM::operator=(), PAD, pad, Pads(), BOARD_CONNECTED_ITEM::SetNetCode(), EDA_ITEM::SetParent(), and Zones().

◆ operator=() [2/2]

FOOTPRINT & FOOTPRINT::operator= ( FOOTPRINT &&  aOther)

Definition at line 224 of file footprint.cpp.

225 {
226  BOARD_ITEM::operator=( aOther );
227 
228  m_pos = aOther.m_pos;
229  m_fpid = aOther.m_fpid;
230  m_attributes = aOther.m_attributes;
231  m_fpStatus = aOther.m_fpStatus;
232  m_orient = aOther.m_orient;
233  m_rot90Cost = aOther.m_rot90Cost;
234  m_rot180Cost = aOther.m_rot180Cost;
236  m_link = aOther.m_link;
237  m_path = aOther.m_path;
238 
245  m_cachedHull = aOther.m_cachedHull;
247 
254  m_thermalGap = aOther.m_thermalGap;
255 
256  // Move reference and value
257  m_reference = aOther.m_reference;
258  m_reference->SetParent( this );
259  m_value = aOther.m_value;
260  m_value->SetParent( this );
261 
262 
263  // Move the pads
264  m_pads.clear();
265 
266  for( PAD* pad : aOther.Pads() )
267  Add( pad );
268 
269  aOther.Pads().clear();
270 
271  // Move the zones
272  m_fp_zones.clear();
273 
274  for( FP_ZONE* item : aOther.Zones() )
275  {
276  Add( item );
277 
278  // Ensure the net info is OK and especially uses the net info list
279  // living in the current board
280  // Needed when copying a fp from fp editor that has its own board
281  // Must be NETINFO_LIST::ORPHANED_ITEM for a keepout that has no net.
282  item->SetNetCode( -1 );
283  }
284 
285  aOther.Zones().clear();
286 
287  // Move the drawings
288  m_drawings.clear();
289 
290  for( BOARD_ITEM* item : aOther.GraphicalItems() )
291  Add( item );
292 
293  aOther.GraphicalItems().clear();
294 
295  // Move the groups
296  m_fp_groups.clear();
297 
298  for( PCB_GROUP* group : aOther.Groups() )
299  Add( group );
300 
301  aOther.Groups().clear();
302 
303  // Copy auxiliary data: 3D_Drawings info
304  m_3D_Drawings.clear();
305  m_3D_Drawings = aOther.m_3D_Drawings;
306  m_doc = aOther.m_doc;
307  m_keywords = aOther.m_keywords;
308  m_properties = aOther.m_properties;
309 
311 
312  // Clear the other item's containers since this is a move
313  aOther.Pads().clear();
314  aOther.Zones().clear();
315  aOther.GraphicalItems().clear();
316  aOther.m_value = nullptr;
317  aOther.m_reference = nullptr;
318  aOther.m_initial_comments = nullptr;
319 
320  return *this;
321 }
int m_localSolderPasteMargin
Definition: footprint.h:714
EDA_RECT m_cachedVisibleBBox
Definition: footprint.h:702
ZONE_CONNECTION m_zoneConnection
Definition: footprint.h:709
double m_localSolderPasteMarginRatio
Definition: footprint.h:715
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:80
A set of BOARD_ITEMs (i.e., without duplicates).
Definition: pcb_group.h:50
double m_orient
Definition: footprint.h:682
timestamp_t m_lastEditTime
Definition: footprint.h:720
FP_TEXT * m_reference
Definition: footprint.h:684
int m_visibleBBoxCacheTimeStamp
Definition: footprint.h:703
virtual void SetParent(EDA_ITEM *aParent)
Definition: eda_item.h:116
int m_rot90Cost
Definition: footprint.h:723
PADS & Pads()
Definition: footprint.h:159
FP_TEXT * m_value
Definition: footprint.h:685
KIID m_link
Definition: footprint.h:722
int m_localSolderMaskMargin
Definition: footprint.h:713