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#include <unordered_set>
31
32#include <template_fieldnames.h>
33
35#include <board_item.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 <lib_tree_item.h>
41#include <list>
42
43#include <zones.h>
45#include <pcb_item_containers.h>
46#include <pcb_field.h>
47#include <functional>
48#include <math/vector3.h>
50#include <gal/color4d.h>
51
52class LINE_READER;
53class EDA_3D_CANVAS;
54class PAD;
55class BOARD;
56class COMPONENT_CLASS;
58class MSG_PANEL_ITEM;
59class SHAPE;
60class REPORTER;
62class PCB_POINT;
63
64namespace KIGFX {
65class VIEW;
66}
67
68namespace KIFONT {
69class OUTLINE_FONT;
70}
71
77
84{
86 FP_SMD = 0x0002,
89 FP_BOARD_ONLY = 0x0010, // Footprint has no corresponding symbol
90 FP_JUST_ADDED = 0x0020, // Footprint just added by netlist update
91 FP_DNP = 0x0040
92};
93
101
103{
104public:
105 EXTRUDED_3D_BODY() = default;
106
107 int m_height = 0;
108 int m_standoff = 0;
112 bool m_show = true;
113
114 VECTOR3D m_scale{ 1.0, 1.0, 1.0 };
115 VECTOR3D m_rotation{ 0.0, 0.0, 0.0 };
116 VECTOR3D m_offset{ 0.0, 0.0, 0.0 };
117
119 {
120 switch( aMaterial )
121 {
122 default:
123 case EXTRUSION_MATERIAL::PLASTIC: return KIGFX::COLOR4D( 0.2, 0.2, 0.2, 1.0 );
124 case EXTRUSION_MATERIAL::MATTE: return KIGFX::COLOR4D( 0.4, 0.4, 0.4, 1.0 );
125 case EXTRUSION_MATERIAL::METAL: return KIGFX::COLOR4D( 0.7, 0.7, 0.7, 1.0 );
126 case EXTRUSION_MATERIAL::COPPER: return KIGFX::COLOR4D( 0.72, 0.45, 0.2, 1.0 );
127 }
128 }
129
130 bool operator==( const EXTRUDED_3D_BODY& aOther ) const
131 {
132 return m_height == aOther.m_height && m_standoff == aOther.m_standoff && m_layer == aOther.m_layer
133 && m_color == aOther.m_color && m_material == aOther.m_material && m_scale == aOther.m_scale
134 && m_rotation == aOther.m_rotation && m_offset == aOther.m_offset && m_show == aOther.m_show;
135 }
136
137 static uint32_t PackColorKey( const KIGFX::COLOR4D& aColor )
138 {
139 return ( (uint8_t) ( aColor.r * 255 ) << 24 ) | ( (uint8_t) ( aColor.g * 255 ) << 16 )
140 | ( (uint8_t) ( aColor.b * 255 ) << 8 ) | (uint8_t) ( aColor.a * 255 );
141 }
142};
143
157
159{
160public:
162 // Initialize with sensible values
163 m_Scale { 1, 1, 1 },
164 m_Rotation { 0, 0, 0 },
165 m_Offset { 0, 0, 0 },
166 m_Opacity( 1.0 ),
167 m_Show( true )
168 {
169 }
170
174 double m_Opacity;
175 wxString m_Filename;
176 bool m_Show;
177
178 bool operator==( const FP_3DMODEL& aOther ) const
179 {
180 return m_Scale == aOther.m_Scale
181 && m_Rotation == aOther.m_Rotation
182 && m_Offset == aOther.m_Offset
183 && m_Opacity == aOther.m_Opacity
184 && m_Filename == aOther.m_Filename
185 && m_Show == aOther.m_Show;
186 }
187};
188
189
191{
192 SHAPE_POLY_SET front; // Note that a footprint can have both front and back courtyards populated.
196};
197
198
208
209
217{
218public:
219 FOOTPRINT_VARIANT( const wxString& aName = wxEmptyString ) :
220 m_name( aName ),
221 m_dnp( false ),
222 m_excludedFromBOM( false ),
224 {
225 }
226
227 wxString GetName() const { return m_name; }
228 void SetName( const wxString& aName ) { m_name = aName; }
229
230 bool GetDNP() const { return m_dnp; }
231 void SetDNP( bool aDNP ) { m_dnp = aDNP; }
232
233 bool GetExcludedFromBOM() const { return m_excludedFromBOM; }
234 void SetExcludedFromBOM( bool aExclude ) { m_excludedFromBOM = aExclude; }
235
237 void SetExcludedFromPosFiles( bool aExclude ) { m_excludedFromPosFiles = aExclude; }
238
244 wxString GetFieldValue( const wxString& aFieldName ) const
245 {
246 auto it = m_fields.find( aFieldName );
247
248 if( it != m_fields.end() )
249 return it->second;
250
251 return wxString();
252 }
253
259 void SetFieldValue( const wxString& aFieldName, const wxString& aValue )
260 {
261 m_fields[aFieldName] = aValue;
262 }
263
264 bool HasFieldValue( const wxString& aFieldName ) const
265 {
266 return m_fields.find( aFieldName ) != m_fields.end();
267 }
268
269 const std::map<wxString, wxString>& GetFields() const { return m_fields; }
270
271 bool operator==( const FOOTPRINT_VARIANT& aOther ) const
272 {
273 return m_name == aOther.m_name
274 && m_dnp == aOther.m_dnp
277 && m_fields == aOther.m_fields;
278 }
279
280private:
281 wxString m_name;
282 bool m_dnp;
285 std::map<wxString, wxString> m_fields;
286};
287
288
290{
291public:
292 FOOTPRINT( BOARD* parent );
293
294 FOOTPRINT( const FOOTPRINT& aFootprint );
295
296 // Move constructor and operator needed due to std containers inside the footprint
297 FOOTPRINT( FOOTPRINT&& aFootprint );
298
299 ~FOOTPRINT();
300
301 FOOTPRINT& operator=( const FOOTPRINT& aOther );
302 FOOTPRINT& operator=( FOOTPRINT&& aOther );
303
304 void CopyFrom( const BOARD_ITEM* aOther ) override;
305
306 void Serialize( google::protobuf::Any &aContainer ) const override;
307 bool Deserialize( const google::protobuf::Any &aContainer ) override;
308
309 static inline bool ClassOf( const EDA_ITEM* aItem )
310 {
311 return aItem && aItem->Type() == PCB_FOOTPRINT_T;
312 }
313
316
318 void SetPrivateLayers( const LSET& aLayers ) { m_privateLayers = aLayers; }
319
321 void Add( BOARD_ITEM* aItem, ADD_MODE aMode = ADD_MODE::INSERT,
322 bool aSkipConnectivity = false ) override;
323
325 void Remove( BOARD_ITEM* aItem, REMOVE_MODE aMode = REMOVE_MODE::NORMAL ) override;
326
334 void ClearAllNets();
335
343 bool FixUuids();
344
355
363
364 bool TextOnly() const;
365
366 // Virtual function
367 const BOX2I GetBoundingBox() const override;
368 const BOX2I GetBoundingBox( bool aIncludeText ) const;
369
373 const BOX2I GetLayerBoundingBox( const LSET& aLayers ) const;
374
375 VECTOR2I GetCenter() const override { return GetBoundingBox( false ).GetCenter(); }
376
377 std::deque<PAD*>& Pads() { return m_pads; }
378 const std::deque<PAD*>& Pads() const { return m_pads; }
379
381 const DRAWINGS& GraphicalItems() const { return m_drawings; }
382
383 ZONES& Zones() { return m_zones; }
384 const ZONES& Zones() const { return m_zones; }
385
386 GROUPS& Groups() { return m_groups; }
387 const GROUPS& Groups() const { return m_groups; }
388
390 const PCB_POINTS& Points() const { return m_points; }
391
392 bool HasThroughHolePads() const;
393
394 std::vector<FP_3DMODEL>& Models() { return m_3D_Drawings; }
395 const std::vector<FP_3DMODEL>& Models() const { return m_3D_Drawings; }
396
397 bool HasExtrudedBody() const { return m_extrudedBody != nullptr; }
398 const EXTRUDED_3D_BODY* GetExtrudedBody() const { return m_extrudedBody.get(); }
401 void SetExtrudedBody( std::unique_ptr<EXTRUDED_3D_BODY> aBody );
403
404 void SetPosition( const VECTOR2I& aPos ) override;
405 VECTOR2I GetPosition() const override { return m_pos; }
406
407 void SetOrientation( const EDA_ANGLE& aNewAngle );
409
414 void SetLayerAndFlip( PCB_LAYER_ID aLayer );
415
416 // to make property magic work
417 PCB_LAYER_ID GetLayer() const override { return BOARD_ITEM::GetLayer(); }
418
419 // For property system:
420 void SetOrientationDegrees( double aOrientation )
421 {
422 SetOrientation( EDA_ANGLE( aOrientation, DEGREES_T ) );
423 }
425 {
426 return m_orient.AsDegrees();
427 }
428
429 const LIB_ID& GetFPID() const { return m_fpid; }
430 void SetFPID( const LIB_ID& aFPID )
431 {
432 m_fpid = aFPID;
433 }
434
435 wxString GetFPIDAsString() const { return m_fpid.Format(); }
436 void SetFPIDAsString( const wxString& aFPID ) { m_fpid.Parse( aFPID ); }
437
438 // LIB_TREE_ITEM interface
439 LIB_ID GetLIB_ID() const override { return m_fpid; }
440 wxString GetName() const override { return m_fpid.GetLibItemName(); }
441 wxString GetLibNickname() const override { return m_fpid.GetLibNickname(); }
442 wxString GetDesc() override { return GetLibDescription(); }
443 int GetPinCount() override { return static_cast<int>( GetNumberedPadCount() ); }
444 std::vector<SEARCH_TERM>& GetSearchTerms() override;
445
446 wxString GetLibDescription() const { return m_libDescription; }
447 void SetLibDescription( const wxString& aDesc ) { m_libDescription = aDesc; }
448
449 wxString GetKeywords() const { return m_keywords; }
450 void SetKeywords( const wxString& aKeywords ) { m_keywords = aKeywords; }
451
452 const KIID_PATH& GetPath() const { return m_path; }
453 void SetPath( const KIID_PATH& aPath ) { m_path = aPath; }
454
455 wxString GetSheetname() const { return m_sheetname; }
456 void SetSheetname( const wxString& aSheetname ) { m_sheetname = aSheetname; }
457
458 wxString GetSheetfile() const { return m_sheetfile; }
459 void SetSheetfile( const wxString& aSheetfile ) { m_sheetfile = aSheetfile; }
460
461 wxString GetFilters() const { return m_filters; }
462 void SetFilters( const wxString& aFilters ) { m_filters = aFilters; }
463
464 std::optional<int> GetLocalClearance() const { return m_clearance; }
465 void SetLocalClearance( std::optional<int> aClearance ) { m_clearance = aClearance; }
466
467 std::optional<int> GetLocalSolderMaskMargin() const { return m_solderMaskMargin; }
468 void SetLocalSolderMaskMargin( std::optional<int> aMargin ) { m_solderMaskMargin = aMargin; }
469
470 std::optional<int> GetLocalSolderPasteMargin() const { return m_solderPasteMargin; }
471 void SetLocalSolderPasteMargin( std::optional<int> aMargin ) { m_solderPasteMargin = aMargin; }
472
473 std::optional<double> GetLocalSolderPasteMarginRatio() const { return m_solderPasteMarginRatio; }
474 void SetLocalSolderPasteMarginRatio( std::optional<double> aRatio ) { m_solderPasteMarginRatio = aRatio; }
475
478
485 void SetStackupMode( FOOTPRINT_STACKUP aMode );
487
492 void SetStackupLayers( LSET aLayers );
493 const LSET& GetStackupLayers() const { return m_stackupLayers; }
494
495 int GetAttributes() const { return m_attributes; }
496 void SetAttributes( int aAttributes ) { m_attributes = aAttributes; }
497
499 void SetAllowMissingCourtyard( bool aAllow ) { m_allowMissingCourtyard = aAllow; }
500
502 void SetAllowSolderMaskBridges( bool aAllow ) { m_allowSolderMaskBridges = aAllow; }
503
504 void SetFlag( int aFlag ) { m_arflag = aFlag; }
505 void IncrementFlag() { m_arflag += 1; }
506 int GetFlag() const { return m_arflag; }
507
508 bool IsNetTie() const
509 {
510 for( const wxString& group : m_netTiePadGroups )
511 {
512 if( !group.IsEmpty() )
513 return true;
514 }
515
516 return false;
517 }
518
519 std::optional<int> GetLocalClearance( wxString* aSource ) const
520 {
521 if( m_clearance.has_value() && aSource )
522 *aSource = wxString::Format( _( "footprint %s" ), GetReference() );
523
524 return m_clearance;
525 }
526
533 std::optional<int> GetClearanceOverrides( wxString* aSource ) const
534 {
535 return GetLocalClearance( aSource );
536 }
537
539 {
541 *aSource = wxString::Format( _( "footprint %s" ), GetReference() );
542
543 return m_zoneConnection;
544 }
545
550 const std::vector<wxString>& GetNetTiePadGroups() const { return m_netTiePadGroups; }
551
553 {
554 m_netTiePadGroups.clear();
555 }
556
557 void AddNetTiePadGroup( const wxString& aGroup )
558 {
559 m_netTiePadGroups.emplace_back( aGroup );
560 }
561
566 std::map<wxString, int> MapPadNumbersToNetTieGroups() const;
567
571 std::vector<PAD*> GetNetTiePads( PAD* aPad ) const;
572
578 int GetLikelyAttribute() const;
579
580 void Move( const VECTOR2I& aMoveVector ) override;
581
582 void Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle ) override;
583
584 void Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection ) override;
585
597 void MoveAnchorPosition( const VECTOR2I& aMoveVector );
598
602 bool IsFlipped() const { return GetLayer() == B_Cu; }
603
608 PCB_LAYER_ID GetSide() const;
609
613 bool IsOnLayer( PCB_LAYER_ID aLayer ) const override;
614
615// m_footprintStatus bits:
616#define FP_is_LOCKED 0x01
617#define FP_is_PLACED 0x02
618#define FP_to_PLACE 0x04
619#define FP_PADS_are_LOCKED 0x08
620
621
622 bool IsLocked() const override
623 {
624 return ( m_fpStatus & FP_is_LOCKED ) != 0;
625 }
626
632 void SetLocked( bool isLocked ) override
633 {
634 if( isLocked )
636 else
638 }
639
643 bool IsConflicting() const;
644
645 bool IsPlaced() const { return m_fpStatus & FP_is_PLACED; }
646 void SetIsPlaced( bool isPlaced )
647 {
648 if( isPlaced )
650 else
652 }
653
654 bool NeedsPlaced() const { return m_fpStatus & FP_to_PLACE; }
655 void SetNeedsPlaced( bool needsPlaced )
656 {
657 if( needsPlaced )
659 else
661 }
662
664
675 void CheckFootprintAttributes( const std::function<void( const wxString& )>& aErrorHandler );
676
683 void CheckPads( UNITS_PROVIDER* aUnitsProvider,
684 const std::function<void( const PAD*, int, const wxString& )>& aErrorHandler );
685
691 void CheckShortingPads( const std::function<void( const PAD*, const PAD*, int aErrorCode,
692 const VECTOR2I& )>& aErrorHandler );
693
700 void CheckNetTies( const std::function<void( const BOARD_ITEM* aItem,
701 const BOARD_ITEM* bItem,
702 const BOARD_ITEM* cItem,
703 const VECTOR2I& )>& aErrorHandler );
704
711 void CheckNetTiePadGroups( const std::function<void( const wxString& )>& aErrorHandler );
712
713 void CheckClippedSilk( const std::function<void( BOARD_ITEM* aItemA,
714 BOARD_ITEM* aItemB,
715 const VECTOR2I& aPt )>& aErrorHandler );
719 void BuildNetTieCache();
720
724 const std::set<int>& GetNetTieCache( const BOARD_ITEM* aItem ) const
725 {
726 static const std::set<int> emptySet;
727
728 auto it = m_netTieCache.find( aItem );
729
730 if( it == m_netTieCache.end() )
731 return emptySet;
732
733 return it->second;
734 }
735
748 void TransformPadsToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
749 int aMaxError, ERROR_LOC aErrorLoc ) const;
750
765 void TransformFPShapesToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
766 int aError, ERROR_LOC aErrorLoc,
767 bool aIncludeText = true,
768 bool aIncludeShapes = true,
769 bool aIncludePrivateItems = false ) const;
770
774 void TransformFPTextToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
775 int aError, ERROR_LOC aErrorLoc ) const
776 {
777 TransformFPShapesToPolySet( aBuffer, aLayer, aClearance, aError, aErrorLoc, true, false );
778 }
779
783 void GetContextualTextVars( wxArrayString* aVars ) const;
784
790 bool ResolveTextVar( wxString* token, int aDepth = 0 ) const;
791
793 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
794
795 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
796
797 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
798
808 bool HitTestAccurate( const VECTOR2I& aPosition, int aAccuracy = 0 ) const;
809
810 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
811
812 bool HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const override;
813
822 bool HitTestOnLayer( const VECTOR2I& aPosition, PCB_LAYER_ID aLayer, int aAccuracy = 0 ) const;
823
824 bool HitTestOnLayer( const BOX2I& aRect, bool aContained, PCB_LAYER_ID aLayer, int aAccuracy = 0 ) const;
825
829 const wxString& GetReference() const { return Reference().GetText(); }
830
835 void SetReference( const wxString& aReference ) { Reference().SetText( aReference ); }
836
837 // Property system doesn't like const references
838 wxString GetReferenceAsString() const
839 {
840 return GetReference();
841 }
842
846 void IncrementReference( int aDelta );
847
851 const wxString& GetValue() const { return Value().GetText(); }
852
856 void SetValue( const wxString& aValue ) { Value().SetText( aValue ); }
857
858 // Property system doesn't like const references
859 wxString GetValueAsString() const
860 {
861 return GetValue();
862 }
863
867
869 const PCB_FIELD& Value() const { return *GetField( FIELD_T::VALUE ); }
870 const PCB_FIELD& Reference() const { return *GetField( FIELD_T::REFERENCE ); }
871
872 //-----<Fields>-----------------------------------------------------------
873
878 PCB_FIELD* GetField( FIELD_T aFieldType );
879 const PCB_FIELD* GetField( FIELD_T aFieldNdx ) const;
880
888 PCB_FIELD* GetField( const wxString& aFieldName ) const;
889
890 bool HasField( const wxString& aFieldName ) const;
891
898 void GetFields( std::vector<PCB_FIELD*>& aVector, bool aVisibleOnly ) const;
899
903 const std::deque<PCB_FIELD*>& GetFields() const { return m_fields; }
904 std::deque<PCB_FIELD*>& GetFields() { return m_fields; }
905
909 int GetNextFieldOrdinal() const;
910
918 void ApplyDefaultSettings( const BOARD& board, bool aStyleFields, bool aStyleText,
919 bool aStyleShapes, bool aStyleDimensions, bool aStyleBarcodes );
920
922 {
923 wxString m_unitName; // e.g. A
924 std::vector<wxString> m_pins; // pin numbers in this unit
925 };
926
927 void SetUnitInfo( const std::vector<FP_UNIT_INFO>& aUnits ) { m_unitInfo = aUnits; }
928 const std::vector<FP_UNIT_INFO>& GetUnitInfo() const { return m_unitInfo; }
929
930 bool IsBoardOnly() const { return m_attributes & FP_BOARD_ONLY; }
931 void SetBoardOnly( bool aIsBoardOnly = true )
932 {
933 if( aIsBoardOnly )
935 else
937 }
938
940 void SetExcludedFromPosFiles( bool aExclude = true )
941 {
942 if( aExclude )
944 else
946 }
947
949 void SetExcludedFromBOM( bool aExclude = true )
950 {
951 if( aExclude )
953 else
955 }
956
957 bool IsDNP() const { return m_attributes & FP_DNP; }
958 void SetDNP( bool aDNP = true )
959 {
960 if( aDNP )
962 else
964 }
965
966 // =====================================================================
967 // Variant Support
968 // =====================================================================
969
975 const FOOTPRINT_VARIANT* GetVariant( const wxString& aVariantName ) const;
976
982 FOOTPRINT_VARIANT* GetVariant( const wxString& aVariantName );
983
988 void SetVariant( const FOOTPRINT_VARIANT& aVariant );
989
995 FOOTPRINT_VARIANT* AddVariant( const wxString& aVariantName );
996
1001 void DeleteVariant( const wxString& aVariantName );
1002
1008 void RenameVariant( const wxString& aOldName, const wxString& aNewName );
1009
1015 bool HasVariant( const wxString& aVariantName ) const;
1016
1022
1031 bool GetDNPForVariant( const wxString& aVariantName ) const;
1032
1041 bool GetExcludedFromBOMForVariant( const wxString& aVariantName ) const;
1042
1051 bool GetExcludedFromPosFilesForVariant( const wxString& aVariantName ) const;
1052
1062 wxString GetFieldValueForVariant( const wxString& aVariantName, const wxString& aFieldName ) const;
1063
1064 void SetFileFormatVersionAtLoad( int aVersion ) { m_fileFormatVersionAtLoad = aVersion; }
1066
1076 PAD* FindPadByNumber( const wxString& aPadNumber, PAD* aSearchAfterMe = nullptr ) const;
1077
1078 PAD* FindPadByUuid( const KIID& aUuid ) const;
1079
1087 PAD* GetPad( const VECTOR2I& aPosition, const LSET& aLayerMask = LSET::AllLayersMask() );
1088
1089 std::vector<const PAD*> GetPads( const wxString& aPadNumber, const PAD* aIgnore = nullptr ) const;
1090
1098 unsigned GetPadCount( INCLUDE_NPTH_T aIncludeNPTH = INCLUDE_NPTH_T(INCLUDE_NPTH) ) const;
1099
1110 unsigned GetUniquePadCount( INCLUDE_NPTH_T aIncludeNPTH = INCLUDE_NPTH_T(INCLUDE_NPTH) ) const;
1111
1115 std::set<wxString>
1117
1126 unsigned GetNumberedPadCount() const;
1127
1135 wxString GetNextPadNumber( const wxString& aLastPadName ) const;
1136
1139
1144 std::vector<std::set<wxString>>& JumperPadGroups() { return m_jumperPadGroups; }
1145 const std::vector<std::set<wxString>>& JumperPadGroups() const { return m_jumperPadGroups; }
1146
1148 std::optional<const std::set<wxString>> GetJumperPadGroup( const wxString& aPadNumber ) const;
1149
1153 void AutoPositionFields();
1154
1159 wxString GetTypeName() const;
1160
1161 double GetArea( int aPadding = 0 ) const;
1162
1163 KIID GetLink() const { return m_link; }
1164 void SetLink( const KIID& aLink ) { m_link = aLink; }
1165
1166 BOARD_ITEM* Duplicate( bool addToParentGroup, BOARD_COMMIT* aCommit = nullptr ) const override;
1167
1173 BOARD_ITEM* DuplicateItem( bool addToParentGroup, BOARD_COMMIT* aCommit, const BOARD_ITEM* aItem,
1174 bool addToFootprint = false );
1175
1181 void Add3DModel( FP_3DMODEL* a3DModel );
1182
1183 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
1184 const std::vector<KICAD_T>& aScanTypes ) override;
1185
1186 wxString GetClass() const override
1187 {
1188 return wxT( "FOOTPRINT" );
1189 }
1190
1191 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
1192
1193 wxString DisambiguateItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
1194
1195 BITMAPS GetMenuImage() const override;
1196
1197 EDA_ITEM* Clone() const override;
1198
1200 void RunOnChildren( const std::function<void( BOARD_ITEM* )>& aFunction, RECURSE_MODE aMode ) const override;
1201
1202 virtual std::vector<int> ViewGetLayers() const override;
1203
1204 double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
1205
1206 virtual const BOX2I ViewBBox() const override;
1207
1215 static bool IsLibNameValid( const wxString& aName );
1216
1226 static const wxChar* StringLibNameInvalidChars( bool aUserReadable );
1227
1231 bool FootprintNeedsUpdate( const FOOTPRINT* aLibFP, int aCompareFlags = 0,
1232 REPORTER* aReporter = nullptr );
1233
1248 void SetInitialComments( wxArrayString* aInitialComments )
1249 {
1250 delete m_initial_comments;
1251 m_initial_comments = aInitialComments;
1252 }
1253
1260 double CoverageRatio( const GENERAL_COLLECTOR& aCollector ) const;
1261
1262 static double GetCoverageArea( const BOARD_ITEM* aItem, const GENERAL_COLLECTOR& aCollector );
1263
1265 const wxArrayString* GetInitialComments() const { return m_initial_comments; }
1266
1272 const SHAPE_POLY_SET& GetCourtyard( PCB_LAYER_ID aLayer ) const;
1273
1279 const SHAPE_POLY_SET& GetCachedCourtyard( PCB_LAYER_ID aLayer ) const;
1280
1287 void BuildCourtyardCaches( OUTLINE_ERROR_HANDLER* aErrorHandler = nullptr );
1288
1289 // @copydoc BOARD_ITEM::GetEffectiveShape
1290 std::shared_ptr<SHAPE> GetEffectiveShape( PCB_LAYER_ID aLayer = UNDEFINED_LAYER,
1291 FLASHING aFlash = FLASHING::DEFAULT ) const override;
1292
1294 {
1295 return static_cast<EMBEDDED_FILES*>( this );
1296 }
1297
1299 {
1300 return static_cast<const EMBEDDED_FILES*>( this );
1301 }
1302
1306 std::set<KIFONT::OUTLINE_FONT*> GetFonts() const override;
1307
1308 void EmbedFonts() override;
1309
1310 double Similarity( const BOARD_ITEM& aOther ) const override;
1311
1313 void SetStaticComponentClass( const COMPONENT_CLASS* aClass ) const;
1314
1317
1319 const COMPONENT_CLASS* GetComponentClass() const;
1320
1322 wxString GetComponentClassAsString() const;
1323
1325 void RecomputeComponentClass() const;
1326
1328 void InvalidateComponentClassCache() const;
1329
1336 void SetTransientComponentClassNames( const std::unordered_set<wxString>& classNames )
1337 {
1338 m_transientComponentClassNames = classNames;
1339 }
1340
1342 const std::unordered_set<wxString>& GetTransientComponentClassNames()
1343 {
1345 }
1346
1349
1351 void ResolveComponentClassNames( BOARD* aBoard,
1352 const std::unordered_set<wxString>& aComponentClassNames );
1353
1355 void FixUpPadsForBoard( BOARD* aBoard );
1356
1357 bool operator==( const BOARD_ITEM& aOther ) const override;
1358 bool operator==( const FOOTPRINT& aOther ) const;
1359
1360#if defined(DEBUG)
1361 virtual void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
1362#endif
1363
1365 {
1366 bool operator()( const BOARD_ITEM* itemA, const BOARD_ITEM* itemB ) const;
1367 };
1368
1370 {
1371 bool operator()( const PAD* aFirst, const PAD* aSecond ) const;
1372 };
1373 // TODO(JE) padstacks -- this code isn't used anywhere though
1374#if 0
1375 struct cmp_padstack
1376 {
1377 bool operator()( const PAD* aFirst, const PAD* aSecond ) const;
1378 };
1379#endif
1381 {
1382 bool operator()( const ZONE* aFirst, const ZONE* aSecond ) const;
1383 };
1384
1385protected:
1386 virtual void swapData( BOARD_ITEM* aImage ) override;
1387
1389
1390private:
1391 std::deque<PCB_FIELD*> m_fields; // Fields, mapped by name, owned by pointer
1392 std::deque<BOARD_ITEM*> m_drawings; // Drawings in the footprint, owned by pointer
1393 std::deque<PAD*> m_pads; // Pads, owned by pointer
1394 std::vector<ZONE*> m_zones; // Rule area zones, owned by pointer
1395 std::deque<PCB_GROUP*> m_groups; // Groups, owned by pointer
1396 std::deque<PCB_POINT*> m_points; // Points, owned by pointer
1397
1398 EDA_ANGLE m_orient; // Orientation
1399 VECTOR2I m_pos; // Position of footprint on the board in internal units.
1400 LIB_ID m_fpid; // The #LIB_ID of the FOOTPRINT.
1401 int m_attributes; // Flag bits (see FOOTPRINT_ATTR_T)
1402 int m_fpStatus; // For autoplace: flags (LOCKED, FIELDS_AUTOPLACED)
1404
1407
1408 // Bounding box caching strategy:
1409 // While we attempt to notice the low-hanging fruit operations and update the bounding boxes
1410 // accordingly, we rely mostly on a "if anything changed then the caches are stale" approach.
1411 // We implement this by having PCB_BASE_FRAME's OnModify() method increment an operation
1412 // counter, and storing that as a timestamp for the various caches.
1413 // This means caches will get regenerated often -- but still far less often than if we had no
1414 // caches at all. The principal opitmization would be to change to dirty flag and make sure
1415 // that any edit that could affect the bounding boxes (including edits to the footprint
1416 // children) marked the bounding boxes dirty. It would definitely be faster -- but also more
1417 // fragile.
1418 mutable std::mutex m_geometry_cache_mutex;
1419 mutable std::unique_ptr<FOOTPRINT_GEOMETRY_CACHE_DATA> m_geometry_cache;
1420
1421 // A list of pad groups, each of which is allowed to short nets within their group.
1422 // A pad group is a comma-separated list of pad numbers.
1423 std::vector<wxString> m_netTiePadGroups;
1424
1425 // A list of 1:N footprint item to allowed net numbers
1426 std::map<const BOARD_ITEM*, std::set<int>> m_netTieCache;
1427
1430 std::vector<std::set<wxString>> m_jumperPadGroups;
1431
1435
1438
1439 // Optional overrides
1441 std::optional<int> m_clearance;
1442 std::optional<int> m_solderMaskMargin; // Solder mask margin
1443 std::optional<int> m_solderPasteMargin; // Solder paste margin absolute value
1444 std::optional<double> m_solderPasteMarginRatio; // Solder mask margin ratio of pad size
1445 // The final margin is the sum of these 2 values
1446
1447 LSET m_stackupLayers; // Layers in the stackup
1448 FOOTPRINT_STACKUP m_stackupMode; // Stackup mode for this footprint
1449 LSET m_privateLayers; // Layers visible only in the footprint editor
1450
1451 wxString m_libDescription; // File name and path for documentation file.
1452 wxString m_keywords; // Search keywords to find footprint in library.
1453 KIID_PATH m_path; // Path to associated symbol ([sheetUUID, .., symbolUUID]).
1454 wxString m_sheetname; // Name of the sheet containing the symbol for this footprint
1455 wxString m_sheetfile; // File of the sheet containing the symbol for this footprint
1456 wxString m_filters; // Footprint filters from symbol
1458 int m_arflag; // Use to trace ratsnest and auto routing.
1459 KIID m_link; // Temporary logical link used during editing
1460
1461 std::vector<FP_3DMODEL> m_3D_Drawings; // 3D models.
1462
1463 std::unique_ptr<EXTRUDED_3D_BODY> m_extrudedBody; // nullptr = disabled
1464
1465 wxArrayString* m_initial_comments; // s-expression comments in the footprint,
1466 // lazily allocated only if needed for speed
1467
1468 mutable std::unique_ptr<FOOTPRINT_COURTYARD_CACHE_DATA> m_courtyard_cache;
1469 mutable std::mutex m_courtyard_cache_mutex;
1470
1471 std::unordered_set<wxString> m_transientComponentClassNames;
1472 std::unique_ptr<COMPONENT_CLASS_CACHE_PROXY> m_componentClassCacheProxy;
1473
1474 // Optional unit mapping information for multi-unit symbols
1475 std::vector<FP_UNIT_INFO> m_unitInfo;
1476
1477 std::vector<SEARCH_TERM> m_searchTerms;
1478};
1479
1480#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:84
BOARD_ITEM(BOARD_ITEM *aParent, KICAD_T idtype, PCB_LAYER_ID aLayer=F_Cu)
Definition board_item.h:86
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
Definition board_item.h:268
friend class BOARD
Definition board_item.h:494
Information pertinent to a Pcbnew printed circuit board.
Definition board.h:323
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:100
KICAD_T Type() const
Returns the type of object.
Definition eda_item.h:112
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
Definition eda_item.cpp:41
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition eda_text.h:114
virtual void SetText(const wxString &aText)
Definition eda_text.cpp:269
EMBEDDED_FILES()=default
bool operator==(const EXTRUDED_3D_BODY &aOther) const
Definition footprint.h:130
KIGFX::COLOR4D m_color
Definition footprint.h:110
VECTOR3D m_offset
Definition footprint.h:116
EXTRUDED_3D_BODY()=default
PCB_LAYER_ID m_layer
Definition footprint.h:109
static KIGFX::COLOR4D GetDefaultColor(EXTRUSION_MATERIAL aMaterial)
Definition footprint.h:118
VECTOR3D m_rotation
Definition footprint.h:115
static uint32_t PackColorKey(const KIGFX::COLOR4D &aColor)
Definition footprint.h:137
VECTOR3D m_scale
Definition footprint.h:114
EXTRUSION_MATERIAL m_material
Definition footprint.h:111
Variant information for a footprint.
Definition footprint.h:217
wxString GetName() const
Definition footprint.h:227
FOOTPRINT_VARIANT(const wxString &aName=wxEmptyString)
Definition footprint.h:219
bool HasFieldValue(const wxString &aFieldName) const
Definition footprint.h:264
bool m_excludedFromPosFiles
Definition footprint.h:284
void SetExcludedFromPosFiles(bool aExclude)
Definition footprint.h:237
wxString GetFieldValue(const wxString &aFieldName) const
Get a field value override for this variant.
Definition footprint.h:244
void SetName(const wxString &aName)
Definition footprint.h:228
const std::map< wxString, wxString > & GetFields() const
Definition footprint.h:269
bool GetExcludedFromBOM() const
Definition footprint.h:233
bool operator==(const FOOTPRINT_VARIANT &aOther) const
Definition footprint.h:271
void SetDNP(bool aDNP)
Definition footprint.h:231
bool GetExcludedFromPosFiles() const
Definition footprint.h:236
bool GetDNP() const
Definition footprint.h:230
std::map< wxString, wxString > m_fields
Field value overrides for this variant.
Definition footprint.h:285
void SetFieldValue(const wxString &aFieldName, const wxString &aValue)
Set a field value override for this variant.
Definition footprint.h:259
void SetExcludedFromBOM(bool aExclude)
Definition footprint.h:234
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:1137
const CASE_INSENSITIVE_MAP< FOOTPRINT_VARIANT > & GetVariants() const
Get all variants.
Definition footprint.h:1021
std::optional< int > GetClearanceOverrides(wxString *aSource) const
Return any local clearance overrides set in the "classic" (ie: pre-rule) system.
Definition footprint.h:533
void EmbedFonts() override
bool AllowSolderMaskBridges() const
Definition footprint.h:501
void SetPosition(const VECTOR2I &aPos) override
void SetFPID(const LIB_ID &aFPID)
Definition footprint.h:430
LIB_ID m_fpid
Definition footprint.h:1400
wxString GetLibDescription() const
Definition footprint.h:446
ZONE_CONNECTION GetLocalZoneConnection() const
Definition footprint.h:477
void SetLink(const KIID &aLink)
Definition footprint.h:1164
KIID_PATH m_path
Definition footprint.h:1453
std::deque< BOARD_ITEM * > m_drawings
Definition footprint.h:1392
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:930
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:378
bool IsDNP() const
Definition footprint.h:957
void SetLocked(bool isLocked) override
Set the #MODULE_is_LOCKED bit in the m_ModuleStatus.
Definition footprint.h:632
VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Definition footprint.h:375
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:408
ZONES & Zones()
Definition footprint.h:383
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:1396
void CheckClippedSilk(const std::function< void(BOARD_ITEM *aItemA, BOARD_ITEM *aItemB, const VECTOR2I &aPt)> &aErrorHandler)
std::unique_ptr< EXTRUDED_3D_BODY > m_extrudedBody
Definition footprint.h:1463
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:646
ZONE_CONNECTION m_zoneConnection
Definition footprint.h:1440
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this footprint.
PCB_POINTS & Points()
Definition footprint.h:389
static double GetCoverageArea(const BOARD_ITEM *aItem, const GENERAL_COLLECTOR &aCollector)
bool IsExcludedFromBOM() const
Definition footprint.h:948
void SetOrientation(const EDA_ANGLE &aNewAngle)
void SetFlag(int aFlag)
Definition footprint.h:504
std::optional< double > m_solderPasteMarginRatio
Definition footprint.h:1444
void SetDNP(bool aDNP=true)
Definition footprint.h:958
void SetAllowSolderMaskBridges(bool aAllow)
Definition footprint.h:502
void RecomputeComponentClass() const
Forces immediate recalculation of the component class for this footprint.
std::vector< ZONE * > m_zones
Definition footprint.h:1394
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:474
std::vector< SEARCH_TERM > & GetSearchTerms() override
void IncrementFlag()
Definition footprint.h:505
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:1441
bool m_duplicatePadNumbersAreJumpers
Flag that this footprint should automatically treat sets of two or more pads with the same number as ...
Definition footprint.h:1434
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:949
wxString GetSheetname() const
Definition footprint.h:455
int m_fpStatus
Definition footprint.h:1402
void SetPath(const KIID_PATH &aPath)
Definition footprint.h:453
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:462
void SetKeywords(const wxString &aKeywords)
Definition footprint.h:450
void SetStaticComponentClass(const COMPONENT_CLASS *aClass) const
Sets the component class object pointer for this footprint.
const DRAWINGS & GraphicalItems() const
Definition footprint.h:381
wxString DisambiguateItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
void SetInitialComments(wxArrayString *aInitialComments)
Take ownership of caller's heap allocated aInitialComments block.
Definition footprint.h:1248
int m_attributes
Definition footprint.h:1401
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:441
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:1461
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:1436
const std::vector< FP_UNIT_INFO > & GetUnitInfo() const
Definition footprint.h:928
const EXTRUDED_3D_BODY * GetExtrudedBody() const
Definition footprint.h:398
std::unordered_set< wxString > m_transientComponentClassNames
Definition footprint.h:1471
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:496
void SetSheetfile(const wxString &aSheetfile)
Definition footprint.h:459
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
std::optional< int > GetLocalSolderPasteMargin() const
Definition footprint.h:470
std::unique_ptr< COMPONENT_CLASS_CACHE_PROXY > m_componentClassCacheProxy
Definition footprint.h:1472
wxArrayString * m_initial_comments
Definition footprint.h:1465
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:439
std::deque< PCB_FIELD * > m_fields
Definition footprint.h:1391
std::mutex m_geometry_cache_mutex
Definition footprint.h:1418
PCB_FIELD & Value()
read/write accessors:
Definition footprint.h:865
const EMBEDDED_FILES * GetEmbeddedFiles() const
Definition footprint.h:1298
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
std::optional< int > m_solderPasteMargin
Definition footprint.h:1443
const std::vector< std::set< wxString > > & JumperPadGroups() const
Definition footprint.h:1145
void SetFileFormatVersionAtLoad(int aVersion)
Definition footprint.h:1064
std::mutex m_courtyard_cache_mutex
Definition footprint.h:1469
void SetExcludedFromPosFiles(bool aExclude=true)
Definition footprint.h:940
void SetOrientationDegrees(double aOrientation)
Definition footprint.h:420
bool HasExtrudedBody() const
Definition footprint.h:397
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:464
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:774
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:1144
void SetDuplicatePadNumbersAreJumpers(bool aEnabled)
Definition footprint.h:1138
bool m_allowSolderMaskBridges
Definition footprint.h:1437
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.
void ClearExtrudedBody()
Definition footprint.h:402
double GetOrientationDegrees() const
Definition footprint.h:424
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:377
void ResolveComponentClassNames(BOARD *aBoard, const std::unordered_set< wxString > &aComponentClassNames)
Resolves a set of component class names to this footprint's actual component class.
EXTRUDED_3D_BODY & EnsureExtrudedBody()
wxString GetDesc() override
Definition footprint.h:442
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
int GetAttributes() const
Definition footprint.h:495
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:519
const COMPONENT_CLASS * GetComponentClass() const
Returns the component class for this footprint.
void SetLocalZoneConnection(ZONE_CONNECTION aType)
Definition footprint.h:476
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:84
void ClearNetTiePadGroups()
Definition footprint.h:552
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
Definition footprint.h:417
LSET GetPrivateLayers() const
Definition footprint.h:317
void SetExtrudedBody(std::unique_ptr< EXTRUDED_3D_BODY > aBody)
wxString GetFPIDAsString() const
Definition footprint.h:435
CASE_INSENSITIVE_MAP< FOOTPRINT_VARIANT > m_variants
Variant data for this footprint, keyed by variant name.
Definition footprint.h:1406
wxString GetValueAsString() const
Definition footprint.h:859
bool AllowMissingCourtyard() const
Definition footprint.h:498
void DeleteVariant(const wxString &aVariantName)
Delete a variant by name.
const ZONES & Zones() const
Definition footprint.h:384
wxString GetComponentClassAsString() const
Used for display in the properties panel.
bool IsFlipped() const
Definition footprint.h:602
wxString GetSheetfile() const
Definition footprint.h:458
int GetPinCount() override
The pin count for symbols or the unique pad count for footprints.
Definition footprint.h:443
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:654
const std::vector< wxString > & GetNetTiePadGroups() const
Definition footprint.h:550
const LIB_ID & GetFPID() const
Definition footprint.h:429
const std::unordered_set< wxString > & GetTransientComponentClassNames()
Gets the transient component class names.
Definition footprint.h:1342
void SetReference(const wxString &aReference)
Definition footprint.h:835
bool IsLocked() const override
Definition footprint.h:622
std::vector< FP_UNIT_INFO > m_unitInfo
Definition footprint.h:1475
const GROUPS & Groups() const
Definition footprint.h:387
bool IsExcludedFromPosFiles() const
Definition footprint.h:939
void SetLayerAndFlip(PCB_LAYER_ID aLayer)
Used as Layer property setter – performs a flip if necessary to set the footprint layer.
unsigned GetNumberedPadCount() const
Return the number of unique pads whose pad number represents an electrical pin.
wxString GetFieldValueForVariant(const wxString &aVariantName, const wxString &aFieldName) const
Get a field value for a specific variant.
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:557
bool LegacyPadsLocked() const
Definition footprint.h:663
virtual const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
LSET m_privateLayers
Definition footprint.h:1449
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:724
const LSET & GetStackupLayers() const
Definition footprint.h:493
const std::deque< PCB_FIELD * > & GetFields() const
Return a reference to the deque holding the footprint's fields.
Definition footprint.h:903
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:1395
void Move(const VECTOR2I &aMoveVector) override
Move this object.
static bool ClassOf(const EDA_ITEM *aItem)
Definition footprint.h:309
wxString m_libDescription
Definition footprint.h:1451
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:1399
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:1348
ZONE_CONNECTION GetZoneConnectionOverrides(wxString *aSource) const
Definition footprint.h:538
std::vector< wxString > m_netTiePadGroups
Definition footprint.h:1423
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:856
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:1448
PCB_FIELD & Reference()
Definition footprint.h:866
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:1430
const PCB_FIELD & Value() const
The const versions to keep the compiler happy.
Definition footprint.h:869
wxString GetReferenceAsString() const
Definition footprint.h:838
wxString m_sheetfile
Definition footprint.h:1455
PAD * FindPadByUuid(const KIID &aUuid) const
void GetContextualTextVars(wxArrayString *aVars) const
Return the list of system text vars for this footprint.
std::optional< int > m_solderMaskMargin
Definition footprint.h:1442
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:927
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:1452
const PCB_FIELD & Reference() const
Definition footprint.h:870
void SetTransientComponentClassNames(const std::unordered_set< wxString > &classNames)
Sets the transient component class names.
Definition footprint.h:1336
void ClearAllNets()
Clear (i.e.
std::deque< PAD * > m_pads
Definition footprint.h:1393
bool HasThroughHolePads() const
const PCB_POINTS & Points() const
Definition footprint.h:390
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:1398
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:508
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:1186
void SetVariant(const FOOTPRINT_VARIANT &aVariant)
Add or update a variant.
std::unique_ptr< FOOTPRINT_COURTYARD_CACHE_DATA > m_courtyard_cache
Definition footprint.h:1468
void IncrementReference(int aDelta)
Bump the current reference by aDelta.
int GetFileFormatVersionAtLoad() const
Definition footprint.h:1065
std::optional< double > GetLocalSolderPasteMarginRatio() const
Definition footprint.h:473
EXTRUDED_3D_BODY * GetExtrudedBody()
Definition footprint.h:399
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
KIID m_link
Definition footprint.h:1459
GROUPS & Groups()
Definition footprint.h:386
wxString GetFilters() const
Definition footprint.h:461
void SetSheetname(const wxString &aSheetname)
Definition footprint.h:456
const wxArrayString * GetInitialComments() const
Return the initial comments block or NULL if none, without transfer of ownership.
Definition footprint.h:1265
KIID GetLink() const
Definition footprint.h:1163
void SetAllowMissingCourtyard(bool aAllow)
Definition footprint.h:499
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:394
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:904
wxString GetName() const override
Definition footprint.h:440
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:447
bool TextOnly() const
const wxString & GetValue() const
Definition footprint.h:851
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:655
wxString m_filters
Definition footprint.h:1456
const wxString & GetReference() const
Definition footprint.h:829
std::unique_ptr< FOOTPRINT_GEOMETRY_CACHE_DATA > m_geometry_cache
Definition footprint.h:1419
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:436
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:931
const std::vector< FP_3DMODEL > & Models() const
Definition footprint.h:395
void SetLocalSolderMaskMargin(std::optional< int > aMargin)
Definition footprint.h:468
timestamp_t m_lastEditTime
Definition footprint.h:1457
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:506
std::map< const BOARD_ITEM *, std::set< int > > m_netTieCache
Definition footprint.h:1426
wxString m_sheetname
Definition footprint.h:1454
LSET m_stackupLayers
Definition footprint.h:1447
int m_fileFormatVersionAtLoad
Definition footprint.h:1403
void SetLocalClearance(std::optional< int > aClearance)
Definition footprint.h:465
void SetPrivateLayers(const LSET &aLayers)
Adds an item to the container.
Definition footprint.h:318
const KIID_PATH & GetPath() const
Definition footprint.h:452
std::optional< int > GetLocalSolderMaskMargin() const
Definition footprint.h:467
void SetLocalSolderPasteMargin(std::optional< int > aMargin)
Definition footprint.h:471
wxString GetKeywords() const
Definition footprint.h:449
bool operator==(const BOARD_ITEM &aOther) const override
EMBEDDED_FILES * GetEmbeddedFiles() override
Definition footprint.h:1293
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:486
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:645
bool HasVariant(const wxString &aVariantName) const
Check if a variant exists.
VECTOR2I GetPosition() const override
Definition footprint.h:405
DRAWINGS & GraphicalItems()
Definition footprint.h:380
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.
std::vector< SEARCH_TERM > m_searchTerms
Definition footprint.h:1477
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:178
VECTOR3D m_Offset
3D model offset (mm)
Definition footprint.h:173
double m_Opacity
Definition footprint.h:174
VECTOR3D m_Rotation
3D model rotation (degrees)
Definition footprint.h:172
VECTOR3D m_Scale
3D model scaling factor (dimensionless)
Definition footprint.h:171
wxString m_Filename
The 3D shape filename in 3D library.
Definition footprint.h:175
bool m_Show
Include model in rendering.
Definition footprint.h:176
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.
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:105
double r
Red component.
Definition color4d.h:393
double g
Green component.
Definition color4d.h:394
double a
Alpha component.
Definition color4d.h:396
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:402
double b
Blue component.
Definition color4d.h:395
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition view.h:67
Definition kiid.h:48
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:75
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:128
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:52
INSPECT_RESULT
Definition eda_item.h:46
const INSPECTOR_FUNC & INSPECTOR
std::function passed to nested users by ref, avoids copying std::function.
Definition eda_item.h:93
EXTRUSION_MATERIAL
Definition footprint.h:95
INCLUDE_NPTH_T
Definition footprint.h:73
@ INCLUDE_NPTH
Definition footprint.h:75
@ DO_NOT_INCLUDE_NPTH
Definition footprint.h:74
FOOTPRINT_ATTR_T
The set of attributes allowed within a FOOTPRINT, using FOOTPRINT::SetAttributes() and FOOTPRINT::Get...
Definition footprint.h:84
@ FP_SMD
Definition footprint.h:86
@ FP_DNP
Definition footprint.h:91
@ FP_EXCLUDE_FROM_POS_FILES
Definition footprint.h:87
@ FP_BOARD_ONLY
Definition footprint.h:89
@ FP_EXCLUDE_FROM_BOM
Definition footprint.h:88
@ FP_JUST_ADDED
Definition footprint.h:90
@ FP_THROUGH_HOLE
Definition footprint.h:85
#define FP_is_PLACED
In autoplace: footprint automatically placed.
Definition footprint.h:617
#define FP_is_LOCKED
footprint LOCKED: no autoplace allowed
Definition footprint.h:616
#define FP_PADS_are_LOCKED
Definition footprint.h:619
FOOTPRINT_STACKUP
Definition footprint.h:145
@ EXPAND_INNER_LAYERS
The 'normal' stackup handling, where there is a single inner layer (In1) and rule areas using it expa...
Definition footprint.h:150
@ CUSTOM_LAYERS
Stackup handling where the footprint can have any number of copper layers, and objects on those layer...
Definition footprint.h:155
#define FP_to_PLACE
In autoplace: footprint waiting for autoplace.
Definition footprint.h:618
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:45
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::deque< PCB_GROUP * > GROUPS
std::deque< BOARD_ITEM * > DRAWINGS
std::deque< PCB_POINT * > PCB_POINTS
std::vector< wxString > m_pins
Definition footprint.h:924
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:83
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:687
VECTOR3< double > VECTOR3D
Definition vector3.h:230
ZONE_CONNECTION
How pads are covered by copper in zone.
Definition zones.h:47