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, see <https://www.gnu.org/licenses/>.
19 */
20
21#ifndef FOOTPRINT_H
22#define FOOTPRINT_H
23
24#include <deque>
25#include <map>
26#include <memory>
27#include <mutex>
28#include <optional>
29#include <unordered_set>
30
31#include <template_fieldnames.h>
32
34#include <board_item.h>
35#include <embedded_files.h>
36#include <jumper_group.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>
51#include <gal/color4d.h>
52
53class LINE_READER;
54class EDA_3D_CANVAS;
55class PAD;
56class BOARD;
57class COMPONENT_CLASS;
59class MSG_PANEL_ITEM;
60class SHAPE;
61class REPORTER;
64class PCB_POINT;
65
66namespace KIGFX {
67class VIEW;
68}
69
70namespace KIFONT {
71class OUTLINE_FONT;
72}
73
74namespace kiapi::board::types
75{
76class Footprint;
77}
78
85{
87 FP_SMD = 0x0002,
90 FP_BOARD_ONLY = 0x0010, // Footprint has no corresponding symbol
91 FP_JUST_ADDED = 0x0020, // Footprint just added by netlist update
92 FP_DNP = 0x0040,
94};
95
96
103
104
112
114{
115public:
116 EXTRUDED_3D_BODY() = default;
117
118 int m_height = 0;
119 int m_standoff = 0;
123 bool m_show = true;
124
125 VECTOR3D m_scale{ 1.0, 1.0, 1.0 };
126 VECTOR3D m_rotation{ 0.0, 0.0, 0.0 };
127 VECTOR3D m_offset{ 0.0, 0.0, 0.0 };
128
130 {
131 switch( aMaterial )
132 {
133 default:
134 case EXTRUSION_MATERIAL::PLASTIC: return KIGFX::COLOR4D( 0.2, 0.2, 0.2, 1.0 );
135 case EXTRUSION_MATERIAL::MATTE: return KIGFX::COLOR4D( 0.4, 0.4, 0.4, 1.0 );
136 case EXTRUSION_MATERIAL::METAL: return KIGFX::COLOR4D( 0.7, 0.7, 0.7, 1.0 );
137 case EXTRUSION_MATERIAL::COPPER: return KIGFX::COLOR4D( 0.72, 0.45, 0.2, 1.0 );
138 }
139 }
140
141 bool operator==( const EXTRUDED_3D_BODY& aOther ) const
142 {
143 return m_height == aOther.m_height && m_standoff == aOther.m_standoff && m_layer == aOther.m_layer
144 && m_color == aOther.m_color && m_material == aOther.m_material && m_scale == aOther.m_scale
145 && m_rotation == aOther.m_rotation && m_offset == aOther.m_offset && m_show == aOther.m_show;
146 }
147
148 static uint32_t PackColorKey( const KIGFX::COLOR4D& aColor )
149 {
150 return ( (uint8_t) ( aColor.r * 255 ) << 24 ) | ( (uint8_t) ( aColor.g * 255 ) << 16 )
151 | ( (uint8_t) ( aColor.b * 255 ) << 8 ) | (uint8_t) ( aColor.a * 255 );
152 }
153};
154
168
170{
171public:
173 // Initialize with sensible values
174 m_Scale { 1, 1, 1 },
175 m_Rotation { 0, 0, 0 },
176 m_Offset { 0, 0, 0 },
177 m_Opacity( 1.0 ),
178 m_Show( true )
179 {
180 }
181
185 double m_Opacity;
186 wxString m_Filename;
187 bool m_Show;
188
189 bool operator==( const FP_3DMODEL& aOther ) const
190 {
191 return m_Scale == aOther.m_Scale
192 && m_Rotation == aOther.m_Rotation
193 && m_Offset == aOther.m_Offset
194 && m_Opacity == aOther.m_Opacity
195 && m_Filename == aOther.m_Filename
196 && m_Show == aOther.m_Show;
197 }
198};
199
200
202{
203 SHAPE_POLY_SET front; // Note that a footprint can have both front and back courtyards populated.
207};
208
209
219
220
228{
229public:
230 FOOTPRINT_VARIANT( const wxString& aName = wxEmptyString ) :
231 m_name( aName ),
232 m_dnp( false ),
233 m_excludedFromBOM( false ),
234 m_excludedFromSim( false ),
236 {
237 }
238
239 wxString GetName() const { return m_name; }
240 void SetName( const wxString& aName ) { m_name = aName; }
241
242 bool GetDNP() const { return m_dnp; }
243 void SetDNP( bool aDNP ) { m_dnp = aDNP; }
244
245 bool GetExcludedFromBOM() const { return m_excludedFromBOM; }
246 void SetExcludedFromBOM( bool aExclude ) { m_excludedFromBOM = aExclude; }
247
248 bool GetExcludedFromSim() const { return m_excludedFromSim; }
249 void SetExcludedFromSim( bool aExclude ) { m_excludedFromSim = aExclude; }
250
252 void SetExcludedFromPosFiles( bool aExclude ) { m_excludedFromPosFiles = aExclude; }
253
259 wxString GetFieldValue( const wxString& aFieldName ) const
260 {
261 auto it = m_fields.find( aFieldName );
262
263 if( it != m_fields.end() )
264 return it->second;
265
266 return wxString();
267 }
268
274 void SetFieldValue( const wxString& aFieldName, const wxString& aValue )
275 {
276 m_fields[aFieldName] = aValue;
277 }
278
282 void RemoveFieldValue( const wxString& aFieldName )
283 {
284 m_fields.erase( aFieldName );
285 }
286
287 bool HasFieldValue( const wxString& aFieldName ) const
288 {
289 return m_fields.find( aFieldName ) != m_fields.end();
290 }
291
292 const std::map<wxString, wxString>& GetFields() const { return m_fields; }
293
294 bool operator==( const FOOTPRINT_VARIANT& aOther ) const
295 {
296 return m_name == aOther.m_name
297 && m_dnp == aOther.m_dnp
301 && m_fields == aOther.m_fields;
302 }
303
304private:
305 wxString m_name;
306 bool m_dnp;
310 std::map<wxString, wxString> m_fields;
311};
312
313
315{
316public:
317 FOOTPRINT( BOARD* parent );
318
319 FOOTPRINT( const FOOTPRINT& aFootprint );
320
321 // Move constructor and operator needed due to std containers inside the footprint
322 FOOTPRINT( FOOTPRINT&& aFootprint );
323
324 ~FOOTPRINT();
325
326 FOOTPRINT& operator=( const FOOTPRINT& aOther );
327 FOOTPRINT& operator=( FOOTPRINT&& aOther );
328
329 void CopyFrom( const BOARD_ITEM* aOther ) override;
330
331 void Serialize( google::protobuf::Any &aContainer ) const override;
332 bool Deserialize( const google::protobuf::Any &aContainer ) override;
333
334 void SerializeDefinition( kiapi::board::types::Footprint* aOutput ) const;
335 bool DeserializeDefinition( const kiapi::board::types::Footprint& aInput );
336
337 static inline bool ClassOf( const EDA_ITEM* aItem )
338 {
339 return aItem && aItem->Type() == PCB_FOOTPRINT_T;
340 }
341
344
346 void SetPrivateLayers( const LSET& aLayers ) { m_privateLayers = aLayers; }
347
349 void Add( BOARD_ITEM* aItem, ADD_MODE aMode = ADD_MODE::INSERT,
350 bool aSkipConnectivity = false ) override;
351
353 void Remove( BOARD_ITEM* aItem, REMOVE_MODE aMode = REMOVE_MODE::NORMAL ) override;
354
362 void ClearAllNets();
363
371 bool FixUuids();
372
383
391
392 bool TextOnly() const;
393
394 // Virtual function
395 const BOX2I GetBoundingBox() const override;
396 const BOX2I GetBoundingBox( bool aIncludeText ) const;
397
401 const BOX2I GetLayerBoundingBox( const LSET& aLayers ) const;
402
403 VECTOR2I GetCenter() const override { return GetBoundingBox( false ).GetCenter(); }
404
405 std::deque<PAD*>& Pads() { return m_pads; }
406 const std::deque<PAD*>& Pads() const { return m_pads; }
407
409 const DRAWINGS& GraphicalItems() const { return m_drawings; }
410
411 ZONES& Zones() { return m_zones; }
412 const ZONES& Zones() const { return m_zones; }
413
414 GROUPS& Groups() { return m_groups; }
415 const GROUPS& Groups() const { return m_groups; }
416
418 const CONSTRAINTS& Constraints() const { return m_constraints; }
419
421 const PCB_POINTS& Points() const { return m_points; }
422
423 bool HasThroughHolePads() const;
424
425 std::vector<FP_3DMODEL>& Models() { return m_3D_Drawings; }
426 const std::vector<FP_3DMODEL>& Models() const { return m_3D_Drawings; }
427
428 bool HasExtrudedBody() const { return m_extrudedBody != nullptr; }
429 const EXTRUDED_3D_BODY* GetExtrudedBody() const { return m_extrudedBody.get(); }
432 void SetExtrudedBody( std::unique_ptr<EXTRUDED_3D_BODY> aBody );
434
435 void SetPosition( const VECTOR2I& aPos ) override;
436 VECTOR2I GetPosition() const override { return m_transform.GetTranslate(); }
437
438 void SetOrientation( const EDA_ANGLE& aNewAngle );
439 EDA_ANGLE GetOrientation() const { return m_transform.GetRotate(); }
440
445 void SetLayerAndFlip( PCB_LAYER_ID aLayer );
446
447 void SetLayer( PCB_LAYER_ID aLayer ) override;
448
449 // A footprint's m_layer is set to F_Cu or B_Cu to encode which side of the board it's on.
450 PCB_LAYER_ID GetLayer() const override { return m_layer; }
451
452 const TRANSFORM_TRS& GetTransform() const { return m_transform; }
453
454 void SetTransformScale( double aScaleX, double aScaleY );
455
456 double GetScaleX() const { return m_transform.GetScaleX(); }
457 double GetScaleY() const { return m_transform.GetScaleY(); }
458
459 void SetScaleX( double aScaleX ) { SetTransformScale( aScaleX, m_transform.GetScaleY() ); }
460
461 void SetScaleY( double aScaleY ) { SetTransformScale( m_transform.GetScaleX(), aScaleY ); }
462
463 void RescaleAroundPoint( const VECTOR2I& aCenter, double aSx, double aSy );
464
465 void SetOrientationDegrees( double aOrientation )
466 {
467 SetOrientation( EDA_ANGLE( aOrientation, DEGREES_T ) );
468 }
470 {
471 return m_transform.GetRotate().AsDegrees();
472 }
473
474 const LIB_ID& GetFPID() const { return m_fpid; }
475 void SetFPID( const LIB_ID& aFPID )
476 {
477 m_fpid = aFPID;
478 }
479
480 wxString GetFPIDAsString() const { return m_fpid.Format(); }
481 void SetFPIDAsString( const wxString& aFPID ) { m_fpid.Parse( aFPID ); }
482
483 // LIB_TREE_ITEM interface
484 LIB_ID GetLIB_ID() const override { return m_fpid; }
485 wxString GetName() const override { return m_fpid.GetLibItemName(); }
486 wxString GetLibNickname() const override { return m_fpid.GetLibNickname(); }
487 wxString GetDesc() override { return GetLibDescription(); }
488 int GetPinCount() const override { return static_cast<int>( GetNumberedPadCount() ); }
489 std::vector<SEARCH_TERM>& GetSearchTerms() override;
490
491 wxString GetLibDescription() const { return m_libDescription; }
492 void SetLibDescription( const wxString& aDesc ) { m_libDescription = aDesc; }
493
494 wxString GetKeywords() const { return m_keywords; }
495 void SetKeywords( const wxString& aKeywords ) { m_keywords = aKeywords; }
496
497 const KIID_PATH& GetPath() const { return m_path; }
498 void SetPath( const KIID_PATH& aPath ) { m_path = aPath; }
499
509 bool IsWithinSchematicSheet( const KIID_PATH& aSheetPath ) const;
510
511 wxString GetSheetname() const { return m_sheetname; }
512 void SetSheetname( const wxString& aSheetname ) { m_sheetname = aSheetname; }
513
514 wxString GetSheetfile() const { return m_sheetfile; }
515 void SetSheetfile( const wxString& aSheetfile ) { m_sheetfile = aSheetfile; }
516
517 wxString GetFilters() const { return m_filters; }
518 void SetFilters( const wxString& aFilters ) { m_filters = aFilters; }
519
520 std::optional<int> GetLocalClearance() const { return m_clearance; }
521 void SetLocalClearance( std::optional<int> aClearance ) { m_clearance = aClearance; }
522
523 std::optional<int> GetLocalSolderMaskMargin() const { return m_solderMaskMargin; }
524 void SetLocalSolderMaskMargin( std::optional<int> aMargin ) { m_solderMaskMargin = aMargin; }
525
526 std::optional<int> GetLocalSolderPasteMargin() const { return m_solderPasteMargin; }
527 void SetLocalSolderPasteMargin( std::optional<int> aMargin ) { m_solderPasteMargin = aMargin; }
528
529 std::optional<double> GetLocalSolderPasteMarginRatio() const { return m_solderPasteMarginRatio; }
530 void SetLocalSolderPasteMarginRatio( std::optional<double> aRatio ) { m_solderPasteMarginRatio = aRatio; }
531
534
541 void SetStackupMode( FOOTPRINT_STACKUP aMode );
543
548 void SetStackupLayers( LSET aLayers );
549 const LSET& GetStackupLayers() const { return m_stackupLayers; }
550
551 int GetAttributes() const { return m_attributes; }
552 void SetAttributes( int aAttributes ) { m_attributes = aAttributes; }
553
555 void SetFootprintType( FOOTPRINT_TYPE aFootprintType );
556
558 void SetAllowMissingCourtyard( bool aAllow ) { m_allowMissingCourtyard = aAllow; }
559
561 void SetAllowSolderMaskBridges( bool aAllow ) { m_allowSolderMaskBridges = aAllow; }
562
563 void SetFlag( int aFlag ) { m_arflag = aFlag; }
564 void IncrementFlag() { m_arflag += 1; }
565 int GetFlag() const { return m_arflag; }
566
567 bool IsNetTie() const
568 {
569 for( const wxString& group : m_netTiePadGroups )
570 {
571 if( !group.IsEmpty() )
572 return true;
573 }
574
575 return false;
576 }
577
578 std::optional<int> GetLocalClearance( wxString* aSource ) const
579 {
580 if( m_clearance.has_value() && aSource )
581 *aSource = wxString::Format( _( "footprint %s" ), GetReference() );
582
583 return m_clearance;
584 }
585
592 std::optional<int> GetClearanceOverrides( wxString* aSource ) const
593 {
594 return GetLocalClearance( aSource );
595 }
596
598 {
600 *aSource = wxString::Format( _( "footprint %s" ), GetReference() );
601
602 return m_zoneConnection;
603 }
604
609 const std::vector<wxString>& GetNetTiePadGroups() const { return m_netTiePadGroups; }
610
612 {
613 m_netTiePadGroups.clear();
614 }
615
616 void AddNetTiePadGroup( const wxString& aGroup )
617 {
618 m_netTiePadGroups.emplace_back( aGroup );
619 }
620
625 std::map<wxString, int> MapPadNumbersToNetTieGroups() const;
626
630 std::vector<PAD*> GetNetTiePads( PAD* aPad ) const;
631
638 int GetLikelyAttribute() const;
639
640 void Move( const VECTOR2I& aMoveVector ) override;
641
642 void Rotate( const VECTOR2I& aRotCentre, const EDA_ANGLE& aAngle ) override;
643
644 void Flip( const VECTOR2I& aCentre, FLIP_DIRECTION aFlipDirection ) override;
645
657 void MoveAnchorPosition( const VECTOR2I& aMoveVector );
658
662 bool IsFlipped() const { return GetLayer() == B_Cu; }
663
668 PCB_LAYER_ID GetSide() const;
669
673 bool IsOnLayer( PCB_LAYER_ID aLayer ) const override;
674
675// m_footprintStatus bits:
676#define FP_is_LOCKED 0x01
677#define FP_is_PLACED 0x02
678#define FP_to_PLACE 0x04
679#define FP_PADS_are_LOCKED 0x08
680
681
682 bool IsLocked() const override
683 {
684 return ( m_fpStatus & FP_is_LOCKED ) != 0;
685 }
686
690 bool IsLayerAgnostic() const override { return true; }
691
695 bool FitsEnabledLayers( const LSET& aEnabledLayers, int aCopperLayerCount ) const override
696 {
697 return GetLayer() == F_Cu || GetLayer() == B_Cu;
698 }
699
705 void SetLocked( bool isLocked ) override
706 {
707 if( isLocked )
709 else
711 }
712
716 bool IsConflicting() const;
717
718 bool IsPlaced() const { return m_fpStatus & FP_is_PLACED; }
719 void SetIsPlaced( bool isPlaced )
720 {
721 if( isPlaced )
723 else
725 }
726
727 bool NeedsPlaced() const { return m_fpStatus & FP_to_PLACE; }
728 void SetNeedsPlaced( bool needsPlaced )
729 {
730 if( needsPlaced )
732 else
734 }
735
737
748 void CheckFootprintAttributes( const std::function<void( const wxString& )>& aErrorHandler );
749
757 void CheckPads( UNITS_PROVIDER* aUnitsProvider,
758 const std::function<void( const PAD*, int, const wxString& )>& aErrorHandler );
759
765 void CheckShortingPads( const std::function<void( const PAD*, const PAD*, int aErrorCode,
766 const VECTOR2I& )>& aErrorHandler );
767
774 void CheckNetTies( const std::function<void( const BOARD_ITEM* aItem,
775 const BOARD_ITEM* bItem,
776 const BOARD_ITEM* cItem,
777 const VECTOR2I& )>& aErrorHandler );
778
785 void CheckNetTiePadGroups( const std::function<void( const wxString& )>& aErrorHandler );
786
787 void CheckClippedSilk( const std::function<void( BOARD_ITEM* aItemA,
788 BOARD_ITEM* aItemB,
789 const VECTOR2I& aPt )>& aErrorHandler );
793 void BuildNetTieCache();
794
798 const std::set<int>& GetNetTieCache( const BOARD_ITEM* aItem ) const
799 {
800 static const std::set<int> emptySet;
801
802 auto it = m_netTieCache.find( aItem );
803
804 if( it == m_netTieCache.end() )
805 return emptySet;
806
807 return it->second;
808 }
809
823 void TransformPadsToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
824 int aMaxError, ERROR_LOC aErrorLoc ) const;
825
842 void TransformFPShapesToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
843 int aError, ERROR_LOC aErrorLoc,
844 bool aIncludeText = true,
845 bool aIncludeShapes = true,
846 bool aIncludePrivateItems = false ) const;
847
851 void TransformFPTextToPolySet( SHAPE_POLY_SET& aBuffer, PCB_LAYER_ID aLayer, int aClearance,
852 int aError, ERROR_LOC aErrorLoc ) const
853 {
854 TransformFPShapesToPolySet( aBuffer, aLayer, aClearance, aError, aErrorLoc, true, false );
855 }
856
860 void GetContextualTextVars( wxArrayString* aVars ) const;
861
868 bool ResolveTextVar( wxString* aToken, int aDepth = 0 ) const;
869 bool ResolveTextVar( wxString* aToken, const wxString& aVariantName, int aDepth = 0 ) const;
870
872 void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
873
874 bool HitTest( const VECTOR2I& aPosition, int aAccuracy = 0 ) const override;
875
876 bool Matches( const EDA_SEARCH_DATA& aSearchData, void* aAuxData ) const override;
877
888 bool HitTestAccurate( const VECTOR2I& aPosition, int aAccuracy = 0 ) const;
889
890 bool HitTest( const BOX2I& aRect, bool aContained, int aAccuracy = 0 ) const override;
891
892 bool HitTest( const SHAPE_LINE_CHAIN& aPoly, bool aContained ) const override;
893
902 bool HitTestOnLayer( const VECTOR2I& aPosition, PCB_LAYER_ID aLayer, int aAccuracy = 0 ) const;
903
904 bool HitTestOnLayer( const BOX2I& aRect, bool aContained, PCB_LAYER_ID aLayer, int aAccuracy = 0 ) const;
905
909 const wxString& GetReference() const { return Reference().GetText(); }
910
915 void SetReference( const wxString& aReference ) { Reference().SetText( aReference ); }
916
917 // Property system doesn't like const references
918 wxString GetReferenceAsString() const
919 {
920 return GetReference();
921 }
922
926 void IncrementReference( int aDelta );
927
928 bool IsAnnotated() const { return !GetReference().IsEmpty() && GetReference().Last() != '?'; }
929
933 const wxString& GetValue() const { return Value().GetText(); }
934
938 void SetValue( const wxString& aValue ) { Value().SetText( aValue ); }
939
940 // Property system doesn't like const references
941 wxString GetValueAsString() const
942 {
943 return GetValue();
944 }
945
949
951 const PCB_FIELD& Value() const { return *GetField( FIELD_T::VALUE ); }
952 const PCB_FIELD& Reference() const { return *GetField( FIELD_T::REFERENCE ); }
953
954 //-----<Fields>-----------------------------------------------------------
955
960 PCB_FIELD* GetField( FIELD_T aFieldType );
961 const PCB_FIELD* GetField( FIELD_T aFieldNdx ) const;
962
970 PCB_FIELD* GetField( const wxString& aFieldName ) const;
971
972 bool HasField( const wxString& aFieldName ) const;
973
980 void GetFields( std::vector<PCB_FIELD*>& aVector, bool aVisibleOnly ) const;
981
985 const std::deque<PCB_FIELD*>& GetFields() const { return m_fields; }
986 std::deque<PCB_FIELD*>& GetFields() { return m_fields; }
987
1000 void UpdateFields( const std::vector<PCB_FIELD>& aFields, std::vector<PCB_FIELD*>& aAdded,
1001 std::vector<PCB_FIELD*>& aDetached );
1002
1006 int GetNextFieldOrdinal() const;
1007
1015 void ApplyDefaultSettings( const BOARD& board, bool aStyleFields, bool aStyleText,
1016 bool aStyleShapes, bool aStyleDimensions, bool aStyleBarcodes );
1017
1019 {
1020 wxString m_unitName; // e.g. A
1021 std::vector<wxString> m_pins; // pin numbers in this unit
1022 };
1023
1024 void SetUnitInfo( const std::vector<FP_UNIT_INFO>& aUnits ) { m_unitInfo = aUnits; }
1025 const std::vector<FP_UNIT_INFO>& GetUnitInfo() const { return m_unitInfo; }
1026
1027 bool IsBoardOnly() const { return m_attributes & FP_BOARD_ONLY; }
1028 void SetBoardOnly( bool aIsBoardOnly = true )
1029 {
1030 if( aIsBoardOnly )
1032 else
1034 }
1035
1037 void SetExcludedFromPosFiles( bool aExclude = true )
1038 {
1039 if( aExclude )
1041 else
1043 }
1044
1046 void SetExcludedFromBOM( bool aExclude = true )
1047 {
1048 if( aExclude )
1050 else
1052 }
1053
1055 void SetExcludedFromSim( bool aExclude = true )
1056 {
1057 if( aExclude )
1059 else
1061 }
1062
1063 bool IsDNP() const { return m_attributes & FP_DNP; }
1064 void SetDNP( bool aDNP = true )
1065 {
1066 if( aDNP )
1068 else
1070 }
1071
1072 // =====================================================================
1073 // Variant Support
1074 // =====================================================================
1075
1081 const FOOTPRINT_VARIANT* GetVariant( const wxString& aVariantName ) const;
1082
1088 FOOTPRINT_VARIANT* GetVariant( const wxString& aVariantName );
1089
1094 void SetVariant( const FOOTPRINT_VARIANT& aVariant );
1095
1101 FOOTPRINT_VARIANT* AddVariant( const wxString& aVariantName );
1102
1107 void DeleteVariant( const wxString& aVariantName );
1108
1114 void RenameVariant( const wxString& aOldName, const wxString& aNewName );
1115
1121 bool HasVariant( const wxString& aVariantName ) const;
1122
1128
1137 bool GetDNPForVariant( const wxString& aVariantName ) const;
1138
1147 bool GetExcludedFromBOMForVariant( const wxString& aVariantName ) const;
1148
1157 bool GetExcludedFromSimForVariant( const wxString& aVariantName ) const;
1158
1167 bool GetExcludedFromPosFilesForVariant( const wxString& aVariantName ) const;
1168
1181 wxString GetFieldValueForVariant( const wxString& aVariantName, const wxString& aFieldName ) const;
1182
1183 void SetFileFormatVersionAtLoad( int aVersion ) { m_fileFormatVersionAtLoad = aVersion; }
1185
1186 std::vector<PROPERTY_BASE*> GetDynamicProperties() const override;
1187
1197 PAD* FindPadByNumber( const wxString& aPadNumber, PAD* aSearchAfterMe = nullptr ) const;
1198
1199 PAD* FindPadByUuid( const KIID& aUuid ) const;
1200
1208 PAD* GetPad( const VECTOR2I& aPosition, const LSET& aLayerMask = LSET::AllLayersMask() );
1209
1210 std::vector<const PAD*> GetPads( const wxString& aPadNumber, const PAD* aIgnore = nullptr ) const;
1211
1215 unsigned GetPadCount() const;
1216
1223 std::set<wxString> GetUniquePadNumbers() const;
1224
1233 unsigned GetNumberedPadCount() const;
1234
1241 wxString GetNextPadNumber( const wxString& aLastPadName ) const;
1242
1245
1252
1256 void AutoPositionFields();
1257
1262 wxString GetTypeName() const;
1263
1264 double GetArea( int aPadding = 0 ) const;
1265
1266 KIID GetLink() const { return m_link; }
1267 void SetLink( const KIID& aLink ) { m_link = aLink; }
1268
1269 BOARD_ITEM* Duplicate( bool addToParentGroup, BOARD_COMMIT* aCommit = nullptr ) const override;
1270
1276 BOARD_ITEM* DuplicateItem( bool addToParentGroup, BOARD_COMMIT* aCommit, const BOARD_ITEM* aItem,
1277 bool addToFootprint = false );
1278
1284 void Add3DModel( FP_3DMODEL* a3DModel );
1285
1286 INSPECT_RESULT Visit( INSPECTOR inspector, void* testData,
1287 const std::vector<KICAD_T>& aScanTypes ) override;
1288
1289 wxString GetClass() const override
1290 {
1291 return wxT( "FOOTPRINT" );
1292 }
1293
1294 wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
1295
1296 wxString DisambiguateItemDescription( UNITS_PROVIDER* aUnitsProvider, bool aFull ) const override;
1297
1298 BITMAPS GetMenuImage() const override;
1299
1300 EDA_ITEM* Clone() const override;
1301
1303 void RunOnChildren( const std::function<void( BOARD_ITEM* )>& aFunction, RECURSE_MODE aMode ) const override;
1304
1305 virtual std::vector<int> ViewGetLayers() const override;
1306
1307 double ViewGetLOD( int aLayer, const KIGFX::VIEW* aView ) const override;
1308
1309 virtual const BOX2I ViewBBox() const override;
1310
1318 static bool IsLibNameValid( const wxString& aName );
1319
1329 static const wxChar* StringLibNameInvalidChars( bool aUserReadable );
1330
1334 bool FootprintNeedsUpdate( const FOOTPRINT* aLibFP, int aCompareFlags = 0,
1335 REPORTER* aReporter = nullptr );
1336
1351 void SetInitialComments( wxArrayString* aInitialComments )
1352 {
1353 delete m_initial_comments;
1354 m_initial_comments = aInitialComments;
1355 }
1356
1363 double CoverageRatio( const GENERAL_COLLECTOR& aCollector ) const;
1364
1365 double GetCoverageArea( int aTextMargin ) const override;
1366
1368 const wxArrayString* GetInitialComments() const { return m_initial_comments; }
1369
1375 const SHAPE_POLY_SET& GetCourtyard( PCB_LAYER_ID aLayer ) const;
1376
1382 const SHAPE_POLY_SET& GetCachedCourtyard( PCB_LAYER_ID aLayer ) const;
1383
1390 void BuildCourtyardCaches( OUTLINE_ERROR_HANDLER* aErrorHandler = nullptr );
1391
1392 // @copydoc BOARD_ITEM::GetEffectiveShape
1393 std::shared_ptr<SHAPE> GetEffectiveShape( PCB_LAYER_ID aLayer = UNDEFINED_LAYER,
1394 FLASHING aFlash = FLASHING::DEFAULT,
1395 DRC_CONSTRAINT_T aUsage = NULL_CONSTRAINT ) const override;
1396
1398 {
1399 return static_cast<EMBEDDED_FILES*>( this );
1400 }
1401
1403 {
1404 return static_cast<const EMBEDDED_FILES*>( this );
1405 }
1406
1410 std::set<KIFONT::OUTLINE_FONT*> GetFonts() const override;
1411
1412 void EmbedFonts() override;
1413
1414 double Similarity( const BOARD_ITEM& aOther ) const override;
1415
1417 void SetStaticComponentClass( const COMPONENT_CLASS* aClass ) const;
1418
1421
1423 const COMPONENT_CLASS* GetComponentClass() const;
1424
1426 wxString GetComponentClassAsString() const;
1427
1429 void RecomputeComponentClass() const;
1430
1432 void InvalidateComponentClassCache() const;
1433
1440 void SetTransientComponentClassNames( const std::unordered_set<wxString>& classNames )
1441 {
1442 m_transientComponentClassNames = classNames;
1443 }
1444
1446 const std::unordered_set<wxString>& GetTransientComponentClassNames()
1447 {
1449 }
1450
1453
1455 void ResolveComponentClassNames( BOARD* aBoard,
1456 const std::unordered_set<wxString>& aComponentClassNames );
1457
1459 void FixUpPadsForBoard( BOARD* aBoard );
1460
1461 bool operator==( const BOARD_ITEM& aOther ) const override;
1462 bool operator==( const FOOTPRINT& aOther ) const;
1463
1464#if defined(DEBUG)
1465 virtual void Show( int nestLevel, std::ostream& os ) const override { ShowDummy( os ); }
1466#endif
1467
1469 {
1470 bool operator()( const BOARD_ITEM* itemA, const BOARD_ITEM* itemB ) const;
1471 };
1472
1474 {
1475 bool operator()( const PAD* aFirst, const PAD* aSecond ) const;
1476 };
1477 // TODO(JE) padstacks -- this code isn't used anywhere though
1478#if 0
1479 struct cmp_padstack
1480 {
1481 bool operator()( const PAD* aFirst, const PAD* aSecond ) const;
1482 };
1483#endif
1485 {
1486 bool operator()( const ZONE* aFirst, const ZONE* aSecond ) const;
1487 };
1488
1489protected:
1490 virtual void swapData( BOARD_ITEM* aImage ) override;
1491
1493
1494private:
1495 std::deque<PCB_FIELD*> m_fields; // Fields, mapped by name, owned by pointer
1496 std::deque<BOARD_ITEM*> m_drawings; // Drawings in the footprint, owned by pointer
1497 std::deque<PAD*> m_pads; // Pads, owned by pointer
1498 std::vector<ZONE*> m_zones; // Rule area zones, owned by pointer
1499 std::deque<PCB_GROUP*> m_groups; // Groups, owned by pointer
1500 std::deque<PCB_CONSTRAINT*> m_constraints; // Geometric constraints, owned by pointer
1501 std::deque<PCB_POINT*> m_points; // Points, owned by pointer
1502
1504 bool m_flipped = false;
1506 int m_attributes; // Flag bits (see FOOTPRINT_ATTR_T)
1507 int m_fpStatus; // For autoplace: flags (LOCKED, FIELDS_AUTOPLACED)
1509
1512
1513 // Bounding box caching strategy:
1514 // While we attempt to notice the low-hanging fruit operations and update the bounding boxes
1515 // accordingly, we rely mostly on a "if anything changed then the caches are stale" approach.
1516 // We implement this by having PCB_BASE_FRAME's OnModify() method increment an operation
1517 // counter, and storing that as a timestamp for the various caches.
1518 // This means caches will get regenerated often -- but still far less often than if we had no
1519 // caches at all. The principal opitmization would be to change to dirty flag and make sure
1520 // that any edit that could affect the bounding boxes (including edits to the footprint
1521 // children) marked the bounding boxes dirty. It would definitely be faster -- but also more
1522 // fragile.
1523 mutable std::mutex m_geometry_cache_mutex;
1524 mutable std::unique_ptr<FOOTPRINT_GEOMETRY_CACHE_DATA> m_geometry_cache;
1525
1526 mutable std::map<wxString, std::unique_ptr<PCB_FOOTPRINT_FIELD_PROPERTY>> m_dynamicPropertyCache;
1527
1528 // A list of pad groups, each of which is allowed to short nets within their group.
1529 // A pad group is a comma-separated list of pad numbers.
1530 std::vector<wxString> m_netTiePadGroups;
1531
1532 // A list of 1:N footprint item to allowed net numbers
1533 std::map<const BOARD_ITEM*, std::set<int>> m_netTieCache;
1534
1538
1542
1545
1546 // Optional overrides
1548 std::optional<int> m_clearance;
1549 std::optional<int> m_solderMaskMargin; // Solder mask margin
1550 std::optional<int> m_solderPasteMargin; // Solder paste margin absolute value
1551 std::optional<double> m_solderPasteMarginRatio; // Solder mask margin ratio of pad size
1552 // The final margin is the sum of these 2 values
1553
1554 LSET m_stackupLayers; // Layers in the stackup
1555 FOOTPRINT_STACKUP m_stackupMode; // Stackup mode for this footprint
1556 LSET m_privateLayers; // Layers visible only in the footprint editor
1557
1558 wxString m_libDescription; // File name and path for documentation file.
1559 wxString m_keywords; // Search keywords to find footprint in library.
1560 KIID_PATH m_path; // Path to associated symbol ([sheetUUID, .., symbolUUID]).
1561 wxString m_sheetname; // Name of the sheet containing the symbol for this footprint
1562 wxString m_sheetfile; // File of the sheet containing the symbol for this footprint
1563 wxString m_filters; // Footprint filters from symbol
1565 int m_arflag; // Use to trace ratsnest and auto routing.
1566 KIID m_link; // Temporary logical link used during editing
1567
1568 std::vector<FP_3DMODEL> m_3D_Drawings; // 3D models.
1569
1570 std::unique_ptr<EXTRUDED_3D_BODY> m_extrudedBody; // nullptr = disabled
1571
1572 wxArrayString* m_initial_comments; // s-expression comments in the footprint,
1573 // lazily allocated only if needed for speed
1574
1575 mutable std::unique_ptr<FOOTPRINT_COURTYARD_CACHE_DATA> m_courtyard_cache;
1576 mutable std::mutex m_courtyard_cache_mutex;
1577
1578 std::unordered_set<wxString> m_transientComponentClassNames;
1579 std::unique_ptr<COMPONENT_CLASS_CACHE_PROXY> m_componentClassCacheProxy;
1580
1581 // Optional unit mapping information for multi-unit symbols
1582 std::vector<FP_UNIT_INFO> m_unitInfo;
1583
1584 std::vector<SEARCH_TERM> m_searchTerms;
1585};
1586
1587#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:914
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
friend class BOARD
Definition board_item.h:593
PCB_LAYER_ID m_layer
Definition board_item.h:586
Information pertinent to a Pcbnew printed circuit board.
Definition board.h:410
constexpr const Vec GetCenter() const
Definition box2.h:227
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:84
virtual const wxString & GetText() const
Return the string associated with the text object.
Definition eda_text.h:118
virtual void SetText(const wxString &aText)
Definition eda_text.cpp:236
EMBEDDED_FILES()=default
bool operator==(const EXTRUDED_3D_BODY &aOther) const
Definition footprint.h:141
KIGFX::COLOR4D m_color
Definition footprint.h:121
VECTOR3D m_offset
Definition footprint.h:127
EXTRUDED_3D_BODY()=default
PCB_LAYER_ID m_layer
Definition footprint.h:120
static KIGFX::COLOR4D GetDefaultColor(EXTRUSION_MATERIAL aMaterial)
Definition footprint.h:129
VECTOR3D m_rotation
Definition footprint.h:126
static uint32_t PackColorKey(const KIGFX::COLOR4D &aColor)
Definition footprint.h:148
VECTOR3D m_scale
Definition footprint.h:125
EXTRUSION_MATERIAL m_material
Definition footprint.h:122
Variant information for a footprint.
Definition footprint.h:228
wxString GetName() const
Definition footprint.h:239
FOOTPRINT_VARIANT(const wxString &aName=wxEmptyString)
Definition footprint.h:230
bool HasFieldValue(const wxString &aFieldName) const
Definition footprint.h:287
bool m_excludedFromPosFiles
Definition footprint.h:309
void SetExcludedFromPosFiles(bool aExclude)
Definition footprint.h:252
wxString GetFieldValue(const wxString &aFieldName) const
Get a field value override for this variant.
Definition footprint.h:259
void SetName(const wxString &aName)
Definition footprint.h:240
const std::map< wxString, wxString > & GetFields() const
Definition footprint.h:292
bool GetExcludedFromSim() const
Definition footprint.h:248
bool GetExcludedFromBOM() const
Definition footprint.h:245
bool operator==(const FOOTPRINT_VARIANT &aOther) const
Definition footprint.h:294
void SetExcludedFromSim(bool aExclude)
Definition footprint.h:249
void SetDNP(bool aDNP)
Definition footprint.h:243
bool GetExcludedFromPosFiles() const
Definition footprint.h:251
void RemoveFieldValue(const wxString &aFieldName)
Remove a field value override for this variant.
Definition footprint.h:282
bool GetDNP() const
Definition footprint.h:242
std::map< wxString, wxString > m_fields
Field value overrides for this variant.
Definition footprint.h:310
void SetFieldValue(const wxString &aFieldName, const wxString &aValue)
Set a field value override for this variant.
Definition footprint.h:274
void SetExcludedFromBOM(bool aExclude)
Definition footprint.h:246
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:1243
const CASE_INSENSITIVE_MAP< FOOTPRINT_VARIANT > & GetVariants() const
Get all variants.
Definition footprint.h:1127
std::optional< int > GetClearanceOverrides(wxString *aSource) const
Return any local clearance overrides set in the "classic" (ie: pre-rule) system.
Definition footprint.h:592
double GetCoverageArea(int aTextMargin) const override
Return the board area this item covers, used to rank candidates under the cursor so a click on a smal...
void EmbedFonts() override
bool AllowSolderMaskBridges() const
Definition footprint.h:560
void SetPosition(const VECTOR2I &aPos) override
void SetFPID(const LIB_ID &aFPID)
Definition footprint.h:475
LIB_ID m_fpid
Definition footprint.h:1505
wxString GetLibDescription() const
Definition footprint.h:491
ZONE_CONNECTION GetLocalZoneConnection() const
Definition footprint.h:533
void SetLink(const KIID &aLink)
Definition footprint.h:1267
KIID_PATH m_path
Definition footprint.h:1560
std::deque< BOARD_ITEM * > m_drawings
Definition footprint.h:1496
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:1027
void SerializeDefinition(kiapi::board::types::Footprint *aOutput) const
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:406
bool IsDNP() const
Definition footprint.h:1063
void SetLocked(bool isLocked) override
Set the FP_is_LOCKED bit in the m_ModuleStatus.
Definition footprint.h:705
VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
Definition footprint.h:403
void SetFootprintType(FOOTPRINT_TYPE aFootprintType)
std::vector< PAD * > GetNetTiePads(PAD *aPad) const
EDA_ANGLE GetOrientation() const
Definition footprint.h:439
ZONES & Zones()
Definition footprint.h:411
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:1501
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:1570
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:719
ZONE_CONNECTION m_zoneConnection
Definition footprint.h:1547
int GetNextFieldOrdinal() const
Return the next ordinal for a user field for this footprint.
PCB_POINTS & Points()
Definition footprint.h:420
bool IsExcludedFromBOM() const
Definition footprint.h:1045
std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT, DRC_CONSTRAINT_T aUsage=NULL_CONSTRAINT) const override
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
void SetOrientation(const EDA_ANGLE &aNewAngle)
void SetFlag(int aFlag)
Definition footprint.h:563
std::optional< double > m_solderPasteMarginRatio
Definition footprint.h:1551
void SetDNP(bool aDNP=true)
Definition footprint.h:1064
void SetAllowSolderMaskBridges(bool aAllow)
Definition footprint.h:561
void RecomputeComponentClass() const
Forces immediate recalculation of the component class for this footprint.
std::vector< ZONE * > m_zones
Definition footprint.h:1498
bool GetExcludedFromSimForVariant(const wxString &aVariantName) const
Get the exclude-from-simulation status for a specific variant.
const TRANSFORM_TRS & GetTransform() const
Definition footprint.h:452
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.
void SetLocalSolderPasteMarginRatio(std::optional< double > aRatio)
Definition footprint.h:530
std::vector< SEARCH_TERM > & GetSearchTerms() override
void IncrementFlag()
Definition footprint.h:564
double ViewGetLOD(int aLayer, const KIGFX::VIEW *aView) const override
Return the level of detail (LOD) of the item.
bool IsAnnotated() const
Definition footprint.h:928
std::optional< int > m_clearance
Definition footprint.h:1548
bool m_duplicatePadNumbersAreJumpers
Flag that this footprint should automatically treat sets of two or more pads with the same number as ...
Definition footprint.h:1541
void SetExcludedFromSim(bool aExclude=true)
Definition footprint.h:1055
const JUMPER_GROUP_SET & JumperPadGroups() const
Definition footprint.h:1251
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:1046
wxString GetSheetname() const
Definition footprint.h:511
int m_fpStatus
Definition footprint.h:1507
void SetPath(const KIID_PATH &aPath)
Definition footprint.h:498
void SetFilters(const wxString &aFilters)
Definition footprint.h:518
void SetKeywords(const wxString &aKeywords)
Definition footprint.h:495
void SetStaticComponentClass(const COMPONENT_CLASS *aClass) const
Sets the component class object pointer for this footprint.
const DRAWINGS & GraphicalItems() const
Definition footprint.h:409
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:1351
int m_attributes
Definition footprint.h:1506
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:486
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:1568
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...
FOOTPRINT_TYPE GetFootprintType() const
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:1543
const std::vector< FP_UNIT_INFO > & GetUnitInfo() const
Definition footprint.h:1025
const EXTRUDED_3D_BODY * GetExtrudedBody() const
Definition footprint.h:429
std::unordered_set< wxString > m_transientComponentClassNames
Definition footprint.h:1578
void SetAttributes(int aAttributes)
Definition footprint.h:552
void SetSheetfile(const wxString &aSheetfile)
Definition footprint.h:515
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
std::optional< int > GetLocalSolderPasteMargin() const
Definition footprint.h:526
std::unique_ptr< COMPONENT_CLASS_CACHE_PROXY > m_componentClassCacheProxy
Definition footprint.h:1579
wxArrayString * m_initial_comments
Definition footprint.h:1572
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
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:484
std::deque< PCB_FIELD * > m_fields
Definition footprint.h:1495
std::mutex m_geometry_cache_mutex
Definition footprint.h:1523
PCB_FIELD & Value()
read/write accessors:
Definition footprint.h:947
const EMBEDDED_FILES * GetEmbeddedFiles() const
Definition footprint.h:1402
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
std::optional< int > m_solderPasteMargin
Definition footprint.h:1550
void SetFileFormatVersionAtLoad(int aVersion)
Definition footprint.h:1183
std::mutex m_courtyard_cache_mutex
Definition footprint.h:1576
void SetExcludedFromPosFiles(bool aExclude=true)
Definition footprint.h:1037
bool IsWithinSchematicSheet(const KIID_PATH &aSheetPath) const
Test whether this footprint's symbol lives on aSheetPath or any sheet below it.
void SetOrientationDegrees(double aOrientation)
Definition footprint.h:465
bool HasExtrudedBody() const
Definition footprint.h:428
unsigned GetPadCount() const
std::map< wxString, int > MapPadNumbersToNetTieGroups() const
std::optional< int > GetLocalClearance() const
Definition footprint.h:520
void UpdateFields(const std::vector< PCB_FIELD > &aFields, std::vector< PCB_FIELD * > &aAdded, std::vector< PCB_FIELD * > &aDetached)
Replace the fields with aFields, reusing the existing mandatory field objects.
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:851
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.
void SetDuplicatePadNumbersAreJumpers(bool aEnabled)
Definition footprint.h:1244
bool m_allowSolderMaskBridges
Definition footprint.h:1544
FOOTPRINT & operator=(const FOOTPRINT &aOther)
bool HasField(const wxString &aFieldName) const
CONSTRAINTS & Constraints()
Definition footprint.h:417
PCB_FIELD * GetField(FIELD_T aFieldType)
Return a mandatory field in this footprint.
void SetScaleY(double aScaleY)
Definition footprint.h:461
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:433
double GetOrientationDegrees() const
Definition footprint.h:469
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:405
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:487
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
int GetAttributes() const
Definition footprint.h:551
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:578
const COMPONENT_CLASS * GetComponentClass() const
Returns the component class for this footprint.
void SetLocalZoneConnection(ZONE_CONNECTION aType)
Definition footprint.h:532
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)
void ClearNetTiePadGroups()
Definition footprint.h:611
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
Definition footprint.h:450
bool ResolveTextVar(wxString *aToken, int aDepth=0) const
Resolve any references to system tokens supported by the component.
LSET GetPrivateLayers() const
Definition footprint.h:345
void SetExtrudedBody(std::unique_ptr< EXTRUDED_3D_BODY > aBody)
wxString GetFPIDAsString() const
Definition footprint.h:480
CASE_INSENSITIVE_MAP< FOOTPRINT_VARIANT > m_variants
Variant data for this footprint, keyed by variant name.
Definition footprint.h:1511
double GetScaleX() const
Definition footprint.h:456
wxString GetValueAsString() const
Definition footprint.h:941
bool AllowMissingCourtyard() const
Definition footprint.h:557
void DeleteVariant(const wxString &aVariantName)
Delete a variant by name.
const ZONES & Zones() const
Definition footprint.h:412
wxString GetComponentClassAsString() const
Used for display in the properties panel.
bool IsFlipped() const
Definition footprint.h:662
wxString GetSheetfile() const
Definition footprint.h:514
bool IsLayerAgnostic() const override
Check if this item's layer set must not be confined to a board's enabled layers.
Definition footprint.h:690
JUMPER_GROUP_SET 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:1537
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...
const CONSTRAINTS & Constraints() const
Definition footprint.h:418
bool m_flipped
Definition footprint.h:1504
std::deque< PCB_CONSTRAINT * > m_constraints
Definition footprint.h:1500
wxString GetTypeName() const
Get the type of footprint.
bool NeedsPlaced() const
Definition footprint.h:727
const std::vector< wxString > & GetNetTiePadGroups() const
Definition footprint.h:609
const LIB_ID & GetFPID() const
Definition footprint.h:474
bool DeserializeDefinition(const kiapi::board::types::Footprint &aInput)
const std::unordered_set< wxString > & GetTransientComponentClassNames()
Gets the transient component class names.
Definition footprint.h:1446
void SetReference(const wxString &aReference)
Definition footprint.h:915
bool IsLocked() const override
Definition footprint.h:682
std::vector< FP_UNIT_INFO > m_unitInfo
Definition footprint.h:1582
const GROUPS & Groups() const
Definition footprint.h:415
bool IsExcludedFromPosFiles() const
Definition footprint.h:1036
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.
int GetPinCount() const override
The pin count for symbols or the unique pad count for footprints.
Definition footprint.h:488
void AddNetTiePadGroup(const wxString &aGroup)
Definition footprint.h:616
bool LegacyPadsLocked() const
Definition footprint.h:736
virtual const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
LSET m_privateLayers
Definition footprint.h:1556
bool IsExcludedFromSim() const
Definition footprint.h:1054
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:798
const LSET & GetStackupLayers() const
Definition footprint.h:549
const std::deque< PCB_FIELD * > & GetFields() const
Return a reference to the deque holding the footprint's fields.
Definition footprint.h:985
int GetLikelyAttribute() const
Return the most likely attribute based on pads.
std::deque< PCB_GROUP * > m_groups
Definition footprint.h:1499
void Move(const VECTOR2I &aMoveVector) override
Move this object.
static bool ClassOf(const EDA_ITEM *aItem)
Definition footprint.h:337
wxString m_libDescription
Definition footprint.h:1558
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.
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:1452
ZONE_CONNECTION GetZoneConnectionOverrides(wxString *aSource) const
Definition footprint.h:597
std::vector< wxString > m_netTiePadGroups
Definition footprint.h:1530
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:938
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.
void SetTransformScale(double aScaleX, double aScaleY)
FOOTPRINT_STACKUP m_stackupMode
Definition footprint.h:1555
PCB_FIELD & Reference()
Definition footprint.h:948
const PCB_FIELD & Value() const
The const versions to keep the compiler happy.
Definition footprint.h:951
wxString GetReferenceAsString() const
Definition footprint.h:918
JUMPER_GROUP_SET & JumperPadGroups()
Each jumper pad group is a set of pad numbers that should be treated as internally connected.
Definition footprint.h:1250
wxString m_sheetfile
Definition footprint.h:1562
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:1549
void Add(BOARD_ITEM *aItem, ADD_MODE aMode=ADD_MODE::INSERT, bool aSkipConnectivity=false) override
Adds an item to the container.
void SetUnitInfo(const std::vector< FP_UNIT_INFO > &aUnits)
Definition footprint.h:1024
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:1559
const PCB_FIELD & Reference() const
Definition footprint.h:952
void SetTransientComponentClassNames(const std::unordered_set< wxString > &classNames)
Sets the transient component class names.
Definition footprint.h:1440
std::map< wxString, std::unique_ptr< PCB_FOOTPRINT_FIELD_PROPERTY > > m_dynamicPropertyCache
Definition footprint.h:1526
void SetScaleX(double aScaleX)
Definition footprint.h:459
void ClearAllNets()
Clear (i.e.
std::deque< PAD * > m_pads
Definition footprint.h:1497
void RescaleAroundPoint(const VECTOR2I &aCenter, double aSx, double aSy)
bool HasThroughHolePads() const
const PCB_POINTS & Points() const
Definition footprint.h:421
bool FitsEnabledLayers(const LSET &aEnabledLayers, int aCopperLayerCount) const override
Check if a board offering aEnabledLayers can hold this item.
Definition footprint.h:695
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.
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:567
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:1289
void SetVariant(const FOOTPRINT_VARIANT &aVariant)
Add or update a variant.
std::unique_ptr< FOOTPRINT_COURTYARD_CACHE_DATA > m_courtyard_cache
Definition footprint.h:1575
void SetLayer(PCB_LAYER_ID aLayer) override
Set the layer this item is on.
void IncrementReference(int aDelta)
Bump the current reference by aDelta.
int GetFileFormatVersionAtLoad() const
Definition footprint.h:1184
std::optional< double > GetLocalSolderPasteMarginRatio() const
Definition footprint.h:529
EXTRUDED_3D_BODY * GetExtrudedBody()
Definition footprint.h:430
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
KIID m_link
Definition footprint.h:1566
GROUPS & Groups()
Definition footprint.h:414
wxString GetFilters() const
Definition footprint.h:517
void SetSheetname(const wxString &aSheetname)
Definition footprint.h:512
const wxArrayString * GetInitialComments() const
Return the initial comments block or NULL if none, without transfer of ownership.
Definition footprint.h:1368
KIID GetLink() const
Definition footprint.h:1266
std::set< wxString > GetUniquePadNumbers() const
A complex pad can be built with many pads having the same pad name to create a complex shape or fragm...
void SetAllowMissingCourtyard(bool aAllow)
Definition footprint.h:558
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:425
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:986
wxString GetName() const override
Definition footprint.h:485
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:492
bool TextOnly() const
const wxString & GetValue() const
Definition footprint.h:933
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:728
wxString m_filters
Definition footprint.h:1563
const wxString & GetReference() const
Definition footprint.h:909
std::unique_ptr< FOOTPRINT_GEOMETRY_CACHE_DATA > m_geometry_cache
Definition footprint.h:1524
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:481
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:1028
const std::vector< FP_3DMODEL > & Models() const
Definition footprint.h:426
void SetLocalSolderMaskMargin(std::optional< int > aMargin)
Definition footprint.h:524
TRANSFORM_TRS m_transform
Definition footprint.h:1503
timestamp_t m_lastEditTime
Definition footprint.h:1564
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:565
std::map< const BOARD_ITEM *, std::set< int > > m_netTieCache
Definition footprint.h:1533
std::vector< PROPERTY_BASE * > GetDynamicProperties() const override
Return dynamically-computed properties specific to this object instance (e.g.
wxString m_sheetname
Definition footprint.h:1561
LSET m_stackupLayers
Definition footprint.h:1554
int m_fileFormatVersionAtLoad
Definition footprint.h:1508
void SetLocalClearance(std::optional< int > aClearance)
Definition footprint.h:521
void SetPrivateLayers(const LSET &aLayers)
Definition footprint.h:346
const KIID_PATH & GetPath() const
Definition footprint.h:497
std::optional< int > GetLocalSolderMaskMargin() const
Definition footprint.h:523
void SetLocalSolderPasteMargin(std::optional< int > aMargin)
Definition footprint.h:527
wxString GetKeywords() const
Definition footprint.h:494
bool operator==(const BOARD_ITEM &aOther) const override
EMBEDDED_FILES * GetEmbeddedFiles() override
Definition footprint.h:1397
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:542
virtual void swapData(BOARD_ITEM *aImage) override
wxString GetNextPadNumber(const wxString &aLastPadName) const
Return the next available pad number in the footprint.
double GetScaleY() const
Definition footprint.h:457
bool IsPlaced() const
Definition footprint.h:718
bool HasVariant(const wxString &aVariantName) const
Check if a variant exists.
VECTOR2I GetPosition() const override
Definition footprint.h:436
DRAWINGS & GraphicalItems()
Definition footprint.h:408
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:1584
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:189
VECTOR3D m_Offset
3D model offset (mm)
Definition footprint.h:184
double m_Opacity
Definition footprint.h:185
VECTOR3D m_Rotation
3D model rotation (degrees)
Definition footprint.h:183
VECTOR3D m_Scale
3D model scaling factor (dimensionless)
Definition footprint.h:182
wxString m_Filename
The 3D shape filename in 3D library.
Definition footprint.h:186
bool m_Show
Include model in rendering.
Definition footprint.h:187
Used when the right click button is pressed, or when the select tool is in effect.
Definition collectors.h:203
Represents an (ordered) list of JUMPER_GROUP objects.
Implement outline font drawing.
A color representation with 4 components: red, green, blue, alpha.
Definition color4d.h:101
double r
Red component.
Definition color4d.h:391
double g
Green component.
Definition color4d.h:392
double a
Alpha component.
Definition color4d.h:394
static const COLOR4D UNSPECIFIED
For legacy support; used as a value to indicate color hasn't been set yet.
Definition color4d.h:400
double b
Blue component.
Definition color4d.h:393
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
Definition view.h:63
Definition kiid.h:46
A logical library item identifier and consists of various portions much like a URI.
Definition lib_id.h:45
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:65
LSET is a set of PCB_LAYER_IDs.
Definition lset.h:37
static const LSET & AllLayersMask()
Definition lset.cpp:637
EDA_MSG_PANEL items for displaying messages.
Definition msgpanel.h:50
Definition pad.h:61
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:39
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:124
Handle a list of polygons defining a copper zone.
Definition zone.h:70
const std::function< void(const wxString &msg, BOARD_ITEM *itemA, BOARD_ITEM *itemB, const VECTOR2I &pt)> OUTLINE_ERROR_HANDLER
DRC_CONSTRAINT_T
Definition drc_rule.h:49
@ NULL_CONSTRAINT
Definition drc_rule.h:50
#define _(s)
@ DEGREES_T
Definition eda_angle.h:30
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
FOOTPRINT_TYPE
Definition footprint.h:98
EXTRUSION_MATERIAL
Definition footprint.h:106
FOOTPRINT_ATTR_T
The set of attributes allowed within a FOOTPRINT, using FOOTPRINT::SetAttributes() and FOOTPRINT::Get...
Definition footprint.h:85
@ FP_SMD
Definition footprint.h:87
@ FP_DNP
Definition footprint.h:92
@ FP_EXCLUDE_FROM_POS_FILES
Definition footprint.h:88
@ FP_BOARD_ONLY
Definition footprint.h:90
@ FP_EXCLUDE_FROM_BOM
Definition footprint.h:89
@ FP_JUST_ADDED
Definition footprint.h:91
@ FP_EXCLUDE_FROM_SIM
Definition footprint.h:93
@ FP_THROUGH_HOLE
Definition footprint.h:86
#define FP_is_PLACED
In autoplace: footprint automatically placed.
Definition footprint.h:677
#define FP_is_LOCKED
footprint LOCKED: no autoplace allowed
Definition footprint.h:676
#define FP_PADS_are_LOCKED
Definition footprint.h:679
FOOTPRINT_STACKUP
Definition footprint.h:156
@ EXPAND_INNER_LAYERS
The 'normal' stackup handling, where there is a single inner layer (In1) and rule areas using it expa...
Definition footprint.h:161
@ CUSTOM_LAYERS
Stackup handling where the footprint can have any number of copper layers, and objects on those layer...
Definition footprint.h:166
#define FP_to_PLACE
In autoplace: footprint waiting for autoplace.
Definition footprint.h:678
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:43
FLASHING
Enum used during connectivity building to ensure we do not query connectivity while building the data...
Definition layer_ids.h:180
@ DEFAULT
Flashing follows connectivity.
Definition layer_ids.h:181
PCB_LAYER_ID
A quick note on layer IDs:
Definition layer_ids.h:56
@ B_Cu
Definition layer_ids.h:61
@ UNDEFINED_LAYER
Definition layer_ids.h:57
@ F_Cu
Definition layer_ids.h:60
FLIP_DIRECTION
Definition mirror.h:23
The Cairo implementation of the graphics abstraction layer.
Definition eda_group.h:30
std::vector< ZONE * > ZONES
std::deque< PCB_GROUP * > GROUPS
std::deque< PCB_CONSTRAINT * > CONSTRAINTS
std::deque< BOARD_ITEM * > DRAWINGS
std::deque< PCB_POINT * > PCB_POINTS
std::vector< wxString > m_pins
Definition footprint.h:1021
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:32
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:78
VECTOR2< int32_t > VECTOR2I
Definition vector2d.h:708
VECTOR3< double > VECTOR3D
Definition vector3.h:230
ZONE_CONNECTION
How pads are covered by copper in zone.
Definition zones.h:43