KiCad PCB EDA Suite
Loading...
Searching...
No Matches
footprint.h
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2015 Jean-Pierre Charras, jp.charras at wanadoo.fr
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, you may find one here:
19 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
20 * or you may search the http://www.gnu.org website for the version 2 license,
21 * or you may write to the Free Software Foundation, Inc.,
22 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
23 */
24
25#ifndef FOOTPRINT_H
26#define FOOTPRINT_H
27
28#include <deque>
29
30#include <template_fieldnames.h>
31
33#include <board_item.h>
34#include <collectors.h>
36#include <embedded_files.h>
37#include <layer_ids.h> // ALL_LAYERS definition.
38#include <lset.h>
39#include <lib_id.h>
40#include <list>
41
42#include <zones.h>
44#include <pcb_item_containers.h>
45#include <pcb_text.h>
46#include <pcb_field.h>
47#include <functional>
48#include <math/vector3.h>
50
51class LINE_READER;
52class EDA_3D_CANVAS;
53class PAD;
54class BOARD;
55class MSG_PANEL_ITEM;
56class SHAPE;
57class REPORTER;
59class PCB_POINT;
60
61namespace KIGFX {
62class VIEW;
63}
64
65namespace KIFONT {
66class OUTLINE_FONT;
67}
68
74
81{
83 FP_SMD = 0x0002,
86 FP_BOARD_ONLY = 0x0010, // Footprint has no corresponding symbol
87 FP_JUST_ADDED = 0x0020, // Footprint just added by netlist update
88 FP_DNP = 0x0040
89};
90
104
106{
107public:
109 // Initialize with sensible values
110 m_Scale { 1, 1, 1 },
111 m_Rotation { 0, 0, 0 },
112 m_Offset { 0, 0, 0 },
113 m_Opacity( 1.0 ),
114 m_Show( true )
115 {
116 }
117
121 double m_Opacity;
122 wxString m_Filename;
123 bool m_Show;
124
125 bool operator==( const FP_3DMODEL& aOther ) const
126 {
127 return m_Scale == aOther.m_Scale
128 && m_Rotation == aOther.m_Rotation
129 && m_Offset == aOther.m_Offset
130 && m_Opacity == aOther.m_Opacity
131 && m_Filename == aOther.m_Filename
132 && m_Show == aOther.m_Show;
133 }
134};
135
136
144{
145public:
146 FOOTPRINT_VARIANT( const wxString& aName = wxEmptyString ) :
147 m_name( aName ),
148 m_dnp( false ),
149 m_excludedFromBOM( false ),
151 {
152 }
153
154 wxString GetName() const { return m_name; }
155 void SetName( const wxString& aName ) { m_name = aName; }
156
157 bool GetDNP() const { return m_dnp; }
158 void SetDNP( bool aDNP ) { m_dnp = aDNP; }
159
160 bool GetExcludedFromBOM() const { return m_excludedFromBOM; }
161 void SetExcludedFromBOM( bool aExclude ) { m_excludedFromBOM = aExclude; }
162
164 void SetExcludedFromPosFiles( bool aExclude ) { m_excludedFromPosFiles = aExclude; }
165
171 wxString GetFieldValue( const wxString& aFieldName ) const
172 {
173 auto it = m_fields.find( aFieldName );
174
175 if( it != m_fields.end() )
176 return it->second;
177
178 return wxString();
179 }
180
186 void SetFieldValue( const wxString& aFieldName, const wxString& aValue )
187 {
188 m_fields[aFieldName] = aValue;
189 }
190
191 bool HasFieldValue( const wxString& aFieldName ) const
192 {
193 return m_fields.find( aFieldName ) != m_fields.end();
194 }
195
196 const std::map<wxString, wxString>& GetFields() const { return m_fields; }
197
198 bool operator==( const FOOTPRINT_VARIANT& aOther ) const
199 {
200 return m_name == aOther.m_name
201 && m_dnp == aOther.m_dnp
204 && m_fields == aOther.m_fields;
205 }
206
207private:
208 wxString m_name;
209 bool m_dnp;
212 std::map<wxString, wxString> m_fields;
213};
214
215
217{
218public:
219 FOOTPRINT( BOARD* parent );
220
221 FOOTPRINT( const FOOTPRINT& aFootprint );
222
223 // Move constructor and operator needed due to std containers inside the footprint
224 FOOTPRINT( FOOTPRINT&& aFootprint );
225
226 ~FOOTPRINT();
227
228 FOOTPRINT& operator=( const FOOTPRINT& aOther );
229 FOOTPRINT& operator=( FOOTPRINT&& aOther );
230
231 void CopyFrom( const BOARD_ITEM* aOther ) override;
232
233 void Serialize( google::protobuf::Any &aContainer ) const override;
234 bool Deserialize( const google::protobuf::Any &aContainer ) override;
235
236 static inline bool ClassOf( const EDA_ITEM* aItem )
237 {
238 return aItem && aItem->Type() == PCB_FOOTPRINT_T;
239 }
240
243
245 void SetPrivateLayers( const LSET& aLayers ) { m_privateLayers = aLayers; }
246
248 void Add( BOARD_ITEM* aItem, ADD_MODE aMode = ADD_MODE::INSERT,
249 bool aSkipConnectivity = false ) override;
250
252 void Remove( BOARD_ITEM* aItem, REMOVE_MODE aMode = REMOVE_MODE::NORMAL ) override;
253
261 void ClearAllNets();
262
270 bool FixUuids();
271
282
290
291 bool TextOnly() const;
292
293 // Virtual function
294 const BOX2I GetBoundingBox() const override;
295 const BOX2I GetBoundingBox( bool aIncludeText ) const;
296
300 const BOX2I GetLayerBoundingBox( const LSET& aLayers ) const;
301
302 VECTOR2I GetCenter() const override { return GetBoundingBox( false ).GetCenter(); }
303
304 std::deque<PAD*>& Pads() { return m_pads; }
305 const std::deque<PAD*>& Pads() const { return m_pads; }
306
307 DRAWINGS& GraphicalItems() { return m_drawings; }
308 const DRAWINGS& GraphicalItems() const { return m_drawings; }
309
310 ZONES& Zones() { return m_zones; }
311 const ZONES& Zones() const { return m_zones; }
312
313 GROUPS& Groups() { return m_groups; }
314 const GROUPS& Groups() const { return m_groups; }
315
316 PCB_POINTS& Points() { return m_points; }
317 const PCB_POINTS& Points() const { return m_points; }
318
319 bool HasThroughHolePads() const;
320
321 std::vector<FP_3DMODEL>& Models() { return m_3D_Drawings; }
322 const std::vector<FP_3DMODEL>& Models() const { return m_3D_Drawings; }
323
324 void SetPosition( const VECTOR2I& aPos ) override;
325 VECTOR2I GetPosition() const override { return m_pos; }
326
327 void SetOrientation( const EDA_ANGLE& aNewAngle );
329
334 void SetLayerAndFlip( PCB_LAYER_ID aLayer );
335
336 // to make property magic work
337 PCB_LAYER_ID GetLayer() const override { return BOARD_ITEM::GetLayer(); }
338
339 // For property system:
340 void SetOrientationDegrees( double aOrientation )
341 {
342 SetOrientation( EDA_ANGLE( aOrientation, DEGREES_T ) );
343 }
345 {
346 return m_orient.AsDegrees();
347 }
348
349 const LIB_ID& GetFPID() const { return m_fpid; }
350 void SetFPID( const LIB_ID& aFPID )
351 {
352 m_fpid = aFPID;
353 }
354
355 wxString GetFPIDAsString() const { return m_fpid.Format(); }
356 void SetFPIDAsString( const wxString& aFPID ) { m_fpid.Parse( aFPID ); }
357
358 wxString GetLibDescription() const { return m_libDescription; }
359 void SetLibDescription( const wxString& aDesc ) { m_libDescription = aDesc; }
360
361 wxString GetKeywords() const { return m_keywords; }
362 void SetKeywords( const wxString& aKeywords ) { m_keywords = aKeywords; }
363
364 const KIID_PATH& GetPath() const { return m_path; }
365 void SetPath( const KIID_PATH& aPath ) { m_path = aPath; }
366
367 wxString GetSheetname() const { return m_sheetname; }
368 void SetSheetname( const wxString& aSheetname ) { m_sheetname = aSheetname; }
369
370 wxString GetSheetfile() const { return m_sheetfile; }
371 void SetSheetfile( const wxString& aSheetfile ) { m_sheetfile = aSheetfile; }
372
373 wxString GetFilters() const { return m_filters; }
374 void SetFilters( const wxString& aFilters ) { m_filters = aFilters; }
375
376 std::optional<int> GetLocalClearance() const { return m_clearance; }
377 void SetLocalClearance( std::optional<int> aClearance ) { m_clearance = aClearance; }
378
379 std::optional<int> GetLocalSolderMaskMargin() const { return m_solderMaskMargin; }
380 void SetLocalSolderMaskMargin( std::optional<int> aMargin ) { m_solderMaskMargin = aMargin; }
381
382 std::optional<int> GetLocalSolderPasteMargin() const { return m_solderPasteMargin; }
383 void SetLocalSolderPasteMargin( std::optional<int> aMargin ) { m_solderPasteMargin = aMargin; }
384
385 std::optional<double> GetLocalSolderPasteMarginRatio() const { return m_solderPasteMarginRatio; }
386 void SetLocalSolderPasteMarginRatio( std::optional<double> aRatio ) { m_solderPasteMarginRatio = aRatio; }
387
390
397 void SetStackupMode( FOOTPRINT_STACKUP aMode );
399
404 void SetStackupLayers( LSET aLayers );
405 const LSET& GetStackupLayers() const { return m_stackupLayers; }
406
407 int GetAttributes() const { return m_attributes; }
408 void SetAttributes( int aAttributes ) { m_attributes = aAttributes; }
409
411 void SetAllowMissingCourtyard( bool aAllow ) { m_allowMissingCourtyard = aAllow; }
412
414 void SetAllowSolderMaskBridges( bool aAllow ) { m_allowSolderMaskBridges = aAllow; }
415
416 void SetFlag( int aFlag ) { m_arflag = aFlag; }
417 void IncrementFlag() { m_arflag += 1; }
418 int GetFlag() const { return m_arflag; }
419
420 bool IsNetTie() const
421 {
422 for( const wxString& group : m_netTiePadGroups )
423 {
424 if( !group.IsEmpty() )
425 return true;
426 }
427
428 return false;
429 }
430
431 std::optional<int> GetLocalClearance( wxString* aSource ) const
432 {
433 if( m_clearance.has_value() && aSource )
434 *aSource = wxString::Format( _( "footprint %s" ), GetReference() );
435
436 return m_clearance;
437 }
438
445 std::optional<int> GetClearanceOverrides( wxString* aSource ) const
446 {
447 return GetLocalClearance( aSource );
448 }
449
451 {
453 *aSource = wxString::Format( _( "footprint %s" ), GetReference() );
454
455 return m_zoneConnection;
456 }
457
462 const std::vector<wxString>& GetNetTiePadGroups() const { return m_netTiePadGroups; }
463
465 {
466 m_netTiePadGroups.clear();
467 }
468
469 void AddNetTiePadGroup( const wxString& aGroup )
470 {
471 m_netTiePadGroups.emplace_back( aGroup );
472 }
473
478 std::map<wxString, int> MapPadNumbersToNetTieGroups() const;
479
483 std::vector<PAD*> GetNetTiePads( PAD* aPad ) const;
484
490 int GetLikelyAttribute() const;
491
492 void Move( const VECTOR2I& aMoveVector ) override;
493
494 void Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle ) override;
495
496 void Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection ) override;
497
509 void MoveAnchorPosition( const VECTOR2I& aMoveVector );
510
514 bool IsFlipped() const { return GetLayer() == B_Cu; }
515
520 PCB_LAYER_ID GetSide() const;
521
525 bool IsOnLayer( PCB_LAYER_ID aLayer ) const override;
526
527// m_footprintStatus bits:
528#define FP_is_LOCKED 0x01
529#define FP_is_PLACED 0x02
530#define FP_to_PLACE 0x04
531#define FP_PADS_are_LOCKED 0x08
532
533
534 bool IsLocked() const override
535 {
536 return ( m_fpStatus & FP_is_LOCKED ) != 0;
537 }
538
544 void SetLocked( bool isLocked ) override
545 {
546 if( isLocked )
548 else
550 }
551
555 bool IsConflicting() const;
556
557 bool IsPlaced() const { return m_fpStatus & FP_is_PLACED; }
558 void SetIsPlaced( bool isPlaced )
559 {
560 if( isPlaced )
562 else
564 }
565
566 bool NeedsPlaced() const { return m_fpStatus & FP_to_PLACE; }
567 void SetNeedsPlaced( bool needsPlaced )
568 {
569 if( needsPlaced )
571 else
573 }
574
576
587 void CheckFootprintAttributes( const std::function<void( const wxString& )>& aErrorHandler );
588
595 void CheckPads( UNITS_PROVIDER* aUnitsProvider,
596 const std::function<void( const PAD*, int, const wxString& )>& aErrorHandler );
597
603 void CheckShortingPads( const std::function<void( const PAD*, const PAD*, int aErrorCode,
604 const VECTOR2I& )>& aErrorHandler );
605
612 void CheckNetTies( const std::function<void( const BOARD_ITEM* aItem,
613 const BOARD_ITEM* bItem,
614 const BOARD_ITEM* cItem,
615 const VECTOR2I& )>& aErrorHandler );
616
623 void CheckNetTiePadGroups( const std::function<void( const wxString& )>& aErrorHandler );
624
625 void CheckClippedSilk( const std::function<void( BOARD_ITEM* aItemA,
626 BOARD_ITEM* aItemB,
627 const VECTOR2I& aPt )>& aErrorHandler );
631 void BuildNetTieCache();
632
636 const std::set<int>& GetNetTieCache( const BOARD_ITEM* aItem ) const
637 {
638 static const std::set<int> emptySet;
639
640 auto it = m_netTieCache.find( aItem );
641
642 if( it == m_netTieCache.end() )
643 return emptySet;
644
645 return it->second;
646 }
647
660 void TransformPadsToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
661 int aMaxError, ERROR_LOC aErrorLoc ) const;
662
677 void TransformFPShapesToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
678 int aError, ERROR_LOC aErrorLoc,
679 bool aIncludeText = true,
680 bool aIncludeShapes = true,
681 bool aIncludePrivateItems = false ) const;
682
686 void TransformFPTextToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
687 int aError, ERROR_LOC aErrorLoc ) const
688 {
689 TransformFPShapesToPolySet( aBuffer, aLayer, aClearance, aError, aErrorLoc, true, false );
690 }
691
695 void GetContextualTextVars( wxArrayString* aVars ) const;
696
702 bool ResolveTextVar( wxString* token, int aDepth = 0 ) const;
703
705 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
706
707 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
708
709 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
710
720 bool HitTestAccurate( const VECTOR2I& aPosition, int aAccuracy = 0 ) const;
721
722 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
723
724 bool HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const override;
725
734 bool HitTestOnLayer( const VECTOR2I& aPosition, PCB_LAYER_ID aLayer, int aAccuracy = 0 ) const;
735
736 bool HitTestOnLayer( const BOX2I& aRect, bool aContained, PCB_LAYER_ID aLayer, int aAccuracy = 0 ) const;
737
741 const wxString& GetReference() const { return Reference().GetText(); }
742
747 void SetReference( const wxString& aReference ) { Reference().SetText( aReference ); }
748
749 // Property system doesn't like const references
750 wxString GetReferenceAsString() const
751 {
752 return GetReference();
753 }
754
758 void IncrementReference( int aDelta );
759
763 const wxString& GetValue() const { return Value().GetText(); }
764
768 void SetValue( const wxString& aValue ) { Value().SetText( aValue ); }
769
770 // Property system doesn't like const references
771 wxString GetValueAsString() const
772 {
773 return GetValue();
774 }
775
779
781 const PCB_FIELD& Value() const { return *GetField( FIELD_T::VALUE ); }
782 const PCB_FIELD& Reference() const { return *GetField( FIELD_T::REFERENCE ); }
783
784 //-----<Fields>-----------------------------------------------------------
785
790 PCB_FIELD* GetField( FIELD_T aFieldType );
791 const PCB_FIELD* GetField( FIELD_T aFieldNdx ) const;
792
800 PCB_FIELD* GetField( const wxString& aFieldName ) const;
801
802 bool HasField( const wxString& aFieldName ) const;
803
810 void GetFields( std::vector<PCB_FIELD*>& aVector, bool aVisibleOnly ) const;
811
815 const std::deque<PCB_FIELD*>& GetFields() const { return m_fields; }
816 std::deque<PCB_FIELD*>& GetFields() { return m_fields; }
817
821 int GetNextFieldOrdinal() const;
822
830 void ApplyDefaultSettings( const BOARD& board, bool aStyleFields, bool aStyleText,
831 bool aStyleShapes, bool aStyleDimensions, bool aStyleBarcodes );
832
834 {
835 wxString m_unitName; // e.g. A
836 std::vector<wxString> m_pins; // pin numbers in this unit
837 };
838
839 void SetUnitInfo( const std::vector<FP_UNIT_INFO>& aUnits ) { m_unitInfo = aUnits; }
840 const std::vector<FP_UNIT_INFO>& GetUnitInfo() const { return m_unitInfo; }
841
842 bool IsBoardOnly() const { return m_attributes & FP_BOARD_ONLY; }
843 void SetBoardOnly( bool aIsBoardOnly = true )
844 {
845 if( aIsBoardOnly )
847 else
849 }
850
852 void SetExcludedFromPosFiles( bool aExclude = true )
853 {
854 if( aExclude )
856 else
858 }
859
861 void SetExcludedFromBOM( bool aExclude = true )
862 {
863 if( aExclude )
865 else
867 }
868
869 bool IsDNP() const { return m_attributes & FP_DNP; }
870 void SetDNP( bool aDNP = true )
871 {
872 if( aDNP )
874 else
876 }
877
878 // =====================================================================
879 // Variant Support
880 // =====================================================================
881
887 const FOOTPRINT_VARIANT* GetVariant( const wxString& aVariantName ) const;
888
894 FOOTPRINT_VARIANT* GetVariant( const wxString& aVariantName );
895
900 void SetVariant( const FOOTPRINT_VARIANT& aVariant );
901
907 FOOTPRINT_VARIANT* AddVariant( const wxString& aVariantName );
908
913 void DeleteVariant( const wxString& aVariantName );
914
920 void RenameVariant( const wxString& aOldName, const wxString& aNewName );
921
927 bool HasVariant( const wxString& aVariantName ) const;
928
934
943 bool GetDNPForVariant( const wxString& aVariantName ) const;
944
953 bool GetExcludedFromBOMForVariant( const wxString& aVariantName ) const;
954
963 bool GetExcludedFromPosFilesForVariant( const wxString& aVariantName ) const;
964
974 wxString GetFieldValueForVariant( const wxString& aVariantName,
975 const wxString& aFieldName ) const;
976
977 void SetFileFormatVersionAtLoad( int aVersion ) { m_fileFormatVersionAtLoad = aVersion; }
979
989 PAD* FindPadByNumber( const wxString& aPadNumber, PAD* aSearchAfterMe = nullptr ) const;
990
998 PAD* GetPad( const VECTOR2I& aPosition, const LSET& aLayerMask = LSET::AllLayersMask() );
999
1000 std::vector<const PAD*> GetPads( const wxString& aPadNumber,
1001 const PAD* aIgnore = nullptr ) const;
1002
1010 unsigned GetPadCount( INCLUDE_NPTH_T aIncludeNPTH = INCLUDE_NPTH_T(INCLUDE_NPTH) ) const;
1011
1022 unsigned GetUniquePadCount( INCLUDE_NPTH_T aIncludeNPTH = INCLUDE_NPTH_T(INCLUDE_NPTH) ) const;
1023
1027 std::set<wxString>
1029
1037 wxString GetNextPadNumber( const wxString& aLastPadName ) const;
1038
1041
1046 std::vector<std::set<wxString>>& JumperPadGroups() { return m_jumperPadGroups; }
1047 const std::vector<std::set<wxString>>& JumperPadGroups() const { return m_jumperPadGroups; }
1048
1050 std::optional<const std::set<wxString>> GetJumperPadGroup( const wxString& aPadNumber ) const;
1051
1055 void AutoPositionFields();
1056
1061 wxString GetTypeName() const;
1062
1063 double GetArea( int aPadding = 0 ) const;
1064
1065 KIID GetLink() const { return m_link; }
1066 void SetLink( const KIID& aLink ) { m_link = aLink; }
1067
1068 BOARD_ITEM* Duplicate( bool addToParentGroup, BOARD_COMMIT* aCommit = nullptr ) const override;
1069
1075 BOARD_ITEM* DuplicateItem( bool addToParentGroup, BOARD_COMMIT* aCommit, const BOARD_ITEM* aItem,
1076 bool addToFootprint = false );
1077
1083 void Add3DModel( FP_3DMODEL* a3DModel );
1084
1085 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
1086 const std::vector<KICAD_T>& aScanTypes ) override;
1087
1088 wxString GetClass() const override
1089 {
1090 return wxT( "FOOTPRINT" );
1091 }
1092
1093 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
1094
1095 BITMAPS GetMenuImage() const override;
1096
1097 EDA_ITEM* Clone() const override;
1098
1100 void RunOnChildren( const std::function<void( BOARD_ITEM* )>& aFunction, RECURSE_MODE aMode ) const override;
1101
1102 virtual std::vector<int> ViewGetLayers() const override;
1103
1104 double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
1105
1106 virtual const BOX2I ViewBBox() const override;
1107
1115 static bool IsLibNameValid( const wxString& aName );
1116
1126 static const wxChar* StringLibNameInvalidChars( bool aUserReadable );
1127
1131 bool FootprintNeedsUpdate( const FOOTPRINT* aLibFP, int aCompareFlags = 0,
1132 REPORTER* aReporter = nullptr );
1133
1148 void SetInitialComments( wxArrayString* aInitialComments )
1149 {
1150 delete m_initial_comments;
1151 m_initial_comments = aInitialComments;
1152 }
1153
1160 double CoverageRatio( const GENERAL_COLLECTOR& aCollector ) const;
1161
1162 static double GetCoverageArea( const BOARD_ITEM* aItem, const GENERAL_COLLECTOR& aCollector );
1163
1165 const wxArrayString* GetInitialComments() const { return m_initial_comments; }
1166
1172 const SHAPE_POLY_SET& GetCourtyard( PCB_LAYER_ID aLayer ) const;
1173
1179 const SHAPE_POLY_SET& GetCachedCourtyard( PCB_LAYER_ID aLayer ) const;
1180
1187 void BuildCourtyardCaches( OUTLINE_ERROR_HANDLER* aErrorHandler = nullptr );
1188
1189 // @copydoc BOARD_ITEM::GetEffectiveShape
1190 std::shared_ptr<SHAPE> GetEffectiveShape( PCB_LAYER_ID aLayer = UNDEFINED_LAYER,
1191 FLASHING aFlash = FLASHING::DEFAULT ) const override;
1192
1194 {
1195 return static_cast<EMBEDDED_FILES*>( this );
1196 }
1197
1199 {
1200 return static_cast<const EMBEDDED_FILES*>( this );
1201 }
1202
1206 std::set<KIFONT::OUTLINE_FONT*> GetFonts() const override;
1207
1208 void EmbedFonts() override;
1209
1210 double Similarity( const BOARD_ITEM& aOther ) const override;
1211
1213 void SetStaticComponentClass( const COMPONENT_CLASS* aClass ) const;
1214
1217
1219 const COMPONENT_CLASS* GetComponentClass() const;
1220
1222 wxString GetComponentClassAsString() const;
1223
1225 void RecomputeComponentClass() const;
1226
1228 void InvalidateComponentClassCache() const;
1229
1236 void SetTransientComponentClassNames( const std::unordered_set<wxString>& classNames )
1237 {
1238 m_transientComponentClassNames = classNames;
1239 }
1240
1242 const std::unordered_set<wxString>& GetTransientComponentClassNames()
1243 {
1245 }
1246
1249
1251 void ResolveComponentClassNames( BOARD* aBoard,
1252 const std::unordered_set<wxString>& aComponentClassNames );
1253
1255 void FixUpPadsForBoard( BOARD* aBoard );
1256
1257 bool operator==( const BOARD_ITEM& aOther ) const override;
1258 bool operator==( const FOOTPRINT& aOther ) const;
1259
1260#if defined(DEBUG)
1261 virtual void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
1262#endif
1263
1265 {
1266 bool operator()( const BOARD_ITEM* itemA, const BOARD_ITEM* itemB ) const;
1267 };
1268
1270 {
1271 bool operator()( const PAD* aFirst, const PAD* aSecond ) const;
1272 };
1273 // TODO(JE) padstacks -- this code isn't used anywhere though
1274#if 0
1275 struct cmp_padstack
1276 {
1277 bool operator()( const PAD* aFirst, const PAD* aSecond ) const;
1278 };
1279#endif
1281 {
1282 bool operator()( const ZONE* aFirst, const ZONE* aSecond ) const;
1283 };
1284
1285protected:
1286 virtual void swapData( BOARD_ITEM* aImage ) override;
1287
1289
1290private:
1291 std::deque<PCB_FIELD*> m_fields; // Fields, mapped by name, owned by pointer
1292 std::deque<BOARD_ITEM*> m_drawings; // Drawings in the footprint, owned by pointer
1293 std::deque<PAD*> m_pads; // Pads, owned by pointer
1294 std::vector<ZONE*> m_zones; // Rule area zones, owned by pointer
1295 std::deque<PCB_GROUP*> m_groups; // Groups, owned by pointer
1296 std::deque<PCB_POINT*> m_points; // Points, owned by pointer
1297
1298 EDA_ANGLE m_orient; // Orientation
1299 VECTOR2I m_pos; // Position of footprint on the board in internal units.
1300 LIB_ID m_fpid; // The #LIB_ID of the FOOTPRINT.
1301 int m_attributes; // Flag bits (see FOOTPRINT_ATTR_T)
1302 int m_fpStatus; // For autoplace: flags (LOCKED, FIELDS_AUTOPLACED)
1304
1307
1308 // Bounding box caching strategy:
1309 // While we attempt to notice the low-hanging fruit operations and update the bounding boxes
1310 // accordingly, we rely mostly on a "if anything changed then the caches are stale" approach.
1311 // We implement this by having PCB_BASE_FRAME's OnModify() method increment an operation
1312 // counter, and storing that as a timestamp for the various caches.
1313 // This means caches will get regenerated often -- but still far less often than if we had no
1314 // caches at all. The principal opitmization would be to change to dirty flag and make sure
1315 // that any edit that could affect the bounding boxes (including edits to the footprint
1316 // children) marked the bounding boxes dirty. It would definitely be faster -- but also more
1317 // fragile.
1324
1325 // A list of pad groups, each of which is allowed to short nets within their group.
1326 // A pad group is a comma-separated list of pad numbers.
1327 std::vector<wxString> m_netTiePadGroups;
1328
1329 // A list of 1:N footprint item to allowed net numbers
1330 std::map<const BOARD_ITEM*, std::set<int>> m_netTieCache;
1331
1334 std::vector<std::set<wxString>> m_jumperPadGroups;
1335
1339
1342
1343 // Optional overrides
1345 std::optional<int> m_clearance;
1346 std::optional<int> m_solderMaskMargin; // Solder mask margin
1347 std::optional<int> m_solderPasteMargin; // Solder paste margin absolute value
1348 std::optional<double> m_solderPasteMarginRatio; // Solder mask margin ratio of pad size
1349 // The final margin is the sum of these 2 values
1350
1351 LSET m_stackupLayers; // Layers in the stackup
1352 FOOTPRINT_STACKUP m_stackupMode; // Stackup mode for this footprint
1353 LSET m_privateLayers; // Layers visible only in the footprint editor
1354
1355 wxString m_libDescription; // File name and path for documentation file.
1356 wxString m_keywords; // Search keywords to find footprint in library.
1357 KIID_PATH m_path; // Path to associated symbol ([sheetUUID, .., symbolUUID]).
1358 wxString m_sheetname; // Name of the sheet containing the symbol for this footprint
1359 wxString m_sheetfile; // File of the sheet containing the symbol for this footprint
1360 wxString m_filters; // Footprint filters from symbol
1362 int m_arflag; // Use to trace ratsnest and auto routing.
1363 KIID m_link; // Temporary logical link used during editing
1364
1365 std::vector<FP_3DMODEL> m_3D_Drawings; // 3D models.
1366 wxArrayString* m_initial_comments; // s-expression comments in the footprint,
1367 // lazily allocated only if needed for speed
1368
1369 SHAPE_POLY_SET m_courtyard_cache_front; // Note that a footprint can have both front and back
1370 SHAPE_POLY_SET m_courtyard_cache_back; // courtyards populated.
1373 mutable std::mutex m_courtyard_cache_mutex;
1374
1375 std::unordered_set<wxString> m_transientComponentClassNames;
1376 std::unique_ptr<COMPONENT_CLASS_CACHE_PROXY> m_componentClassCacheProxy;
1377
1378 // Optional unit mapping information for multi-unit symbols
1379 std::vector<FP_UNIT_INFO> m_unitInfo;
1380};
1381
1382#endif // FOOTPRINT_H
ERROR_LOC
When approximating an arc or circle, should the error be placed on the outside or inside of the curve...
BITMAPS
A list of all bitmap identifiers.
BOX2< VECTOR2I > BOX2I
Definition box2.h:922
std::map< wxString, ValueType, DETAIL::CASE_INSENSITIVE_COMPARER > CASE_INSENSITIVE_MAP
BOARD_ITEM_CONTAINER(BOARD_ITEM *aParent, KICAD_T aType)
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
Definition board_item.h:83
BOARD_ITEM(BOARD_ITEM *aParent, KICAD_T idtype, PCB_LAYER_ID aLayer=F_Cu)
Definition board_item.h:85
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition board_item.h:236
Information pertinent to a Pcbnew printed circuit board.
Definition board.h:322
constexpr const Vec GetCenter() const
Definition box2.h:230
A lightweight representation of a component class.
Implement a canvas based on a wxGLCanvas.
The base class for create windows for drawing purpose.
A base class for most all the KiCad significant classes used in schematics and boards.
Definition eda_item.h:98
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:110
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:39
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition eda_text.h:98
virtual void SetText(const wxString &aText)
Definition eda_text.cpp:279
EMBEDDED_FILES()=default
Variant information for a footprint.
Definition footprint.h:144
wxString GetName() const
Definition footprint.h:154
FOOTPRINT_VARIANT(const wxString &aName=wxEmptyString)
Definition footprint.h:146
bool HasFieldValue(const wxString &aFieldName) const
Definition footprint.h:191
bool m_excludedFromPosFiles
Definition footprint.h:211
void SetExcludedFromPosFiles(bool aExclude)
Definition footprint.h:164
wxString GetFieldValue(const wxString &aFieldName) const
Get a field value override for this variant.
Definition footprint.h:171
void SetName(const wxString &aName)
Definition footprint.h:155
const std::map< wxString, wxString > & GetFields() const
Definition footprint.h:196
bool GetExcludedFromBOM() const
Definition footprint.h:160
bool operator==(const FOOTPRINT_VARIANT &aOther) const
Definition footprint.h:198
void SetDNP(bool aDNP)
Definition footprint.h:158
bool GetExcludedFromPosFiles() const
Definition footprint.h:163
bool GetDNP() const
Definition footprint.h:157
std::map< wxString, wxString > m_fields
Field value overrides for this variant.
Definition footprint.h:212
void SetFieldValue(const wxString &aFieldName, const wxString &aValue)
Set a field value override for this variant.
Definition footprint.h:186
void SetExcludedFromBOM(bool aExclude)
Definition footprint.h:161
bool FixUuids()
Old footprints do not always have a valid UUID (some can be set to null uuid) However null UUIDs,...
bool GetDuplicatePadNumbersAreJumpers() const
Definition footprint.h:1039
const CASE_INSENSITIVE_MAP< FOOTPRINT_VARIANT > & GetVariants() const
Get all variants.
Definition footprint.h:933
std::optional< int > GetClearanceOverrides(wxString *aSource) const
Return any local clearance overrides set in the "classic" (ie: pre-rule) system.
Definition footprint.h:445
void EmbedFonts() override
bool AllowSolderMaskBridges() const
Definition footprint.h:413
void SetPosition(const VECTOR2I &aPos) override
void SetFPID(const LIB_ID &aFPID)
Definition footprint.h:350
LIB_ID m_fpid
Definition footprint.h:1300
wxString GetLibDescription() const
Definition footprint.h:358
ZONE_CONNECTION GetLocalZoneConnection() const
Definition footprint.h:389
void SetLink(const KIID &aLink)
Definition footprint.h:1066
KIID_PATH m_path
Definition footprint.h:1357
std::deque< BOARD_ITEM * > m_drawings
Definition footprint.h:1292
void SetStackupLayers(LSET aLayers)
If the footprint has a non-default stackup, set the layers that should be used for the stackup.
bool IsBoardOnly() const
Definition footprint.h:842
BOX2I m_cachedTextExcludedBBox
Definition footprint.h:1320
void InvalidateComponentClassCache() const
Forces deferred (on next access) recalculation of the component class for this footprint.
const std::deque< PAD * > & Pads() const
Definition footprint.h:305
bool IsDNP() const
Definition footprint.h:869
void SetLocked(bool isLocked) override
Set the #MODULE_is_LOCKED bit in the m_ModuleStatus.
Definition footprint.h:544
VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Definition footprint.h:302
HASH_128 m_courtyard_cache_back_hash
Definition footprint.h:1372
std::vector< PAD * > GetNetTiePads(PAD *aPad) const
bool ResolveTextVar(wxString *token, int aDepth=0) const
Resolve any references to system tokens supported by the component.
EDA_ANGLE GetOrientation() const
Definition footprint.h:328
ZONES & Zones()
Definition footprint.h:310
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
std::deque< PCB_POINT * > m_points
Definition footprint.h:1296
void CheckClippedSilk(const std::function< void(BOARD_ITEM *aItemA, BOARD_ITEM *aItemB, const VECTOR2I &aPt)> &aErrorHandler)
void Remove(BOARD_ITEM *aItem, REMOVE_MODE aMode=REMOVE_MODE::NORMAL) override
Removes an item from the container.
void SetIsPlaced(bool isPlaced)
Definition footprint.h:558
ZONE_CONNECTION m_zoneConnection
Definition footprint.h:1344
BOX2I m_cachedBoundingBox
Definition footprint.h:1318
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this footprint.
PCB_POINTS & Points()
Definition footprint.h:316
static double GetCoverageArea(const BOARD_ITEM *aItem, const GENERAL_COLLECTOR &aCollector)
bool IsExcludedFromBOM() const
Definition footprint.h:860
void SetOrientation(const EDA_ANGLE &aNewAngle)
void SetFlag(int aFlag)
Definition footprint.h:416
std::optional< double > m_solderPasteMarginRatio
Definition footprint.h:1348
void SetDNP(bool aDNP=true)
Definition footprint.h:870
void SetAllowSolderMaskBridges(bool aAllow)
Definition footprint.h:414
void RecomputeComponentClass() const
Forces immediate recalculation of the component class for this footprint.
std::vector< ZONE * > m_zones
Definition footprint.h:1294
static bool IsLibNameValid(const wxString &aName)
Test for validity of a name of a footprint to be used in a footprint library ( no spaces,...
void SetStackupMode(FOOTPRINT_STACKUP aMode)
Set the stackup mode for this footprint.
unsigned GetPadCount(INCLUDE_NPTH_T aIncludeNPTH=INCLUDE_NPTH_T(INCLUDE_NPTH)) const
Return the number of pads.
void SetLocalSolderPasteMarginRatio(std::optional< double > aRatio)
Definition footprint.h:386
void IncrementFlag()
Definition footprint.h:417
double ViewGetLOD(int aLayer, const KIGFX::VIEW *aView) const override
Return the level of detail (LOD) of the item.
std::optional< int > m_clearance
Definition footprint.h:1345
bool m_duplicatePadNumbersAreJumpers
Flag that this footprint should automatically treat sets of two or more pads with the same number as ...
Definition footprint.h:1338
void CheckNetTies(const std::function< void(const BOARD_ITEM *aItem, const BOARD_ITEM *bItem, const BOARD_ITEM *cItem, const VECTOR2I &)> &aErrorHandler)
Check for un-allowed shorting of pads in net-tie footprints.
void CheckPads(UNITS_PROVIDER *aUnitsProvider, const std::function< void(const PAD *, int, const wxString &)> &aErrorHandler)
Run non-board-specific DRC checks on footprint's pads.
void SetExcludedFromBOM(bool aExclude=true)
Definition footprint.h:861
wxString GetSheetname() const
Definition footprint.h:367
int m_fpStatus
Definition footprint.h:1302
void SetPath(const KIID_PATH &aPath)
Definition footprint.h:365
SHAPE_POLY_SET m_cachedHull
Definition footprint.h:1322
std::set< wxString > GetUniquePadNumbers(INCLUDE_NPTH_T aIncludeNPTH=INCLUDE_NPTH_T(INCLUDE_NPTH)) const
Return the names of the unique, non-blank pads.
void SetFilters(const wxString &aFilters)
Definition footprint.h:374
void SetKeywords(const wxString &aKeywords)
Definition footprint.h:362
void SetStaticComponentClass(const COMPONENT_CLASS *aClass) const
Sets the component class object pointer for this footprint.
const DRAWINGS & GraphicalItems() const
Definition footprint.h:308
void SetInitialComments(wxArrayString *aInitialComments)
Take ownership of caller's heap allocated aInitialComments block.
Definition footprint.h:1148
int m_attributes
Definition footprint.h:1301
PCB_LAYER_ID GetSide() const
Use instead of IsFlipped() when you also need to account for unsided footprints (those purely on user...
const BOX2I GetLayerBoundingBox(const LSET &aLayers) const
Return the bounding box of the footprint on a given set of layers.
std::vector< FP_3DMODEL > m_3D_Drawings
Definition footprint.h:1365
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 footpr...
void RunOnChildren(const std::function< void(BOARD_ITEM *)> &aFunction, RECURSE_MODE aMode) const override
Invoke a function on all children.
bool FootprintNeedsUpdate(const FOOTPRINT *aLibFP, int aCompareFlags=0, REPORTER *aReporter=nullptr)
Return true if a board footprint differs from the library version.
bool m_allowMissingCourtyard
Definition footprint.h:1340
const std::vector< FP_UNIT_INFO > & GetUnitInfo() const
Definition footprint.h:840
std::unordered_set< wxString > m_transientComponentClassNames
Definition footprint.h:1375
std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT) const override
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
void SetAttributes(int aAttributes)
Definition footprint.h:408
void SetSheetfile(const wxString &aSheetfile)
Definition footprint.h:371
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
std::optional< int > GetLocalSolderPasteMargin() const
Definition footprint.h:382
std::unique_ptr< COMPONENT_CLASS_CACHE_PROXY > m_componentClassCacheProxy
Definition footprint.h:1376
wxArrayString * m_initial_comments
Definition footprint.h:1366
EDA_ITEM * Clone() const override
Invoke a function on all children.
BOX2I GetFpPadsLocalBbox() const
Return the bounding box containing pads when the footprint is on the front side, orientation 0,...
std::deque< PCB_FIELD * > m_fields
Definition footprint.h:1291
PCB_FIELD & Value()
read/write accessors:
Definition footprint.h:777
const EMBEDDED_FILES * GetEmbeddedFiles() const
Definition footprint.h:1198
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
std::optional< int > m_solderPasteMargin
Definition footprint.h:1347
const std::vector< std::set< wxString > > & JumperPadGroups() const
Definition footprint.h:1047
void SetFileFormatVersionAtLoad(int aVersion)
Definition footprint.h:977
std::mutex m_courtyard_cache_mutex
Definition footprint.h:1373
void SetExcludedFromPosFiles(bool aExclude=true)
Definition footprint.h:852
void SetOrientationDegrees(double aOrientation)
Definition footprint.h:340
std::optional< const std::set< wxString > > GetJumperPadGroup(const wxString &aPadNumber) const
Retrieves the jumper group containing the specified pad number, if one exists.
std::map< wxString, int > MapPadNumbersToNetTieGroups() const
std::optional< int > GetLocalClearance() const
Definition footprint.h:376
double Similarity(const BOARD_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
void TransformFPTextToPolySet(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc) const
This function is the same as TransformFPShapesToPolySet but only generates text.
Definition footprint.h:686
const FOOTPRINT_VARIANT * GetVariant(const wxString &aVariantName) const
Get a variant by name.
void MoveAnchorPosition(const VECTOR2I &aMoveVector)
Move the reference point of the footprint.
std::vector< std::set< wxString > > & JumperPadGroups()
Each jumper pad group is a set of pad numbers that should be treated as internally connected.
Definition footprint.h:1046
void SetDuplicatePadNumbersAreJumpers(bool aEnabled)
Definition footprint.h:1040
bool m_allowSolderMaskBridges
Definition footprint.h:1341
FOOTPRINT & operator=(const FOOTPRINT &aOther)
bool HasField(const wxString &aFieldName) const
PCB_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this footprint.
void TransformPadsToPolySet(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc) const
Generate pads shapes on layer aLayer as polygons and adds these polygons to aBuffer.
double GetOrientationDegrees() const
Definition footprint.h:344
INSPECT_RESULT Visit(INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &aScanTypes) override
May be re-implemented for each derived class in order to handle all the types given by its member dat...
std::deque< PAD * > & Pads()
Definition footprint.h:304
void ResolveComponentClassNames(BOARD *aBoard, const std::unordered_set< wxString > &aComponentClassNames)
Resolves a set of component class names to this footprint's actual component class.
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
int GetAttributes() const
Definition footprint.h:407
bool Matches(const EDA_SEARCH_DATA &aSearchData, void *aAuxData) const override
Compare the item against the search criteria in aSearchData.
std::optional< int > GetLocalClearance(wxString *aSource) const
Definition footprint.h:431
const COMPONENT_CLASS * GetComponentClass() const
Returns the component class for this footprint.
void SetLocalZoneConnection(ZONE_CONNECTION aType)
Definition footprint.h:388
BOARD_ITEM * DuplicateItem(bool addToParentGroup, BOARD_COMMIT *aCommit, const BOARD_ITEM *aItem, bool addToFootprint=false)
Duplicate a given item within the footprint, optionally adding it to the board.
FOOTPRINT(BOARD *parent)
Definition footprint.cpp:77
void ClearNetTiePadGroups()
Definition footprint.h:464
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
Definition footprint.h:337
LSET GetPrivateLayers() const
Definition footprint.h:244
wxString GetFPIDAsString() const
Definition footprint.h:355
CASE_INSENSITIVE_MAP< FOOTPRINT_VARIANT > m_variants
Variant data for this footprint, keyed by variant name.
Definition footprint.h:1306
wxString GetValueAsString() const
Definition footprint.h:771
bool AllowMissingCourtyard() const
Definition footprint.h:410
void DeleteVariant(const wxString &aVariantName)
Delete a variant by name.
const ZONES & Zones() const
Definition footprint.h:311
wxString GetComponentClassAsString() const
Used for display in the properties panel.
bool IsFlipped() const
Definition footprint.h:514
wxString GetSheetfile() const
Definition footprint.h:370
SHAPE_POLY_SET GetBoundingHull() const
Return a bounding polygon for the shapes and pads in the footprint.
void TransformFPShapesToPolySet(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool aIncludeText=true, bool aIncludeShapes=true, bool aIncludePrivateItems=false) const
Generate shapes of graphic items (outlines) on layer aLayer as polygons and adds these polygons to aB...
wxString GetTypeName() const
Get the type of footprint.
bool NeedsPlaced() const
Definition footprint.h:566
SHAPE_POLY_SET m_courtyard_cache_back
Definition footprint.h:1370
int m_textExcludedBBoxCacheTimeStamp
Definition footprint.h:1321
const std::vector< wxString > & GetNetTiePadGroups() const
Definition footprint.h:462
const LIB_ID & GetFPID() const
Definition footprint.h:349
const std::unordered_set< wxString > & GetTransientComponentClassNames()
Gets the transient component class names.
Definition footprint.h:1242
void SetReference(const wxString &aReference)
Definition footprint.h:747
bool IsLocked() const override
Definition footprint.h:534
std::vector< FP_UNIT_INFO > m_unitInfo
Definition footprint.h:1379
const GROUPS & Groups() const
Definition footprint.h:314
bool IsExcludedFromPosFiles() const
Definition footprint.h:851
void SetLayerAndFlip(PCB_LAYER_ID aLayer)
Used as Layer property setter – performs a flip if necessary to set the footprint layer.
wxString GetFieldValueForVariant(const wxString &aVariantName, const wxString &aFieldName) const
Get a field value for a specific variant.
int m_hullCacheTimeStamp
Definition footprint.h:1323
unsigned GetUniquePadCount(INCLUDE_NPTH_T aIncludeNPTH=INCLUDE_NPTH_T(INCLUDE_NPTH)) const
Return the number of unique non-blank pads.
void AddNetTiePadGroup(const wxString &aGroup)
Definition footprint.h:469
bool LegacyPadsLocked() const
Definition footprint.h:575
virtual const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
LSET m_privateLayers
Definition footprint.h:1353
const std::set< int > & GetNetTieCache(const BOARD_ITEM *aItem) const
Get the set of net codes that are allowed to connect to a footprint item.
Definition footprint.h:636
const LSET & GetStackupLayers() const
Definition footprint.h:405
const std::deque< PCB_FIELD * > & GetFields() const
Return a reference to the deque holding the footprint's fields.
Definition footprint.h:815
int GetLikelyAttribute() const
Returns the most likely attribute based on pads Either FP_THROUGH_HOLE/FP_SMD/OTHER(0)
std::deque< PCB_GROUP * > m_groups
Definition footprint.h:1295
void Move(const VECTOR2I &aMoveVector) override
Move this object.
static bool ClassOf(const EDA_ITEM *aItem)
Definition footprint.h:236
wxString m_libDescription
Definition footprint.h:1355
bool HitTestOnLayer(const VECTOR2I &aPosition, PCB_LAYER_ID aLayer, int aAccuracy=0) const
Test if the point hits one or more of the footprint elements on a given layer.
VECTOR2I m_pos
Definition footprint.h:1299
void ApplyDefaultSettings(const BOARD &board, bool aStyleFields, bool aStyleText, bool aStyleShapes, bool aStyleDimensions, bool aStyleBarcodes)
Apply default board settings to the footprint field text properties.
void ClearTransientComponentClassNames()
Remove the transient component class names.
Definition footprint.h:1248
ZONE_CONNECTION GetZoneConnectionOverrides(wxString *aSource) const
Definition footprint.h:450
std::vector< wxString > m_netTiePadGroups
Definition footprint.h:1327
void InvalidateGeometryCaches()
Resets the caches for this footprint, for example if it was modified via the API.
virtual std::vector< int > ViewGetLayers() const override
Return the all the layers within the VIEW the object is painted on.
std::set< KIFONT::OUTLINE_FONT * > GetFonts() const override
Get a list of outline fonts referenced in the footprint.
void Add3DModel(FP_3DMODEL *a3DModel)
Add a3DModel definition to the end of the 3D model list.
void SetValue(const wxString &aValue)
Definition footprint.h:768
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.
FOOTPRINT_STACKUP m_stackupMode
Definition footprint.h:1352
PCB_FIELD & Reference()
Definition footprint.h:778
std::vector< std::set< wxString > > m_jumperPadGroups
A list of jumper pad groups, each of which is a set of pad numbers that should be jumpered together (...
Definition footprint.h:1334
const PCB_FIELD & Value() const
The const versions to keep the compiler happy.
Definition footprint.h:781
wxString GetReferenceAsString() const
Definition footprint.h:750
wxString m_sheetfile
Definition footprint.h:1359
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars for this footprint.
std::optional< int > m_solderMaskMargin
Definition footprint.h:1346
SHAPE_POLY_SET m_courtyard_cache_front
Definition footprint.h:1369
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT, bool aSkipConnectivity=false) override
Removes an item from the container.
void SetUnitInfo(const std::vector< FP_UNIT_INFO > &aUnits)
Definition footprint.h:839
std::vector< const PAD * > GetPads(const wxString &aPadNumber, const PAD *aIgnore=nullptr) const
void AutoPositionFields()
Position Reference and Value fields at the top and bottom of footprint's bounding box.
void addMandatoryFields()
wxString m_keywords
Definition footprint.h:1356
const PCB_FIELD & Reference() const
Definition footprint.h:782
void SetTransientComponentClassNames(const std::unordered_set< wxString > &classNames)
Sets the transient component class names.
Definition footprint.h:1236
void ClearAllNets()
Clear (i.e.
std::deque< PAD * > m_pads
Definition footprint.h:1293
bool HasThroughHolePads() const
const PCB_POINTS & Points() const
Definition footprint.h:317
void BuildCourtyardCaches(OUTLINE_ERROR_HANDLER *aErrorHandler=nullptr)
Build complex polygons of the courtyard areas from graphic items on the courtyard layers.
bool IsOnLayer(PCB_LAYER_ID aLayer) const override
Test to see if this object is on the given layer.
EDA_ANGLE m_orient
Definition footprint.h:1298
bool HitTestAccurate(const VECTOR2I &aPosition, int aAccuracy=0) const
Test if a point is inside the bounding polygon of the footprint.
bool IsNetTie() const
Definition footprint.h:420
bool GetDNPForVariant(const wxString &aVariantName) const
Get the DNP status for a specific variant.
wxString GetClass() const override
Return the class name.
Definition footprint.h:1088
void SetVariant(const FOOTPRINT_VARIANT &aVariant)
Add or update a variant.
void IncrementReference(int aDelta)
Bump the current reference by aDelta.
int GetFileFormatVersionAtLoad() const
Definition footprint.h:978
std::optional< double > GetLocalSolderPasteMarginRatio() const
Definition footprint.h:385
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
KIID m_link
Definition footprint.h:1363
GROUPS & Groups()
Definition footprint.h:313
wxString GetFilters() const
Definition footprint.h:373
void SetSheetname(const wxString &aSheetname)
Definition footprint.h:368
const wxArrayString * GetInitialComments() const
Return the initial comments block or NULL if none, without transfer of ownership.
Definition footprint.h:1165
KIID GetLink() const
Definition footprint.h:1065
void SetAllowMissingCourtyard(bool aAllow)
Definition footprint.h:411
void BuildNetTieCache()
Cache the pads that are allowed to connect to each other in the footprint.
bool IsConflicting() const
std::vector< FP_3DMODEL > & Models()
Definition footprint.h:321
BOARD_ITEM * Duplicate(bool addToParentGroup, BOARD_COMMIT *aCommit=nullptr) const override
Create a copy of this BOARD_ITEM.
const SHAPE_POLY_SET & GetCachedCourtyard(PCB_LAYER_ID aLayer) const
Return the cached courtyard area.
std::deque< PCB_FIELD * > & GetFields()
Definition footprint.h:816
static const wxChar * StringLibNameInvalidChars(bool aUserReadable)
Test for validity of the name in a library of the footprint ( no spaces, dir separators ....
void SetLibDescription(const wxString &aDesc)
Definition footprint.h:359
bool TextOnly() const
const wxString & GetValue() const
Definition footprint.h:763
const COMPONENT_CLASS * GetStaticComponentClass() const
Returns the component class for this footprint.
void FixUpPadsForBoard(BOARD *aBoard)
Used post-loading of a footprint to adjust the layers on pads to match board inner layers.
bool GetExcludedFromPosFilesForVariant(const wxString &aVariantName) const
Get the exclude-from-position-files status for a specific variant.
void CheckShortingPads(const std::function< void(const PAD *, const PAD *, int aErrorCode, const VECTOR2I &)> &aErrorHandler)
Check for overlapping, different-numbered, non-net-tie pads.
FOOTPRINT_VARIANT * AddVariant(const wxString &aVariantName)
Add a new variant with the given name.
double GetArea(int aPadding=0) const
void SetNeedsPlaced(bool needsPlaced)
Definition footprint.h:567
wxString m_filters
Definition footprint.h:1360
const wxString & GetReference() const
Definition footprint.h:741
bool GetExcludedFromBOMForVariant(const wxString &aVariantName) const
Get the exclude-from-BOM status for a specific variant.
void CopyFrom(const BOARD_ITEM *aOther) override
void CheckNetTiePadGroups(const std::function< void(const wxString &)> &aErrorHandler)
Sanity check net-tie pad groups.
void SetFPIDAsString(const wxString &aFPID)
Definition footprint.h:356
void RenameVariant(const wxString &aOldName, const wxString &aNewName)
Rename a variant.
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
void SetBoardOnly(bool aIsBoardOnly=true)
Definition footprint.h:843
const std::vector< FP_3DMODEL > & Models() const
Definition footprint.h:322
void SetLocalSolderMaskMargin(std::optional< int > aMargin)
Definition footprint.h:380
timestamp_t m_lastEditTime
Definition footprint.h:1361
PAD * GetPad(const VECTOR2I &aPosition, const LSET &aLayerMask=LSET::AllLayersMask())
Get a pad at aPosition on aLayerMask in the footprint.
const SHAPE_POLY_SET & GetCourtyard(PCB_LAYER_ID aLayer) const
Used in DRC to test the courtyard area (a complex polygon).
int GetFlag() const
Definition footprint.h:418
std::map< const BOARD_ITEM *, std::set< int > > m_netTieCache
Definition footprint.h:1330
wxString m_sheetname
Definition footprint.h:1358
LSET m_stackupLayers
Definition footprint.h:1351
int m_fileFormatVersionAtLoad
Definition footprint.h:1303
void SetLocalClearance(std::optional< int > aClearance)
Definition footprint.h:377
void SetPrivateLayers(const LSET &aLayers)
Adds an item to the container.
Definition footprint.h:245
const KIID_PATH & GetPath() const
Definition footprint.h:364
std::optional< int > GetLocalSolderMaskMargin() const
Definition footprint.h:379
void SetLocalSolderPasteMargin(std::optional< int > aMargin)
Definition footprint.h:383
wxString GetKeywords() const
Definition footprint.h:361
bool operator==(const BOARD_ITEM &aOther) const override
EMBEDDED_FILES * GetEmbeddedFiles() override
Definition footprint.h:1193
void CheckFootprintAttributes(const std::function< void(const wxString &)> &aErrorHandler)
Test if footprint attributes for type (SMD/Through hole/Other) match the expected type based on the p...
FOOTPRINT_STACKUP GetStackupMode() const
Definition footprint.h:398
virtual void swapData(BOARD_ITEM *aImage) override
wxString GetNextPadNumber(const wxString &aLastPadName) const
Return the next available pad number in the footprint.
bool IsPlaced() const
Definition footprint.h:557
bool HasVariant(const wxString &aVariantName) const
Check if a variant exists.
int m_boundingBoxCacheTimeStamp
Definition footprint.h:1319
VECTOR2I GetPosition() const override
Definition footprint.h:325
DRAWINGS & GraphicalItems()
Definition footprint.h:307
HASH_128 m_courtyard_cache_front_hash
Definition footprint.h:1371
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
PAD * FindPadByNumber(const wxString &aPadNumber, PAD *aSearchAfterMe=nullptr) const
Return a PAD with a matching number.
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
bool operator==(const FP_3DMODEL &aOther) const
Definition footprint.h:125
VECTOR3D m_Offset
3D model offset (mm)
Definition footprint.h:120
double m_Opacity
Definition footprint.h:121
VECTOR3D m_Rotation
3D model rotation (degrees)
Definition footprint.h:119
VECTOR3D m_Scale
3D model scaling factor (dimensionless)
Definition footprint.h:118
wxString m_Filename
The 3D shape filename in 3D library.
Definition footprint.h:122
bool m_Show
Include model in rendering.
Definition footprint.h:123
Used when the right click button is pressed, or when the select tool is in effect.
Definition collectors.h:207
Class OUTLINE_FONT implements outline font drawing.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition view.h:66
Definition kiid.h:49
A logical library item identifier and consists of various portions much like a URI.
Definition lib_id.h:49
An abstract class from which implementation specific LINE_READERs may be derived to read single lines...
Definition richio.h:66
LSET is a set of PCB_LAYER_IDs.
Definition lset.h:37
static const LSET & AllLayersMask()
Definition lset.cpp:624
EDA_MSG_PANEL items for displaying messages.
Definition msgpanel.h:54
Definition pad.h:55
A PCB_POINT is a 0-dimensional point that is used to mark a position on a PCB, or more usually a foot...
Definition pcb_point.h:43
A pure virtual class used to derive REPORTER objects from.
Definition reporter.h:73
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
Represent a set of closed polygons.
An abstract shape on 2D plane.
Definition shape.h:126
Handle a list of polygons defining a copper zone.
Definition zone.h:74
const std::function< void(const wxString &msg, BOARD_ITEM *itemA, BOARD_ITEM *itemB, const VECTOR2I &pt)> OUTLINE_ERROR_HANDLER
#define _(s)
@ DEGREES_T
Definition eda_angle.h:31
RECURSE_MODE
Definition eda_item.h:50
INSPECT_RESULT
Definition eda_item.h:44
const INSPECTOR_FUNC & INSPECTOR
std::function passed to nested users by ref, avoids copying std::function.
Definition eda_item.h:91
INCLUDE_NPTH_T
Definition footprint.h:70
@ INCLUDE_NPTH
Definition footprint.h:72
@ DO_NOT_INCLUDE_NPTH
Definition footprint.h:71
FOOTPRINT_ATTR_T
The set of attributes allowed within a FOOTPRINT, using FOOTPRINT::SetAttributes() and FOOTPRINT::Get...
Definition footprint.h:81
@ FP_SMD
Definition footprint.h:83
@ FP_DNP
Definition footprint.h:88
@ FP_EXCLUDE_FROM_POS_FILES
Definition footprint.h:84
@ FP_BOARD_ONLY
Definition footprint.h:86
@ FP_EXCLUDE_FROM_BOM
Definition footprint.h:85
@ FP_JUST_ADDED
Definition footprint.h:87
@ FP_THROUGH_HOLE
Definition footprint.h:82
#define FP_is_PLACED
In autoplace: footprint automatically placed.
Definition footprint.h:529
#define FP_is_LOCKED
footprint LOCKED: no autoplace allowed
Definition footprint.h:528
#define FP_PADS_are_LOCKED
Definition footprint.h:531
FOOTPRINT_STACKUP
Definition footprint.h:92
@ EXPAND_INNER_LAYERS
The 'normal' stackup handling, where there is a single inner layer (In1) and rule areas using it expa...
Definition footprint.h:97
@ CUSTOM_LAYERS
Stackup handling where the footprint can have any number of copper layers, and objects on those layer...
Definition footprint.h:102
#define FP_to_PLACE
In autoplace: footprint waiting for autoplace.
Definition footprint.h:530
uint32_t timestamp_t
timestamp_t is our type to represent unique IDs for all kinds of elements; historically simply the ti...
Definition kiid.h:46
FLASHING
Enum used during connectivity building to ensure we do not query connectivity while building the data...
Definition layer_ids.h:184
@ DEFAULT
Flashing follows connectivity.
Definition layer_ids.h:185
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:60
@ B_Cu
Definition layer_ids.h:65
@ UNDEFINED_LAYER
Definition layer_ids.h:61
FLIP_DIRECTION
Definition mirror.h:27
The Cairo implementation of the graphics abstraction layer.
Definition eda_group.h:33
std::vector< ZONE * > ZONES
std::vector< wxString > m_pins
Definition footprint.h:836
bool operator()(const BOARD_ITEM *itemA, const BOARD_ITEM *itemB) const
bool operator()(const PAD *aFirst, const PAD *aSecond) const
bool operator()(const ZONE *aFirst, const ZONE *aSecond) const
A storage class for 128-bit hash value.
Definition hash_128.h:36
FIELD_T
The set of all field indices assuming an array like sequence that a SCH_COMPONENT or LIB_PART can hol...
@ REFERENCE
Field Reference of part, i.e. "IC21".
@ VALUE
Field Value of part, i.e. "3.3K".
@ PCB_FOOTPRINT_T
class FOOTPRINT, a footprint
Definition typeinfo.h:86
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:695
VECTOR3< double > VECTOR3D
Definition vector3.h:230
ZONE_CONNECTION
How pads are covered by copper in zone.
Definition zones.h:47