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...
 
bool FixUuids ()
 Old footprints do not alway have a valid UUID (some can be set to null uuid) However null UUIDs, having a special meaning in editor, create issues when editing a footprint So all null uuids a re replaced by a valid uuid. 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
 
int GetLikelyAttribute () const
 Returns the most likely attribute based on pads Either FP_THROUGH_HOLE/FP_SMD/OTHER(0) More...
 
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 CheckFootprintAttributes (const std::function< void(const wxString &msg)> *aErrorHandler)
 Test if footprint attributes for type (SMD/Through hole/Other) match the expected type based on the pads in the footprint. More...
 
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)
 
PADFindPadByNumber (const wxString &aPadNumber, PAD *aSearchAfterMe=nullptr) const
 Return a PAD with a matching number. 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 GetNextPadNumber (const wxString &aLastPadName) const
 Return the next available pad number in the footprint. More...
 
wxString GetTypeName () const
 Get the type of 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_SETGetPolyCourtyard (PCB_LAYER_ID aLayer) const
 Used in DRC to test the courtyard area (a complex polygon). More...
 
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 const BOARDGetBoard () const
 Return the BOARD in which this BOARD_ITEM resides, or NULL if none. More...
 
virtual BOARDGetBoard ()
 
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...
 
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:754
ZONE_CONNECTION m_zoneConnection
Definition: footprint.h:749
double m_localSolderPasteMarginRatio
Definition: footprint.h:755
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:49
#define FP_PADS_are_LOCKED
Definition: footprint.h:290
double m_orient
Definition: footprint.h:722
timestamp_t m_lastEditTime
Definition: footprint.h:760
FP_TEXT * m_reference
Definition: footprint.h:724
int m_visibleBBoxCacheTimeStamp
Definition: footprint.h:743
int m_rot90Cost
Definition: footprint.h:763
FP_TEXT * m_value
Definition: footprint.h:725
int m_arflag
Definition: footprint.h:761
KIID m_link
Definition: footprint.h:762
int m_localSolderMaskMargin
Definition: footprint.h:753
int m_fpStatus
Definition: footprint.h:728
int m_thermalGap
Definition: footprint.h:751
int m_boundingBoxCacheTimeStamp
Definition: footprint.h:741
class FOOTPRINT, a footprint
Definition: typeinfo.h:88
int m_thermalWidth
Definition: footprint.h:750
int m_localClearance
Definition: footprint.h:752
int m_rot180Cost
Definition: footprint.h:764
int m_textExcludedBBoxCacheTimeStamp
Definition: footprint.h:745
Definition: layer_ids.h:71
PCB_LAYER_ID m_layer
Definition: board_item.h:316
wxArrayString * m_initial_comments
Definition: footprint.h:768
BOARD_ITEM_CONTAINER(BOARD_ITEM *aParent, KICAD_T aType)
std::list< FP_3DMODEL > m_3D_Drawings
Definition: footprint.h:766
int m_hullCacheTimeStamp
Definition: footprint.h:747
int m_attributes
Definition: footprint.h:727

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  {
172  if( ptrMap.count( member ) )
173  newGroup->AddItem( ptrMap[ member ] );
174  }
175  }
176 
177  // Copy auxiliary data: 3D_Drawings info
178  m_3D_Drawings = aFootprint.m_3D_Drawings;
179 
180  m_doc = aFootprint.m_doc;
181  m_keywords = aFootprint.m_keywords;
182  m_properties = aFootprint.m_properties;
183 
184  m_arflag = 0;
185 
187  new wxArrayString( *aFootprint.m_initial_comments ) : nullptr;
188 }
int m_localSolderPasteMargin
Definition: footprint.h:754
bool AddItem(BOARD_ITEM *aItem)
Add item to group.
Definition: pcb_group.cpp:38
EDA_RECT m_cachedVisibleBBox
Definition: footprint.h:742
ZONE_CONNECTION m_zoneConnection
Definition: footprint.h:749
double m_localSolderPasteMarginRatio
Definition: footprint.h:755
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:49
A set of BOARD_ITEMs (i.e., without duplicates).
Definition: pcb_group.h:50
double m_orient
Definition: footprint.h:722
timestamp_t m_lastEditTime
Definition: footprint.h:760
bool SetNetCode(int aNetCode, bool aNoAssert)
Set net using a net code.
FP_TEXT * m_reference
Definition: footprint.h:724
int m_visibleBBoxCacheTimeStamp
Definition: footprint.h:743
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:763
PADS & Pads()
Definition: footprint.h:168
FP_TEXT * m_value
Definition: footprint.h:725
int m_arflag
Definition: footprint.h:761
KIID m_link
Definition: footprint.h:762
int m_localSolderMaskMargin
Definition: footprint.h:753
EDA_RECT m_cachedBoundingBox
Definition: footprint.h:740
FP_ZONES & Zones()
Definition: footprint.h:174
int m_fpStatus
Definition: footprint.h:728
SHAPE_POLY_SET m_cachedHull
Definition: footprint.h:746
int m_thermalGap
Definition: footprint.h:751
DRAWINGS & GraphicalItems()
Definition: footprint.h:171
wxPoint m_pos
Definition: footprint.h:723
int m_boundingBoxCacheTimeStamp
Definition: footprint.h:741
KIID_PATH m_path
Definition: footprint.h:759
FP_GROUPS & Groups()
Definition: footprint.h:177
int m_thermalWidth
Definition: footprint.h:750
wxString m_keywords
Definition: footprint.h:758
int m_localClearance
Definition: footprint.h:752
int m_rot180Cost
Definition: footprint.h:764
int m_textExcludedBBoxCacheTimeStamp
Definition: footprint.h:745
LIB_ID m_fpid
Definition: footprint.h:726
EDA_RECT m_cachedTextExcludedBBox
Definition: footprint.h:744
std::map< wxString, wxString > m_properties
Definition: footprint.h:767
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT) override
Removes an item from the container.
Definition: footprint.cpp:513
wxArrayString * m_initial_comments
Definition: footprint.h:768
Definition: pad.h:57
BOARD_ITEM_CONTAINER(BOARD_ITEM *aParent, KICAD_T aType)
wxString m_doc
Definition: footprint.h:757
std::list< FP_3DMODEL > m_3D_Drawings
Definition: footprint.h:766
A specialization of ZONE for use in footprints.
Definition: zone.h:946
int m_hullCacheTimeStamp
Definition: footprint.h:747
int m_attributes
Definition: footprint.h:727

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

191  :
192  BOARD_ITEM_CONTAINER( aFootprint )
193 {
194  *this = std::move( aFootprint );
195 }
BOARD_ITEM_CONTAINER(BOARD_ITEM *aParent, KICAD_T aType)

◆ ~FOOTPRINT()

FOOTPRINT::~FOOTPRINT ( )

Definition at line 198 of file footprint.cpp.

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

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

514 {
515  switch( aBoardItem->Type() )
516  {
517  case PCB_FP_TEXT_T:
518  // Only user text can be added this way.
519  wxASSERT( static_cast<FP_TEXT*>( aBoardItem )->GetType() == FP_TEXT::TEXT_is_DIVERS );
521 
522  case PCB_FP_SHAPE_T:
523  if( aMode == ADD_MODE::APPEND )
524  m_drawings.push_back( aBoardItem );
525  else
526  m_drawings.push_front( aBoardItem );
527  break;
528 
529  case PCB_PAD_T:
530  if( aMode == ADD_MODE::APPEND )
531  m_pads.push_back( static_cast<PAD*>( aBoardItem ) );
532  else
533  m_pads.push_front( static_cast<PAD*>( aBoardItem ) );
534  break;
535 
536  case PCB_FP_ZONE_T:
537  if( aMode == ADD_MODE::APPEND )
538  m_fp_zones.push_back( static_cast<FP_ZONE*>( aBoardItem ) );
539  else
540  m_fp_zones.insert( m_fp_zones.begin(), static_cast<FP_ZONE*>( aBoardItem ) );
541  break;
542 
543  case PCB_GROUP_T:
544  if( aMode == ADD_MODE::APPEND )
545  m_fp_groups.push_back( static_cast<PCB_GROUP*>( aBoardItem ) );
546  else
547  m_fp_groups.insert( m_fp_groups.begin(), static_cast<PCB_GROUP*>( aBoardItem ) );
548  break;
549 
550  default:
551  {
552  wxString msg;
553  msg.Printf( wxT( "FOOTPRINT::Add() needs work: BOARD_ITEM type (%d) not handled" ),
554  aBoardItem->Type() );
555  wxFAIL_MSG( msg );
556 
557  return;
558  }
559  }
560 
561  aBoardItem->ClearEditFlags();
562  aBoardItem->SetParent( this );
563 }
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:719
class ZONE, managed by a footprint
Definition: typeinfo.h:94
DRAWINGS m_drawings
Definition: footprint.h:717
FP_GROUPS m_fp_groups
Definition: footprint.h:720
PADS m_pads
Definition: footprint.h:718

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(), CADSTAR_PCB_ARCHIVE_LOADER::drawCadstarShape(), KI_TEST::DrawSegment(), DuplicateItem(), PCB_EDIT_FRAME::ExchangeFootprint(), FOOTPRINT(), PCB_BASE_FRAME::GetFootprintFromBoardByReference(), GROUP_TOOL::Group(), ALTIUM_PCB::HelperCreateAndAddShape(), 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 1161 of file footprint.cpp.

1162 {
1163  if( nullptr == a3DModel )
1164  return;
1165 
1166  if( !a3DModel->m_Filename.empty() )
1167  m_3D_Drawings.push_back( *a3DModel );
1168 }
wxString m_Filename
The 3D shape filename in 3D library.
Definition: footprint.h:97
std::list< FP_3DMODEL > m_3D_Drawings
Definition: footprint.h:766

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

2023 {
2027 
2028  // Build the courtyard area from graphic items on the courtyard.
2029  // Only PCB_FP_SHAPE_T have meaning, graphic texts are ignored.
2030  // Collect items:
2031  std::vector<PCB_SHAPE*> list_front;
2032  std::vector<PCB_SHAPE*> list_back;
2033 
2034  for( BOARD_ITEM* item : GraphicalItems() )
2035  {
2036  if( item->GetLayer() == B_CrtYd && item->Type() == PCB_FP_SHAPE_T )
2037  list_back.push_back( static_cast<PCB_SHAPE*>( item ) );
2038 
2039  if( item->GetLayer() == F_CrtYd && item->Type() == PCB_FP_SHAPE_T )
2040  list_front.push_back( static_cast<PCB_SHAPE*>( item ) );
2041  }
2042 
2043  if( !list_front.size() && !list_back.size() )
2044  return;
2045 
2046  int errorMax = Millimeter2iu( 0.02 ); // max error for polygonization
2047  int chainingEpsilon = Millimeter2iu( 0.02 ); // max dist from one endPt to next startPt
2048 
2049  if( ConvertOutlineToPolygon( list_front, m_poly_courtyard_front, errorMax, chainingEpsilon,
2050  aErrorHandler ) )
2051  {
2052  // Touching courtyards, or courtyards -at- the clearance distance are legal.
2054 
2056  }
2057  else
2058  {
2060  }
2061 
2062  if( ConvertOutlineToPolygon( list_back, m_poly_courtyard_back, errorMax, chainingEpsilon,
2063  aErrorHandler ) )
2064  {
2065  // Touching courtyards, or courtyards -at- the clearance distance are legal.
2067 
2069  }
2070  else
2071  {
2073  }
2074 }
#define MALFORMED_B_COURTYARD
SHAPE_POLY_SET m_poly_courtyard_back
Definition: footprint.h:772
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:49
#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:771
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: eda_item.h:154
DRAWINGS & GraphicalItems()
Definition: footprint.h:171
Acute angles are chamfered.
void Inflate(int aAmount, int aCircleSegCount, CORNER_STRATEGY aCornerStrategy=ROUND_ALL_CORNERS)
Perform outline inflation/deflation.
void CacheTriangulation(bool aPartition=true)
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,...
#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().

◆ CheckFootprintAttributes()

void FOOTPRINT::CheckFootprintAttributes ( const std::function< void(const wxString &msg)> *  aErrorHandler)

Test if footprint attributes for type (SMD/Through hole/Other) match the expected type based on the pads in the footprint.

Footprints with plated through-hole pads should usually be marked through hole even if they also have SMD because they might not be auto-placed. Exceptions to this might be shielded connectors Otherwise, footprints with SMD pads should be marked SMD Footprints with no connecting pads should be marked "Other"

Parameters
aErrorHandlercallback to handle the error messages generated

Definition at line 2077 of file footprint.cpp.

2078 {
2079 
2080  int likelyAttr = GetLikelyAttribute();
2081  int setAttr = ( GetAttributes() & ( FP_SMD | FP_THROUGH_HOLE ) );
2082 
2083  // This is only valid if the footprint doesn't have FP_SMD and FP_THROUGH_HOLE set
2084  // Which is, unfortunately, possible in theory but not in the UI (I think)
2085  if( aErrorHandler && likelyAttr != setAttr )
2086  {
2087  wxString msg;
2088 
2089  if( likelyAttr == FP_THROUGH_HOLE )
2090  {
2091  msg.Printf( _( "Expected \"Through hole\" type but set to \"%s\"" ), GetTypeName() );
2092  }
2093  else if( likelyAttr == FP_SMD )
2094  {
2095  msg.Printf( _( "Expected \"SMD\" type but set to \"%s\"" ), GetTypeName() );
2096  }
2097  else
2098  {
2099  msg.Printf( _( "Expected \"Other\" type but set to \"%s\"" ), GetTypeName() );
2100  }
2101 
2102  msg = "(" + msg + ")";
2103 
2104  (*aErrorHandler)( msg );
2105  }
2106 }
int GetLikelyAttribute() const
Returns the most likely attribute based on pads Either FP_THROUGH_HOLE/FP_SMD/OTHER(0)
Definition: footprint.cpp:653
#define _(s)
int GetAttributes() const
Definition: footprint.h:235
wxString GetTypeName() const
Get the type of footprint.
Definition: footprint.cpp:683

References _, FP_SMD, FP_THROUGH_HOLE, GetAttributes(), GetLikelyAttribute(), and GetTypeName().

Referenced by 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 504 of file footprint.cpp.

505 {
506  // Force the ORPHANED dummy net info for all pads.
507  // ORPHANED dummy net does not depend on a board
508  for( PAD* pad : m_pads )
509  pad->SetNetCode( NETINFO_LIST::ORPHANED );
510 }
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:718

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 143 of file view_item.h.

144  {
145  m_viewPrivData = nullptr;
146  }
VIEW_ITEM_DATA * m_viewPrivData
Definition: view_item.h:151

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

1275 {
1276  return new FOOTPRINT( *this );
1277 }
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 1932 of file footprint.cpp.

1933 {
1934  int textMargin = KiROUND( 5 * aCollector.GetGuide()->OnePixelInIU() );
1935 
1936  SHAPE_POLY_SET footprintRegion( GetBoundingHull() );
1937  SHAPE_POLY_SET coveredRegion;
1938 
1939  TransformPadsWithClearanceToPolygon( coveredRegion, UNDEFINED_LAYER, 0, ARC_LOW_DEF,
1940  ERROR_OUTSIDE );
1941 
1942  TransformFPShapesWithClearanceToPolygon( coveredRegion, UNDEFINED_LAYER, textMargin,
1943  ARC_LOW_DEF, ERROR_OUTSIDE,
1944  true, /* include text */
1945  false /* include shapes */ );
1946 
1947  for( int i = 0; i < aCollector.GetCount(); ++i )
1948  {
1949  const BOARD_ITEM* item = aCollector[i];
1950 
1951  switch( item->Type() )
1952  {
1953  case PCB_FP_TEXT_T:
1954  case PCB_FP_SHAPE_T:
1955  if( item->GetParent() != this )
1956  {
1957  item->TransformShapeWithClearanceToPolygon( coveredRegion, UNDEFINED_LAYER, 0,
1958  ARC_LOW_DEF, ERROR_OUTSIDE );
1959  }
1960  break;
1961 
1962  case PCB_TEXT_T:
1963  case PCB_SHAPE_T:
1964  case PCB_TRACE_T:
1965  case PCB_ARC_T:
1966  case PCB_VIA_T:
1967  item->TransformShapeWithClearanceToPolygon( coveredRegion, UNDEFINED_LAYER, 0,
1968  ARC_LOW_DEF, ERROR_OUTSIDE );
1969  break;
1970 
1971  case PCB_FOOTPRINT_T:
1972  if( item != this )
1973  {
1974  const FOOTPRINT* footprint = static_cast<const FOOTPRINT*>( item );
1975  coveredRegion.AddOutline( footprint->GetBoundingHull().Outline( 0 ) );
1976  }
1977  break;
1978 
1979  default:
1980  break;
1981  }
1982  }
1983 
1984  double footprintRegionArea = polygonArea( footprintRegion );
1985  double uncoveredRegionArea = footprintRegionArea - polygonArea( coveredRegion );
1986  double coveredArea = footprintRegionArea - uncoveredRegionArea;
1987  double ratio = ( coveredArea / footprintRegionArea );
1988 
1989  // Test for negative ratio (should not occur).
1990  // better to be conservative (this will result in the disambiguate dialog)
1991  if( ratio < 0.0 )
1992  return 1.0;
1993 
1994  return std::min( ratio, 1.0 );
1995 }
SHAPE_POLY_SET GetBoundingHull() const
Return a bounding polygon for the shapes and pads in the footprint.
Definition: footprint.cpp:829
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:49
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:82
const COLLECTORS_GUIDE * GetGuide() const
Definition: collectors.h:339
Represent a set of closed polygons.
SHAPE_LINE_CHAIN & Outline(int aIndex)
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.
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:142
BOARD_ITEM_CONTAINER * GetParent() const
Definition: board_item.h:135
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:1836

References SHAPE_POLY_SET::AddOutline(), ERROR_OUTSIDE, 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, polygonArea(), 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 126 of file board_item.cpp.

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

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

1707 {
1708  FOOTPRINT* dupe = (FOOTPRINT*) Clone();
1709  const_cast<KIID&>( dupe->m_Uuid ) = KIID();
1710 
1711  dupe->RunOnChildren( [&]( BOARD_ITEM* child )
1712  {
1713  const_cast<KIID&>( child->m_Uuid ) = KIID();
1714  });
1715 
1716  return static_cast<BOARD_ITEM*>( dupe );
1717 }
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:49
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:1280
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
Definition: footprint.cpp:1274

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

1721 {
1722  BOARD_ITEM* new_item = nullptr;
1723  FP_ZONE* new_zone = nullptr;
1724 
1725  switch( aItem->Type() )
1726  {
1727  case PCB_PAD_T:
1728  {
1729  PAD* new_pad = new PAD( *static_cast<const PAD*>( aItem ) );
1730  const_cast<KIID&>( new_pad->m_Uuid ) = KIID();
1731 
1732  if( aAddToFootprint )
1733  m_pads.push_back( new_pad );
1734 
1735  new_item = new_pad;
1736  break;
1737  }
1738 
1739  case PCB_FP_ZONE_T:
1740  {
1741  new_zone = new FP_ZONE( *static_cast<const FP_ZONE*>( aItem ) );
1742  const_cast<KIID&>( new_zone->m_Uuid ) = KIID();
1743 
1744  if( aAddToFootprint )
1745  m_fp_zones.push_back( new_zone );
1746 
1747  new_item = new_zone;
1748  break;
1749  }
1750 
1751  case PCB_FP_TEXT_T:
1752  {
1753  FP_TEXT* new_text = new FP_TEXT( *static_cast<const FP_TEXT*>( aItem ) );
1754  const_cast<KIID&>( new_text->m_Uuid ) = KIID();
1755 
1756  if( new_text->GetType() == FP_TEXT::TEXT_is_REFERENCE )
1757  {
1758  new_text->SetText( wxT( "${REFERENCE}" ) );
1759  new_text->SetType( FP_TEXT::TEXT_is_DIVERS );
1760  }
1761  else if( new_text->GetType() == FP_TEXT::TEXT_is_VALUE )
1762  {
1763  new_text->SetText( wxT( "${VALUE}" ) );
1764  new_text->SetType( FP_TEXT::TEXT_is_DIVERS );
1765  }
1766 
1767  if( aAddToFootprint )
1768  Add( new_text );
1769 
1770  new_item = new_text;
1771 
1772  break;
1773  }
1774 
1775  case PCB_FP_SHAPE_T:
1776  {
1777  FP_SHAPE* new_shape = new FP_SHAPE( *static_cast<const FP_SHAPE*>( aItem ) );
1778  const_cast<KIID&>( new_shape->m_Uuid ) = KIID();
1779 
1780  if( aAddToFootprint )
1781  Add( new_shape );
1782 
1783  new_item = new_shape;
1784  break;
1785  }
1786 
1787  case PCB_GROUP_T:
1788  new_item = static_cast<const PCB_GROUP*>( aItem )->DeepDuplicate();
1789  break;
1790 
1791  case PCB_FOOTPRINT_T:
1792  // Ignore the footprint itself
1793  break;
1794 
1795  default:
1796  // Un-handled item for duplication
1797  wxFAIL_MSG( "Duplication not supported for items of class " + aItem->GetClass() );
1798  break;
1799  }
1800 
1801  return new_item;
1802 }
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:49
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:719
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:513
Definition: pad.h:57
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:718
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().

◆ FindPadByNumber()

PAD * FOOTPRINT::FindPadByNumber ( const wxString &  aPadNumber,
PAD aSearchAfterMe = nullptr 
) const

Return a PAD with a matching number.

Note
Numbers may not be unique depending on how the footprint was created.
Parameters
aPadNumberthe pad number to find.
aSearchAfterMe= not nullptr to find a pad living after aAfterMe
Returns
the first matching numbered PAD is returned or NULL if not found.

Definition at line 1056 of file footprint.cpp.

1057 {
1058  bool can_select = aSearchAfterMe ? false : true;
1059 
1060  for( PAD* pad : m_pads )
1061  {
1062  if( !can_select && pad == aSearchAfterMe )
1063  {
1064  can_select = true;
1065  continue;
1066  }
1067 
1068  if( can_select && pad->GetNumber() == aPadNumber )
1069  return pad;
1070  }
1071 
1072  return nullptr;
1073 }
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:718

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().

◆ FixUuids()

bool FOOTPRINT::FixUuids ( )

Old footprints do not alway have a valid UUID (some can be set to null uuid) However null UUIDs, having a special meaning in editor, create issues when editing a footprint So all null uuids a re replaced by a valid uuid.

Returns
true if at least one uuid is changed, false if no change

Definition at line 227 of file footprint.cpp.

228 {
229  // replace null UUIDs if any by a valid uuid
230  std::vector< BOARD_ITEM* > item_list;
231 
232  item_list.push_back( m_reference );
233  item_list.push_back( m_value );
234 
235  for( PAD* pad : m_pads )
236  item_list.push_back( pad );
237 
238  for( BOARD_ITEM* gr_item : m_drawings )
239  item_list.push_back( gr_item );
240 
241  // Note: one cannot fix null UUIDs inside the group, but it should not happen
242  // because null uuids can be found in old footprints, therefore without group
243  for( PCB_GROUP* group : m_fp_groups )
244  item_list.push_back( group );
245 
246  // Probably notneeded, because old fp do not have zones. But just in case.
247  for( FP_ZONE* zone : m_fp_zones )
248  item_list.push_back( zone );
249 
250  bool changed = false;
251 
252  for( BOARD_ITEM* item : item_list )
253  {
254  if( item->m_Uuid == niluuid )
255  {
256  const_cast<KIID&>( item->m_Uuid ) = KIID();
257  changed = true;
258  }
259  }
260 
261  return changed;
262 }
KIID niluuid(0)
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:49
A set of BOARD_ITEMs (i.e., without duplicates).
Definition: pcb_group.h:50
FP_TEXT * m_reference
Definition: footprint.h:724
FP_TEXT * m_value
Definition: footprint.h:725
Definition: kiid.h:44
FP_ZONES m_fp_zones
Definition: footprint.h:719
DRAWINGS m_drawings
Definition: footprint.h:717
Definition: pad.h:57
FP_GROUPS m_fp_groups
Definition: footprint.h:720
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:718

References group, m_drawings, m_fp_groups, m_fp_zones, m_pads, m_reference, m_value, niluuid, and pad.

Referenced by FOOTPRINT_EDIT_FRAME::AddFootprintToBoard().

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

1473 {
1474  // Move footprint to its final position:
1475  wxPoint finalPos = m_pos;
1476 
1477  // Now Flip the footprint.
1478  // Flipping a footprint is a specific transform: it is not mirrored like a text.
1479  // We have to change the side, and ensure the footprint rotation is modified according to the
1480  // transform, because this parameter is used in pick and place files, and when updating the
1481  // footprint from library.
1482  // When flipped around the X axis (Y coordinates changed) orientation is negated
1483  // When flipped around the Y axis (X coordinates changed) orientation is 180 - old orient.
1484  // Because it is specific to a footprint, we flip around the X axis, and after rotate 180 deg
1485 
1486  MIRROR( finalPos.y, aCentre.y );
1487 
1488  SetPosition( finalPos );
1489 
1490  // Flip layer
1491  SetLayer( FlipLayer( GetLayer() ) );
1492 
1493  // Reverse mirror orientation.
1494  m_orient = -m_orient;
1495 
1497 
1498  // Mirror pads to other side of board.
1499  for( PAD* pad : m_pads )
1500  pad->Flip( m_pos, false );
1501 
1502  // Mirror zones to other side of board.
1503  for( ZONE* zone : m_fp_zones )
1504  zone->Flip( m_pos, false );
1505 
1506  // Mirror reference and value.
1507  m_reference->Flip( m_pos, false );
1508  m_value->Flip( m_pos, false );
1509 
1510  // Reverse mirror footprint graphics and texts.
1511  for( BOARD_ITEM* item : m_drawings )
1512  {
1513  switch( item->Type() )
1514  {
1515  case PCB_FP_SHAPE_T:
1516  static_cast<FP_SHAPE*>( item )->Flip( m_pos, false );
1517  break;
1518 
1519  case PCB_FP_TEXT_T:
1520  static_cast<FP_TEXT*>( item )->Flip( m_pos, false );
1521  break;
1522 
1523  default:
1524  wxMessageBox( wxT( "FOOTPRINT::Flip() error: Unknown Draw Type" ) );
1525  break;
1526  }
1527  }
1528 
1529  // Now rotate 180 deg if required
1530  if( aFlipLeftRight )
1531  Rotate( aCentre, 1800.0 );
1532 
1536 
1537  m_cachedHull.Mirror( aFlipLeftRight, !aFlipLeftRight, m_pos );
1538 
1540 }
class FP_TEXT, text in a footprint
Definition: typeinfo.h:92
SHAPE_POLY_SET m_poly_courtyard_back
Definition: footprint.h:772
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
Definition: board_item.h:161
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:49
double m_orient
Definition: footprint.h:722
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:724
int m_visibleBBoxCacheTimeStamp
Definition: footprint.h:743
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:725
FP_ZONES m_fp_zones
Definition: footprint.h:719
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:771
SHAPE_POLY_SET m_cachedHull
Definition: footprint.h:746
Handle a list of polygons defining a copper zone.
Definition: zone.h:56
wxPoint m_pos
Definition: footprint.h:723
void Rotate(const wxPoint &aRotCentre, double aAngle) override
Rotate this object.
Definition: footprint.cpp:1447
int m_boundingBoxCacheTimeStamp
Definition: footprint.h:741
int m_textExcludedBBoxCacheTimeStamp
Definition: footprint.h:745
DRAWINGS m_drawings
Definition: footprint.h:717
Definition: pad.h:57
void SetPosition(const wxPoint &aPos) override
Definition: footprint.cpp:1543
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:140
PADS m_pads
Definition: footprint.h:718

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

268  {
269  Flip( wxPoint( aCentre.x, aCentre.y ), aFlipLeftRight );
270  }
virtual void Flip(const wxPoint &aCentre, bool aFlipLeftRight)
Flip this object, i.e.
Definition: board_item.cpp:183

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

1307 {
1308  std::unordered_set<int> layers;
1309 
1310  for( BOARD_ITEM* item : m_drawings )
1311  layers.insert( static_cast<int>( item->GetLayer() ) );
1312 
1313  if( aIncludePads )
1314  {
1315  for( PAD* pad : m_pads )
1316  {
1317  int pad_layers[KIGFX::VIEW::VIEW_MAX_LAYERS], pad_layers_count;
1318  pad->ViewGetLayers( pad_layers, pad_layers_count );
1319 
1320  for( int i = 0; i < pad_layers_count; i++ )
1321  layers.insert( pad_layers[i] );
1322  }
1323  }
1324 
1325  aCount = layers.size();
1326  int i = 0;
1327 
1328  for( int layer : layers )
1329  aLayers[i++] = layer;
1330 }
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:49
static constexpr int VIEW_MAX_LAYERS
maximum number of layers that may be shown
Definition: view.h:711
DRAWINGS m_drawings
Definition: footprint.h:717
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:718

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

◆ GetArea()

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

Definition at line 643 of file footprint.cpp.

644 {
645  EDA_RECT bbox = GetBoundingBox( false, false );
646 
647  double w = std::abs( static_cast<double>( bbox.GetWidth() ) ) + aPadding;
648  double h = std::abs( static_cast<double>( bbox.GetHeight() ) ) + aPadding;
649  return w * h;
650 }
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:718
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() [1/2]

const BOARD * BOARD_ITEM::GetBoard ( ) const
virtualinherited

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

Definition at line 36 of file board_item.cpp.

37 {
38  if( Type() == PCB_T )
39  return static_cast<const BOARD*>( this );
40 
41  BOARD_ITEM* parent = GetParent();
42 
43  if( parent )
44  return parent->GetBoard();
45 
46  return nullptr;
47 }
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:49
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:36
BOARD_ITEM_CONTAINER * GetParent() const
Definition: board_item.h:135
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 ZONE_FILLER::addHoleKnockout(), PAD::BuildEffectivePolygon(), PAD::BuildEffectiveShapes(), ZONE::BuildSmoothedPoly(), calcIsInsideArea(), KIGFX::PCB_PAINTER::Draw(), KIGFX::PCB_PAINTER::draw(), PCB_LAYER_VALUE::EqualTo(), existsOnLayer(), exprFromTo(), PCB_VIA::FlashLayer(), PAD::FlashLayer(), PCB_TARGET::Flip(), PCB_TEXT::Flip(), PCB_TRACK::Flip(), FP_SHAPE::Flip(), PCB_SHAPE::Flip(), FP_TEXT::Flip(), PCB_DIMENSION_BASE::Flip(), PCB_ARC::Flip(), PCB_VIA::Flip(), ZONE::Flip(), PCB_EXPR_CONTEXT::GetBoard(), BOARD_ITEM::GetBoard(), GetBoundingBox(), GetBoundingHull(), BOARD_CONNECTED_ITEM::GetEffectiveNetclass(), PCB_VIA::GetEffectiveShape(), 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(), isInsideArea(), isInsideCourtyard(), 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().

◆ GetBoard() [2/2]

BOARD * BOARD_ITEM::GetBoard ( )
virtualinherited

Definition at line 50 of file board_item.cpp.

51 {
52  if( Type() == PCB_T )
53  return static_cast<BOARD*>( this );
54 
55  BOARD_ITEM* parent = GetParent();
56 
57  if( parent )
58  return parent->GetBoard();
59 
60  return nullptr;
61 }
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:49
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:36
BOARD_ITEM_CONTAINER * GetParent() const
Definition: board_item.h:135
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().

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

719 {
720  return GetBoundingBox( true, true );
721 }
const EDA_RECT GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition: footprint.cpp:718

Referenced by AR_AUTOPLACER::buildFpAreas(), calcIsInsideCourtyard(), 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(), moveFootprintsInArea(), SpreadFootprints(), DRC_TEST_PROVIDER_COURTYARD_CLEARANCE::testCourtyardClearances(), AR_AUTOPLACER::testFootprintOnBoard(), and ViewBBox().

◆ GetBoundingBox() [2/2]

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

Definition at line 724 of file footprint.cpp.

725 {
726  const BOARD* board = GetBoard();
727 
728  if( board )
729  {
730  if( aIncludeText && aIncludeInvisibleText )
731  {
732  if( m_boundingBoxCacheTimeStamp >= board->GetTimeStamp() )
733  return m_cachedBoundingBox;
734  }
735  else if( aIncludeText )
736  {
737  if( m_visibleBBoxCacheTimeStamp >= board->GetTimeStamp() )
738  return m_cachedVisibleBBox;
739  }
740  else
741  {
744  }
745  }
746 
747  EDA_RECT area;
748 
749  area.SetOrigin( m_pos );
750  area.SetEnd( m_pos );
751  area.Inflate( Millimeter2iu( 0.25 ) ); // Give a min size to the area
752 
753  for( BOARD_ITEM* item : m_drawings )
754  {
755  if( item->Type() == PCB_FP_SHAPE_T )
756  area.Merge( item->GetBoundingBox() );
757  }
758 
759  for( PAD* pad : m_pads )
760  area.Merge( pad->GetBoundingBox() );
761 
762  for( FP_ZONE* zone : m_fp_zones )
763  area.Merge( zone->GetBoundingBox() );
764 
765  bool noDrawItems = ( m_drawings.empty() && m_pads.empty() && m_fp_zones.empty() );
766 
767  // Groups do not contribute to the rect, only their members
768  if( aIncludeText || noDrawItems )
769  {
770  for( BOARD_ITEM* item : m_drawings )
771  {
772  if( item->Type() == PCB_FP_TEXT_T )
773  area.Merge( item->GetBoundingBox() );
774  }
775 
776  // This can be further optimized when aIncludeInvisibleText is true, but currently
777  // leaving this as is until it's determined there is a noticeable speed hit.
778  bool valueLayerIsVisible = true;
779  bool refLayerIsVisible = true;
780 
781  if( board )
782  {
783  // The first "&&" conditional handles the user turning layers off as well as layers
784  // not being present in the current PCB stackup. Values, references, and all
785  // footprint text can also be turned off via the GAL meta-layers, so the 2nd and
786  // 3rd "&&" conditionals handle that.
787  valueLayerIsVisible = board->IsLayerVisible( m_value->GetLayer() )
789  && board->IsElementVisible( LAYER_MOD_TEXT_FR );
790 
791  refLayerIsVisible = board->IsLayerVisible( m_reference->GetLayer() )
793  && board->IsElementVisible( LAYER_MOD_TEXT_FR );
794  }
795 
796 
797  if( ( m_value->IsVisible() && valueLayerIsVisible )
798  || aIncludeInvisibleText || noDrawItems )
799  area.Merge( m_value->GetBoundingBox() );
800 
801  if( ( m_reference->IsVisible() && refLayerIsVisible )
802  || aIncludeInvisibleText || noDrawItems )
803  area.Merge( m_reference->GetBoundingBox() );
804  }
805 
806  if( board )
807  {
808  if( ( aIncludeText && aIncludeInvisibleText ) || noDrawItems )
809  {
811  m_cachedBoundingBox = area;
812  }
813  else if( aIncludeText )
814  {
816  m_cachedVisibleBBox = area;
817  }
818  else
819  {
822  }
823  }
824 
825  return area;
826 }
EDA_RECT m_cachedVisibleBBox
Definition: footprint.h:742
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:49
int GetTimeStamp() const
Definition: board.h:214
show footprints values (when texts are visible)
Definition: layer_ids.h:206
void SetOrigin(const wxPoint &pos)
Definition: eda_rect.h:121
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
FP_TEXT * m_reference
Definition: footprint.h:724
int m_visibleBBoxCacheTimeStamp
Definition: footprint.h:743
FP_TEXT * m_value
Definition: footprint.h:725
EDA_RECT m_cachedBoundingBox
Definition: footprint.h:740
FP_ZONES m_fp_zones
Definition: footprint.h:719
virtual bool IsVisible() const
Definition: eda_text.h:186
void SetEnd(int x, int y)
Definition: eda_rect.h:182
wxPoint m_pos
Definition: footprint.h:723
int m_boundingBoxCacheTimeStamp
Definition: footprint.h:741
bool IsElementVisible(GAL_LAYER_ID aLayer) const
Test whether a given element category is visible.
Definition: board.cpp:533
show footprints references (when texts are visible)
Definition: layer_ids.h:207
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:473
const EDA_RECT GetBoundingBox() const override
Set absolute coordinates.
Definition: fp_text.cpp:227
int m_textExcludedBBoxCacheTimeStamp
Definition: footprint.h:745
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
Handle the component boundary box.
Definition: eda_rect.h:42
EDA_RECT m_cachedTextExcludedBBox
Definition: footprint.h:744
DRAWINGS m_drawings
Definition: footprint.h:717
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:36
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:140
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:718
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 829 of file footprint.cpp.

830 {
831  const BOARD* board = GetBoard();
832 
833  if( board )
834  {
835  if( m_hullCacheTimeStamp >= board->GetTimeStamp() )
836  return m_cachedHull;
837  }
838 
839  SHAPE_POLY_SET rawPolys;
840  SHAPE_POLY_SET hull;
841 
842  for( BOARD_ITEM* item : m_drawings )
843  {
844  if( item->Type() == PCB_FP_SHAPE_T )
845  {
846  item->TransformShapeWithClearanceToPolygon( rawPolys, UNDEFINED_LAYER, 0, ARC_LOW_DEF,
847  ERROR_OUTSIDE );
848  }
849 
850  // We intentionally exclude footprint text from the bounding hull.
851  }
852 
853  for( PAD* pad : m_pads )
854  {
855  pad->TransformShapeWithClearanceToPolygon( rawPolys, UNDEFINED_LAYER, 0, ARC_LOW_DEF,
856  ERROR_OUTSIDE );
857  // In case hole is larger than pad
858  pad->TransformHoleWithClearanceToPolygon( rawPolys, 0, ARC_LOW_DEF, ERROR_OUTSIDE );
859  }
860 
861  for( FP_ZONE* zone : m_fp_zones )
862  {
863  for( PCB_LAYER_ID layer : zone->GetLayerSet().Seq() )
864  {
865  SHAPE_POLY_SET layerPoly = zone->GetFilledPolysList( layer );
866 
867  for( int ii = 0; ii < layerPoly.OutlineCount(); ii++ )
868  {
869  const SHAPE_LINE_CHAIN& poly = layerPoly.COutline( ii );
870  rawPolys.AddOutline( poly );
871  }
872  }
873  }
874 
875  // If there are some graphic items, build the actual hull.
876  // However if no items, create a minimal polygon (can happen if a footprint
877  // is created with no item: it contains only 2 texts.
878  if( rawPolys.OutlineCount() == 0 )
879  {
880  // generate a small dummy rectangular outline around the anchor
881  const int halfsize = Millimeter2iu( 1.0 );
882 
883  rawPolys.NewOutline();
884 
885  // add a square:
886  rawPolys.Append( GetPosition().x - halfsize, GetPosition().y - halfsize );
887  rawPolys.Append( GetPosition().x + halfsize, GetPosition().y - halfsize );
888  rawPolys.Append( GetPosition().x + halfsize, GetPosition().y + halfsize );
889  rawPolys.Append( GetPosition().x - halfsize, GetPosition().y + halfsize );
890  }
891 
892  std::vector<wxPoint> convex_hull;
893  BuildConvexHull( convex_hull, rawPolys );
894 
897 
898  for( const wxPoint& pt : convex_hull )
899  m_cachedHull.Append( pt );
900 
901  if( board )
903 
904  return m_cachedHull;
905 }
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:49
int GetTimeStamp() const
Definition: board.h:214
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
FP_ZONES m_fp_zones
Definition: footprint.h:719
Represent a set of closed polygons.
SHAPE_POLY_SET m_cachedHull
Definition: footprint.h:746
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).
PCB_LAYER_ID
A quick note on layer IDs:
Definition: layer_ids.h:65
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
wxPoint GetPosition() const override
Definition: footprint.h:186
DRAWINGS m_drawings
Definition: footprint.h:717
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:36
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:718
int m_hullCacheTimeStamp
Definition: footprint.h:747
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 81 of file board_item.h.

82  {
83  return GetBoundingBox().GetCenter();
84  }
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 588 of file footprint.h.

589  {
590  return wxT( "FOOTPRINT" );
591  }

Referenced by Visit().

◆ GetContextualTextVars()

void FOOTPRINT::GetContextualTextVars ( wxArrayString *  aVars) const

Return the list of system text vars for this footprint.

Definition at line 469 of file footprint.cpp.

470 {
471  aVars->push_back( wxT( "REFERENCE" ) );
472  aVars->push_back( wxT( "VALUE" ) );
473  aVars->push_back( wxT( "LAYER" ) );
474 }

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

1853 {
1854  int textMargin = KiROUND( 5 * aCollector.GetGuide()->OnePixelInIU() );
1855  SHAPE_POLY_SET poly;
1856 
1857  if( aItem->Type() == PCB_MARKER_T )
1858  {
1859  const PCB_MARKER* marker = static_cast<const PCB_MARKER*>( aItem );
1860  SHAPE_LINE_CHAIN markerShape;
1861 
1862  marker->ShapeToPolygon( markerShape );
1863  return markerShape.Area();
1864  }
1865  else if( aItem->Type() == PCB_GROUP_T )
1866  {
1867  double combinedArea = 0.0;
1868 
1869  for( BOARD_ITEM* member : static_cast<const PCB_GROUP*>( aItem )->GetItems() )
1870  combinedArea += GetCoverageArea( member, aCollector );
1871 
1872  return combinedArea;
1873  }
1874  if( aItem->Type() == PCB_FOOTPRINT_T )
1875  {
1876  const FOOTPRINT* footprint = static_cast<const FOOTPRINT*>( aItem );
1877 
1878  poly = footprint->GetBoundingHull();
1879  }
1880  else if( aItem->Type() == PCB_FP_TEXT_T )
1881  {
1882  const FP_TEXT* text = static_cast<const FP_TEXT*>( aItem );
1883 
1884  text->TransformTextShapeWithClearanceToPolygon( poly, UNDEFINED_LAYER, textMargin,
1885  ARC_LOW_DEF, ERROR_OUTSIDE );
1886  }
1887  else if( aItem->Type() == PCB_SHAPE_T )
1888  {
1889  // Approximate "linear" shapes with just their width squared, as we don't want to consider
1890  // a linear shape as being much bigger than another for purposes of selection filtering
1891  // just because it happens to be really long.
1892 
1893  const PCB_SHAPE* shape = static_cast<const PCB_SHAPE*>( aItem );
1894 
1895  switch( shape->GetShape() )
1896  {
1897  case SHAPE_T::SEGMENT:
1898  case SHAPE_T::ARC:
1899  case SHAPE_T::BEZIER:
1900  return shape->GetWidth() * shape->GetWidth();
1901 
1902  case SHAPE_T::RECT:
1903  case SHAPE_T::CIRCLE:
1904  case SHAPE_T::POLY:
1905  {
1906  if( !shape->IsFilled() )
1907  return shape->GetWidth() * shape->GetWidth();
1908 
1910  }
1911 
1912  default:
1914  ARC_LOW_DEF, ERROR_OUTSIDE );
1915  }
1916  }
1917  else if( aItem->Type() == PCB_TRACE_T || aItem->Type() == PCB_ARC_T )
1918  {
1919  double width = static_cast<const PCB_TRACK*>( aItem )->GetWidth();
1920  return width * width;
1921  }
1922  else
1923  {
1925  ARC_LOW_DEF, ERROR_OUTSIDE );
1926  }
1927 
1928  return polygonArea( poly );
1929 }
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:1852
int GetWidth() const
Definition: eda_shape.h:88
SHAPE_POLY_SET GetBoundingHull() const
Return a bounding polygon for the shapes and pads in the footprint.
Definition: footprint.cpp:829
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:49
class PCB_GROUP, a set of BOARD_ITEMs
Definition: typeinfo.h:108
virtual double OnePixelInIU() const =0
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
bool IsFilled() const
Definition: eda_shape.h:80
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:142
SHAPE_T GetShape() const
Definition: eda_shape.h:91
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:1836

References ARC, SHAPE_LINE_CHAIN::Area(), BEZIER, CIRCLE, ERROR_OUTSIDE, GetBoundingHull(), GENERAL_COLLECTOR::GetGuide(), EDA_SHAPE::GetShape(), EDA_SHAPE::GetWidth(), EDA_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, 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_TEXT_AND_LABEL_PROPERTIES::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 1998 of file footprint.cpp.

1999 {
2000  std::shared_ptr<SHAPE_COMPOUND> shape = std::make_shared<SHAPE_COMPOUND>();
2001 
2002  // There are several possible interpretations here:
2003  // 1) the bounding box (without or without invisible items)
2004  // 2) just the pads and "edges" (ie: non-text graphic items)
2005  // 3) the courtyard
2006 
2007  // We'll go with (2) for now....
2008 
2009  for( PAD* pad : Pads() )
2010  shape->AddShape( pad->GetEffectiveShape( aLayer )->Clone() );
2011 
2012  for( BOARD_ITEM* item : GraphicalItems() )
2013  {
2014  if( item->Type() == PCB_FP_SHAPE_T )
2015  shape->AddShape( item->GetEffectiveShape( aLayer )->Clone() );
2016  }
2017 
2018  return shape;
2019 }
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:49
class FP_SHAPE, a footprint edge
Definition: typeinfo.h:93
PADS & Pads()
Definition: footprint.h:168
DRAWINGS & GraphicalItems()
Definition: footprint.h:171
Definition: pad.h:57

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

◆ GetFlag()

int FOOTPRINT::GetFlag ( ) const
inline

Definition at line 240 of file footprint.h.

240 { return m_arflag; }
int m_arflag
Definition: footprint.h:761

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_TRACK, and PCB_SHAPE.

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 194 of file footprint.h.

194 { return m_fpid; }
LIB_ID m_fpid
Definition: footprint.h:726

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(), DIALOG_EXCHANGE_FOOTPRINTS::processMatchingFootprints(), 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 695 of file footprint.cpp.

696 {
697  EDA_RECT area;
698 
699  // We want the bounding box of the footprint pads at rot 0, not flipped
700  // Create such a image:
701  FOOTPRINT dummy( *this );
702 
703  dummy.SetPosition( wxPoint( 0, 0 ) );
704 
705  if( dummy.IsFlipped() )
706  dummy.Flip( wxPoint( 0, 0 ) , false );
707 
708  if( dummy.GetOrientation() )
709  dummy.SetOrientation( 0 );
710 
711  for( PAD* pad : dummy.Pads() )
712  area.Merge( pad->GetBoundingBox() );
713 
714  return area;
715 }
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:72
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 674 of file footprint.h.

674 { return m_initial_comments; }
wxArrayString * m_initial_comments
Definition: footprint.h:768

References m_initial_comments.

Referenced by PCB_IO::format().

◆ GetKeywords()

◆ GetLastEditTime()

timestamp_t FOOTPRINT::GetLastEditTime ( ) const
inline

Definition at line 343 of file footprint.h.

343 { return m_lastEditTime; }
timestamp_t m_lastEditTime
Definition: footprint.h:760

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

140 { return m_layer; }
PCB_LAYER_ID m_layer
Definition: board_item.h:316

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(), PCB_SHAPE::Flip(), FP_TEXT::Flip(), PCB_DIMENSION_BASE::Flip(), Flip(), PCB_ARC::Flip(), PCB_BASE_FRAME::FocusOnItem(), 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_SHAPE::cmp_drawings::operator()(), PCB_TRACK::cmp_tracks::operator()(), BOARD_ITEM::ptr_cmp::operator()(), FOOTPRINT::cmp_drawings::operator()(), BOARD::cmp_items::operator()(), BOARD::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(), 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(), CONNECTIVITY_DATA::TestTrackEndpointDangling(), 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 73 of file board_item.cpp.

74 {
75  const BOARD* board = GetBoard();
76 
77  if( board )
78  return board->GetLayerName( m_layer );
79 
80  // If no parent, return standard name
82 }
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
Definition: board.cpp:362
Information pertinent to a Pcbnew printed circuit board.
Definition: board.h:190
PCB_LAYER_ID m_layer
Definition: board_item.h:316
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
Definition: board_item.cpp:36
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(), PCB_SHAPE::GetMsgPanelInfo(), FP_TEXT::GetMsgPanelInfo(), PCB_DIMENSION_BASE::GetMsgPanelInfo(), PCB_DIM_LEADER::GetMsgPanelInfo(), PCB_SHAPE::GetSelectMenuText(), PCB_TEXT::GetSelectMenuText(), FP_SHAPE::GetSelectMenuText(), PCB_TRACK::GetSelectMenuText(), PCB_DIMENSION_BASE::GetSelectMenuText(), PCB_TEXT::GetShownText(), and ResolveTextVar().

◆ GetLayerSet()

◆ GetLikelyAttribute()

int FOOTPRINT::GetLikelyAttribute ( ) const

Returns the most likely attribute based on pads Either FP_THROUGH_HOLE/FP_SMD/OTHER(0)

Returns
0/FP_SMD/FP_THROUGH_HOLE

Definition at line 653 of file footprint.cpp.

654 {
655  int smd_count = 0;
656  int tht_count = 0;
657 
658  for( PAD* pad : m_pads )
659  {
660  switch( pad->GetAttribute() )
661  {
662  case PAD_ATTRIB::PTH:
663  tht_count++;
664  break;
665  case PAD_ATTRIB::SMD:
666  smd_count++;
667  break;
668  default:
669  break;
670  }
671  }
672 
673  if( tht_count > 0 )
674  return FP_THROUGH_HOLE;
675 
676  if( smd_count > 0 )
677  return FP_SMD;
678 
679  return 0;
680 }
Smd pad, appears on the solder paste layer (default)
Plated through hole pad.
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:718

References FP_SMD, FP_THROUGH_HOLE, m_pads, pad, PTH, and SMD.

Referenced by CheckFootprintAttributes().

◆ GetLink()

◆ GetLocalClearance() [1/2]

◆ GetLocalClearance() [2/2]

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

Definition at line 212 of file footprint.h.

213  {
214  if( aSource )
215  *aSource = wxString::Format( _( "footprint %s" ), GetReference() );
216 
217  return m_localClearance;
218  }
const wxString & GetReference() const
Definition: footprint.h:449
#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:752

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

1269 {
1270  return BITMAPS::module;
1271 }

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

909 {
910  wxString msg, msg2;
911 
912  aList.emplace_back( m_reference->GetShownText(), m_value->GetShownText() );
913 
914  if( aFrame->IsType( FRAME_FOOTPRINT_VIEWER )
916  || aFrame->IsType( FRAME_FOOTPRINT_EDITOR ) )
917  {
918  wxDateTime date( static_cast<time_t>( m_lastEditTime ) );
919 
920  // Date format: see http://www.cplusplus.com/reference/ctime/strftime
921  if( m_lastEditTime && date.IsValid() )
922  msg = date.Format( wxT( "%b %d, %Y" ) ); // Abbreviated_month_name Day, Year
923  else
924  msg = _( "Unknown" );
925 
926  aList.emplace_back( _( "Last Change" ), msg );
927  }
928  else if( aFrame->IsType( FRAME_PCB_EDITOR ) )
929  {
930  aList.emplace_back( _( "Board Side" ), IsFlipped() ? _( "Back (Flipped)" ) : _( "Front" ) );
931  }
932 
933  auto addToken = []( wxString* aStr, const wxString& aAttr )
934  {
935  if( !aStr->IsEmpty() )
936  *aStr += wxT( ", " );
937 
938  *aStr += aAttr;
939  };
940 
941  wxString status;
942  wxString attrs;
943 
944  if( IsLocked() )
945  addToken( &status, _( "Locked" ) );
946 
947  if( m_fpStatus & FP_is_PLACED )
948  addToken( &status, _( "autoplaced" ) );
949 
951  addToken( &attrs, _( "not in schematic" ) );
952 
954  addToken( &attrs, _( "exclude from pos files" ) );
955 
957  addToken( &attrs, _( "exclude from BOM" ) );
958 
959  aList.emplace_back( _( "Status: " ) + status, _( "Attributes:" ) + wxS( " " ) + attrs );
960 
961  aList.emplace_back( _( "Rotation" ), wxString::Format( "%.4g", GetOrientationDegrees() ) );
962 
963  msg.Printf( _( "Footprint: %s" ), m_fpid.GetUniStringLibId() );
964  msg2.Printf( _( "3D-Shape: %s" ), m_3D_Drawings.empty() ? _( "<none>" )
965  : m_3D_Drawings.front().m_Filename );
966  aList.emplace_back( msg, msg2 );
967 
968  msg.Printf( _( "Doc: %s" ), m_doc );
969  msg2.Printf( _( "Keywords: %s" ), m_keywords );
970  aList.emplace_back( msg, msg2 );
971 }
bool IsLocked() const override
Definition: footprint.h:293
timestamp_t m_lastEditTime
Definition: footprint.h:760
FP_TEXT * m_reference
Definition: footprint.h:724
FP_TEXT * m_value
Definition: footprint.h:725
int m_fpStatus
Definition: footprint.h:728
#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
bool IsFlipped() const
Definition: footprint.h:277
double GetOrientationDegrees() const
Definition: footprint.h:191
wxString m_keywords
Definition: footprint.h:758
bool IsType(FRAME_T aType) const
LIB_ID m_fpid
Definition: footprint.h:726
wxString GetUniStringLibId() const
Definition: lib_id.h:134
#define FP_is_PLACED
In autoplace: footprint automatically placed.
Definition: footprint.h:288
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:757
std::list< FP_3DMODEL > m_3D_Drawings
Definition: footprint.h:766
int m_attributes
Definition: footprint.h:727

References _, 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(), LIB_ID::GetUniStringLibId(), 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().

◆ GetNextPadNumber()

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

Return the next available pad number 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 number

Definition at line 1805 of file footprint.cpp.

1806 {
1807  std::set<wxString> usedNumbers;
1808 
1809  // Create a set of used pad numbers
1810  for( PAD* pad : m_pads )
1811  usedNumbers.insert( pad->GetNumber() );
1812 
1813  // Pad numbers aren't technically reference designators, but the formatting is close enough
1814  // for these to give us what we need.
1815  wxString prefix = UTIL::GetRefDesPrefix( aLastPadNumber );
1816  int num = GetTrailingInt( aLastPadNumber );
1817 
1818  while( usedNumbers.count( wxString::Format( "%s%d", prefix, num ) ) )
1819  num++;
1820 
1821  return wxString::Format( "%s%d", prefix, num );
1822 }
int GetTrailingInt(const wxString &aStr)
Gets the trailing int, if any, from a string.
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
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:718

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 192 of file footprint.h.

192 { return m_orient * M_PI / 1800; }
double m_orient
Definition: footprint.h:722

References m_orient.

Referenced by KIGFX::PCB_PAINTER::draw(), ALTIUM_PCB::HelperShapeSetLocalCoord(), and ROUTER_TOOL::InlineDrag().

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

1077 {
1078  for( PAD* pad : m_pads )
1079  {
1080  // ... and on the correct layer.
1081  if( !( pad->GetLayerSet() & aLayerMask ).any() )
1082  continue;
1083 
1084  if( pad->HitTest( aPosition ) )
1085  return pad;
1086  }
1087 
1088  return nullptr;
1089 }
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:718

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

1112 {
1113  if( aIncludeNPTH )
1114  return m_pads.size();
1115 
1116  unsigned cnt = 0;
1117 
1118  for( PAD* pad : m_pads )
1119  {
1120  if( pad->GetAttribute() == PAD_ATTRIB::NPTH )
1121  continue;
1122 
1123  cnt++;
1124  }
1125 
1126  return cnt;
1127 }
like PAD_PTH, but not plated
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:718

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

135 { 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(), GENERAL_COLLECTOR::Inspect(), ARRAY_CREATOR::Invoke(), isInsideArea(), DRC_ENGINE::IsNetTie(), FP_SHAPE::IsParentFlipped(), FP_TEXT::IsParentFlipped(), PCB_SELECTION_TOOL::itemPassesFilter(), 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

◆ GetPolyCourtyard()

const SHAPE_POLY_SET& FOOTPRINT::GetPolyCourtyard ( PCB_LAYER_ID  aLayer) const
inline

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

Returns
the courtyard polygon.

Definition at line 681 of file footprint.h.

682  {
683  if( IsBackLayer( aLayer ) )
684  return m_poly_courtyard_back;
685  else
686  return m_poly_courtyard_front;
687  }
SHAPE_POLY_SET m_poly_courtyard_back
Definition: footprint.h:772
bool IsBackLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a back layer.
Definition: layer_ids.h:895
SHAPE_POLY_SET m_poly_courtyard_front
Definition: footprint.h:771

References IsBackLayer(), m_poly_courtyard_back, and m_poly_courtyard_front.

Referenced by AR_AUTOPLACER::buildFpAreas(), calcIsInsideArea(), calcIsInsideCourtyard(), DRC_ENGINE::EvalRules(), BOARD_INSPECTION_TOOL::InspectClearance(), and DRC_TEST_PROVIDER_COURTYARD_CLEARANCE::testCourtyardClearances().

◆ GetPosition()

wxPoint FOOTPRINT::GetPosition ( ) const
inlineoverridevirtual

Reimplemented from EDA_ITEM.

Definition at line 186 of file footprint.h.

186 { return m_pos; }
wxPoint m_pos
Definition: footprint.h:723

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(), GetBoundingHull(), CADSTAR_PCB_ARCHIVE_LOADER::getKiCadPad(), AR_AUTOPLACER::getOptimalFPPlacement(), PCB_SHAPE::getParentPosition(), hash_fp_item(), ALTIUM_PCB::HelperShapeSetLocalCoord(), idf_export_footprint(), ROUTER_TOOL::InlineDrag(), FOOTPRINT_EDIT_FRAME::LoadFootprintFromBoard(), FABMASTER::loadFootprints(), CADSTAR_PCB_ARCHIVE_LOADER::loadLibraryCoppers(), LEGACY_PLUGIN::loadPAD(), 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(), and EAGLE_PLUGIN::transferPad().

◆ GetProperties()

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

Definition at line 492 of file footprint.h.

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

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 494 of file footprint.h.

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

References m_properties.

◆ GetReference()

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

Definition at line 449 of file footprint.h.

450  {
451  return m_reference->GetText();
452  }
FP_TEXT * m_reference
Definition: footprint.h:724
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 1257 of file footprint.cpp.

1258 {
1259  wxString reference = GetReference();
1260 
1261  if( reference.IsEmpty() )
1262  reference = _( "<no reference designator>" );
1263 
1264  return wxString::Format( _( "Footprint %s" ), reference );
1265 }
const wxString & GetReference() const
Definition: footprint.h:449
#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 233 of file footprint.h.

233 { return m_thermalGap; }
int m_thermalGap
Definition: footprint.h:751

References m_thermalGap.

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

◆ GetThermalWidth()

int FOOTPRINT::GetThermalWidth ( ) const
inline

Definition at line 230 of file footprint.h.

230 { return m_thermalWidth; }
int m_thermalWidth
Definition: footprint.h:750

References m_thermalWidth.

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

◆ GetTopLeftPad()

PAD * FOOTPRINT::GetTopLeftPad ( )

Definition at line 1092 of file footprint.cpp.

1093 {
1094  PAD* topLeftPad = m_pads.front();
1095 
1096  for( PAD* p : m_pads )
1097  {
1098  wxPoint pnt = p->GetPosition(); // GetPosition() returns the center of the pad
1099 
1100  if( ( pnt.x < topLeftPad->GetPosition().x ) ||
1101  ( topLeftPad->GetPosition().x == pnt.x && pnt.y < topLeftPad->GetPosition().y ) )
1102  {
1103  topLeftPad = p;
1104  }
1105  }
1106 
1107  return topLeftPad;
1108 }
wxPoint GetPosition() const override
Definition: pad.h:178
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:718

References PAD::GetPosition(), and m_pads.

◆ GetTypeName()

wxString FOOTPRINT::GetTypeName ( ) const

Get the type of footprint.

Returns
"SMD"/"Through hole"/"Other" based on attributes

Definition at line 683 of file footprint.cpp.

684 {
685  if( ( m_attributes & FP_SMD ) == FP_SMD )
686  return _( "SMD" );
687 
689  return _( "Through hole" );
690 
691  return _( "Other" );
692 }
#define _(s)
int m_attributes
Definition: footprint.h:727

References _, FP_SMD, FP_THROUGH_HOLE, and m_attributes.

Referenced by CheckFootprintAttributes().

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

1131 {
1132  std::set<wxString> usedNumbers;
1133 
1134  // Create a set of used pad numbers
1135  for( PAD* pad : m_pads )
1136  {
1137  // Skip pads not on copper layers (used to build complex
1138  // solder paste shapes for instance)
1139  if( ( pad->GetLayerSet() & LSET::AllCuMask() ).none() )
1140  continue;
1141 
1142  // Skip pads with no name, because they are usually "mechanical"
1143  // pads, not "electrical" pads
1144  if( pad->GetNumber().IsEmpty() )
1145  continue;
1146 
1147  if( !aIncludeNPTH )
1148  {
1149  // skip NPTH
1150  if( pad->GetAttribute() == PAD_ATTRIB::NPTH )
1151  continue;
1152  }
1153 
1154  usedNumbers.insert( pad->GetNumber() );
1155  }
1156 
1157  return usedNumbers.size();
1158 }
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:718

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 172 of file footprint.h.

172 { return m_drawings; }
DRAWINGS m_drawings
Definition: footprint.h:717

References m_drawings.

◆ Groups() [1/2]

FP_GROUPS& FOOTPRINT::Groups ( )
inline

◆ Groups() [2/2]

const FP_GROUPS& FOOTPRINT::Groups ( ) const
inline

Definition at line 178 of file footprint.h.

178 { return m_fp_groups; }
FP_GROUPS m_fp_groups
Definition: footprint.h:720

References m_fp_groups.

◆ HasFlag()

◆ HasProperty()

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

Definition at line 495 of file footprint.h.

496  {
497  return m_properties.find( aKey ) != m_properties.end();
498  }
std::map< wxString, wxString > m_properties
Definition: footprint.h:767

References m_properties.

◆ HasThroughHolePads()

bool FOOTPRINT::HasThroughHolePads ( ) const

Definition at line 2117 of file footprint.cpp.

2118 {
2119  for( PAD* pad : Pads() )
2120  {
2121  if( pad->GetAttribute() != PAD_ATTRIB::SMD )
2122  return true;
2123  }
2124 
2125  return false;
2126 }
Smd pad, appears on the solder paste layer (default)
PADS & Pads()
Definition: footprint.h:168
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 997 of file footprint.cpp.

998 {
999  EDA_RECT rect = GetBoundingBox( false, false );
1000  return rect.Inflate( aAccuracy ).Contains( aPosition );
1001 }
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:718
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 1010 of file footprint.cpp.

1011 {
1012  EDA_RECT arect = aRect;
1013  arect.Inflate( aAccuracy );
1014 
1015  if( aContained )
1016  {
1017  return arect.Contains( GetBoundingBox( false, false ) );
1018  }
1019  else
1020  {
1021  // If the rect does not intersect the bounding box, skip any tests
1022  if( !aRect.Intersects( GetBoundingBox( false, false ) ) )
1023  return false;
1024 
1025  // The empty footprint dummy rectangle intersects the selection area.
1026  if( m_pads.empty() && m_fp_zones.empty() && m_drawings.empty() )
1027  return GetBoundingBox( true, false ).Intersects( arect );
1028 
1029  // Determine if any elements in the FOOTPRINT intersect the rect
1030  for( PAD* pad : m_pads )
1031  {
1032  if( pad->HitTest( arect, false, 0 ) )
1033  return true;
1034  }
1035 
1036  for( FP_ZONE* zone : m_fp_zones )
1037  {
1038  if( zone->HitTest( arect, false, 0 ) )
1039  return true;
1040  }
1041 
1042  for( BOARD_ITEM* item : m_drawings )
1043  {
1044  if( item->Type() != PCB_FP_TEXT_T && item->HitTest( arect, false, 0 ) )
1045  return true;
1046  }
1047 
1048  // Groups are not hit-tested; only their members
1049 
1050  // No items were hit
1051  return false;
1052  }
1053 }
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:49
bool Contains(const wxPoint &aPoint) const
Definition: eda_rect.cpp:57
FP_ZONES m_fp_zones
Definition: footprint.h:719
const EDA_RECT GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
Definition: footprint.cpp:718
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:717
Definition: pad.h:57
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:718
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 1004 of file footprint.cpp.

1005 {
1006  return GetBoundingHull().Collide( aPosition, aAccuracy );
1007 }
SHAPE_POLY_SET GetBoundingHull() const
Return a bounding polygon for the shapes and pads in the footprint.
Definition: footprint.cpp:829
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 239 of file footprint.h.

239 { m_arflag += 1; }
int m_arflag
Definition: footprint.h:761

References m_arflag.

◆ IncrementReference()

void FOOTPRINT::IncrementReference ( int  aDelta)

Bump the current reference by aDelta.

Definition at line 1825 of file footprint.cpp.

1826 {
1827  const wxString& refdes = GetReference();
1828 
1829  SetReference( wxString::Format( wxT( "%s%i" ),
1830  UTIL::GetRefDesPrefix( refdes ),
1831  GetTrailingInt( refdes ) + aDelta ) );
1832 }
void SetReference(const wxString &aReference)
Definition: footprint.h:458
int GetTrailingInt(const wxString &aStr)
Gets the trailing int, if any, from a string.
const wxString & GetReference() const
Definition: footprint.h:449
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
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
Returns
true if the footprint is flipped, i.e. on the back side of the board

Definition at line 277 of file footprint.h.

277 { return GetLayer() == B_Cu; }
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:140

References B_Cu, and BOARD_ITEM::GetLayer().

Referenced by PCB_BASE_FRAME::AddFootprintToBoard(), FOOTPRINT_VIEWER_FRAME::AddFootprintToPCB(), GetMsgPanelInfo(), DIALOG_PAD_PROPERTIES::initValues(), ALTIUM_PCB::ParseComponentsBodies6Data(), BOARD_EDITOR_CONTROL::PlaceFootprint(), RENDER_3D_LEGACY::renderFootprint(), and DIALOG_TEXT_PROPERTIES::TransferDataToWindow().

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

1415 {
1416  const wxChar * invalids = StringLibNameInvalidChars( false );
1417 
1418  if( aName.find_first_of( invalids ) != std::string::npos )
1419  return false;
1420 
1421  return true;
1422 }
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:1425

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 293 of file footprint.h.

294  {
295  return ( m_fpStatus & FP_is_LOCKED ) != 0;
296  }
int m_fpStatus
Definition: footprint.h:728
#define FP_is_LOCKED
footprint LOCKED: no autoplace allowed
Definition: footprint.h:287

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 243 of file footprint.h.

244  {
245  return GetKeywords().StartsWith( wxT( "net tie" ) );
246  }
const wxString & GetKeywords() const
Definition: footprint.h:200

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

112  {
113  return IsCopperLayer( GetLayer() );
114  }
bool IsCopperLayer(LAYER_NUM aLayerId)
Tests whether a layer is a copper layer.
Definition: layer_ids.h:796
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition: board_item.h:140

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

975 {
976  // If we have any pads, fall back on normal checking
977  if( !m_pads.empty() )
978  return m_layer == aLayer;
979 
980  // No pads? Check if this entire footprint exists on the given layer
981  for( FP_ZONE* zone : m_fp_zones )
982  {
983  if( !zone->IsOnLayer( aLayer ) )
984  return false;
985  }
986 
987  for( BOARD_ITEM* item : m_drawings )
988  {
989  if( !item->IsOnLayer( aLayer ) )
990  return false;
991  }
992 
993  return true;
994 }
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:49
FP_ZONES m_fp_zones
Definition: footprint.h:719
PCB_LAYER_ID m_layer
Definition: board_item.h:316
DRAWINGS m_drawings
Definition: footprint.h:717
A specialization of ZONE for use in footprints.
Definition: zone.h:946
PADS m_pads
Definition: footprint.h:718

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

◆ IsPlaced()

bool FOOTPRINT::IsPlaced ( ) const
inline

Definition at line 311 of file footprint.h.

311 { return m_fpStatus & FP_is_PLACED; }
int m_fpStatus
Definition: footprint.h:728
#define FP_is_PLACED
In autoplace: footprint automatically placed.
Definition: footprint.h:288

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(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), 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(), GERBVIEW_SELECTION_TOOL::unselect(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::visitItem(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

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

209  {
210  return ( Type() == PCB_TRACE_T ) || ( Type() == PCB_VIA_T );
211  }
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 85 of file board_item.cpp.

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

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 329 of file footprint.h.

329 { return m_fpStatus & FP_PADS_are_LOCKED; }
#define FP_PADS_are_LOCKED
Definition: footprint.h:290
int m_fpStatus
Definition: footprint.h:728

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(), inDiffPair(), 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 183 of file footprint.h.

183 { return m_3D_Drawings; }
std::list< FP_3DMODEL > m_3D_Drawings
Definition: footprint.h:766

References m_3D_Drawings.

◆ Move() [1/2]

void BOARD_ITEM::Move ( const VECTOR2I aMoveVector)
inlineinherited

Definition at line 241 of file board_item.h.

242  {
243  Move( wxPoint( aMoveVector.x, aMoveVector.y ) );
244  }
virtual void Move(const wxPoint &aMoveVector)
Move this object.
Definition: board_item.h:236

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

◆ Move() [2/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 1440 of file footprint.cpp.

1441 {
1442  wxPoint newpos = m_pos + aMoveVector;
1443  SetPosition( newpos );
1444 }
wxPoint m_pos
Definition: footprint.h:723
void SetPosition(const wxPoint &aPos) override
Definition: footprint.cpp:1543

References m_pos, and SetPosition().

Referenced by moveFootprintsInArea().

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

1590 {
1591  /* Move the reference point of the footprint
1592  * the footprints elements (pads, outlines, edges .. ) are moved
1593  * but:
1594  * - the footprint position is not modified.
1595  * - the relative (local) coordinates of these items are modified
1596  * - Draw coordinates are updated
1597  */
1598 
1599 
1600  // Update (move) the relative coordinates relative to the new anchor point.
1601  wxPoint moveVector = aMoveVector;
1602  RotatePoint( &moveVector, -GetOrientation() );
1603 
1604  // Update of the reference and value.
1605  m_reference->SetPos0( m_reference->GetPos0() + moveVector );
1607  m_value->SetPos0( m_value->GetPos0() + moveVector );
1608  m_value->SetDrawCoord();
1609 
1610  // Update the pad local coordinates.
1611  for( PAD* pad : m_pads )
1612  {
1613  pad->SetPos0( pad->GetPos0() + moveVector );
1614  pad->SetDrawCoord();
1615  }
1616 
1617  // Update the draw element coordinates.
1618  for( BOARD_ITEM* item : GraphicalItems() )
1619  {
1620  switch( item->Type() )
1621  {
1622  case PCB_FP_SHAPE_T:
1623  {
1624  FP_SHAPE* shape = static_cast<FP_SHAPE*>( item );
1625  shape->Move( moveVector );
1626  }
1627  break;
1628 
1629  case PCB_FP_TEXT_T:
1630  {
1631  FP_TEXT* text = static_cast<FP_TEXT*>( item );
1632  text->SetPos0( text->GetPos0() + moveVector );
1633  text->SetDrawCoord();
1634  }
1635  break;
1636 
1637  default:
1638  break;
1639  }
1640  }
1641 
1642  // Update the keepout zones
1643  for( ZONE* zone : Zones() )
1644  {
1645  zone->Move( moveVector );
1646  }
1647 
1648  // Update the 3D models
1649  for( FP_3DMODEL& model : Models() )
1650  {
1651  model.m_Offset.x += Iu2Millimeter( moveVector.x );
1652  model.m_Offset.y -= Iu2Millimeter( moveVector.y );
1653  }
1654 
1655  m_cachedBoundingBox.Move( moveVector );
1656  m_cachedVisibleBBox.Move( moveVector );
1657  m_cachedTextExcludedBBox.Move( moveVector );
1658  m_cachedHull.Move( moveVector );
1659 }
EDA_RECT m_cachedVisibleBBox
Definition: footprint.h:742
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:182
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:49
double GetOrientation() const
Definition: footprint.h:190
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:724
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:229
FP_TEXT * m_value
Definition: footprint.h:725
EDA_RECT m_cachedBoundingBox
Definition: footprint.h:740
FP_ZONES & Zones()
Definition: footprint.h:174
void Move(const VECTOR2I &aVector) override
SHAPE_POLY_SET m_cachedHull
Definition: footprint.h:746
DRAWINGS & GraphicalItems()
Definition: footprint.h:171
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:744
void Move(const wxPoint &aMoveVector) override
Move an edge of the footprint.
Definition: fp_shape.cpp:328
Definition: pad.h:57
PADS m_pads
Definition: footprint.h:718

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 320 of file footprint.h.

320 { return m_fpStatus & FP_to_PLACE; }
int m_fpStatus
Definition: footprint.h:728
#define FP_to_PLACE
In autoplace: footprint waiting for autoplace.
Definition: footprint.h:289

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

366 {
367  BOARD_ITEM::operator=( aOther );
368 
369  m_pos = aOther.m_pos;
370  m_fpid = aOther.m_fpid;
371  m_attributes = aOther.m_attributes;
372  m_fpStatus = aOther.m_fpStatus;
373  m_orient = aOther.m_orient;
374  m_rot90Cost = aOther.m_rot90Cost;
375  m_rot180Cost = aOther.m_rot180Cost;
377  m_link = aOther.m_link;
378  m_path = aOther.m_path;
379 
386  m_cachedHull = aOther.m_cachedHull;
388 
395  m_thermalGap = aOther.m_thermalGap;
396 
397  // Copy reference and value
398  *m_reference = *aOther.m_reference;
399  m_reference->SetParent( this );
400  *m_value = *aOther.m_value;
401  m_value->SetParent( this );
402 
403  std::map<BOARD_ITEM*, BOARD_ITEM*> ptrMap;
404 
405  // Copy pads
406  m_pads.clear();
407 
408  for( PAD* pad : aOther.Pads() )
409  {
410  PAD* newPad = new PAD( *pad );
411  ptrMap[ pad ] = newPad;
412  Add( newPad );
413  }
414 
415  // Copy zones
416  m_fp_zones.clear();
417 
418  for( FP_ZONE* zone : aOther.Zones() )
419  {
420  FP_ZONE* newZone = static_cast<FP_ZONE*>( zone->Clone() );
421  ptrMap[ zone ] = newZone;
422  Add( newZone );
423 
424  // Ensure the net info is OK and especially uses the net info list
425  // living in the current board
426  // Needed when copying a fp from fp editor that has its own board
427  // Must be NETINFO_LIST::ORPHANED_ITEM for a keepout that has no net.
428  newZone->SetNetCode( -1 );
429  }
430 
431  // Copy drawings
432  m_drawings.clear();
433 
434  for( BOARD_ITEM* item : aOther.GraphicalItems() )
435  {
436  BOARD_ITEM* newItem = static_cast<BOARD_ITEM*>( item->Clone() );
437  ptrMap[ item ] = newItem;
438  Add( newItem );
439  }
440 
441  // Copy groups
442  m_fp_groups.clear();
443 
444  for( PCB_GROUP* group : aOther.Groups() )
445  {
446  PCB_GROUP* newGroup = static_cast<PCB_GROUP*>( group->Clone() );
447  newGroup->GetItems().clear();
448 
449  for( BOARD_ITEM* member : group->GetItems() )
450  newGroup->AddItem( ptrMap[ member ] );
451 
452  Add( newGroup );
453  }
454 
455  // Copy auxiliary data: 3D_Drawings info
456  m_3D_Drawings.clear();
457  m_3D_Drawings = aOther.m_3D_Drawings;
458  m_doc = aOther.m_doc;
459  m_keywords = aOther.m_keywords;
460  m_properties = aOther.m_properties;
461 
463  new wxArrayString( *aOther.m_initial_comments ) : nullptr;
464 
465  return *this;
466 }
int m_localSolderPasteMargin
Definition: footprint.h:754
bool AddItem(BOARD_ITEM *aItem)
Add item to group.
Definition: pcb_group.cpp:38
EDA_RECT m_cachedVisibleBBox
Definition: footprint.h:742
ZONE_CONNECTION m_zoneConnection
Definition: footprint.h:749
double m_localSolderPasteMarginRatio
Definition: footprint.h:755
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition: board_item.h:49
A set of BOARD_ITEMs (i.e., without duplicates).
Definition: pcb_group.h:50
double m_orient
Definition: footprint.h:722
timestamp_t m_lastEditTime
Definition: footprint.h:760
bool SetNetCode(int aNetCode, bool aNoAssert)
Set net using a net code.
FP_TEXT * m_reference
Definition: footprint.h:724
int m_visibleBBoxCacheTimeStamp
Definition: footprint.h:743
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:763
PADS & Pads()
Definition: footprint.h:168
FP_TEXT * m_value
Definition: footprint.h:725
KIID m_link
Definition: footprint.h:762
int m_localSolderMaskMargin
Definition: footprint.h:753
EDA_RECT m_cachedBoundingBox
Definition: footprint.h:740
FP_ZONES & Zones()
Definition: footprint.h:174
int m_fpStatus
Definition: footprint.h:728
FP_ZONES m_fp_zones
Definition: footprint.h:719
SHAPE_POLY_SET m_cachedHull
Definition: footprint.h:746
int m_thermalGap
Definition: footprint.h:751
DRAWINGS & GraphicalItems()
Definition: footprint.h:171
wxPoint m_pos
Definition: footprint.h:723
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:741
KIID_PATH m_path
Definition: footprint.h:759
FP_GROUPS & Groups()
Definition: footprint.h:177
int m_thermalWidth
Definition: footprint.h:750
wxString m_keywords
Definition: footprint.h:758
int m_localClearance
Definition: footprint.h:752
int m_rot180Cost
Definition: footprint.h:764