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#include <mutex>
30
31#include <template_fieldnames.h>
32
34#include <board_item.h>
35#include <collectors.h>
37#include <embedded_files.h>
38#include <layer_ids.h> // ALL_LAYERS definition.
39#include <lset.h>
40#include <lib_id.h>
41#include <lib_tree_item.h>
42#include <list>
43
44#include <zones.h>
46#include <pcb_item_containers.h>
47#include <pcb_text.h>
48#include <pcb_field.h>
49#include <functional>
50#include <math/vector3.h>
52
53class LINE_READER;
54class EDA_3D_CANVAS;
55class PAD;
56class BOARD;
57class MSG_PANEL_ITEM;
58class SHAPE;
59class REPORTER;
61class PCB_POINT;
62
63namespace KIGFX {
64class VIEW;
65}
66
67namespace KIFONT {
68class OUTLINE_FONT;
69}
70
76
83{
85 FP_SMD = 0x0002,
88 FP_BOARD_ONLY = 0x0010, // Footprint has no corresponding symbol
89 FP_JUST_ADDED = 0x0020, // Footprint just added by netlist update
90 FP_DNP = 0x0040
91};
92
106
108{
109public:
111 // Initialize with sensible values
112 m_Scale { 1, 1, 1 },
113 m_Rotation { 0, 0, 0 },
114 m_Offset { 0, 0, 0 },
115 m_Opacity( 1.0 ),
116 m_Show( true )
117 {
118 }
119
123 double m_Opacity;
124 wxString m_Filename;
125 bool m_Show;
126
127 bool operator==( const FP_3DMODEL& aOther ) const
128 {
129 return m_Scale == aOther.m_Scale
130 && m_Rotation == aOther.m_Rotation
131 && m_Offset == aOther.m_Offset
132 && m_Opacity == aOther.m_Opacity
133 && m_Filename == aOther.m_Filename
134 && m_Show == aOther.m_Show;
135 }
136};
137
138
146{
147public:
148 FOOTPRINT_VARIANT( const wxString& aName = wxEmptyString ) :
149 m_name( aName ),
150 m_dnp( false ),
151 m_excludedFromBOM( false ),
153 {
154 }
155
156 wxString GetName() const { return m_name; }
157 void SetName( const wxString& aName ) { m_name = aName; }
158
159 bool GetDNP() const { return m_dnp; }
160 void SetDNP( bool aDNP ) { m_dnp = aDNP; }
161
162 bool GetExcludedFromBOM() const { return m_excludedFromBOM; }
163 void SetExcludedFromBOM( bool aExclude ) { m_excludedFromBOM = aExclude; }
164
166 void SetExcludedFromPosFiles( bool aExclude ) { m_excludedFromPosFiles = aExclude; }
167
173 wxString GetFieldValue( const wxString& aFieldName ) const
174 {
175 auto it = m_fields.find( aFieldName );
176
177 if( it != m_fields.end() )
178 return it->second;
179
180 return wxString();
181 }
182
188 void SetFieldValue( const wxString& aFieldName, const wxString& aValue )
189 {
190 m_fields[aFieldName] = aValue;
191 }
192
193 bool HasFieldValue( const wxString& aFieldName ) const
194 {
195 return m_fields.find( aFieldName ) != m_fields.end();
196 }
197
198 const std::map<wxString, wxString>& GetFields() const { return m_fields; }
199
200 bool operator==( const FOOTPRINT_VARIANT& aOther ) const
201 {
202 return m_name == aOther.m_name
203 && m_dnp == aOther.m_dnp
206 && m_fields == aOther.m_fields;
207 }
208
209private:
210 wxString m_name;
211 bool m_dnp;
214 std::map<wxString, wxString> m_fields;
215};
216
217
219{
220public:
221 FOOTPRINT( BOARD* parent );
222
223 FOOTPRINT( const FOOTPRINT& aFootprint );
224
225 // Move constructor and operator needed due to std containers inside the footprint
226 FOOTPRINT( FOOTPRINT&& aFootprint );
227
228 ~FOOTPRINT();
229
230 FOOTPRINT& operator=( const FOOTPRINT& aOther );
231 FOOTPRINT& operator=( FOOTPRINT&& aOther );
232
233 void CopyFrom( const BOARD_ITEM* aOther ) override;
234
235 void Serialize( google::protobuf::Any &aContainer ) const override;
236 bool Deserialize( const google::protobuf::Any &aContainer ) override;
237
238 static inline bool ClassOf( const EDA_ITEM* aItem )
239 {
240 return aItem && aItem->Type() == PCB_FOOTPRINT_T;
241 }
242
245
247 void SetPrivateLayers( const LSET& aLayers ) { m_privateLayers = aLayers; }
248
250 void Add( BOARD_ITEM* aItem, ADD_MODE aMode = ADD_MODE::INSERT,
251 bool aSkipConnectivity = false ) override;
252
254 void Remove( BOARD_ITEM* aItem, REMOVE_MODE aMode = REMOVE_MODE::NORMAL ) override;
255
263 void ClearAllNets();
264
272 bool FixUuids();
273
284
292
293 bool TextOnly() const;
294
295 // Virtual function
296 const BOX2I GetBoundingBox() const override;
297 const BOX2I GetBoundingBox( bool aIncludeText ) const;
298
302 const BOX2I GetLayerBoundingBox( const LSET& aLayers ) const;
303
304 VECTOR2I GetCenter() const override { return GetBoundingBox( false ).GetCenter(); }
305
306 std::deque<PAD*>& Pads() { return m_pads; }
307 const std::deque<PAD*>& Pads() const { return m_pads; }
308
309 DRAWINGS& GraphicalItems() { return m_drawings; }
310 const DRAWINGS& GraphicalItems() const { return m_drawings; }
311
312 ZONES& Zones() { return m_zones; }
313 const ZONES& Zones() const { return m_zones; }
314
315 GROUPS& Groups() { return m_groups; }
316 const GROUPS& Groups() const { return m_groups; }
317
318 PCB_POINTS& Points() { return m_points; }
319 const PCB_POINTS& Points() const { return m_points; }
320
321 bool HasThroughHolePads() const;
322
323 std::vector<FP_3DMODEL>& Models() { return m_3D_Drawings; }
324 const std::vector<FP_3DMODEL>& Models() const { return m_3D_Drawings; }
325
326 void SetPosition( const VECTOR2I& aPos ) override;
327 VECTOR2I GetPosition() const override { return m_pos; }
328
329 void SetOrientation( const EDA_ANGLE& aNewAngle );
331
336 void SetLayerAndFlip( PCB_LAYER_ID aLayer );
337
338 // to make property magic work
339 PCB_LAYER_ID GetLayer() const override { return BOARD_ITEM::GetLayer(); }
340
341 // For property system:
342 void SetOrientationDegrees( double aOrientation )
343 {
344 SetOrientation( EDA_ANGLE( aOrientation, DEGREES_T ) );
345 }
347 {
348 return m_orient.AsDegrees();
349 }
350
351 const LIB_ID& GetFPID() const { return m_fpid; }
352 void SetFPID( const LIB_ID& aFPID )
353 {
354 m_fpid = aFPID;
355 }
356
357 wxString GetFPIDAsString() const { return m_fpid.Format(); }
358 void SetFPIDAsString( const wxString& aFPID ) { m_fpid.Parse( aFPID ); }
359
360 // LIB_TREE_ITEM interface
361 LIB_ID GetLIB_ID() const override { return m_fpid; }
362 wxString GetName() const override { return m_fpid.GetLibItemName(); }
363 wxString GetLibNickname() const override { return m_fpid.GetLibNickname(); }
364 wxString GetDesc() override { return GetLibDescription(); }
365 int GetPinCount() override { return static_cast<int>( GetUniquePadCount( DO_NOT_INCLUDE_NPTH ) ); }
366 std::vector<SEARCH_TERM> GetSearchTerms() override;
367
368 wxString GetLibDescription() const { return m_libDescription; }
369 void SetLibDescription( const wxString& aDesc ) { m_libDescription = aDesc; }
370
371 wxString GetKeywords() const { return m_keywords; }
372 void SetKeywords( const wxString& aKeywords ) { m_keywords = aKeywords; }
373
374 const KIID_PATH& GetPath() const { return m_path; }
375 void SetPath( const KIID_PATH& aPath ) { m_path = aPath; }
376
377 wxString GetSheetname() const { return m_sheetname; }
378 void SetSheetname( const wxString& aSheetname ) { m_sheetname = aSheetname; }
379
380 wxString GetSheetfile() const { return m_sheetfile; }
381 void SetSheetfile( const wxString& aSheetfile ) { m_sheetfile = aSheetfile; }
382
383 wxString GetFilters() const { return m_filters; }
384 void SetFilters( const wxString& aFilters ) { m_filters = aFilters; }
385
386 std::optional<int> GetLocalClearance() const { return m_clearance; }
387 void SetLocalClearance( std::optional<int> aClearance ) { m_clearance = aClearance; }
388
389 std::optional<int> GetLocalSolderMaskMargin() const { return m_solderMaskMargin; }
390 void SetLocalSolderMaskMargin( std::optional<int> aMargin ) { m_solderMaskMargin = aMargin; }
391
392 std::optional<int> GetLocalSolderPasteMargin() const { return m_solderPasteMargin; }
393 void SetLocalSolderPasteMargin( std::optional<int> aMargin ) { m_solderPasteMargin = aMargin; }
394
395 std::optional<double> GetLocalSolderPasteMarginRatio() const { return m_solderPasteMarginRatio; }
396 void SetLocalSolderPasteMarginRatio( std::optional<double> aRatio ) { m_solderPasteMarginRatio = aRatio; }
397
400
407 void SetStackupMode( FOOTPRINT_STACKUP aMode );
409
414 void SetStackupLayers( LSET aLayers );
415 const LSET& GetStackupLayers() const { return m_stackupLayers; }
416
417 int GetAttributes() const { return m_attributes; }
418 void SetAttributes( int aAttributes ) { m_attributes = aAttributes; }
419
421 void SetAllowMissingCourtyard( bool aAllow ) { m_allowMissingCourtyard = aAllow; }
422
424 void SetAllowSolderMaskBridges( bool aAllow ) { m_allowSolderMaskBridges = aAllow; }
425
426 void SetFlag( int aFlag ) { m_arflag = aFlag; }
427 void IncrementFlag() { m_arflag += 1; }
428 int GetFlag() const { return m_arflag; }
429
430 bool IsNetTie() const
431 {
432 for( const wxString& group : m_netTiePadGroups )
433 {
434 if( !group.IsEmpty() )
435 return true;
436 }
437
438 return false;
439 }
440
441 std::optional<int> GetLocalClearance( wxString* aSource ) const
442 {
443 if( m_clearance.has_value() && aSource )
444 *aSource = wxString::Format( _( "footprint %s" ), GetReference() );
445
446 return m_clearance;
447 }
448
455 std::optional<int> GetClearanceOverrides( wxString* aSource ) const
456 {
457 return GetLocalClearance( aSource );
458 }
459
461 {
463 *aSource = wxString::Format( _( "footprint %s" ), GetReference() );
464
465 return m_zoneConnection;
466 }
467
472 const std::vector<wxString>& GetNetTiePadGroups() const { return m_netTiePadGroups; }
473
475 {
476 m_netTiePadGroups.clear();
477 }
478
479 void AddNetTiePadGroup( const wxString& aGroup )
480 {
481 m_netTiePadGroups.emplace_back( aGroup );
482 }
483
488 std::map<wxString, int> MapPadNumbersToNetTieGroups() const;
489
493 std::vector<PAD*> GetNetTiePads( PAD* aPad ) const;
494
500 int GetLikelyAttribute() const;
501
502 void Move( const VECTOR2I& aMoveVector ) override;
503
504 void Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle ) override;
505
506 void Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection ) override;
507
519 void MoveAnchorPosition( const VECTOR2I& aMoveVector );
520
524 bool IsFlipped() const { return GetLayer() == B_Cu; }
525
530 PCB_LAYER_ID GetSide() const;
531
535 bool IsOnLayer( PCB_LAYER_ID aLayer ) const override;
536
537// m_footprintStatus bits:
538#define FP_is_LOCKED 0x01
539#define FP_is_PLACED 0x02
540#define FP_to_PLACE 0x04
541#define FP_PADS_are_LOCKED 0x08
542
543
544 bool IsLocked() const override
545 {
546 return ( m_fpStatus & FP_is_LOCKED ) != 0;
547 }
548
554 void SetLocked( bool isLocked ) override
555 {
556 if( isLocked )
558 else
560 }
561
565 bool IsConflicting() const;
566
567 bool IsPlaced() const { return m_fpStatus & FP_is_PLACED; }
568 void SetIsPlaced( bool isPlaced )
569 {
570 if( isPlaced )
572 else
574 }
575
576 bool NeedsPlaced() const { return m_fpStatus & FP_to_PLACE; }
577 void SetNeedsPlaced( bool needsPlaced )
578 {
579 if( needsPlaced )
581 else
583 }
584
586
597 void CheckFootprintAttributes( const std::function<void( const wxString& )>& aErrorHandler );
598
605 void CheckPads( UNITS_PROVIDER* aUnitsProvider,
606 const std::function<void( const PAD*, int, const wxString& )>& aErrorHandler );
607
613 void CheckShortingPads( const std::function<void( const PAD*, const PAD*, int aErrorCode,
614 const VECTOR2I& )>& aErrorHandler );
615
622 void CheckNetTies( const std::function<void( const BOARD_ITEM* aItem,
623 const BOARD_ITEM* bItem,
624 const BOARD_ITEM* cItem,
625 const VECTOR2I& )>& aErrorHandler );
626
633 void CheckNetTiePadGroups( const std::function<void( const wxString& )>& aErrorHandler );
634
635 void CheckClippedSilk( const std::function<void( BOARD_ITEM* aItemA,
636 BOARD_ITEM* aItemB,
637 const VECTOR2I& aPt )>& aErrorHandler );
641 void BuildNetTieCache();
642
646 const std::set<int>& GetNetTieCache( const BOARD_ITEM* aItem ) const
647 {
648 static const std::set<int> emptySet;
649
650 auto it = m_netTieCache.find( aItem );
651
652 if( it == m_netTieCache.end() )
653 return emptySet;
654
655 return it->second;
656 }
657
670 void TransformPadsToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
671 int aMaxError, ERROR_LOC aErrorLoc ) const;
672
687 void TransformFPShapesToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
688 int aError, ERROR_LOC aErrorLoc,
689 bool aIncludeText = true,
690 bool aIncludeShapes = true,
691 bool aIncludePrivateItems = false ) const;
692
696 void TransformFPTextToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
697 int aError, ERROR_LOC aErrorLoc ) const
698 {
699 TransformFPShapesToPolySet( aBuffer, aLayer, aClearance, aError, aErrorLoc, true, false );
700 }
701
705 void GetContextualTextVars( wxArrayString* aVars ) const;
706
712 bool ResolveTextVar( wxString* token, int aDepth = 0 ) const;
713
715 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
716
717 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
718
719 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
720
730 bool HitTestAccurate( const VECTOR2I& aPosition, int aAccuracy = 0 ) const;
731
732 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
733
734 bool HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const override;
735
744 bool HitTestOnLayer( const VECTOR2I& aPosition, PCB_LAYER_ID aLayer, int aAccuracy = 0 ) const;
745
746 bool HitTestOnLayer( const BOX2I& aRect, bool aContained, PCB_LAYER_ID aLayer, int aAccuracy = 0 ) const;
747
751 const wxString& GetReference() const { return Reference().GetText(); }
752
757 void SetReference( const wxString& aReference ) { Reference().SetText( aReference ); }
758
759 // Property system doesn't like const references
760 wxString GetReferenceAsString() const
761 {
762 return GetReference();
763 }
764
768 void IncrementReference( int aDelta );
769
773 const wxString& GetValue() const { return Value().GetText(); }
774
778 void SetValue( const wxString& aValue ) { Value().SetText( aValue ); }
779
780 // Property system doesn't like const references
781 wxString GetValueAsString() const
782 {
783 return GetValue();
784 }
785
789
791 const PCB_FIELD& Value() const { return *GetField( FIELD_T::VALUE ); }
792 const PCB_FIELD& Reference() const { return *GetField( FIELD_T::REFERENCE ); }
793
794 //-----<Fields>-----------------------------------------------------------
795
800 PCB_FIELD* GetField( FIELD_T aFieldType );
801 const PCB_FIELD* GetField( FIELD_T aFieldNdx ) const;
802
810 PCB_FIELD* GetField( const wxString& aFieldName ) const;
811
812 bool HasField( const wxString& aFieldName ) const;
813
820 void GetFields( std::vector<PCB_FIELD*>& aVector, bool aVisibleOnly ) const;
821
825 const std::deque<PCB_FIELD*>& GetFields() const { return m_fields; }
826 std::deque<PCB_FIELD*>& GetFields() { return m_fields; }
827
831 int GetNextFieldOrdinal() const;
832
840 void ApplyDefaultSettings( const BOARD& board, bool aStyleFields, bool aStyleText,
841 bool aStyleShapes, bool aStyleDimensions, bool aStyleBarcodes );
842
844 {
845 wxString m_unitName; // e.g. A
846 std::vector<wxString> m_pins; // pin numbers in this unit
847 };
848
849 void SetUnitInfo( const std::vector<FP_UNIT_INFO>& aUnits ) { m_unitInfo = aUnits; }
850 const std::vector<FP_UNIT_INFO>& GetUnitInfo() const { return m_unitInfo; }
851
852 bool IsBoardOnly() const { return m_attributes & FP_BOARD_ONLY; }
853 void SetBoardOnly( bool aIsBoardOnly = true )
854 {
855 if( aIsBoardOnly )
857 else
859 }
860
862 void SetExcludedFromPosFiles( bool aExclude = true )
863 {
864 if( aExclude )
866 else
868 }
869
871 void SetExcludedFromBOM( bool aExclude = true )
872 {
873 if( aExclude )
875 else
877 }
878
879 bool IsDNP() const { return m_attributes & FP_DNP; }
880 void SetDNP( bool aDNP = true )
881 {
882 if( aDNP )
884 else
886 }
887
888 // =====================================================================
889 // Variant Support
890 // =====================================================================
891
897 const FOOTPRINT_VARIANT* GetVariant( const wxString& aVariantName ) const;
898
904 FOOTPRINT_VARIANT* GetVariant( const wxString& aVariantName );
905
910 void SetVariant( const FOOTPRINT_VARIANT& aVariant );
911
917 FOOTPRINT_VARIANT* AddVariant( const wxString& aVariantName );
918
923 void DeleteVariant( const wxString& aVariantName );
924
930 void RenameVariant( const wxString& aOldName, const wxString& aNewName );
931
937 bool HasVariant( const wxString& aVariantName ) const;
938
944
953 bool GetDNPForVariant( const wxString& aVariantName ) const;
954
963 bool GetExcludedFromBOMForVariant( const wxString& aVariantName ) const;
964
973 bool GetExcludedFromPosFilesForVariant( const wxString& aVariantName ) const;
974
984 wxString GetFieldValueForVariant( const wxString& aVariantName,
985 const wxString& aFieldName ) const;
986
987 void SetFileFormatVersionAtLoad( int aVersion ) { m_fileFormatVersionAtLoad = aVersion; }
989
999 PAD* FindPadByNumber( const wxString& aPadNumber, PAD* aSearchAfterMe = nullptr ) const;
1000
1008 PAD* GetPad( const VECTOR2I& aPosition, const LSET& aLayerMask = LSET::AllLayersMask() );
1009
1010 std::vector<const PAD*> GetPads( const wxString& aPadNumber,
1011 const PAD* aIgnore = nullptr ) const;
1012
1020 unsigned GetPadCount( INCLUDE_NPTH_T aIncludeNPTH = INCLUDE_NPTH_T(INCLUDE_NPTH) ) const;
1021
1032 unsigned GetUniquePadCount( INCLUDE_NPTH_T aIncludeNPTH = INCLUDE_NPTH_T(INCLUDE_NPTH) ) const;
1033
1037 std::set<wxString>
1039
1047 wxString GetNextPadNumber( const wxString& aLastPadName ) const;
1048
1051
1056 std::vector<std::set<wxString>>& JumperPadGroups() { return m_jumperPadGroups; }
1057 const std::vector<std::set<wxString>>& JumperPadGroups() const { return m_jumperPadGroups; }
1058
1060 std::optional<const std::set<wxString>> GetJumperPadGroup( const wxString& aPadNumber ) const;
1061
1065 void AutoPositionFields();
1066
1071 wxString GetTypeName() const;
1072
1073 double GetArea( int aPadding = 0 ) const;
1074
1075 KIID GetLink() const { return m_link; }
1076 void SetLink( const KIID& aLink ) { m_link = aLink; }
1077
1078 BOARD_ITEM* Duplicate( bool addToParentGroup, BOARD_COMMIT* aCommit = nullptr ) const override;
1079
1085 BOARD_ITEM* DuplicateItem( bool addToParentGroup, BOARD_COMMIT* aCommit, const BOARD_ITEM* aItem,
1086 bool addToFootprint = false );
1087
1093 void Add3DModel( FP_3DMODEL* a3DModel );
1094
1095 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
1096 const std::vector<KICAD_T>& aScanTypes ) override;
1097
1098 wxString GetClass() const override
1099 {
1100 return wxT( "FOOTPRINT" );
1101 }
1102
1103 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
1104
1105 BITMAPS GetMenuImage() const override;
1106
1107 EDA_ITEM* Clone() const override;
1108
1110 void RunOnChildren( const std::function<void( BOARD_ITEM* )>& aFunction, RECURSE_MODE aMode ) const override;
1111
1112 virtual std::vector<int> ViewGetLayers() const override;
1113
1114 double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
1115
1116 virtual const BOX2I ViewBBox() const override;
1117
1125 static bool IsLibNameValid( const wxString& aName );
1126
1136 static const wxChar* StringLibNameInvalidChars( bool aUserReadable );
1137
1141 bool FootprintNeedsUpdate( const FOOTPRINT* aLibFP, int aCompareFlags = 0,
1142 REPORTER* aReporter = nullptr );
1143
1158 void SetInitialComments( wxArrayString* aInitialComments )
1159 {
1160 delete m_initial_comments;
1161 m_initial_comments = aInitialComments;
1162 }
1163
1170 double CoverageRatio( const GENERAL_COLLECTOR& aCollector ) const;
1171
1172 static double GetCoverageArea( const BOARD_ITEM* aItem, const GENERAL_COLLECTOR& aCollector );
1173
1175 const wxArrayString* GetInitialComments() const { return m_initial_comments; }
1176
1182 const SHAPE_POLY_SET& GetCourtyard( PCB_LAYER_ID aLayer ) const;
1183
1189 const SHAPE_POLY_SET& GetCachedCourtyard( PCB_LAYER_ID aLayer ) const;
1190
1197 void BuildCourtyardCaches( OUTLINE_ERROR_HANDLER* aErrorHandler = nullptr );
1198
1199 // @copydoc BOARD_ITEM::GetEffectiveShape
1200 std::shared_ptr<SHAPE> GetEffectiveShape( PCB_LAYER_ID aLayer = UNDEFINED_LAYER,
1201 FLASHING aFlash = FLASHING::DEFAULT ) const override;
1202
1204 {
1205 return static_cast<EMBEDDED_FILES*>( this );
1206 }
1207
1209 {
1210 return static_cast<const EMBEDDED_FILES*>( this );
1211 }
1212
1216 std::set<KIFONT::OUTLINE_FONT*> GetFonts() const override;
1217
1218 void EmbedFonts() override;
1219
1220 double Similarity( const BOARD_ITEM& aOther ) const override;
1221
1223 void SetStaticComponentClass( const COMPONENT_CLASS* aClass ) const;
1224
1227
1229 const COMPONENT_CLASS* GetComponentClass() const;
1230
1232 wxString GetComponentClassAsString() const;
1233
1235 void RecomputeComponentClass() const;
1236
1238 void InvalidateComponentClassCache() const;
1239
1246 void SetTransientComponentClassNames( const std::unordered_set<wxString>& classNames )
1247 {
1248 m_transientComponentClassNames = classNames;
1249 }
1250
1252 const std::unordered_set<wxString>& GetTransientComponentClassNames()
1253 {
1255 }
1256
1259
1261 void ResolveComponentClassNames( BOARD* aBoard,
1262 const std::unordered_set<wxString>& aComponentClassNames );
1263
1265 void FixUpPadsForBoard( BOARD* aBoard );
1266
1267 bool operator==( const BOARD_ITEM& aOther ) const override;
1268 bool operator==( const FOOTPRINT& aOther ) const;
1269
1270#if defined(DEBUG)
1271 virtual void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
1272#endif
1273
1275 {
1276 bool operator()( const BOARD_ITEM* itemA, const BOARD_ITEM* itemB ) const;
1277 };
1278
1280 {
1281 bool operator()( const PAD* aFirst, const PAD* aSecond ) const;
1282 };
1283 // TODO(JE) padstacks -- this code isn't used anywhere though
1284#if 0
1285 struct cmp_padstack
1286 {
1287 bool operator()( const PAD* aFirst, const PAD* aSecond ) const;
1288 };
1289#endif
1291 {
1292 bool operator()( const ZONE* aFirst, const ZONE* aSecond ) const;
1293 };
1294
1295protected:
1296 virtual void swapData( BOARD_ITEM* aImage ) override;
1297
1299
1300private:
1301 std::deque<PCB_FIELD*> m_fields; // Fields, mapped by name, owned by pointer
1302 std::deque<BOARD_ITEM*> m_drawings; // Drawings in the footprint, owned by pointer
1303 std::deque<PAD*> m_pads; // Pads, owned by pointer
1304 std::vector<ZONE*> m_zones; // Rule area zones, owned by pointer
1305 std::deque<PCB_GROUP*> m_groups; // Groups, owned by pointer
1306 std::deque<PCB_POINT*> m_points; // Points, owned by pointer
1307
1308 EDA_ANGLE m_orient; // Orientation
1309 VECTOR2I m_pos; // Position of footprint on the board in internal units.
1310 LIB_ID m_fpid; // The #LIB_ID of the FOOTPRINT.
1311 int m_attributes; // Flag bits (see FOOTPRINT_ATTR_T)
1312 int m_fpStatus; // For autoplace: flags (LOCKED, FIELDS_AUTOPLACED)
1314
1317
1318 // Bounding box caching strategy:
1319 // While we attempt to notice the low-hanging fruit operations and update the bounding boxes
1320 // accordingly, we rely mostly on a "if anything changed then the caches are stale" approach.
1321 // We implement this by having PCB_BASE_FRAME's OnModify() method increment an operation
1322 // counter, and storing that as a timestamp for the various caches.
1323 // This means caches will get regenerated often -- but still far less often than if we had no
1324 // caches at all. The principal opitmization would be to change to dirty flag and make sure
1325 // that any edit that could affect the bounding boxes (including edits to the footprint
1326 // children) marked the bounding boxes dirty. It would definitely be faster -- but also more
1327 // fragile.
1328 mutable std::mutex m_bboxCacheMutex;
1335
1336 // A list of pad groups, each of which is allowed to short nets within their group.
1337 // A pad group is a comma-separated list of pad numbers.
1338 std::vector<wxString> m_netTiePadGroups;
1339
1340 // A list of 1:N footprint item to allowed net numbers
1341 std::map<const BOARD_ITEM*, std::set<int>> m_netTieCache;
1342
1345 std::vector<std::set<wxString>> m_jumperPadGroups;
1346
1350
1353
1354 // Optional overrides
1356 std::optional<int> m_clearance;
1357 std::optional<int> m_solderMaskMargin; // Solder mask margin
1358 std::optional<int> m_solderPasteMargin; // Solder paste margin absolute value
1359 std::optional<double> m_solderPasteMarginRatio; // Solder mask margin ratio of pad size
1360 // The final margin is the sum of these 2 values
1361
1362 LSET m_stackupLayers; // Layers in the stackup
1363 FOOTPRINT_STACKUP m_stackupMode; // Stackup mode for this footprint
1364 LSET m_privateLayers; // Layers visible only in the footprint editor
1365
1366 wxString m_libDescription; // File name and path for documentation file.
1367 wxString m_keywords; // Search keywords to find footprint in library.
1368 KIID_PATH m_path; // Path to associated symbol ([sheetUUID, .., symbolUUID]).
1369 wxString m_sheetname; // Name of the sheet containing the symbol for this footprint
1370 wxString m_sheetfile; // File of the sheet containing the symbol for this footprint
1371 wxString m_filters; // Footprint filters from symbol
1373 int m_arflag; // Use to trace ratsnest and auto routing.
1374 KIID m_link; // Temporary logical link used during editing
1375
1376 std::vector<FP_3DMODEL> m_3D_Drawings; // 3D models.
1377 wxArrayString* m_initial_comments; // s-expression comments in the footprint,
1378 // lazily allocated only if needed for speed
1379
1380 SHAPE_POLY_SET m_courtyard_cache_front; // Note that a footprint can have both front and back
1381 SHAPE_POLY_SET m_courtyard_cache_back; // courtyards populated.
1384 mutable std::mutex m_courtyard_cache_mutex;
1385
1386 std::unordered_set<wxString> m_transientComponentClassNames;
1387 std::unique_ptr<COMPONENT_CLASS_CACHE_PROXY> m_componentClassCacheProxy;
1388
1389 // Optional unit mapping information for multi-unit symbols
1390 std::vector<FP_UNIT_INFO> m_unitInfo;
1391};
1392
1393#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:282
EMBEDDED_FILES()=default
Variant information for a footprint.
Definition footprint.h:146
wxString GetName() const
Definition footprint.h:156
FOOTPRINT_VARIANT(const wxString &aName=wxEmptyString)
Definition footprint.h:148
bool HasFieldValue(const wxString &aFieldName) const
Definition footprint.h:193
bool m_excludedFromPosFiles
Definition footprint.h:213
void SetExcludedFromPosFiles(bool aExclude)
Definition footprint.h:166
wxString GetFieldValue(const wxString &aFieldName) const
Get a field value override for this variant.
Definition footprint.h:173
void SetName(const wxString &aName)
Definition footprint.h:157
const std::map< wxString, wxString > & GetFields() const
Definition footprint.h:198
bool GetExcludedFromBOM() const
Definition footprint.h:162
bool operator==(const FOOTPRINT_VARIANT &aOther) const
Definition footprint.h:200
void SetDNP(bool aDNP)
Definition footprint.h:160
bool GetExcludedFromPosFiles() const
Definition footprint.h:165
bool GetDNP() const
Definition footprint.h:159
std::map< wxString, wxString > m_fields
Field value overrides for this variant.
Definition footprint.h:214
void SetFieldValue(const wxString &aFieldName, const wxString &aValue)
Set a field value override for this variant.
Definition footprint.h:188
void SetExcludedFromBOM(bool aExclude)
Definition footprint.h:163
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:1049
const CASE_INSENSITIVE_MAP< FOOTPRINT_VARIANT > & GetVariants() const
Get all variants.
Definition footprint.h:943
std::optional< int > GetClearanceOverrides(wxString *aSource) const
Return any local clearance overrides set in the "classic" (ie: pre-rule) system.
Definition footprint.h:455
void EmbedFonts() override
bool AllowSolderMaskBridges() const
Definition footprint.h:423
void SetPosition(const VECTOR2I &aPos) override
void SetFPID(const LIB_ID &aFPID)
Definition footprint.h:352
LIB_ID m_fpid
Definition footprint.h:1310
wxString GetLibDescription() const
Definition footprint.h:368
ZONE_CONNECTION GetLocalZoneConnection() const
Definition footprint.h:399
void SetLink(const KIID &aLink)
Definition footprint.h:1076
KIID_PATH m_path
Definition footprint.h:1368
std::deque< BOARD_ITEM * > m_drawings
Definition footprint.h:1302
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:852
BOX2I m_cachedTextExcludedBBox
Definition footprint.h:1331
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:307
bool IsDNP() const
Definition footprint.h:879
void SetLocked(bool isLocked) override
Set the #MODULE_is_LOCKED bit in the m_ModuleStatus.
Definition footprint.h:554
VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Definition footprint.h:304
HASH_128 m_courtyard_cache_back_hash
Definition footprint.h:1383
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:330
ZONES & Zones()
Definition footprint.h:312
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:1306
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:568
ZONE_CONNECTION m_zoneConnection
Definition footprint.h:1355
BOX2I m_cachedBoundingBox
Definition footprint.h:1329
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this footprint.
PCB_POINTS & Points()
Definition footprint.h:318
static double GetCoverageArea(const BOARD_ITEM *aItem, const GENERAL_COLLECTOR &aCollector)
bool IsExcludedFromBOM() const
Definition footprint.h:870
void SetOrientation(const EDA_ANGLE &aNewAngle)
void SetFlag(int aFlag)
Definition footprint.h:426
std::optional< double > m_solderPasteMarginRatio
Definition footprint.h:1359
void SetDNP(bool aDNP=true)
Definition footprint.h:880
void SetAllowSolderMaskBridges(bool aAllow)
Definition footprint.h:424
void RecomputeComponentClass() const
Forces immediate recalculation of the component class for this footprint.
std::vector< ZONE * > m_zones
Definition footprint.h:1304
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:396
void IncrementFlag()
Definition footprint.h:427
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:1356
bool m_duplicatePadNumbersAreJumpers
Flag that this footprint should automatically treat sets of two or more pads with the same number as ...
Definition footprint.h:1349
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:871
wxString GetSheetname() const
Definition footprint.h:377
int m_fpStatus
Definition footprint.h:1312
void SetPath(const KIID_PATH &aPath)
Definition footprint.h:375
SHAPE_POLY_SET m_cachedHull
Definition footprint.h:1333
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:384
void SetKeywords(const wxString &aKeywords)
Definition footprint.h:372
void SetStaticComponentClass(const COMPONENT_CLASS *aClass) const
Sets the component class object pointer for this footprint.
const DRAWINGS & GraphicalItems() const
Definition footprint.h:310
void SetInitialComments(wxArrayString *aInitialComments)
Take ownership of caller's heap allocated aInitialComments block.
Definition footprint.h:1158
int m_attributes
Definition footprint.h:1311
PCB_LAYER_ID GetSide() const
Use instead of IsFlipped() when you also need to account for unsided footprints (those purely on user...
wxString GetLibNickname() const override
Definition footprint.h:363
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:1376
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:1351
std::mutex m_bboxCacheMutex
Definition footprint.h:1328
const std::vector< FP_UNIT_INFO > & GetUnitInfo() const
Definition footprint.h:850
std::unordered_set< wxString > m_transientComponentClassNames
Definition footprint.h:1386
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:418
void SetSheetfile(const wxString &aSheetfile)
Definition footprint.h:381
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
std::optional< int > GetLocalSolderPasteMargin() const
Definition footprint.h:392
std::unique_ptr< COMPONENT_CLASS_CACHE_PROXY > m_componentClassCacheProxy
Definition footprint.h:1387
wxArrayString * m_initial_comments
Definition footprint.h:1377
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,...
LIB_ID GetLIB_ID() const override
Definition footprint.h:361
std::deque< PCB_FIELD * > m_fields
Definition footprint.h:1301
PCB_FIELD & Value()
read/write accessors:
Definition footprint.h:787
const EMBEDDED_FILES * GetEmbeddedFiles() const
Definition footprint.h:1208
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
std::optional< int > m_solderPasteMargin
Definition footprint.h:1358
const std::vector< std::set< wxString > > & JumperPadGroups() const
Definition footprint.h:1057
void SetFileFormatVersionAtLoad(int aVersion)
Definition footprint.h:987
std::mutex m_courtyard_cache_mutex
Definition footprint.h:1384
void SetExcludedFromPosFiles(bool aExclude=true)
Definition footprint.h:862
void SetOrientationDegrees(double aOrientation)
Definition footprint.h:342
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:386
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:696
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:1056
void SetDuplicatePadNumbersAreJumpers(bool aEnabled)
Definition footprint.h:1050
bool m_allowSolderMaskBridges
Definition footprint.h:1352
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:346
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:306
void ResolveComponentClassNames(BOARD *aBoard, const std::unordered_set< wxString > &aComponentClassNames)
Resolves a set of component class names to this footprint's actual component class.
wxString GetDesc() override
Definition footprint.h:364
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
int GetAttributes() const
Definition footprint.h:417
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:441
const COMPONENT_CLASS * GetComponentClass() const
Returns the component class for this footprint.
void SetLocalZoneConnection(ZONE_CONNECTION aType)
Definition footprint.h:398
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:78
void ClearNetTiePadGroups()
Definition footprint.h:474
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
Definition footprint.h:339
LSET GetPrivateLayers() const
Definition footprint.h:246
wxString GetFPIDAsString() const
Definition footprint.h:357
CASE_INSENSITIVE_MAP< FOOTPRINT_VARIANT > m_variants
Variant data for this footprint, keyed by variant name.
Definition footprint.h:1316
wxString GetValueAsString() const
Definition footprint.h:781
bool AllowMissingCourtyard() const
Definition footprint.h:420
void DeleteVariant(const wxString &aVariantName)
Delete a variant by name.
const ZONES & Zones() const
Definition footprint.h:313
wxString GetComponentClassAsString() const
Used for display in the properties panel.
bool IsFlipped() const
Definition footprint.h:524
wxString GetSheetfile() const
Definition footprint.h:380
int GetPinCount() override
The pin count for symbols or the unique pad count for footprints.
Definition footprint.h:365
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:576
SHAPE_POLY_SET m_courtyard_cache_back
Definition footprint.h:1381
int m_textExcludedBBoxCacheTimeStamp
Definition footprint.h:1332
const std::vector< wxString > & GetNetTiePadGroups() const
Definition footprint.h:472
const LIB_ID & GetFPID() const
Definition footprint.h:351
const std::unordered_set< wxString > & GetTransientComponentClassNames()
Gets the transient component class names.
Definition footprint.h:1252
void SetReference(const wxString &aReference)
Definition footprint.h:757
bool IsLocked() const override
Definition footprint.h:544
std::vector< FP_UNIT_INFO > m_unitInfo
Definition footprint.h:1390
const GROUPS & Groups() const
Definition footprint.h:316
bool IsExcludedFromPosFiles() const
Definition footprint.h:861
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:1334
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:479
bool LegacyPadsLocked() const
Definition footprint.h:585
virtual const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
LSET m_privateLayers
Definition footprint.h:1364
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:646
const LSET & GetStackupLayers() const
Definition footprint.h:415
const std::deque< PCB_FIELD * > & GetFields() const
Return a reference to the deque holding the footprint's fields.
Definition footprint.h:825
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:1305
void Move(const VECTOR2I &aMoveVector) override
Move this object.
static bool ClassOf(const EDA_ITEM *aItem)
Definition footprint.h:238
wxString m_libDescription
Definition footprint.h:1366
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:1309
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:1258
ZONE_CONNECTION GetZoneConnectionOverrides(wxString *aSource) const
Definition footprint.h:460
std::vector< wxString > m_netTiePadGroups
Definition footprint.h:1338
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:778
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:1363
PCB_FIELD & Reference()
Definition footprint.h:788
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:1345
const PCB_FIELD & Value() const
The const versions to keep the compiler happy.
Definition footprint.h:791
wxString GetReferenceAsString() const
Definition footprint.h:760
wxString m_sheetfile
Definition footprint.h:1370
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars for this footprint.
std::optional< int > m_solderMaskMargin
Definition footprint.h:1357
SHAPE_POLY_SET m_courtyard_cache_front
Definition footprint.h:1380
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:849
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:1367
const PCB_FIELD & Reference() const
Definition footprint.h:792
void SetTransientComponentClassNames(const std::unordered_set< wxString > &classNames)
Sets the transient component class names.
Definition footprint.h:1246
void ClearAllNets()
Clear (i.e.
std::deque< PAD * > m_pads
Definition footprint.h:1303
bool HasThroughHolePads() const
const PCB_POINTS & Points() const
Definition footprint.h:319
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:1308
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:430
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:1098
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:988
std::optional< double > GetLocalSolderPasteMarginRatio() const
Definition footprint.h:395
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
KIID m_link
Definition footprint.h:1374
GROUPS & Groups()
Definition footprint.h:315
wxString GetFilters() const
Definition footprint.h:383
void SetSheetname(const wxString &aSheetname)
Definition footprint.h:378
const wxArrayString * GetInitialComments() const
Return the initial comments block or NULL if none, without transfer of ownership.
Definition footprint.h:1175
KIID GetLink() const
Definition footprint.h:1075
void SetAllowMissingCourtyard(bool aAllow)
Definition footprint.h:421
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:323
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:826
wxString GetName() const override
Definition footprint.h:362
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:369
bool TextOnly() const
const wxString & GetValue() const
Definition footprint.h:773
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:577
wxString m_filters
Definition footprint.h:1371
const wxString & GetReference() const
Definition footprint.h:751
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:358
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:853
const std::vector< FP_3DMODEL > & Models() const
Definition footprint.h:324
void SetLocalSolderMaskMargin(std::optional< int > aMargin)
Definition footprint.h:390
std::vector< SEARCH_TERM > GetSearchTerms() override
timestamp_t m_lastEditTime
Definition footprint.h:1372
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:428
std::map< const BOARD_ITEM *, std::set< int > > m_netTieCache
Definition footprint.h:1341
wxString m_sheetname
Definition footprint.h:1369
LSET m_stackupLayers
Definition footprint.h:1362
int m_fileFormatVersionAtLoad
Definition footprint.h:1313
void SetLocalClearance(std::optional< int > aClearance)
Definition footprint.h:387
void SetPrivateLayers(const LSET &aLayers)
Adds an item to the container.
Definition footprint.h:247
const KIID_PATH & GetPath() const
Definition footprint.h:374
std::optional< int > GetLocalSolderMaskMargin() const
Definition footprint.h:389
void SetLocalSolderPasteMargin(std::optional< int > aMargin)
Definition footprint.h:393
wxString GetKeywords() const
Definition footprint.h:371
bool operator==(const BOARD_ITEM &aOther) const override
EMBEDDED_FILES * GetEmbeddedFiles() override
Definition footprint.h:1203
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:408
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:567
bool HasVariant(const wxString &aVariantName) const
Check if a variant exists.
int m_boundingBoxCacheTimeStamp
Definition footprint.h:1330
VECTOR2I GetPosition() const override
Definition footprint.h:327
DRAWINGS & GraphicalItems()
Definition footprint.h:309
HASH_128 m_courtyard_cache_front_hash
Definition footprint.h:1382
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:127
VECTOR3D m_Offset
3D model offset (mm)
Definition footprint.h:122
double m_Opacity
Definition footprint.h:123
VECTOR3D m_Rotation
3D model rotation (degrees)
Definition footprint.h:121
VECTOR3D m_Scale
3D model scaling factor (dimensionless)
Definition footprint.h:120
wxString m_Filename
The 3D shape filename in 3D library.
Definition footprint.h:124
bool m_Show
Include model in rendering.
Definition footprint.h:125
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
A mix-in to provide polymorphism between items stored in libraries (symbols, aliases and footprints).
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:641
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:72
@ INCLUDE_NPTH
Definition footprint.h:74
@ DO_NOT_INCLUDE_NPTH
Definition footprint.h:73
FOOTPRINT_ATTR_T
The set of attributes allowed within a FOOTPRINT, using FOOTPRINT::SetAttributes() and FOOTPRINT::Get...
Definition footprint.h:83
@ FP_SMD
Definition footprint.h:85
@ FP_DNP
Definition footprint.h:90
@ FP_EXCLUDE_FROM_POS_FILES
Definition footprint.h:86
@ FP_BOARD_ONLY
Definition footprint.h:88
@ FP_EXCLUDE_FROM_BOM
Definition footprint.h:87
@ FP_JUST_ADDED
Definition footprint.h:89
@ FP_THROUGH_HOLE
Definition footprint.h:84
#define FP_is_PLACED
In autoplace: footprint automatically placed.
Definition footprint.h:539
#define FP_is_LOCKED
footprint LOCKED: no autoplace allowed
Definition footprint.h:538
#define FP_PADS_are_LOCKED
Definition footprint.h:541
FOOTPRINT_STACKUP
Definition footprint.h:94
@ EXPAND_INNER_LAYERS
The 'normal' stackup handling, where there is a single inner layer (In1) and rule areas using it expa...
Definition footprint.h:99
@ CUSTOM_LAYERS
Stackup handling where the footprint can have any number of copper layers, and objects on those layer...
Definition footprint.h:104
#define FP_to_PLACE
In autoplace: footprint waiting for autoplace.
Definition footprint.h:540
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:846
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