KiCad PCB EDA Suite
D_PAD Class Reference

#include <class_pad.h>

Inheritance diagram for D_PAD:
BOARD_CONNECTED_ITEM BOARD_ITEM EDA_ITEM KIGFX::VIEW_ITEM

Public Member Functions

 D_PAD (MODULE *parent)
 
D_PADNext () const
 
MODULEGetParent () const
 
void ImportSettingsFromMaster (const D_PAD &aMasterPad)
 Imports the pad settings from aMasterPad. More...
 
bool IsFlipped () const
 
void SetName (const wxString &aName)
 Set the pad name (sometimes called pad number, although it can be an array reference like AA12). More...
 
const wxString & GetName () const
 
bool IncrementPadName (bool aSkipUnconnectable, bool aFillSequenceGaps)
 Function IncrementPadName. More...
 
bool PadNameEqual (const D_PAD *other) const
 
PAD_SHAPE_T GetShape () const
 Function GetShape. More...
 
void SetShape (PAD_SHAPE_T aShape)
 
void SetPosition (const wxPoint &aPos) override
 
const wxPoint GetPosition () const override
 
PAD_SHAPE_T GetAnchorPadShape () const
 Function GetAnchorPadShape. More...
 
CUST_PAD_SHAPE_IN_ZONE GetCustomShapeInZoneOpt () const
 
void SetCustomShapeInZoneOpt (CUST_PAD_SHAPE_IN_ZONE aOption)
 Set the option for the custom pad shape to use as clearance area in copper zones. More...
 
void SetAnchorPadShape (PAD_SHAPE_T aShape)
 Function SetAnchorPadShape Set the shape of the anchor pad for custm shped pads. More...
 
void SetY (int y)
 
void SetX (int x)
 
void SetPos0 (const wxPoint &aPos)
 
const wxPointGetPos0 () const
 
void SetY0 (int y)
 
void SetX0 (int x)
 
void SetSize (const wxSize &aSize)
 
const wxSize & GetSize () const
 
void SetDelta (const wxSize &aSize)
 
const wxSize & GetDelta () const
 
void SetDrillSize (const wxSize &aSize)
 
const wxSize & GetDrillSize () const
 
void SetOffset (const wxPoint &aOffset)
 
const wxPointGetOffset () const
 
void AddPrimitive (const SHAPE_POLY_SET &aPoly, int aThickness)
 Has meaning only for free shape pads. More...
 
void AddPrimitive (const std::vector< wxPoint > &aPoly, int aThickness)
 add a polygonal basic shape More...
 
void AddPrimitive (wxPoint aStart, wxPoint aEnd, int aThickness)
 segment basic shape More...
 
void AddPrimitive (wxPoint aCenter, int aRadius, int aThickness)
 ring or circle basic shape More...
 
void AddPrimitive (wxPoint aCenter, wxPoint aStart, int aArcAngle, int aThickness)
 arc basic shape More...
 
bool GetBestAnchorPosition (VECTOR2I &aPos)
 
bool MergePrimitivesAsPolygon (SHAPE_POLY_SET *aMergedPolygon=NULL, int aCircleToSegmentsCount=32)
 Merge all basic shapes, converted to a polygon in one polygon, in m_customShapeAsPolygon. More...
 
void DeletePrimitivesList ()
 clear the basic shapes list More...
 
void CustomShapeAsPolygonToBoardPosition (SHAPE_POLY_SET *aMergedPolygon, wxPoint aPosition, double aRotation) const
 When created, the corners coordinates are relative to the pad position, orientation 0, in m_customShapeAsPolygon CustomShapeAsPolygonToBoardPosition transform these coordinates to actual (board) coordinates. More...
 
const std::vector< PAD_CS_PRIMITIVE > & GetPrimitives () const
 Accessor to the basic shape list. More...
 
const SHAPE_POLY_SETGetCustomShapeAsPolygon () const
 Accessor to the custom shape as one polygon. More...
 
void Flip (const wxPoint &aCentre) override
 Function Flip Flip this object, i.e. More...
 
void FlipPrimitives ()
 Flip the basic shapes, in custom pads. More...
 
bool SetPrimitives (const std::vector< PAD_CS_PRIMITIVE > &aPrimitivesList)
 Import to the basic shape list. More...
 
bool AddPrimitives (const std::vector< PAD_CS_PRIMITIVE > &aPrimitivesList)
 Add to the basic shape list. More...
 
void SetOrientation (double aAngle)
 Function SetOrientation sets the rotation angle of the pad. More...
 
void SetOrientationDegrees (double aOrientation)
 Set orientation in degrees. More...
 
double GetOrientation () const
 Function GetOrientation returns the rotation angle of the pad in tenths of degrees, but soon degrees. More...
 
double GetOrientationDegrees () const
 
double GetOrientationRadians () const
 
void SetDrillShape (PAD_DRILL_SHAPE_T aDrillShape)
 
PAD_DRILL_SHAPE_T GetDrillShape () const
 
void GetOblongDrillGeometry (wxPoint &aStartPoint, wxPoint &aEndPoint, int &aWidth) const
 Function GetOblongDrillGeometry calculates the start point, end point and width of an equivalent segment which have the same position and width as the hole Usefull to plot/draw oblong holes like segments with rounded ends used in draw and plot functions. More...
 
void SetLayerSet (LSET aLayerMask)
 
LSET GetLayerSet () const override
 Function GetLayerSet returns a "layer mask", which is a bitmap of all layers on which the TRACK segment or VIA physically resides. More...
 
void SetAttribute (PAD_ATTR_T aAttribute)
 
PAD_ATTR_T GetAttribute () const
 
bool IsAperturePad () const
 
void SetPadToDieLength (int aLength)
 
int GetPadToDieLength () const
 
int GetLocalSolderMaskMargin () const
 
void SetLocalSolderMaskMargin (int aMargin)
 
int GetLocalClearance () const
 
void SetLocalClearance (int aClearance)
 
int GetLocalSolderPasteMargin () const
 
void SetLocalSolderPasteMargin (int aMargin)
 
double GetLocalSolderPasteMarginRatio () const
 
void SetLocalSolderPasteMarginRatio (double aRatio)
 
void TransformShapeWithClearanceToPolygon (SHAPE_POLY_SET &aCornerBuffer, int aClearanceValue, int aCircleToSegmentsCount, double aCorrectionFactor) const override
 Function TransformShapeWithClearanceToPolygon Convert the pad shape to a closed polygon Used in filling zones calculations Circles and arcs are approximated by segments. More...
 
int GetClearance (BOARD_CONNECTED_ITEM *aItem=NULL) const override
 Function GetClearance returns the clearance in internal units. More...
 
int GetSolderMaskMargin () const
 Function GetSolderMaskMargin. More...
 
wxSize GetSolderPasteMargin () const
 Function GetSolderPasteMargin. More...
 
void SetZoneConnection (ZoneConnection aType)
 
ZoneConnection GetZoneConnection () const
 
void SetThermalWidth (int aWidth)
 
int GetThermalWidth () const
 
void SetThermalGap (int aGap)
 
int GetThermalGap () const
 
void Draw (EDA_DRAW_PANEL *aPanel, wxDC *aDC, GR_DRAWMODE aDrawMode, const wxPoint &aOffset=ZeroOffset) override
 Function Draw BOARD_ITEMs have their own color information. More...
 
void DrawShape (EDA_RECT *aClipBox, wxDC *aDC, PAD_DRAWINFO &aDrawInfo)
 Function DrawShape basic function to draw a pad. More...
 
void BuildPadPolygon (wxPoint aCoord[4], wxSize aInflateValue, double aRotation) const
 Function BuildPadPolygon Has meaning only for polygonal pads (trapezoid and rectangular) Build the Corner list of the polygonal shape, depending on shape, extra size (clearance ...) and orientation. More...
 
int GetRoundRectCornerRadius () const
 Function GetRoundRectCornerRadius Has meaning only for rounded rect pads. More...
 
int GetRoundRectCornerRadius (const wxSize &aSize) const
 Helper function GetRoundRectCornerRadius Has meaning only for rounded rect pads Returns the radius of the rounded corners of a rectangle size aSize, using others setting of the pad. More...
 
void SetRoundRectCornerRadius (double aRadius)
 Set the rounded rectangle radius ratio based on a given radius. More...
 
void BuildPadShapePolygon (SHAPE_POLY_SET &aCornerBuffer, wxSize aInflateValue, int aSegmentsPerCircle, double aCorrectionFactor) const
 Function BuildPadShapePolygon Build the Corner list of the polygonal shape, depending on shape, extra size (clearance ...) pad and orientation This function is similar to TransformShapeWithClearanceToPolygon, but the difference is BuildPadShapePolygon creates a polygon shape exactly similar to pad shape, which a size inflated by aInflateValue and TransformShapeWithClearanceToPolygon creates a more complex shape (for instance a rectangular pad is converted in a rectangulr shape with ronded corners) More...
 
bool BuildPadDrillShapePolygon (SHAPE_POLY_SET &aCornerBuffer, int aInflateValue, int aSegmentsPerCircle) const
 Function BuildPadDrillShapePolygon Build the Corner list of the polygonal drill shape, depending on shape pad hole and orientation. More...
 
int BuildSegmentFromOvalShape (wxPoint &aSegStart, wxPoint &aSegEnd, double aRotation, const wxSize &aMargin) const
 Function BuildSegmentFromOvalShape Has meaning only for OVAL (and ROUND) pads Build an equivalent segment having the same shape as the OVAL shape, Useful in draw function and in DRC and HitTest functions, because segments are already well handled by track tests. More...
 
int GetBoundingRadius () const
 Function GetBoundingRadius returns the radius of a minimum sized circle which fully encloses this pad. More...
 
wxPoint ShapePos () const
 
double GetRoundRectRadiusRatio () const
 has meaning only for rounded rect pads More...
 
void SetRoundRectRadiusRatio (double aRadiusScale)
 has meaning only for rounded rect pads Set the scaling factor between the smaller Y or Y size and the radius of the rounded corners. More...
 
int GetSubRatsnest () const
 Function GetSubRatsnest. More...
 
void SetSubRatsnest (int aSubRatsnest)
 
void GetMsgPanelInfo (EDA_UNITS_T aUnits, std::vector< MSG_PANEL_ITEM > &aList) override
 Function GetMsgPanelInfo populates aList of MSG_PANEL_ITEM objects with it's internal state for display purposes. More...
 
bool IsOnLayer (PCB_LAYER_ID aLayer) const override
 Function IsOnLayer tests to see if this object is on the given layer. More...
 
bool HitTest (const wxPoint &aPosition) const override
 Function HitTest tests if aPosition is contained within or on the bounding area of an item. More...
 
bool HitTest (const EDA_RECT &aRect, bool aContained, int aAccuracy=0) const override
 Function HitTest tests if the aRect intersects or contains this object (depending on aContained). More...
 
wxString GetClass () const override
 Function GetClass returns the class name. More...
 
const EDA_RECT GetBoundingBox () const override
 Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes. More...
 
void SetDrawCoord ()
 

Set absolute coordinates.

More...
 
void SetLocalCoord ()
 

Set relative coordinates.

More...
 
void Move (const wxPoint &aMoveVector) override
 Function Move move this object. More...
 
void Rotate (const wxPoint &aRotCentre, double aAngle) override
 Function Rotate Rotate this object. More...
 
wxString GetSelectMenuText (EDA_UNITS_T aUnits) const override
 Function GetSelectMenuText returns the text to display to be used in the selection clarification context menu when multiple items are found at the current cursor position. More...
 
BITMAP_DEF GetMenuImage () const override
 Function GetMenuImage returns a pointer to an image to be used in menus. More...
 
wxString ShowPadShape () const
 Function ShowPadShape. More...
 
wxString ShowPadAttr () const
 Function ShowPadAttr. More...
 
void AppendConfigs (PARAM_CFG_ARRAY *aResult)
 Function AppendConfigs appends to aResult the configuration setting accessors which will later allow reading or writing of configuration file information directly into this object. More...
 
EDA_ITEMClone () const override
 Function Clone creates a duplicate of this item with linked list members set to NULL. More...
 
D_PADDuplicate () const
 same as Clone, but returns a D_PAD item. More...
 
bool PadShouldBeNPTH () const
 A pad whose hole is the same size as the pad is a NPTH. More...
 
virtual void ViewGetLayers (int aLayers[], int &aCount) const override
 Function ViewGetLayers() Returns the all the layers within the VIEW the object is painted on. More...
 
virtual unsigned int ViewGetLOD (int aLayer, KIGFX::VIEW *aView) const override
 Function ViewGetLOD() Returns the level of detail (LOD) of the item. More...
 
virtual const BOX2I ViewBBox () const override
 Function ViewBBox() returns the bounding box of the item covering all its layers. More...
 
void CopyNetlistSettings (D_PAD *aPad, bool aCopyLocalSettings)
 Function CopyNetlistSettings copies the netlist settings to aPad, and the net name. More...
 
virtual void SwapData (BOARD_ITEM *aImage) override
 Swap data between aItem and aImage. More...
 
bool IsConnected () const override
 > More...
 
NETINFO_ITEMGetNet () const
 Function GetNet Returns NET_INFO object for a given item. More...
 
void SetNet (NETINFO_ITEM *aNetInfo)
 Function SetNet Sets a NET_INFO object for the item. More...
 
int GetNetCode () const
 Function GetNetCode. More...
 
bool SetNetCode (int aNetCode, bool aNoAssert=false)
 Function SetNetCode sets net using a net code. More...
 
const wxString & GetNetname () const
 Function GetNetname. More...
 
wxString GetNetnameMsg () const
 Function GetNetnameMsg. More...
 
const wxString & GetShortNetname () const
 Function GetShortNetname. More...
 
std::shared_ptr< NETCLASSGetNetClass () const
 Function GetNetClass returns the NETCLASS for this item. More...
 
wxString GetNetClassName () const
 Function GetNetClassName returns a pointer to the netclass of the zone. More...
 
void SetLocalRatsnestVisible (bool aVisible)
 
bool GetLocalRatsnestVisible () const
 
virtual const wxPoint GetCenter () const
 Function GetCenter() More...
 
BOARD_ITEMBack () const
 
virtual PCB_LAYER_ID GetLayer () const
 Function GetLayer returns the primary layer this item is on. More...
 
virtual void SetLayer (PCB_LAYER_ID aLayer)
 Function SetLayer sets the layer this item is on. More...
 
bool IsTrack () const
 Function IsTrack tests to see if this object is a track or via (or microvia). More...
 
virtual bool IsLocked () const
 Function IsLocked. More...
 
virtual void SetLocked (bool aLocked)
 Function SetLocked modifies 'lock' status for of the item. More...
 
virtual void UnLink ()
 Function UnLink detaches this object from its owner. More...
 
void DeleteStructure ()
 Function DeleteStructure deletes this object after UnLink()ing it from its owner if it has one. More...
 
void Move (const VECTOR2I &aMoveVector)
 
void Rotate (const VECTOR2I &aRotCentre, double aAngle)
 
void Flip (const VECTOR2I &aCentre)
 
virtual BOARDGetBoard () const
 Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none. More...
 
wxString GetLayerName () const
 Function GetLayerName returns the name of the PCB layer on which the item resides. More...
 
KICAD_T Type () const
 Function Type() More...
 
void SetTimeStamp (timestamp_t aNewTimeStamp)
 
timestamp_t GetTimeStamp () const
 
DHEADGetList () const
 
void SetNext (EDA_ITEM *aNext)
 
void SetBack (EDA_ITEM *aBack)
 
void SetParent (EDA_ITEM *aParent)
 
void SetList (DHEAD *aList)
 
bool IsNew () const
 
bool IsModified () const
 
bool IsMoving () const
 
bool IsDragging () const
 
bool IsWireImage () const
 
bool IsSelected () const
 
bool IsResized () const
 
bool IsHighlighted () const
 
bool IsBrightened () const
 
void SetWireImage ()
 
void SetSelected ()
 
void SetHighlighted ()
 
void SetBrightened ()
 
void ClearSelected ()
 
void ClearHighlighted ()
 
void ClearBrightened ()
 
void SetModified ()
 
int GetState (int type) const
 
void SetState (int type, int state)
 
STATUS_FLAGS GetStatus () const
 
void SetStatus (STATUS_FLAGS aStatus)
 
void SetFlags (STATUS_FLAGS aMask)
 
void ClearFlags (STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
 
STATUS_FLAGS GetFlags () const
 
bool IsType (const KICAD_T aScanTypes[])
 Function IsType Checks whether the item is one of the listed types. More...
 
void SetForceVisible (bool aEnable)
 Function SetForceVisible is used to set and cleag force visible flag used to force the item to be drawn even if it's draw attribute is set to not visible. More...
 
virtual SEARCH_RESULT Visit (INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
 Function Visit may be re-implemented for each derived class in order to handle all the types given by its member data. More...
 
virtual bool Matches (wxFindReplaceData &aSearchData, void *aAuxData, wxPoint *aFindLocation)
 Function Matches compares the item against the search criteria in aSearchData. More...
 
bool Replace (wxFindReplaceData &aSearchData, wxString &aText)
 Helper function used in search and replace dialog Function Replace performs a text replace on aText using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
virtual bool Replace (wxFindReplaceData &aSearchData, void *aAuxData=NULL)
 Function Replace performs a text replace using the find and replace criteria in aSearchData on items that support text find and replace. More...
 
virtual bool IsReplaceable () const
 Function IsReplaceable. More...
 
bool operator< (const EDA_ITEM &aItem) const
 Test if another item is less than this object. More...
 
virtual void ViewDraw (int aLayer, VIEW *aView) const
 Function ViewDraw() Draws the parts of the object belonging to layer aLayer. More...
 
VIEW_ITEM_DATA * viewPrivData () const
 

Static Public Member Functions

static LSET StandardMask ()
 layer set for a through hole pad More...
 
static LSET SMDMask ()
 layer set for a SMD pad on Front layer More...
 
static LSET ConnSMDMask ()
 layer set for a SMD pad on Front layer used for edge board connectors More...
 
static LSET UnplatedHoleMask ()
 layer set for a mechanical unplated through hole pad More...
 
static LSET ApertureMask ()
 layer set for an aperture pad More...
 
static bool ClassOf (const EDA_ITEM *aItem)
 
static int Compare (const D_PAD *padref, const D_PAD *padcmp)
 Function Compare compares two pads and return 0 if they are equal. More...
 
static wxString ShowShape (STROKE_T aShape)
 Function ShowShape converts the enum STROKE_T integer value to a wxString. More...
 
static std::string FormatInternalUnits (int aValue)
 Function FormatInternalUnits converts aValue from board internal units to a string appropriate for writing to file. More...
 
static std::string FormatInternalUnits (const wxPoint &aPoint)
 
static std::string FormatInternalUnits (const VECTOR2I &aPoint)
 
static std::string FormatInternalUnits (const wxSize &aSize)
 
static std::string FormatAngle (double aAngle)
 Function FormatAngle converts aAngle from board units to a string appropriate for writing to file. More...
 
static SEARCH_RESULT IterateForward (EDA_ITEM *listStart, INSPECTOR inspector, void *testData, const KICAD_T scanTypes[])
 Function IterateForward walks through the object tree calling the inspector() on each object type requested in scanTypes. More...
 
static bool Sort (const EDA_ITEM *aLeft, const EDA_ITEM *aRight)
 Function Sort is a helper function to be used by the C++ STL sort algorithm for sorting a STL container of EDA_ITEM pointers. More...
 

Static Public Attributes

static int m_PadSketchModePenSize = 0
 Pen size used to draw pads in sketch mode (mode used to print pads on silkscreen layer) More...
 
static wxPoint ZeroOffset
 A value of wxPoint(0,0) which can be passed to the Draw() functions. More...
 

Protected Member Functions

bool Matches (const wxString &aText, wxFindReplaceData &aSearchData)
 Function Matches compares aText against search criteria in aSearchData. More...
 

Static Protected Member Functions

static int getTrailingInt (const wxString &aStr)
 
static int getNextNumberInSequence (const std::set< int > &aSeq, bool aFillSequenceGaps)
 

Protected Attributes

NETINFO_ITEMm_netinfo
 Stores all informations about the net that item belongs to. More...
 
PCB_LAYER_ID m_Layer
 
EDA_ITEMPnext
 next in linked list More...
 
EDA_ITEMPback
 previous in linked list More...
 
DHEADm_List
 which DLIST I am on. More...
 
EDA_ITEMm_Parent
 Linked list: Link (parent struct) More...
 
timestamp_t m_TimeStamp
 Time stamp used for logical links. More...
 
bool m_forceVisible
 Set to true to override the visibility setting of the item. More...
 
STATUS_FLAGS m_Flags
 Flag bits for editing and other uses. More...
 

Private Member Functions

int boundingRadius () const
 Function boundingRadius returns a calculated radius of a bounding circle for this pad. More...
 
bool buildCustomPadPolygon (SHAPE_POLY_SET *aMergedPolygon, int aCircleToSegmentsCount)
 

Private Attributes

int m_boundingRadius
 radius of the circle containing the pad shape More...
 
wxString m_name
 
wxPoint m_Pos
 pad Position on board More...
 
PAD_SHAPE_T m_padShape
 Shape: PAD_SHAPE_CIRCLE, PAD_SHAPE_RECT, PAD_SHAPE_OVAL, PAD_SHAPE_TRAPEZOID, PAD_SHAPE_ROUNDRECT, PAD_SHAPE_POLYGON. More...
 
std::vector< PAD_CS_PRIMITIVEm_basicShapes
 for free shape pads: a list of basic shapes, in local coordinates, orient 0, coordinates relative to m_Pos They are expected to define only one copper area. More...
 
SHAPE_POLY_SET m_customShapeAsPolygon
 for free shape pads: the set of basic shapes, merged as one polygon, in local coordinates, orient 0, coordinates relative to m_Pos More...
 
CUST_PAD_SHAPE_IN_ZONE m_customShapeClearanceArea
 How to build the custom shape in zone, to create the clearance area: CUST_PAD_SHAPE_IN_ZONE_OUTLINE = use pad shape CUST_PAD_SHAPE_IN_ZONE_CONVEXHULL = use the convex hull of the pad shape other values are currently reserved. More...
 
int m_SubRatsnest
 variable used in rats nest computations handle subnet (block) number in ratsnest connection More...
 
wxSize m_Drill
 Drill diam (drill shape = PAD_CIRCLE) or drill size (shape = OVAL) for drill shape = PAD_CIRCLE, drill diam = m_Drill.x. More...
 
wxSize m_Size
 X and Y size ( relative to orient 0) More...
 
PAD_DRILL_SHAPE_T m_drillShape
 PAD_DRILL_SHAPE_CIRCLE, PAD_DRILL_SHAPE_OBLONG. More...
 
double m_padRoundRectRadiusScale
 scaling factor from smallest m_Size coord to corner radius, default 0.25 More...
 
PAD_SHAPE_T m_anchorPadShape
 for custom shaped pads: shape of pad anchor, PAD_SHAPE_RECT, PAD_SHAPE_CIRCLE More...
 
wxPoint m_Offset
 m_Offset is useful only for oblong and rect pads (it can be used for other shapes, but without any interest). More...
 
LSET m_layerMask
 Bitwise layer :1= copper layer, 15= cmp, 2..14 = internal layers 16 . More...
 
wxSize m_DeltaSize
 delta on rectangular shapes More...
 
wxPoint m_Pos0
 Initial Pad position (i.e. More...
 
PAD_ATTR_T m_Attribute
 PAD_ATTRIB_NORMAL, PAD_ATTRIB_SMD, PAD_ATTRIB_CONN, PAD_ATTRIB_HOLE_NOT_PLATED. More...
 
double m_Orient
 in 1/10 degrees More...
 
int m_LengthPadToDie
 Length net from pad to die, inside the package. More...
 
int m_LocalClearance
 Local clearance. More...
 
int m_LocalSolderMaskMargin
 Local mask margins: when 0, the parent footprint design values are used. More...
 
int m_LocalSolderPasteMargin
 Local solder paste margin absolute value. More...
 
double m_LocalSolderPasteMarginRatio
 Local solder mask margin ratio value of pad size The final margin is the sum of these 2 values. More...
 
ZoneConnection m_ZoneConnection
 how the connection to zone is made: no connection, thermal relief ... More...
 
int m_ThermalWidth
 
int m_ThermalGap
 

Detailed Description

Definition at line 133 of file class_pad.h.

Constructor & Destructor Documentation

D_PAD::D_PAD ( MODULE parent)

Definition at line 59 of file class_pad.cpp.

References CUST_PAD_SHAPE_IN_ZONE_OUTLINE, GetParent(), MODULE::GetPosition(), m_Attribute, m_boundingRadius, m_customShapeClearanceArea, m_Drill, m_layerMask, m_LengthPadToDie, m_LocalClearance, m_LocalSolderMaskMargin, m_LocalSolderPasteMargin, m_LocalSolderPasteMarginRatio, m_Orient, m_padRoundRectRadiusScale, EDA_ITEM::m_Parent, m_Pos, m_Size, m_ThermalGap, m_ThermalWidth, m_ZoneConnection, PAD_ATTRIB_STANDARD, PAD_DRILL_SHAPE_CIRCLE, PAD_SHAPE_CIRCLE, PAD_ZONE_CONN_INHERITED, PCB_MODULE_T, SetAnchorPadShape(), SetDrillShape(), SetShape(), SetSubRatsnest(), StandardMask(), and EDA_ITEM::Type().

Referenced by Clone().

59  :
61 {
62  m_Size.x = m_Size.y = Mils2iu( 60 ); // Default pad size 60 mils.
63  m_Drill.x = m_Drill.y = Mils2iu( 30 ); // Default drill size 30 mils.
64  m_Orient = 0; // Pad rotation in 1/10 degrees.
65  m_LengthPadToDie = 0;
66 
67  if( m_Parent && m_Parent->Type() == PCB_MODULE_T )
68  {
70  }
71 
72  SetShape( PAD_SHAPE_CIRCLE ); // Default pad shape is PAD_CIRCLE.
73  SetAnchorPadShape( PAD_SHAPE_CIRCLE ); // Default shape for custom shaped pads
74  // is PAD_CIRCLE.
75  SetDrillShape( PAD_DRILL_SHAPE_CIRCLE ); // Default pad drill shape is a circle.
76  m_Attribute = PAD_ATTRIB_STANDARD; // Default pad type is NORMAL (thru hole)
77  m_LocalClearance = 0;
81  // Parameters for round rect only:
82  m_padRoundRectRadiusScale = 0.25; // from IPC-7351C standard
83 
84  m_ZoneConnection = PAD_ZONE_CONN_INHERITED; // Use parent setting by default
85  m_ThermalWidth = 0; // Use parent setting by default
86  m_ThermalGap = 0; // Use parent setting by default
87 
89 
90  // Set layers mask to default for a standard thru hole pad.
92 
93  SetSubRatsnest( 0 ); // used in ratsnest calculations
94 
95  m_boundingRadius = -1;
96 }
int m_LocalClearance
Local clearance.
Definition: class_pad.h:864
int m_ThermalGap
Definition: class_pad.h:877
int m_LocalSolderMaskMargin
Local mask margins: when 0, the parent footprint design values are used.
Definition: class_pad.h:868
KICAD_T Type() const
Function Type()
Definition: base_struct.h:198
double m_padRoundRectRadiusScale
scaling factor from smallest m_Size coord to corner radius, default 0.25
Definition: class_pad.h:824
int m_boundingRadius
radius of the circle containing the pad shape
Definition: class_pad.h:784
EDA_ITEM * m_Parent
Linked list: Link (parent struct)
Definition: base_struct.h:168
static LSET StandardMask()
layer set for a through hole pad
Definition: class_pad.cpp:99
int m_LocalSolderPasteMargin
Local solder paste margin absolute value.
Definition: class_pad.h:869
BOARD_CONNECTED_ITEM(BOARD_ITEM *aParent, KICAD_T idtype)
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
MODULE * GetParent() const
Definition: class_pad.h:162
class D_PAD, a pad in a footprint
Definition: typeinfo.h:90
void SetSubRatsnest(int aSubRatsnest)
Definition: class_pad.h:656
class MODULE, a footprint
Definition: typeinfo.h:89
void SetAnchorPadShape(PAD_SHAPE_T aShape)
Function SetAnchorPadShape Set the shape of the anchor pad for custm shped pads.
Definition: class_pad.h:253
CUST_PAD_SHAPE_IN_ZONE m_customShapeClearanceArea
How to build the custom shape in zone, to create the clearance area: CUST_PAD_SHAPE_IN_ZONE_OUTLINE =...
Definition: class_pad.h:811
int m_ThermalWidth
Definition: class_pad.h:876
LSET m_layerMask
Bitwise layer :1= copper layer, 15= cmp, 2..14 = internal layers 16 .
Definition: class_pad.h:846
void SetDrillShape(PAD_DRILL_SHAPE_T aDrillShape)
Definition: class_pad.h:386
int m_LengthPadToDie
Length net from pad to die, inside the package.
Definition: class_pad.h:859
Usual pad.
Definition: pad_shapes.h:60
void SetShape(PAD_SHAPE_T aShape)
Definition: class_pad.h:217
PAD_ATTR_T m_Attribute
PAD_ATTRIB_NORMAL, PAD_ATTRIB_SMD, PAD_ATTRIB_CONN, PAD_ATTRIB_HOLE_NOT_PLATED.
Definition: class_pad.h:855
wxSize m_Drill
Drill diam (drill shape = PAD_CIRCLE) or drill size (shape = OVAL) for drill shape = PAD_CIRCLE...
Definition: class_pad.h:816
double m_Orient
in 1/10 degrees
Definition: class_pad.h:857
double m_LocalSolderPasteMarginRatio
Local solder mask margin ratio value of pad size The final margin is the sum of these 2 values...
Definition: class_pad.h:871
const wxPoint GetPosition() const override
Definition: class_module.h:184
ZoneConnection m_ZoneConnection
how the connection to zone is made: no connection, thermal relief ...
Definition: class_pad.h:874
wxPoint m_Pos
pad Position on board
Definition: class_pad.h:788

Member Function Documentation

void D_PAD::AddPrimitive ( const SHAPE_POLY_SET aPoly,
int  aThickness 
)

Has meaning only for free shape pads.

add a free shape to the shape list. the shape can be a polygon (outline can have a thickness) a thick segment a filled circle or ring ( if thickness == 0, this is a filled circle, else a ring) a arcadd a polygonal basic shape

Definition at line 91 of file pad_custom_shape_functions.cpp.

References SHAPE_POLY_SET::Append(), SHAPE_POLY_SET::CIterate(), SHAPE_POLY_SET::Fracture(), and SHAPE_POLY_SET::PM_STRICTLY_SIMPLE.

Referenced by PCB_EDIT_FRAME::Create_MuWaveComponent(), and PlotStandardLayer().

92 {
93  std::vector<wxPoint> points;
94 
95  // If aPoly has holes, convert it to a polygon with no holes.
96  SHAPE_POLY_SET poly_no_hole;
97  poly_no_hole.Append( aPoly );
99 
100  for( auto iter = poly_no_hole.CIterate(); iter; iter++ )
101  points.push_back( wxPoint( iter->x, iter->y ) );
102 
103  AddPrimitive( points, aThickness );
104 }
CONST_ITERATOR CIterate(int aFirst, int aLast, bool aIterateHoles=false) const
Class SHAPE_POLY_SET.
void Fracture(POLYGON_MODE aFastMode)
Converts a set of polygons with holes to a singe outline with "slits"/"fractures" connecting the oute...
void AddPrimitive(const SHAPE_POLY_SET &aPoly, int aThickness)
Has meaning only for free shape pads.
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline) ...
void D_PAD::AddPrimitive ( const std::vector< wxPoint > &  aPoly,
int  aThickness 
)

add a polygonal basic shape

Definition at line 106 of file pad_custom_shape_functions.cpp.

References PAD_CS_PRIMITIVE::m_Poly, PAD_CS_PRIMITIVE::m_Thickness, and S_POLYGON.

107 {
108  PAD_CS_PRIMITIVE shape( S_POLYGON );
109  shape.m_Poly = aPoly;
110  shape.m_Thickness = aThickness;
111  m_basicShapes.push_back( shape );
112 
114 }
bool MergePrimitivesAsPolygon(SHAPE_POLY_SET *aMergedPolygon=NULL, int aCircleToSegmentsCount=32)
Merge all basic shapes, converted to a polygon in one polygon, in m_customShapeAsPolygon.
std::vector< PAD_CS_PRIMITIVE > m_basicShapes
for free shape pads: a list of basic shapes, in local coordinates, orient 0, coordinates relative to ...
Definition: class_pad.h:798
polygon (not yet used for tracks, but could be in microwave apps)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:91
void D_PAD::AddPrimitive ( wxPoint  aStart,
wxPoint  aEnd,
int  aThickness 
)

segment basic shape

Definition at line 117 of file pad_custom_shape_functions.cpp.

References PAD_CS_PRIMITIVE::m_End, PAD_CS_PRIMITIVE::m_Start, PAD_CS_PRIMITIVE::m_Thickness, and S_SEGMENT.

118 {
119  PAD_CS_PRIMITIVE shape( S_SEGMENT );
120  shape.m_Start = aStart;
121  shape.m_End = aEnd;
122  shape.m_Thickness = aThickness;
123  m_basicShapes.push_back( shape );
124 
126 }
bool MergePrimitivesAsPolygon(SHAPE_POLY_SET *aMergedPolygon=NULL, int aCircleToSegmentsCount=32)
Merge all basic shapes, converted to a polygon in one polygon, in m_customShapeAsPolygon.
std::vector< PAD_CS_PRIMITIVE > m_basicShapes
for free shape pads: a list of basic shapes, in local coordinates, orient 0, coordinates relative to ...
Definition: class_pad.h:798
usual segment : line with rounded ends
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:91
void D_PAD::AddPrimitive ( wxPoint  aCenter,
int  aRadius,
int  aThickness 
)

ring or circle basic shape

Definition at line 142 of file pad_custom_shape_functions.cpp.

References PAD_CS_PRIMITIVE::m_Radius, PAD_CS_PRIMITIVE::m_Start, PAD_CS_PRIMITIVE::m_Thickness, and S_CIRCLE.

143 {
144  PAD_CS_PRIMITIVE shape( S_CIRCLE );
145  shape.m_Start = aCenter;
146  shape.m_Radius = aRadius;
147  shape.m_Thickness = aThickness;
148  m_basicShapes.push_back( shape );
149 
151 }
bool MergePrimitivesAsPolygon(SHAPE_POLY_SET *aMergedPolygon=NULL, int aCircleToSegmentsCount=32)
Merge all basic shapes, converted to a polygon in one polygon, in m_customShapeAsPolygon.
std::vector< PAD_CS_PRIMITIVE > m_basicShapes
for free shape pads: a list of basic shapes, in local coordinates, orient 0, coordinates relative to ...
Definition: class_pad.h:798
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:91
void D_PAD::AddPrimitive ( wxPoint  aCenter,
wxPoint  aStart,
int  aArcAngle,
int  aThickness 
)

arc basic shape

Definition at line 129 of file pad_custom_shape_functions.cpp.

References PAD_CS_PRIMITIVE::m_ArcAngle, PAD_CS_PRIMITIVE::m_End, PAD_CS_PRIMITIVE::m_Start, PAD_CS_PRIMITIVE::m_Thickness, and S_ARC.

130 {
131  PAD_CS_PRIMITIVE shape( S_ARC );
132  shape.m_Start = aCenter;
133  shape.m_End = aStart;
134  shape.m_ArcAngle = aArcAngle;
135  shape.m_Thickness = aThickness;
136  m_basicShapes.push_back( shape );
137 
139 }
bool MergePrimitivesAsPolygon(SHAPE_POLY_SET *aMergedPolygon=NULL, int aCircleToSegmentsCount=32)
Merge all basic shapes, converted to a polygon in one polygon, in m_customShapeAsPolygon.
std::vector< PAD_CS_PRIMITIVE > m_basicShapes
for free shape pads: a list of basic shapes, in local coordinates, orient 0, coordinates relative to ...
Definition: class_pad.h:798
Arcs (with rounded ends)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:91
bool D_PAD::AddPrimitives ( const std::vector< PAD_CS_PRIMITIVE > &  aPrimitivesList)

Add to the basic shape list.

Returns
true if OK, false if issues (more than one polygon to build the polygon shape list)

Definition at line 167 of file pad_custom_shape_functions.cpp.

168 {
169  for( const auto& prim : aPrimitivesList )
170  m_basicShapes.push_back( prim );
171 
172  return MergePrimitivesAsPolygon();
173 }
bool MergePrimitivesAsPolygon(SHAPE_POLY_SET *aMergedPolygon=NULL, int aCircleToSegmentsCount=32)
Merge all basic shapes, converted to a polygon in one polygon, in m_customShapeAsPolygon.
std::vector< PAD_CS_PRIMITIVE > m_basicShapes
for free shape pads: a list of basic shapes, in local coordinates, orient 0, coordinates relative to ...
Definition: class_pad.h:798
LSET D_PAD::ApertureMask ( )
static

layer set for an aperture pad

Definition at line 127 of file class_pad.cpp.

References F_Paste.

128 {
129  static LSET saved = LSET( 1, F_Paste );
130  return saved;
131 }
Class LSET is a set of PCB_LAYER_IDs.
void D_PAD::AppendConfigs ( PARAM_CFG_ARRAY aResult)

Function AppendConfigs appends to aResult the configuration setting accessors which will later allow reading or writing of configuration file information directly into this object.

Definition at line 485 of file class_pad.cpp.

References m_Drill, and m_Size.

486 {
487  // Parameters stored in config are only significant parameters
488  // for a template.
489  // So not all parameters are stored, just few.
490  aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadDrill" ),
491  &m_Drill.x,
492  Millimeter2iu( 0.6 ),
493  Millimeter2iu( 0.1 ), Millimeter2iu( 10.0 ),
494  NULL, MM_PER_IU ) );
495 
496  aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadDrillOvalY" ),
497  &m_Drill.y,
498  Millimeter2iu( 0.6 ),
499  Millimeter2iu( 0.1 ), Millimeter2iu( 10.0 ),
500  NULL, MM_PER_IU ) );
501 
502  aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadSizeH" ),
503  &m_Size.x,
504  Millimeter2iu( 1.4 ),
505  Millimeter2iu( 0.1 ), Millimeter2iu( 20.0 ),
506  NULL, MM_PER_IU ) );
507 
508  aResult->push_back( new PARAM_CFG_INT_WITH_SCALE( wxT( "PadSizeV" ),
509  &m_Size.y,
510  Millimeter2iu( 1.4 ),
511  Millimeter2iu( 0.1 ), Millimeter2iu( 20.0 ),
512  NULL, MM_PER_IU ) );
513 }
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
Configuration parameter - Integer Class with unit conversion.
wxSize m_Drill
Drill diam (drill shape = PAD_CIRCLE) or drill size (shape = OVAL) for drill shape = PAD_CIRCLE...
Definition: class_pad.h:816
BOARD_ITEM* BOARD_ITEM::Back ( ) const
inlineinherited

Definition at line 117 of file class_board_item.h.

References EDA_ITEM::Pback.

Referenced by SwapItemData().

117 { return static_cast<BOARD_ITEM*>( Pback ); }
EDA_ITEM * Pback
previous in linked list
Definition: base_struct.h:165
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
int D_PAD::boundingRadius ( ) const
private

Function boundingRadius returns a calculated radius of a bounding circle for this pad.

Definition at line 141 of file class_pad.cpp.

References abs, SHAPE_POLY_SET::COutline(), SHAPE_LINE_CHAIN::CPoint(), dist, EuclideanNorm(), VECTOR2< T >::EuclideanNorm(), GetRoundRectCornerRadius(), GetShape(), KiROUND(), m_customShapeAsPolygon, m_DeltaSize, m_Size, max, SHAPE_POLY_SET::OutlineCount(), PAD_SHAPE_CIRCLE, PAD_SHAPE_CUSTOM, PAD_SHAPE_OVAL, PAD_SHAPE_RECT, PAD_SHAPE_ROUNDRECT, PAD_SHAPE_TRAPEZOID, and SHAPE_LINE_CHAIN::PointCount().

142 {
143  int x, y;
144  int radius;
145 
146  switch( GetShape() )
147  {
148  case PAD_SHAPE_CIRCLE:
149  radius = m_Size.x / 2;
150  break;
151 
152  case PAD_SHAPE_OVAL:
153  radius = std::max( m_Size.x, m_Size.y ) / 2;
154  break;
155 
156  case PAD_SHAPE_RECT:
157  radius = 1 + KiROUND( EuclideanNorm( m_Size ) / 2 );
158  break;
159 
160  case PAD_SHAPE_TRAPEZOID:
161  x = m_Size.x + std::abs( m_DeltaSize.y ); // Remember: m_DeltaSize.y is the m_Size.x change
162  y = m_Size.y + std::abs( m_DeltaSize.x ); // Remember: m_DeltaSize.x is the m_Size.y change
163  radius = 1 + KiROUND( hypot( x, y ) / 2 );
164  break;
165 
166  case PAD_SHAPE_ROUNDRECT:
167  radius = GetRoundRectCornerRadius();
168  x = m_Size.x >> 1;
169  y = m_Size.y >> 1;
170  radius += 1 + KiROUND( EuclideanNorm( wxSize( x - radius, y - radius )));
171  break;
172 
173  case PAD_SHAPE_CUSTOM:
174  radius = 0;
175 
176  for( int cnt = 0; cnt < m_customShapeAsPolygon.OutlineCount(); ++cnt )
177  {
178  const SHAPE_LINE_CHAIN& poly = m_customShapeAsPolygon.COutline( cnt );
179  for( int ii = 0; ii < poly.PointCount(); ++ii )
180  {
181  int dist = KiROUND( poly.CPoint( ii ).EuclideanNorm() );
182  radius = std::max( radius, dist );
183  }
184  }
185 
186  radius += 1;
187  break;
188 
189  default:
190  radius = 0;
191  }
192 
193  return radius;
194 }
double EuclideanNorm(const wxPoint &vector)
Euclidean norm of a 2D vector.
Definition: trigo.h:112
static const int dist[10][10]
Definition: ar_matrix.cpp:320
static int KiROUND(double v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: common.h:120
int PointCount() const
Function PointCount()
int GetRoundRectCornerRadius() const
Function GetRoundRectCornerRadius Has meaning only for rounded rect pads.
Definition: class_pad.h:528
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
int OutlineCount() const
Returns the number of outlines in the set
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
#define abs(a)
Definition: auxiliary.h:84
T EuclideanNorm() const
Destructor.
Definition: vector2d.h:292
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
SHAPE_POLY_SET m_customShapeAsPolygon
for free shape pads: the set of basic shapes, merged as one polygon, in local coordinates, orient 0, coordinates relative to m_Pos
Definition: class_pad.h:803
wxSize m_DeltaSize
delta on rectangular shapes
Definition: class_pad.h:850
#define max(a, b)
Definition: auxiliary.h:86
Class SHAPE_LINE_CHAIN.
const VECTOR2I & CPoint(int aIndex) const
Function CPoint()
bool D_PAD::buildCustomPadPolygon ( SHAPE_POLY_SET aMergedPolygon,
int  aCircleToSegmentsCount 
)
private

Definition at line 184 of file pad_custom_shape_functions.cpp.

References SHAPE_POLY_SET::Append(), SHAPE_POLY_SET::BooleanAdd(), SHAPE_POLY_SET::Fracture(), SHAPE_POLY_SET::Inflate(), PAD_CS_PRIMITIVE::m_ArcAngle, PAD_CS_PRIMITIVE::m_End, PAD_CS_PRIMITIVE::m_Poly, PAD_CS_PRIMITIVE::m_Radius, PAD_CS_PRIMITIVE::m_Shape, PAD_CS_PRIMITIVE::m_Start, PAD_CS_PRIMITIVE::m_Thickness, SHAPE_POLY_SET::NewOutline(), SHAPE_POLY_SET::OutlineCount(), SHAPE_POLY_SET::PM_FAST, SHAPE_POLY_SET::PM_STRICTLY_SIMPLE, S_ARC, S_CIRCLE, S_POLYGON, S_SEGMENT, SHAPE_POLY_SET::Simplify(), TransformArcToPolygon(), TransformCircleToPolygon(), TransformRingToPolygon(), and TransformRoundedEndsSegmentToPolygon().

187 {
188  SHAPE_POLY_SET aux_polyset;
189 
190  for( unsigned cnt = 0; cnt < m_basicShapes.size(); ++cnt )
191  {
192  const PAD_CS_PRIMITIVE& bshape = m_basicShapes[cnt];
193 
194  switch( bshape.m_Shape )
195  {
196  case S_SEGMENT: // usual segment : line with rounded ends
198  bshape.m_Start, bshape.m_End, aCircleToSegmentsCount, bshape.m_Thickness );
199  break;
200 
201  case S_ARC: // Arc with rounded ends
202  TransformArcToPolygon( aux_polyset,
203  bshape.m_Start, bshape.m_End, bshape.m_ArcAngle,
204  aCircleToSegmentsCount, bshape.m_Thickness );
205  break;
206 
207  case S_CIRCLE: // ring or circle
208  if( bshape.m_Thickness ) // ring
209  TransformRingToPolygon( aux_polyset,
210  bshape.m_Start, bshape.m_Radius,
211  aCircleToSegmentsCount, bshape.m_Thickness ) ;
212  else // Filled circle
213  TransformCircleToPolygon( aux_polyset,
214  bshape.m_Start, bshape.m_Radius,
215  aCircleToSegmentsCount ) ;
216  break;
217 
218  case S_POLYGON: // polygon
219  if( bshape.m_Poly.size() < 2 )
220  break; // Malformed polygon.
221 
222  {
223  // Insert the polygon:
224  const std::vector< wxPoint>& poly = bshape.m_Poly;
225  aux_polyset.NewOutline();
226 
227  if( bshape.m_Thickness )
228  {
229  SHAPE_POLY_SET polyset;
230  polyset.NewOutline();
231 
232  for( unsigned ii = 0; ii < poly.size(); ii++ )
233  {
234  polyset.Append( poly[ii].x, poly[ii].y );
235  }
236 
237  polyset.Inflate( bshape.m_Thickness/2, 32 );
238 
239  aux_polyset.Append( polyset );
240  }
241 
242  else
243  for( unsigned ii = 0; ii < poly.size(); ii++ )
244  aux_polyset.Append( poly[ii].x, poly[ii].y );
245  }
246  break;
247 
248  default:
249  break;
250  }
251  }
252 
253  aux_polyset.Simplify( SHAPE_POLY_SET::PM_FAST );
254 
255  // Merge all polygons with the initial pad anchor shape
256  if( aux_polyset.OutlineCount() )
257  {
258  aMergedPolygon->BooleanAdd( aux_polyset, SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
259  aMergedPolygon->Fracture( SHAPE_POLY_SET::PM_STRICTLY_SIMPLE );
260  }
261 
262  return aMergedPolygon->OutlineCount() <= 1;
263 }
void TransformRoundedEndsSegmentToPolygon(SHAPE_POLY_SET &aCornerBuffer, wxPoint aStart, wxPoint aEnd, int aCircleToSegmentsCount, int aWidth)
Function TransformRoundedEndsSegmentToPolygon convert a segment with rounded ends to a polygon Conver...
std::vector< PAD_CS_PRIMITIVE > m_basicShapes
for free shape pads: a list of basic shapes, in local coordinates, orient 0, coordinates relative to ...
Definition: class_pad.h:798
void BooleanAdd(const SHAPE_POLY_SET &b, POLYGON_MODE aFastMode)
Performs boolean polyset union For aFastMode meaning, see function booleanOp
void TransformCircleToPolygon(SHAPE_POLY_SET &aCornerBuffer, wxPoint aCenter, int aRadius, int aCircleToSegmentsCount)
Function TransformCircleToPolygon convert a circle to a polygon, using multiple straight lines...
wxPoint m_Start
angle of an arc, from its starting point, in 0.1 deg
Definition: class_pad.h:100
polygon (not yet used for tracks, but could be in microwave apps)
usual segment : line with rounded ends
int OutlineCount() const
Returns the number of outlines in the set
int m_Radius
thickness of segment or outline For filled S_CIRCLE shape, thickness = 0.
Definition: class_pad.h:98
void Inflate(int aFactor, int aCircleSegmentsCount)
Performs outline inflation/deflation, using round corners.
std::vector< wxPoint > m_Poly
is also the start point of the arc
Definition: class_pad.h:102
Class SHAPE_POLY_SET.
Arcs (with rounded ends)
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:91
void Simplify(POLYGON_MODE aFastMode)
Simplifies the polyset (merges overlapping polys, eliminates degeneracy/self-intersections) For aFast...
wxPoint m_End
is also the center of the circle and arc
Definition: class_pad.h:101
int NewOutline()
Creates a new empty polygon in the set and returns its index
STROKE_T m_Shape
Definition: class_pad.h:94
void Fracture(POLYGON_MODE aFastMode)
Converts a set of polygons with holes to a singe outline with "slits"/"fractures" connecting the oute...
int m_Thickness
S_SEGMENT, S_ARC, S_CIRCLE, S_POLYGON only (same as DRAWSEGMENT)
Definition: class_pad.h:95
void TransformRingToPolygon(SHAPE_POLY_SET &aCornerBuffer, wxPoint aCentre, int aRadius, int aCircleToSegmentsCount, int aWidth)
Function TransformRingToPolygon Creates a polygon from a ring Convert arcs to multiple straight segme...
void TransformArcToPolygon(SHAPE_POLY_SET &aCornerBuffer, wxPoint aCentre, wxPoint aStart, double aArcAngle, int aCircleToSegmentsCount, int aWidth)
Function TransformArcToPolygon Creates a polygon from an Arc Convert arcs to multiple straight segmen...
double m_ArcAngle
radius of a circle
Definition: class_pad.h:99
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline) ...
bool D_PAD::BuildPadDrillShapePolygon ( SHAPE_POLY_SET aCornerBuffer,
int  aInflateValue,
int  aSegmentsPerCircle 
) const

Function BuildPadDrillShapePolygon Build the Corner list of the polygonal drill shape, depending on shape pad hole and orientation.

Parameters
aCornerBuffer= a buffer to fill.
aInflateValue= the clearance or margin value. value > 0: inflate, < 0 deflate, = 0 : no change
aSegmentsPerCircle= number of segments to approximate a circle (used for round and oblong shapes only(16 to 32 is a good value)
Returns
false if the pad has no hole, true otherwise

Definition at line 837 of file board_items_to_polygon_shape_transform.cpp.

References TransformCircleToPolygon(), and TransformRoundedEndsSegmentToPolygon().

Referenced by CINFO3D_VISU::createLayers().

839 {
840  wxSize drillsize = GetDrillSize();
841 
842  if( !drillsize.x || !drillsize.y )
843  return false;
844 
845  if( drillsize.x == drillsize.y ) // usual round hole
846  {
847  TransformCircleToPolygon( aCornerBuffer, GetPosition(),
848  (drillsize.x / 2) + aInflateValue, aSegmentsPerCircle );
849  }
850  else // Oblong hole
851  {
852  wxPoint start, end;
853  int width;
854 
855  GetOblongDrillGeometry( start, end, width );
856 
857  width += aInflateValue * 2;
858 
860  GetPosition() + start, GetPosition() + end, aSegmentsPerCircle, width );
861  }
862 
863  return true;
864 }
void TransformRoundedEndsSegmentToPolygon(SHAPE_POLY_SET &aCornerBuffer, wxPoint aStart, wxPoint aEnd, int aCircleToSegmentsCount, int aWidth)
Function TransformRoundedEndsSegmentToPolygon convert a segment with rounded ends to a polygon Conver...
void TransformCircleToPolygon(SHAPE_POLY_SET &aCornerBuffer, wxPoint aCenter, int aRadius, int aCircleToSegmentsCount)
Function TransformCircleToPolygon convert a circle to a polygon, using multiple straight lines...
const wxSize & GetDrillSize() const
Definition: class_pad.h:275
void GetOblongDrillGeometry(wxPoint &aStartPoint, wxPoint &aEndPoint, int &aWidth) const
Function GetOblongDrillGeometry calculates the start point, end point and width of an equivalent segm...
Definition: class_pad.cpp:787
const wxPoint GetPosition() const override
Definition: class_pad.h:220
void D_PAD::BuildPadPolygon ( wxPoint  aCoord[4],
wxSize  aInflateValue,
double  aRotation 
) const

Function BuildPadPolygon Has meaning only for polygonal pads (trapezoid and rectangular) Build the Corner list of the polygonal shape, depending on shape, extra size (clearance ...) and orientation.

Parameters
aCoord= a buffer to fill (4 corners).
aInflateValue= wxSize: the clearance or margin value. value > 0: inflate, < 0 deflate
aRotation= full rotation of the polygon

Definition at line 807 of file pad_draw_functions.cpp.

References PNS::angle(), delta, KiROUND(), PAD_SHAPE_RECT, PAD_SHAPE_TRAPEZOID, RotatePoint(), wxPoint::x, and wxPoint::y.

Referenced by CINFO3D_VISU::buildPadShapePolygon(), DRC::checkClearancePadToPad(), DRC::checkClearanceSegmToPad(), CINFO3D_VISU::createNewPad(), CINFO3D_VISU::createNewPadWithClearance(), CreatePadsShapesSection(), KIGFX::PCB_PAINTER::draw(), HitTest(), BRDITEMS_PLOTTER::PlotPad(), and PNS_KICAD_IFACE::syncPad().

809 {
810  wxSize delta;
811  wxSize halfsize;
812 
813  halfsize.x = m_Size.x >> 1;
814  halfsize.y = m_Size.y >> 1;
815 
816  switch( GetShape() )
817  {
818  case PAD_SHAPE_RECT:
819  // For rectangular shapes, inflate is easy
820  halfsize += aInflateValue;
821 
822  // Verify if do not deflate more than than size
823  // Only possible for inflate negative values.
824  if( halfsize.x < 0 )
825  halfsize.x = 0;
826 
827  if( halfsize.y < 0 )
828  halfsize.y = 0;
829  break;
830 
831  case PAD_SHAPE_TRAPEZOID:
832  // Trapezoidal pad: verify delta values
833  delta.x = ( m_DeltaSize.x >> 1 );
834  delta.y = ( m_DeltaSize.y >> 1 );
835 
836  // be sure delta values are not to large
837  if( (delta.x < 0) && (delta.x <= -halfsize.y) )
838  delta.x = -halfsize.y + 1;
839 
840  if( (delta.x > 0) && (delta.x >= halfsize.y) )
841  delta.x = halfsize.y - 1;
842 
843  if( (delta.y < 0) && (delta.y <= -halfsize.x) )
844  delta.y = -halfsize.x + 1;
845 
846  if( (delta.y > 0) && (delta.y >= halfsize.x) )
847  delta.y = halfsize.x - 1;
848  break;
849 
850  default: // is used only for rect and trap. pads
851  return;
852  }
853 
854  // Build the basic rectangular or trapezoid shape
855  // delta is null for rectangular shapes
856  aCoord[0].x = -halfsize.x - delta.y; // lower left
857  aCoord[0].y = +halfsize.y + delta.x;
858 
859  aCoord[1].x = -halfsize.x + delta.y; // upper left
860  aCoord[1].y = -halfsize.y - delta.x;
861 
862  aCoord[2].x = +halfsize.x - delta.y; // upper right
863  aCoord[2].y = -halfsize.y + delta.x;
864 
865  aCoord[3].x = +halfsize.x + delta.y; // lower right
866  aCoord[3].y = +halfsize.y - delta.x;
867 
868  // Offsetting the trapezoid shape id needed
869  // It is assumed delta.x or/and delta.y == 0
870  if( GetShape() == PAD_SHAPE_TRAPEZOID && (aInflateValue.x != 0 || aInflateValue.y != 0) )
871  {
872  double angle;
873  wxSize corr;
874 
875  if( delta.y ) // lower and upper segment is horizontal
876  {
877  // Calculate angle of left (or right) segment with vertical axis
878  angle = atan2( (double) m_DeltaSize.y, (double) m_Size.y );
879 
880  // left and right sides are moved by aInflateValue.x in their perpendicular direction
881  // We must calculate the corresponding displacement on the horizontal axis
882  // that is delta.x +- corr.x depending on the corner
883  corr.x = KiROUND( tan( angle ) * aInflateValue.x );
884  delta.x = KiROUND( aInflateValue.x / cos( angle ) );
885 
886  // Horizontal sides are moved up and down by aInflateValue.y
887  delta.y = aInflateValue.y;
888 
889  // corr.y = 0 by the constructor
890  }
891  else if( delta.x ) // left and right segment is vertical
892  {
893  // Calculate angle of lower (or upper) segment with horizontal axis
894  angle = atan2( (double) m_DeltaSize.x, (double) m_Size.x );
895 
896  // lower and upper sides are moved by aInflateValue.x in their perpendicular direction
897  // We must calculate the corresponding displacement on the vertical axis
898  // that is delta.y +- corr.y depending on the corner
899  corr.y = KiROUND( tan( angle ) * aInflateValue.y );
900  delta.y = KiROUND( aInflateValue.y / cos( angle ) );
901 
902  // Vertical sides are moved left and right by aInflateValue.x
903  delta.x = aInflateValue.x;
904 
905  // corr.x = 0 by the constructor
906  }
907  else // the trapezoid is a rectangle
908  {
909  delta = aInflateValue; // this pad is rectangular (delta null).
910  }
911 
912  aCoord[0].x += -delta.x - corr.x; // lower left
913  aCoord[0].y += delta.y + corr.y;
914 
915  aCoord[1].x += -delta.x + corr.x; // upper left
916  aCoord[1].y += -delta.y - corr.y;
917 
918  aCoord[2].x += delta.x - corr.x; // upper right
919  aCoord[2].y += -delta.y + corr.y;
920 
921  aCoord[3].x += delta.x + corr.x; // lower right
922  aCoord[3].y += delta.y - corr.y;
923 
924  /* test coordinates and clamp them if the offset correction is too large:
925  * Note: if a coordinate is bad, the other "symmetric" coordinate is bad
926  * So when a bad coordinate is found, the 2 symmetric coordinates
927  * are set to the minimun value (0)
928  */
929 
930  if( aCoord[0].x > 0 ) // lower left x coordinate must be <= 0
931  aCoord[0].x = aCoord[3].x = 0;
932 
933  if( aCoord[1].x > 0 ) // upper left x coordinate must be <= 0
934  aCoord[1].x = aCoord[2].x = 0;
935 
936  if( aCoord[0].y < 0 ) // lower left y coordinate must be >= 0
937  aCoord[0].y = aCoord[1].y = 0;
938 
939  if( aCoord[3].y < 0 ) // lower right y coordinate must be >= 0
940  aCoord[3].y = aCoord[2].y = 0;
941  }
942 
943  if( aRotation )
944  {
945  for( int ii = 0; ii < 4; ii++ )
946  RotatePoint( &aCoord[ii], aRotation );
947  }
948 }
static int KiROUND(double v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: common.h:120
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:216
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
static const int delta[8][2]
Definition: solve.cpp:112
wxSize m_DeltaSize
delta on rectangular shapes
Definition: class_pad.h:850
static DIRECTION_45::AngleType angle(const VECTOR2I &a, const VECTOR2I &b)
void D_PAD::BuildPadShapePolygon ( SHAPE_POLY_SET aCornerBuffer,
wxSize  aInflateValue,
int  aSegmentsPerCircle,
double  aCorrectionFactor 
) const

Function BuildPadShapePolygon Build the Corner list of the polygonal shape, depending on shape, extra size (clearance ...) pad and orientation This function is similar to TransformShapeWithClearanceToPolygon, but the difference is BuildPadShapePolygon creates a polygon shape exactly similar to pad shape, which a size inflated by aInflateValue and TransformShapeWithClearanceToPolygon creates a more complex shape (for instance a rectangular pad is converted in a rectangulr shape with ronded corners)

Parameters
aCornerBuffer= a buffer to fill.
aInflateValue= the clearance or margin value. value > 0: inflate, < 0 deflate, = 0 : no change the clearance can have different values for x and y directions (relative to the pad)
aSegmentsPerCircle= number of segments to approximate a circle (used for round and oblong shapes only (16 to 32 is a good value)
aCorrectionFactor= the correction to apply to circles radius to keep the pad size/clearance when the arcs are approximated by segments

Definition at line 781 of file board_items_to_polygon_shape_transform.cpp.

References SHAPE_POLY_SET::Append(), dummy(), SHAPE_POLY_SET::NewOutline(), PAD_SHAPE_CIRCLE, PAD_SHAPE_CUSTOM, PAD_SHAPE_OVAL, PAD_SHAPE_RECT, PAD_SHAPE_ROUNDRECT, PAD_SHAPE_TRAPEZOID, SetSize(), and TransformShapeWithClearanceToPolygon().

Referenced by CINFO3D_VISU::buildPadShapeThickOutlineAsSegments(), PNS_KICAD_IFACE::syncPad(), and MODULE::TransformPadsShapesWithClearanceToPolygon().

784 {
785  wxPoint corners[4];
786  wxPoint padShapePos = ShapePos(); /* Note: for pad having a shape offset,
787  * the pad position is NOT the shape position */
788  switch( GetShape() )
789  {
790  case PAD_SHAPE_CIRCLE:
791  case PAD_SHAPE_OVAL:
792  case PAD_SHAPE_ROUNDRECT:
793  {
794  // We are using TransformShapeWithClearanceToPolygon to build the shape.
795  // Currently, this method uses only the same inflate value for X and Y dirs.
796  // so because here this is not the case, we use a inflated dummy pad to build
797  // the polygonal shape
798  // TODO: remove this dummy pad when TransformShapeWithClearanceToPolygon will use
799  // a wxSize to inflate the pad size
800  D_PAD dummy( *this );
801  dummy.SetSize( GetSize() + aInflateValue + aInflateValue );
802  dummy.TransformShapeWithClearanceToPolygon( aCornerBuffer, 0,
803  aSegmentsPerCircle, aCorrectionFactor );
804  }
805  break;
806 
807  case PAD_SHAPE_TRAPEZOID:
808  case PAD_SHAPE_RECT:
809  aCornerBuffer.NewOutline();
810 
811  BuildPadPolygon( corners, aInflateValue, m_Orient );
812  for( int ii = 0; ii < 4; ii++ )
813  {
814  corners[ii] += padShapePos; // Shift origin to position
815  aCornerBuffer.Append( corners[ii].x, corners[ii].y );
816  }
817 
818  break;
819 
820  case PAD_SHAPE_CUSTOM:
821  // for a custom shape, that is in fact a polygon (with holes), we can use only a inflate value.
822  // so use ( aInflateValue.x + aInflateValue.y ) / 2 as polygon inflate value.
823  // (different values for aInflateValue.x and aInflateValue.y has no sense for a custom pad)
825  ( aInflateValue.x + aInflateValue.y ) / 2,
826  aSegmentsPerCircle, aCorrectionFactor );
827  break;
828  }
829 }
void BuildPadPolygon(wxPoint aCoord[4], wxSize aInflateValue, double aRotation) const
Function BuildPadPolygon Has meaning only for polygonal pads (trapezoid and rectangular) Build the Co...
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
const wxSize & GetSize() const
Definition: class_pad.h:269
void TransformShapeWithClearanceToPolygon(SHAPE_POLY_SET &aCornerBuffer, int aClearanceValue, int aCircleToSegmentsCount, double aCorrectionFactor) const override
Function TransformShapeWithClearanceToPolygon Convert the pad shape to a closed polygon Used in filli...
int NewOutline()
Creates a new empty polygon in the set and returns its index
static LIB_PART * dummy()
Used when a LIB_PART is not found in library to draw a dummy shape This component is a 400 mils squar...
wxPoint ShapePos() const
Definition: class_pad.cpp:517
double m_Orient
in 1/10 degrees
Definition: class_pad.h:857
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline) ...
int D_PAD::BuildSegmentFromOvalShape ( wxPoint aSegStart,
wxPoint aSegEnd,
double  aRotation,
const wxSize &  aMargin 
) const

Function BuildSegmentFromOvalShape Has meaning only for OVAL (and ROUND) pads Build an equivalent segment having the same shape as the OVAL shape, Useful in draw function and in DRC and HitTest functions, because segments are already well handled by track tests.

Function BuildSegmentFromOvalShape Has meaning only for OVAL (and ROUND) pads.

Parameters
aSegStart= the starting point of the equivalent segment relative to the shape position.
aSegEnd= the ending point of the equivalent segment, relative to the shape position
aRotation= full rotation of the segment
aRotation= full rotation of the segment
aMargin= a margin around the shape (for instance mask margin)
Returns
the width of the segment

Build an equivalent segment having the same shape as the OVAL shape, aSegStart and aSegEnd are the ending points of the equivalent segment of the shape aRotation is the asked rotation of the segment (usually m_Orient)

Definition at line 773 of file pad_draw_functions.cpp.

References delta, RotatePoint(), wxPoint::x, and wxPoint::y.

Referenced by PNS_KICAD_IFACE::syncPad().

775 {
776  int width;
777 
778  if( m_Size.y < m_Size.x ) // Build an horizontal equiv segment
779  {
780  int delta = ( m_Size.x - m_Size.y ) / 2;
781  aSegStart.x = -delta - aMargin.x;
782  aSegStart.y = 0;
783  aSegEnd.x = delta + aMargin.x;
784  aSegEnd.y = 0;
785  width = m_Size.y + ( aMargin.y * 2 );
786  }
787  else // Vertical oval: build a vertical equiv segment
788  {
789  int delta = ( m_Size.y -m_Size.x ) / 2;
790  aSegStart.x = 0;
791  aSegStart.y = -delta - aMargin.y;
792  aSegEnd.x = 0;
793  aSegEnd.y = delta + aMargin.y;
794  width = m_Size.x + ( aMargin.x * 2 );
795  }
796 
797  if( aRotation )
798  {
799  RotatePoint( &aSegStart, aRotation);
800  RotatePoint( &aSegEnd, aRotation);
801  }
802 
803  return width;
804 }
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:216
static const int delta[8][2]
Definition: solve.cpp:112
static bool D_PAD::ClassOf ( const EDA_ITEM aItem)
inlinestatic

Definition at line 155 of file class_pad.h.

References PCB_PAD_T, and EDA_ITEM::Type().

156  {
157  return aItem && PCB_PAD_T == aItem->Type();
158  }
KICAD_T Type() const
Function Type()
Definition: base_struct.h:198
class D_PAD, a pad in a footprint
Definition: typeinfo.h:90
void EDA_ITEM::ClearBrightened ( )
inlineinherited

Definition at line 233 of file base_struct.h.

References BRIGHTENED, EDA_ITEM::ClearFlags(), and EDA_ITEM::SetModified().

Referenced by GERBVIEW_SELECTION_TOOL::disambiguationMenu(), and SELECTION_TOOL::unhighlight().

233 { ClearFlags( BRIGHTENED ); }
#define BRIGHTENED
item is drawn with a bright contour
Definition: base_struct.h:135
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:254
void EDA_ITEM::ClearFlags ( STATUS_FLAGS  aMask = EDA_ITEM_ALL_FLAGS)
inlineinherited

Definition at line 254 of file base_struct.h.

Referenced by Abort_Edit_Pcb_Text(), Abort_EditEdge(), Abort_Move_ModuleOutline(), Abort_Move_Pad(), Abort_MoveOrCopyModule(), Abort_MoveTrack(), Abort_Zone_Create_Outline(), Abort_Zone_Move_Corner_Or_Outlines(), AbortMoveAndEditTarget(), abortMoveBitmap(), AbortMoveDimensionText(), abortMoveItem(), AbortMoveTextModule(), AbortPinMove(), SCH_SCREEN::addConnectedItemsToBlock(), SCH_EDIT_FRAME::addCurrentItemToScreen(), PNS_KICAD_IFACE::AddItem(), PCB_EDIT_FRAME::AppendBoardFile(), PCB_EDIT_FRAME::Begin_DrawSegment(), FOOTPRINT_EDIT_FRAME::Begin_Edge_Module(), PCB_EDIT_FRAME::Begin_Zone(), SCH_EDIT_FRAME::BeginSegment(), PCB_EDIT_FRAME::Block_Delete(), PCB_EDIT_FRAME::Block_Flip(), PCB_EDIT_FRAME::Block_Move(), LIB_EDIT_FRAME::BlockCopySelectedItems(), PCB_EDIT_FRAME::Change_Side_Module(), SCH_SCREEN::ClearAnnotation(), EDA_ITEM::ClearBrightened(), EDA_ITEM::ClearHighlighted(), DRAG_LIST::ClearList(), ClearMarkItems(), clearModuleItemFlags(), EDA_ITEM::ClearSelected(), SCH_EDIT_FRAME::ConvertPart(), SCH_EDIT_FRAME::copyBlockItems(), CopyMarkedItems(), MWAVE::CreateMicrowaveInductor(), FOOTPRINT_EDIT_FRAME::CreateTextModule(), PCB_EDIT_FRAME::Delete_LastCreatedCorner(), PCB_EDIT_FRAME::Delete_Segment_Edge(), DIALOG_LIB_EDIT_PIN::DIALOG_LIB_EDIT_PIN(), DIALOG_PAD_PROPERTIES::DIALOG_PAD_PROPERTIES(), PCB_EDIT_FRAME::EditDimension(), PCB_EDIT_FRAME::End_Edge(), FOOTPRINT_EDIT_FRAME::End_Edge_Module(), PCB_EDIT_FRAME::End_Move_Zone_Corner_Or_Outlines(), PCB_EDIT_FRAME::End_Route(), PCB_EDIT_FRAME::End_Zone(), EraseDragList(), PCB_EDIT_FRAME::Exchange_Module(), ExitSheet(), SCH_SCREEN::GetConnection(), PCB_BASE_FRAME::Import_Pad_Settings(), SCH_JUNCTION::IsSelectStateChanged(), SCH_NO_CONNECT::IsSelectStateChanged(), SCH_MARKER::IsSelectStateChanged(), SCH_BUS_ENTRY_BASE::IsSelectStateChanged(), SCH_BITMAP::IsSelectStateChanged(), SCH_LINE::IsSelectStateChanged(), SCH_TEXT::IsSelectStateChanged(), SCH_SHEET::IsSelectStateChanged(), SCH_COMPONENT::IsSelectStateChanged(), FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD(), FOOTPRINT_EDIT_FRAME::LoadModuleFromLibrary(), MarkItemsInBloc(), MirrorX(), MirrorY(), LIB_EDIT_FRAME::OnEditPin(), FOOTPRINT_EDIT_FRAME::OnLeftClick(), SCH_EDIT_FRAME::OnLeftClick(), PCB_EDIT_FRAME::OnLeftClick(), LIB_EDIT_FRAME::OnOrient(), LIB_EDIT_FRAME::OnRotate(), SCH_EDIT_FRAME::OnSelectUnit(), FOOTPRINT_EDIT_FRAME::OpenProjectFiles(), SCH_FIELD::Place(), PCB_EDIT_FRAME::Place_DrawItem(), FOOTPRINT_EDIT_FRAME::Place_EdgeMod(), PCB_EDIT_FRAME::Place_Texte_Pcb(), PCB_EDIT_FRAME::PlaceDimensionText(), PCB_EDIT_FRAME::PlaceDraggedOrMovedTrackSegment(), PCB_BASE_FRAME::PlaceModule(), PCB_BASE_FRAME::PlacePad(), PCB_EDIT_FRAME::PlaceTarget(), DRAWING_TOOL::PlaceText(), PCB_BASE_FRAME::PlaceTexteModule(), FOOTPRINT_EDIT_FRAME::Process_Special_Functions(), LIB_EDIT_FRAME::Process_Special_Functions(), BOARD_COMMIT::Push(), PCB_BASE_EDIT_FRAME::PutDataInPreviousState(), SCH_EDIT_FRAME::PutDataInPreviousState(), SCH_EDIT_FRAME::RepeatDrawItem(), LIB_EDIT_FRAME::RepeatPinItem(), BOARD_COMMIT::Revert(), PCB_BASE_FRAME::Rotate_Module(), RotateListOfItems(), PCB_BASE_EDIT_FRAME::SaveCopyInUndoList(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), SCH_LEGACY_PLUGIN_CACHE::savePin(), SCH_EDIT_FRAME::SetRepeatItem(), PCB_EDIT_FRAME::Start_DragTrackSegmentAndKeepSlope(), PCB_EDIT_FRAME::StartMoveModule(), PCB_EDIT_FRAME::StartMoveOneNodeOrSegment(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataFromWindow(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

254 { m_Flags &= ~aMask; }
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:175
void EDA_ITEM::ClearHighlighted ( )
inlineinherited

Definition at line 232 of file base_struct.h.

References EDA_ITEM::ClearFlags(), and HIGHLIGHTED.

232 { ClearFlags( HIGHLIGHTED ); }
#define HIGHLIGHTED
item is drawn in normal colors, when the rest is darkened
Definition: base_struct.h:134
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:254
void EDA_ITEM::ClearSelected ( )
inlineinherited

Definition at line 231 of file base_struct.h.

References EDA_ITEM::ClearFlags(), and SELECTED.

Referenced by POINT_EDITOR::addCorner(), EDIT_TOOL::Duplicate(), GAL_ARRAY_CREATOR::prePushAction(), SELECTION_TOOL::unhighlight(), and GERBVIEW_SELECTION_TOOL::unselectVisually().

231 { ClearFlags( SELECTED ); }
#define SELECTED
Definition: base_struct.h:118
void ClearFlags(STATUS_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
Definition: base_struct.h:254
EDA_ITEM * D_PAD::Clone ( ) const
overridevirtual

Function Clone creates a duplicate of this item with linked list members set to NULL.

The default version will return NULL in release builds and likely crash the program. In debug builds, a warning message indicating the derived class has not implemented cloning. This really should be a pure virtual function. Due to the fact that there are so many objects derived from EDA_ITEM, the decision was made to return NULL until all the objects derived from EDA_ITEM implement cloning. Once that happens, this function should be made pure.

Returns
A clone of the item.

Reimplemented from EDA_ITEM.

Definition at line 1244 of file class_pad.cpp.

References D_PAD().

Referenced by MODULE_EDITOR_TOOLS::CreatePadFromShapes().

1245 {
1246  return new D_PAD( *this );
1247 }
D_PAD(MODULE *parent)
Definition: class_pad.cpp:59
int D_PAD::Compare ( const D_PAD padref,
const D_PAD padcmp 
)
static

Function Compare compares two pads and return 0 if they are equal.

Returns
int - <0 if left less than right, 0 if equal, >0 if left greater than right.

Definition at line 1104 of file class_pad.cpp.

References GetDrillShape(), GetShape(), m_DeltaSize, m_Drill, m_layerMask, m_Offset, m_Size, wxPoint::x, and wxPoint::y.

Referenced by CreatePadsShapesSection(), and PadListSortByShape().

1105 {
1106  int diff;
1107 
1108  if( ( diff = padref->GetShape() - padcmp->GetShape() ) != 0 )
1109  return diff;
1110 
1111  if( ( diff = padref->GetDrillShape() - padcmp->GetDrillShape() ) != 0)
1112  return diff;
1113 
1114  if( ( diff = padref->m_Drill.x - padcmp->m_Drill.x ) != 0 )
1115  return diff;
1116 
1117  if( ( diff = padref->m_Drill.y - padcmp->m_Drill.y ) != 0 )
1118  return diff;
1119 
1120  if( ( diff = padref->m_Size.x - padcmp->m_Size.x ) != 0 )
1121  return diff;
1122 
1123  if( ( diff = padref->m_Size.y - padcmp->m_Size.y ) != 0 )
1124  return diff;
1125 
1126  if( ( diff = padref->m_Offset.x - padcmp->m_Offset.x ) != 0 )
1127  return diff;
1128 
1129  if( ( diff = padref->m_Offset.y - padcmp->m_Offset.y ) != 0 )
1130  return diff;
1131 
1132  if( ( diff = padref->m_DeltaSize.x - padcmp->m_DeltaSize.x ) != 0 )
1133  return diff;
1134 
1135  if( ( diff = padref->m_DeltaSize.y - padcmp->m_DeltaSize.y ) != 0 )
1136  return diff;
1137 
1138 // TODO: test custom shapes
1139 
1140  // Dick: specctra_export needs this
1141  // Lorenzo: gencad also needs it to implement padstacks!
1142 
1143 #if __cplusplus >= 201103L
1144  long long d = padref->m_layerMask.to_ullong() - padcmp->m_layerMask.to_ullong();
1145  if( d < 0 )
1146  return -1;
1147  else if( d > 0 )
1148  return 1;
1149 
1150  return 0;
1151 #else
1152  // these strings are not typically constructed, since we don't get here often.
1153  std::string s1 = padref->m_layerMask.to_string();
1154  std::string s2 = padcmp->m_layerMask.to_string();
1155  return s1.compare( s2 );
1156 #endif
1157 }
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:388
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
wxSize m_DeltaSize
delta on rectangular shapes
Definition: class_pad.h:850
LSET m_layerMask
Bitwise layer :1= copper layer, 15= cmp, 2..14 = internal layers 16 .
Definition: class_pad.h:846
wxSize m_Drill
Drill diam (drill shape = PAD_CIRCLE) or drill size (shape = OVAL) for drill shape = PAD_CIRCLE...
Definition: class_pad.h:816
wxPoint m_Offset
m_Offset is useful only for oblong and rect pads (it can be used for other shapes, but without any interest).
Definition: class_pad.h:844
LSET D_PAD::ConnSMDMask ( )
static

layer set for a SMD pad on Front layer used for edge board connectors

Definition at line 113 of file class_pad.cpp.

References F_Cu, and F_Mask.

114 {
115  static LSET saved( 2, F_Cu, F_Mask );
116  return saved;
117 }
Class LSET is a set of PCB_LAYER_IDs.
void D_PAD::CopyNetlistSettings ( D_PAD aPad,
bool  aCopyLocalSettings 
)

Function CopyNetlistSettings copies the netlist settings to aPad, and the net name.

Used to copy some pad parameters when replacing a footprint by an other footprint when reading a netlist, or in exchange footprint dialog

The netlist settings are all of the D_PAD settings not define by a D_PAD in a netlist. The copied settings are the net name and optionally include local clearance, etc. The pad physical geometry settings are not copied.

Parameters
aPadis the D_PAD to copy the settings to.
aCopyLocalSettings= false to copy only the net name true to also copy local prms

Definition at line 543 of file class_pad.cpp.

References BOARD_CONNECTED_ITEM::GetNetCode(), m_LocalClearance, m_LocalSolderMaskMargin, m_LocalSolderPasteMargin, m_LocalSolderPasteMarginRatio, m_ThermalGap, m_ThermalWidth, m_ZoneConnection, SetLocalClearance(), SetLocalSolderMaskMargin(), SetLocalSolderPasteMargin(), SetLocalSolderPasteMarginRatio(), BOARD_CONNECTED_ITEM::SetNetCode(), SetThermalGap(), SetThermalWidth(), and SetZoneConnection().

Referenced by MODULE::CopyNetlistSettings().

544 {
545  // Don't do anything foolish like trying to copy to yourself.
546  wxCHECK_RET( aPad != NULL && aPad != this, wxT( "Cannot copy to NULL or yourself." ) );
547 
548  aPad->SetNetCode( GetNetCode() );
549 
550  if( aCopyLocalSettings )
551  {
558  aPad->SetThermalGap( m_ThermalGap );
559  }
560 }
int m_LocalClearance
Local clearance.
Definition: class_pad.h:864
int m_ThermalGap
Definition: class_pad.h:877
int m_LocalSolderMaskMargin
Local mask margins: when 0, the parent footprint design values are used.
Definition: class_pad.h:868
int m_LocalSolderPasteMargin
Local solder paste margin absolute value.
Definition: class_pad.h:869
void SetZoneConnection(ZoneConnection aType)
Definition: class_pad.h:486
void SetThermalWidth(int aWidth)
Definition: class_pad.h:489
bool SetNetCode(int aNetCode, bool aNoAssert=false)
Function SetNetCode sets net using a net code.
int m_ThermalWidth
Definition: class_pad.h:876
void SetLocalClearance(int aClearance)
Definition: class_pad.h:418
void SetLocalSolderPasteMarginRatio(double aRatio)
Definition: class_pad.h:424
int GetNetCode() const
Function GetNetCode.
void SetLocalSolderMaskMargin(int aMargin)
Definition: class_pad.h:415
void SetLocalSolderPasteMargin(int aMargin)
Definition: class_pad.h:421
double m_LocalSolderPasteMarginRatio
Local solder mask margin ratio value of pad size The final margin is the sum of these 2 values...
Definition: class_pad.h:871
void SetThermalGap(int aGap)
Definition: class_pad.h:492
ZoneConnection m_ZoneConnection
how the connection to zone is made: no connection, thermal relief ...
Definition: class_pad.h:874
void D_PAD::CustomShapeAsPolygonToBoardPosition ( SHAPE_POLY_SET aMergedPolygon,
wxPoint  aPosition,
double  aRotation 
) const

When created, the corners coordinates are relative to the pad position, orientation 0, in m_customShapeAsPolygon CustomShapeAsPolygonToBoardPosition transform these coordinates to actual (board) coordinates.

Parameters
aMergedPolygon= the corners coordinates, relative to aPosition and rotated by aRotation
aPosition= the position of the shape (usually the pad shape, but not always, when moving the pad)
aRotation= the rotation of the shape (usually the pad rotation, but not always, in DRC)

Definition at line 305 of file pad_custom_shape_functions.cpp.

References SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), SHAPE_LINE_CHAIN::Point(), SHAPE_LINE_CHAIN::PointCount(), RotatePoint(), VECTOR2< T >::x, and VECTOR2< T >::y.

Referenced by CINFO3D_VISU::buildPadShapePolygon(), DRC::checkClearancePadToPad(), DRC::checkClearanceSegmToPad(), CINFO3D_VISU::createNewPadWithClearance(), GetBoundingBox(), BRDITEMS_PLOTTER::PlotPad(), and PNS_KICAD_IFACE::syncPad().

307 {
308  if( aMergedPolygon->OutlineCount() == 0 )
309  return;
310 
311  // Move, rotate, ... coordinates in aMergedPolygon according to the
312  // pad position and orientation
313  for( int cnt = 0; cnt < aMergedPolygon->OutlineCount(); ++cnt )
314  {
315  SHAPE_LINE_CHAIN& poly = aMergedPolygon->Outline( cnt );
316 
317  for( int ii = 0; ii < poly.PointCount(); ++ii )
318  {
319  wxPoint corner( poly.Point( ii ).x, poly.Point( ii ).y );
320  RotatePoint( &corner, aRotation );
321  corner += aPosition;
322 
323  poly.Point( ii ).x = corner.x;
324  poly.Point( ii ).y = corner.y;
325  }
326  }
327 }
int PointCount() const
Function PointCount()
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:216
int OutlineCount() const
Returns the number of outlines in the set
SHAPE_LINE_CHAIN & Outline(int aIndex)
Returns the reference to aIndex-th outline in the set
Class SHAPE_LINE_CHAIN.
VECTOR2I & Point(int aIndex)
Function Point()
void D_PAD::DeletePrimitivesList ( )

clear the basic shapes list

Definition at line 177 of file pad_custom_shape_functions.cpp.

Referenced by PlotStandardLayer(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

178 {
179  m_basicShapes.clear();
181 }
std::vector< PAD_CS_PRIMITIVE > m_basicShapes
for free shape pads: a list of basic shapes, in local coordinates, orient 0, coordinates relative to ...
Definition: class_pad.h:798
SHAPE_POLY_SET m_customShapeAsPolygon
for free shape pads: the set of basic shapes, merged as one polygon, in local coordinates, orient 0, coordinates relative to m_Pos
Definition: class_pad.h:803
void RemoveAllContours()
Removes all outlines & holes (clears) the polygon set.
void D_PAD::Draw ( EDA_DRAW_PANEL panel,
wxDC *  DC,
GR_DRAWMODE  aDrawMode,
const wxPoint offset = ZeroOffset 
)
overridevirtual

Function Draw BOARD_ITEMs have their own color information.

Implements BOARD_ITEM.

Definition at line 76 of file pad_draw_functions.cpp.

References KIGFX::COLOR4D::a, LSET::AllCuMask(), B_Cu, B_Mask, B_Paste, LSET::BackMask(), BLACK, color, PCB_GENERAL_SETTINGS::Colors(), DARKDARKGRAY, DARKGRAY, DO_NOT_DRAW, LSET::ExtractLayer(), F_Cu, F_Mask, F_Paste, LSET::FrontMask(), GetBoard(), EDA_DRAW_PANEL::GetClipBox(), EDA_DRAW_PANEL::GetParent(), BOARD::GetVisibleLayers(), GR_ALLOW_HIGHCONTRAST, GR_AND, GR_HIGHLIGHT, ID_TRACK_BUTT, IsCopperLayer(), BOARD::IsElementVisible(), BOARD::IsLayerVisible(), LAYER_MOD_TEXT_INVISIBLE, LAYER_NO_CONNECTS, LAYER_NON_PLATEDHOLES, LAYER_PAD_BK, LAYER_PAD_FR, PCB_SCREEN::m_Active_Layer, PAD_DRAWINFO::m_Color, PAD_DRAWINFO::m_Display_netname, PAD_DRAWINFO::m_Display_padnum, PAD_DRAWINFO::m_DrawMode, PAD_DRAWINFO::m_DrawPanel, PAD_DRAWINFO::m_IsPrinting, BASE_SCREEN::m_IsPrinting, PAD_DRAWINFO::m_Mask_margin, PAD_DRAWINFO::m_NoNetMarkColor, PAD_DRAWINFO::m_NPHoleColor, PAD_DRAWINFO::m_Offset, PAD_DRAWINFO::m_PadClearance, PCB_SCREEN::m_Route_Layer_BOTTOM, PCB_SCREEN::m_Route_Layer_TOP, PAD_DRAWINFO::m_ShowNCMark, PAD_DRAWINFO::m_ShowNotPlatedHole, PAD_DRAWINFO::m_ShowPadFilled, max, PAD_ATTRIB_CONN, PAD_ATTRIB_HOLE_NOT_PLATED, PAD_ATTRIB_SMD, PCB_BASE_FRAME::Settings(), SKETCH, UNDEFINED_LAYER, and UNSELECTED_LAYER.

Referenced by Abort_Move_Pad(), DrawMovingBlockOutlines(), MODULE::DrawOutlinesWhenMoving(), PCB_BASE_FRAME::PlacePad(), Show_Pad_Move(), and PCB_BASE_FRAME::StartMovePad().

78 {
79  wxSize mask_margin; // margin (clearance) used for some non copper layers
80 
81 #ifdef SHOW_PADMASK_REAL_SIZE_AND_COLOR
82  int showActualMaskSize = 0; /* Layer number if the actual pad size on mask layer can
83  * be displayed i.e. if only one layer is shown for this pad
84  * and this layer is a mask (solder mask or solder paste
85  */
86 #endif
87 
88  if( m_Flags & DO_NOT_DRAW )
89  return;
90 
91  PAD_DRAWINFO drawInfo;
92 
93  drawInfo.m_Offset = aOffset;
94 
95  /* We can show/hide pads from the layer manager.
96  * options are show/hide pads on front and/or back side of the board
97  * For through pads, we hide them only if both sides are hidden.
98  * smd pads on back are hidden for all layers (copper and technical layers)
99  * on back side of the board
100  * smd pads on front are hidden for all layers (copper and technical layers)
101  * on front side of the board
102  * ECO, edge and Draw layers and not considered
103  */
104 
105  BOARD* brd = GetBoard();
106 
107  auto frame = static_cast<PCB_EDIT_FRAME*> ( aPanel->GetParent() );
108  const auto& cds = frame->Settings().Colors();
109 
110  bool frontVisible = brd->IsElementVisible( LAYER_PAD_FR );
111  bool backVisible = brd->IsElementVisible( LAYER_PAD_BK );
112 
113  if( !frontVisible && !backVisible )
114  return;
115 
116  // If pad is only on front side (no layer on back side)
117  // and if hide front side pads is enabled, do not draw
118  if( !frontVisible && !( m_layerMask & LSET::BackMask() ).any() )
119  return;
120 
121  // If pad is only on back side (no layer on front side)
122  // and if hide back side pads is enabled, do not draw
123  if( !backVisible && !( m_layerMask & LSET::FrontMask() ).any() )
124  return;
125 
126 
127  wxCHECK_RET( frame != NULL, wxT( "Panel has no parent frame window." ) );
128 
129  auto displ_opts = (PCB_DISPLAY_OPTIONS*)( frame->GetDisplayOptions() );
130  PCB_SCREEN* screen = frame->GetScreen();
131 
132  if( displ_opts && displ_opts->m_DisplayPadFill == SKETCH )
133  drawInfo.m_ShowPadFilled = false;
134  else
135  drawInfo.m_ShowPadFilled = true;
136 
138 
139  if( m_layerMask[F_Cu] )
140  {
141  color = cds.GetItemColor( LAYER_PAD_FR );
142  }
143 
144  if( m_layerMask[B_Cu] )
145  {
146  color = color.LegacyMix( cds.GetItemColor( LAYER_PAD_BK ) );
147  }
148 
149  if( color == BLACK ) // Not on a visible copper layer (i.e. still nothing to show)
150  {
151  // If the pad is on only one tech layer, use the layer color else use DARKGRAY
152  LSET mask_non_copper_layers = m_layerMask & ~LSET::AllCuMask();
153 
154 #ifdef SHOW_PADMASK_REAL_SIZE_AND_COLOR
155  mask_non_copper_layers &= brd->GetVisibleLayers();
156 #endif
157  PCB_LAYER_ID pad_layer = mask_non_copper_layers.ExtractLayer();
158 
159  switch( (int) pad_layer )
160  {
161  case UNDEFINED_LAYER: // More than one layer
162  color = DARKGRAY;
163  break;
164 
165  case UNSELECTED_LAYER: // Shouldn't really happen...
166  break;
167 
168  default:
169  color = cds.GetLayerColor( pad_layer );
170 #ifdef SHOW_PADMASK_REAL_SIZE_AND_COLOR
171  showActualMaskSize = pad_layer;
172 #endif
173  }
174  }
175 
176  // if SMD or connector pad and high contrast mode
177  if( ( aDraw_mode & GR_ALLOW_HIGHCONTRAST ) &&
179  displ_opts && displ_opts->m_ContrastModeDisplay )
180  {
181  // when routing tracks
182  if( frame->GetToolId() == ID_TRACK_BUTT )
183  {
184  PCB_LAYER_ID routeTop = screen->m_Route_Layer_TOP;
185  PCB_LAYER_ID routeBot = screen->m_Route_Layer_BOTTOM;
186 
187  // if routing between copper and component layers,
188  // or the current layer is one of said 2 external copper layers,
189  // then highlight only the current layer.
190  if( ( screen->m_Active_Layer == F_Cu || screen->m_Active_Layer == B_Cu ) ||
191  ( routeTop==F_Cu && routeBot==B_Cu ) ||
192  ( routeTop==B_Cu && routeBot==F_Cu )
193  )
194  {
195  if( !IsOnLayer( screen->m_Active_Layer ) )
196  color = COLOR4D( DARKDARKGRAY );
197  }
198  // else routing between an internal signal layer and some other
199  // layer. Grey out all PAD_ATTRIB_SMD pads not on current or the single
200  // selected external layer.
201  else if( !IsOnLayer( screen->m_Active_Layer )
202  && !IsOnLayer( routeTop )
203  && !IsOnLayer( routeBot ) )
204  {
205  color = COLOR4D( DARKDARKGRAY );
206  }
207  }
208  // when not edting tracks, show PAD_ATTRIB_SMD components not on active layer
209  // as greyed out
210  else
211  {
212  if( !IsOnLayer( screen->m_Active_Layer ) )
213  color = COLOR4D( DARKDARKGRAY );
214  }
215  }
216 
217 #ifdef SHOW_PADMASK_REAL_SIZE_AND_COLOR
218  if( showActualMaskSize )
219  {
220  switch( showActualMaskSize )
221  {
222  case B_Mask:
223  case F_Mask:
224  mask_margin.x = mask_margin.y = GetSolderMaskMargin();
225  break;
226 
227  case B_Paste:
228  case F_Paste:
229  mask_margin = GetSolderPasteMargin();
230  break;
231 
232  default:
233  // Another layer which has no margin to handle
234  break;
235  }
236  }
237 #endif
238 
239  // if Contrast mode is ON and a technical layer active, show pads on this
240  // layer so we can see pads on paste or solder layer and the size of the
241  // mask
242  if( ( aDraw_mode & GR_ALLOW_HIGHCONTRAST ) &&
243  displ_opts && displ_opts->m_ContrastModeDisplay && !IsCopperLayer( screen->m_Active_Layer ) )
244  {
245  if( IsOnLayer( screen->m_Active_Layer ) )
246  {
247  color = cds.GetLayerColor( screen->m_Active_Layer );
248 
249  // In high contrast mode, and if the active layer is the mask
250  // layer shows the pad size with the mask clearance
251  switch( screen->m_Active_Layer )
252  {
253  case B_Mask:
254  case F_Mask:
255  mask_margin.x = mask_margin.y = GetSolderMaskMargin();
256  break;
257 
258  case B_Paste:
259  case F_Paste:
260  mask_margin = GetSolderPasteMargin();
261  break;
262 
263  default:
264  break;
265  }
266  }
267  else
268  color = DARKDARKGRAY;
269  }
270  // If use asks for masks to be printed, then print them.
271  else if( screen->m_IsPrinting )
272  {
273  if( ( IsOnLayer( B_Paste ) && brd->IsLayerVisible( B_Paste ) ) ||
274  ( IsOnLayer( F_Paste ) && brd->IsLayerVisible( F_Paste ) ) )
275  {
276  mask_margin = GetSolderPasteMargin();
277  }
278 
279  if( ( IsOnLayer( B_Mask ) && brd->IsLayerVisible( B_Mask ) ) ||
280  ( IsOnLayer( F_Mask ) && brd->IsLayerVisible( F_Mask ) ) )
281  {
282  mask_margin.x = std::max( mask_margin.x, GetSolderMaskMargin() );
283  mask_margin.y = std::max( mask_margin.y, GetSolderMaskMargin() );
284  }
285  }
286 
287  if( ( aDraw_mode & GR_HIGHLIGHT ) && !( aDraw_mode & GR_AND ) )
288  color.SetToLegacyHighlightColor();
289 
290  bool DisplayIsol = displ_opts && displ_opts->m_DisplayPadIsol;
291 
292  if( !( m_layerMask & LSET::AllCuMask() ).any() )
293  DisplayIsol = false;
294 
297  {
298  drawInfo.m_ShowNotPlatedHole = true;
299  drawInfo.m_NPHoleColor = cds.GetItemColor( LAYER_NON_PLATEDHOLES );
300  }
301  // Don't let pads that *should* be NPTHs get lost
302  else if ( PadShouldBeNPTH() )
303  {
304  drawInfo.m_ShowNotPlatedHole = true;
305  drawInfo.m_NPHoleColor = cds.GetItemColor( LAYER_MOD_TEXT_INVISIBLE );
306  }
307 
308  drawInfo.m_DrawMode = aDraw_mode;
309  drawInfo.m_Color = color;
310  drawInfo.m_NoNetMarkColor = cds.GetItemColor( LAYER_NO_CONNECTS );
311  drawInfo.m_DrawPanel = aPanel;
312  drawInfo.m_Mask_margin = mask_margin;
314  drawInfo.m_IsPrinting = screen->m_IsPrinting;
315  color.a = 0.666;
316 
317  /* Get the pad clearance. This has a meaning only for Pcbnew.
318  * for CvPcb GetClearance() creates debug errors because
319  * there is no net classes so a call to GetClearance() is made only when
320  * needed (never needed in CvPcb)
321  */
322  drawInfo.m_PadClearance = DisplayIsol ? GetClearance() : 0;
323 
324  // Draw the pad number
325  if( displ_opts && !displ_opts->m_DisplayPadNum )
326  drawInfo.m_Display_padnum = false;
327 
328  if( displ_opts &&
329  (( displ_opts ->m_DisplayNetNamesMode == 0 ) || ( displ_opts->m_DisplayNetNamesMode == 2 )) )
330  drawInfo.m_Display_netname = false;
331 
332  // Display net names is restricted to pads that are on the active layer
333  // in high contrast mode display
334  if( ( aDraw_mode & GR_ALLOW_HIGHCONTRAST ) &&
335  !IsOnLayer( screen->m_Active_Layer ) && displ_opts && displ_opts->m_ContrastModeDisplay )
336  drawInfo.m_Display_netname = false;
337 
338  DrawShape( aPanel->GetClipBox(), aDC, drawInfo );
339 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:673
show a marker on pads with no nets
bool m_Display_padnum
Definition: class_pad.h:75
PAD_ATTR_T GetAttribute() const
Definition: class_pad.h:405
like PAD_STANDARD, but not plated mechanical use only, no connection allowed
Definition: pad_shapes.h:65
handle color for not plated holes (holes, not pads)
int color
Definition: DXF_plotter.cpp:62
Smd pad, appears on the solder paste layer (default)
Definition: pad_shapes.h:61
COLOR4D m_NoNetMarkColor
Definition: class_pad.h:72
bool m_ShowNCMark
Definition: class_pad.h:79
PCB_LAYER_ID m_Active_Layer
Definition: pcb_screen.h:44
smd pads, back layer
static LSET FrontMask()
Function FrontMask returns a mask holding all technical layers and the external CU layer on front sid...
Definition: lset.cpp:772
bool m_IsPrinting
Definition: class_pad.h:82
PCB_LAYER_ID ExtractLayer() const
Find the first set PCB_LAYER_ID.
Definition: lset.cpp:612
Class PCB_DISPLAY_OPTIONS handles display options like enable/disable some optional drawings...
PCB_LAYER_ID
A quick note on layer IDs:
double a
Alpha component.
Definition: color4d.h:294
Class LSET is a set of PCB_LAYER_IDs.
PCB_GENERAL_SETTINGS & Settings()
int GetSolderMaskMargin() const
Function GetSolderMaskMargin.
Definition: class_pad.cpp:594
GR_DRAWMODE m_DrawMode
Definition: class_pad.h:67
EDA_DRAW_PANEL * m_DrawPanel
Definition: class_pad.h:66
PCB_LAYER_ID m_Route_Layer_BOTTOM
Definition: pcb_screen.h:46
bool m_ShowNotPlatedHole
Definition: class_pad.h:80
void DrawShape(EDA_RECT *aClipBox, wxDC *aDC, PAD_DRAWINFO &aDrawInfo)
Function DrawShape basic function to draw a pad.
Like smd, does not appear on the solder paste layer (default) note also has a special attribute in Ge...
Definition: pad_shapes.h:62
int m_PadClearance
Definition: class_pad.h:73
bool m_IsPrinting
Definition: base_screen.h:220
COLORS_DESIGN_SETTINGS & Colors()
LSET m_layerMask
Bitwise layer :1= copper layer, 15= cmp, 2..14 = internal layers 16 .
Definition: class_pad.h:846
bool IsElementVisible(GAL_LAYER_ID aLayer) const
Function IsElementVisible tests whether a given element category is visible.
wxPoint m_Offset
Definition: class_pad.h:83
smd pads, front layer
#define max(a, b)
Definition: auxiliary.h:86
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:170
LSET GetVisibleLayers() const
Function GetVisibleLayers is a proxy function that calls the correspondent function in m_BoardSetting...
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:175
Class PCB_EDIT_FRAME is the main frame for Pcbnew.
wxSize GetSolderPasteMargin() const
Function GetSolderPasteMargin.
Definition: class_pad.cpp:637
int GetClearance(BOARD_CONNECTED_ITEM *aItem=NULL) const override
Function GetClearance returns the clearance in internal units.
Definition: class_pad.cpp:563
static LSET BackMask()
Function BackMask returns a mask holding all technical layers and the external CU layer on back side...
Definition: lset.cpp:779
bool m_ShowPadFilled
Definition: class_pad.h:77
virtual BOARD * GetBoard() const
Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
bool IsCopperLayer(LAYER_NUM aLayerId)
Function IsCopperLayer tests whether a layer is a copper layer.
COLOR4D m_NPHoleColor
Definition: class_pad.h:71
COLOR4D m_Color
Definition: class_pad.h:68
Definition: colors.h:45
bool m_Display_netname
Definition: class_pad.h:76
bool IsOnLayer(PCB_LAYER_ID aLayer) const override
Function IsOnLayer tests to see if this object is on the given layer.
Definition: class_pad.h:660
wxSize m_Mask_margin
Definition: class_pad.h:74
bool PadShouldBeNPTH() const
A pad whose hole is the same size as the pad is a NPTH.
Definition: class_pad.cpp:1250
PCB_LAYER_ID m_Route_Layer_TOP
Definition: pcb_screen.h:45
#define DO_NOT_DRAW
Used to disable draw function.
Definition: base_struct.h:123
bool IsLayerVisible(PCB_LAYER_ID aLayer) const
Function IsLayerVisible is a proxy function that calls the correspondent function in m_BoardSettings ...
Definition: class_board.h:457
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
void D_PAD::DrawShape ( EDA_RECT aClipBox,
wxDC *  aDC,
PAD_DRAWINFO aDrawInfo 
)

Function DrawShape basic function to draw a pad.

This function is used by Draw after calculation of parameters (color, ) final orientation transforms are set. It can also be called to draw a pad on any panel even if this panel is not a EDA_DRAW_PANEL for instance on a wxPanel inside the pad editor.

Definition at line 342 of file pad_draw_functions.cpp.

References PNS::angle(), SHAPE_POLY_SET::Append(), B_Cu, BLACK, DrawGraphicHaloText(), F_Cu, EDA_DRAW_PANEL::GetClipBox(), GetGRForceBlackPenState(), GetRoundRectCornerCenters(), GR_COPY, GR_TEXT_HJUSTIFY_CENTER, GR_TEXT_VJUSTIFY_CENTER, GR_XOR, GRCircle(), GRClosedPoly(), GRCSegm(), GRFillCSegm(), GRFilledCircle(), GRFilledSegment(), GRForceBlackPen(), GRLine(), GRSetDrawMode(), SHAPE_POLY_SET::Inflate(), PAD_DRAWINFO::m_Color, PAD_DRAWINFO::m_Display_netname, PAD_DRAWINFO::m_Display_padnum, PAD_DRAWINFO::m_DrawMode, PAD_DRAWINFO::m_DrawPanel, PAD_DRAWINFO::m_HoleColor, PAD_DRAWINFO::m_IsPrinting, PAD_DRAWINFO::m_Mask_margin, PAD_DRAWINFO::m_NoNetMarkColor, PAD_DRAWINFO::m_NPHoleColor, PAD_DRAWINFO::m_Offset, PAD_DRAWINFO::m_PadClearance, PAD_DRAWINFO::m_ShowNCMark, PAD_DRAWINFO::m_ShowNotPlatedHole, PAD_DRAWINFO::m_ShowPadFilled, max, min, MIN_TEXT_SIZE, NORMALIZE_ANGLE_90(), SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), PAD_DRILL_SHAPE_CIRCLE, PAD_DRILL_SHAPE_OBLONG, PAD_SHAPE_CIRCLE, PAD_SHAPE_CUSTOM, PAD_SHAPE_OVAL, PAD_SHAPE_RECT, PAD_SHAPE_ROUNDRECT, PAD_SHAPE_TRAPEZOID, SHAPE_LINE_CHAIN::Point(), SHAPE_LINE_CHAIN::PointCount(), SHAPE_POLY_SET::RemoveAllContours(), RotatePoint(), SEGCOUNT, TransformRoundRectToPolygon(), WHITE, wxPoint::x, and wxPoint::y.

Referenced by DIALOG_PAD_PROPERTIES::OnPaintShowPanel().

343 {
344  wxPoint coord[12];
345  double angle = m_Orient;
346  int seg_width;
347 
348  GRSetDrawMode( aDC, aDrawInfo.m_DrawMode );
349 
350  // calculate pad shape position :
351  wxPoint shape_pos = ShapePos() - aDrawInfo.m_Offset;
352 
353  wxSize halfsize = m_Size;
354  halfsize.x >>= 1;
355  halfsize.y >>= 1;
356 
357  switch( GetShape() )
358  {
359  case PAD_SHAPE_CIRCLE:
360  if( aDrawInfo.m_ShowPadFilled )
361  GRFilledCircle( aClipBox, aDC, shape_pos.x, shape_pos.y,
362  halfsize.x + aDrawInfo.m_Mask_margin.x, 0,
363  aDrawInfo.m_Color, aDrawInfo.m_Color );
364  else
365  GRCircle( aClipBox, aDC, shape_pos.x, shape_pos.y,
366  halfsize.x + aDrawInfo.m_Mask_margin.x,
367  m_PadSketchModePenSize, aDrawInfo.m_Color );
368 
369  if( aDrawInfo.m_PadClearance )
370  {
371  GRCircle( aClipBox,
372  aDC, shape_pos.x, shape_pos.y,
373  halfsize.x + aDrawInfo.m_PadClearance,
374  0, aDrawInfo.m_Color );
375  }
376 
377  break;
378 
379  case PAD_SHAPE_OVAL:
380  {
381  wxPoint segStart, segEnd;
382  seg_width = BuildSegmentFromOvalShape(segStart, segEnd, angle,
383  aDrawInfo.m_Mask_margin);
384  segStart += shape_pos;
385  segEnd += shape_pos;
386 
387  if( aDrawInfo.m_ShowPadFilled )
388  {
389  GRFillCSegm( aClipBox, aDC, segStart.x, segStart.y, segEnd.x, segEnd.y,
390  seg_width, aDrawInfo.m_Color );
391  }
392  else
393  {
394  GRCSegm( aClipBox, aDC, segStart.x, segStart.y, segEnd.x, segEnd.y,
395  seg_width, m_PadSketchModePenSize, aDrawInfo.m_Color );
396  }
397 
398  // Draw the clearance line
399  if( aDrawInfo.m_PadClearance )
400  {
401  seg_width += 2 * aDrawInfo.m_PadClearance;
402  GRCSegm( aClipBox, aDC, segStart.x, segStart.y, segEnd.x, segEnd.y,
403  seg_width, aDrawInfo.m_Color );
404  }
405  }
406  break;
407 
408  case PAD_SHAPE_RECT:
409  case PAD_SHAPE_TRAPEZOID:
410  BuildPadPolygon( coord, aDrawInfo.m_Mask_margin, angle );
411 
412  for( int ii = 0; ii < 4; ii++ )
413  coord[ii] += shape_pos;
414 
415  GRClosedPoly( aClipBox, aDC, 4, coord, aDrawInfo.m_ShowPadFilled,
416  aDrawInfo.m_ShowPadFilled ? 0 : m_PadSketchModePenSize,
417  aDrawInfo.m_Color, aDrawInfo.m_Color );
418 
419  if( aDrawInfo.m_PadClearance )
420  {
421  #define SEGCOUNT 32 // number of segments to approximate a circle
422  SHAPE_POLY_SET outline;
424 
425  // Draw the polygon: Inflate creates only one convex polygon
426  if( outline.OutlineCount() > 0 )
427  {
428  SHAPE_LINE_CHAIN& poly = outline.Outline( 0 );
429 
430  if( poly.PointCount() > 0 )
431  {
432  GRClosedPoly( aClipBox, aDC, poly.PointCount(),
433  (wxPoint*)&poly.Point( 0 ), false, 0,
434  aDrawInfo.m_Color, aDrawInfo.m_Color );
435  }
436  }
437  }
438  break;
439 
440  case PAD_SHAPE_ROUNDRECT:
441  {
442  // Use solder[Paste/Mask]size or pad size to build pad shape to draw
443  wxSize size( GetSize() );
444  size += aDrawInfo.m_Mask_margin * 2;
445  int corner_radius = GetRoundRectCornerRadius( size );
446 
447  // Draw the polygon: Inflate creates only one convex polygon
448  SHAPE_POLY_SET outline;
449  bool filled = aDrawInfo.m_ShowPadFilled;
450 
451  if( filled )
452  {
453  wxPoint centers[4];
454  GetRoundRectCornerCenters( centers, corner_radius, shape_pos,
455  size, GetOrientation() );
456  GRClosedPoly( aClipBox, aDC, 4, centers, true, corner_radius*2,
457  aDrawInfo.m_Color, aDrawInfo.m_Color );
458  }
459  else
460  {
461  TransformRoundRectToPolygon( outline, shape_pos, size, GetOrientation(),
462  corner_radius, 64 );
463 
464  if( outline.OutlineCount() > 0 )
465  {
466  SHAPE_LINE_CHAIN& poly = outline.Outline( 0 );
467 
468  if( poly.PointCount() > 0 )
469  {
470  GRClosedPoly( aClipBox, aDC, poly.PointCount(),
471  (wxPoint*)&poly.Point( 0 ), aDrawInfo.m_ShowPadFilled, 0,
472  aDrawInfo.m_Color, aDrawInfo.m_Color );
473  }
474  }
475  }
476 
477  if( aDrawInfo.m_PadClearance )
478  {
479  outline.RemoveAllContours();
480  size = GetSize();
481  size.x += aDrawInfo.m_PadClearance * 2;
482  size.y += aDrawInfo.m_PadClearance * 2;
483  corner_radius = GetRoundRectCornerRadius() + aDrawInfo.m_PadClearance;
484 
485  TransformRoundRectToPolygon( outline, shape_pos, size, GetOrientation(),
486  corner_radius, 32 );
487 
488  if( outline.OutlineCount() > 0 )
489  {
490  // Draw the polygon: Inflate creates only one convex polygon
491  SHAPE_LINE_CHAIN& clearance_poly = outline.Outline( 0 );
492 
493  if( clearance_poly.PointCount() > 0 )
494  {
495  GRClosedPoly( aClipBox, aDC, clearance_poly.PointCount(),
496  (wxPoint*)&clearance_poly.Point( 0 ), false, 0,
497  aDrawInfo.m_Color, aDrawInfo.m_Color );
498  }
499  }
500  }
501  }
502  break;
503 
504  case PAD_SHAPE_CUSTOM:
505  {
506  // The full shape has 2 items
507  // 1- The anchor pad: a round or rect pad located at pad position
508  // 2- The custom complex shape
509  // Note: The anchor pad shape is containing by the custom complex shape polygon
510  // The anchor pad is shown to help user to see where is the anchor, only in sketch mode
511  // (In filled mode, it is merged with the basic shapes)
512  wxPoint pad_pos = GetPosition() - aDrawInfo.m_Offset;
513 
514  // In sketch mode only: Draw the anchor pad: a round or rect pad
515  if( !aDrawInfo.m_ShowPadFilled )
516  {
518  {
519  wxPoint poly[4];
520  poly[0] = wxPoint( - halfsize.x, - halfsize.y );
521  poly[1] = wxPoint( - halfsize.x, + halfsize.y );
522  poly[2] = wxPoint( + halfsize.x, + halfsize.y );
523  poly[3] = wxPoint( + halfsize.x, - halfsize.y );
524 
525  for( int ii = 0; ii < 4; ++ii )
526  {
527  RotatePoint( &poly[ii], m_Orient );
528  poly[ii] += pad_pos;
529  }
530 
531  GRClosedPoly( aClipBox, aDC, 4, poly, false, 0,
532  aDrawInfo.m_Color, aDrawInfo.m_Color );
533  }
534  else
535  {
536  GRCircle( aClipBox, aDC, pad_pos.x, pad_pos.y,
537  halfsize.x,
538  m_PadSketchModePenSize, aDrawInfo.m_Color );
539  }
540  }
541 
542  SHAPE_POLY_SET outline; // Will contain the corners in board coordinates
543  outline.Append( m_customShapeAsPolygon );
544  CustomShapeAsPolygonToBoardPosition( &outline, pad_pos, GetOrientation() );
545  SHAPE_LINE_CHAIN* poly;
546 
547  const int segmentToCircleCount = 32;
548 
549  if( aDrawInfo.m_Mask_margin.x )
550  {
551  SHAPE_POLY_SET clearance_outline;
552  clearance_outline.Append( outline );
553  clearance_outline.Inflate( aDrawInfo.m_Mask_margin.x, segmentToCircleCount );
554  }
555  else
556  {
557  // Draw the polygon: only one polygon is expected
558  // However we provide a multi polygon shape drawing
559  // ( for the future or to show a non expected shape )
560  for( int jj = 0; jj < outline.OutlineCount(); ++jj )
561  {
562  poly = &outline.Outline( jj );
563 
564  GRClosedPoly( aClipBox, aDC, poly->PointCount(),
565  (wxPoint*)&poly->Point( 0 ), aDrawInfo.m_ShowPadFilled, 0,
566  aDrawInfo.m_Color, aDrawInfo.m_Color );
567  }
568  }
569 
570  if( aDrawInfo.m_PadClearance )
571  {
572  SHAPE_POLY_SET clearance_outline;
573  clearance_outline.Append( outline );
574 
575  clearance_outline.Inflate( aDrawInfo.m_PadClearance, segmentToCircleCount );
576 
577  for( int jj = 0; jj < clearance_outline.OutlineCount(); ++jj )
578  {
579  poly = &clearance_outline.Outline( jj );
580 
581  if( poly->PointCount() > 0 )
582  {
583  GRClosedPoly( aClipBox, aDC, poly->PointCount(),
584  (wxPoint*)&poly->Point( 0 ), false, 0,
585  aDrawInfo.m_Color, aDrawInfo.m_Color );
586  }
587  }
588  }
589  break;
590  }
591 
592  default:
593  break;
594  }
595 
596  // Draw the pad hole
597  wxPoint holepos = m_Pos - aDrawInfo.m_Offset;
598  int hole = m_Drill.x >> 1;
599 
600  bool drawhole = hole > 0;
601 
602  if( !aDrawInfo.m_ShowPadFilled && !aDrawInfo.m_ShowNotPlatedHole )
603  drawhole = false;
604 
605  if( drawhole )
606  {
607  bool blackpenstate = false;
608  COLOR4D fillcolor = aDrawInfo.m_ShowNotPlatedHole? aDrawInfo.m_NPHoleColor :
609  aDrawInfo.m_HoleColor;
610  COLOR4D hole_color = fillcolor;
611 
612  if( aDrawInfo.m_IsPrinting )
613  {
614  fillcolor = COLOR4D::WHITE;
615  blackpenstate = GetGRForceBlackPenState();
616  GRForceBlackPen( false );
617  }
618  else
619  {
620  GRSetDrawMode( aDC, ( aDrawInfo.m_DrawMode != GR_XOR ) ? GR_COPY : GR_XOR );
621  }
622 
623  if( blackpenstate )
624  hole_color = COLOR4D::BLACK;
625 
626  switch( GetDrillShape() )
627  {
629  if( aDC->LogicalToDeviceXRel( hole ) > 1 ) // hole is drawn if hole > 1pixel
630  GRFilledCircle( aClipBox, aDC, holepos.x, holepos.y, hole, 0,
631  hole_color, fillcolor );
632  break;
633 
635  {
636  wxPoint drl_start, drl_end;
637  GetOblongDrillGeometry( drl_start, drl_end, seg_width );
638  drl_start += holepos;
639  drl_end += holepos;
640  GRFilledSegment( aClipBox, aDC, drl_start, drl_end, seg_width, fillcolor );
641  GRCSegm( aClipBox, aDC, drl_start, drl_end, seg_width, hole_color );
642  }
643  break;
644 
645  default:
646  break;
647  }
648 
649  if( aDrawInfo.m_IsPrinting )
650  GRForceBlackPen( blackpenstate );
651  }
652 
653  GRSetDrawMode( aDC, aDrawInfo.m_DrawMode );
654 
655  // Draw "No connect" ( / or \ or cross X ) if necessary
656  if( GetNetCode() == 0 && aDrawInfo.m_ShowNCMark )
657  {
658  int dx0 = std::min( halfsize.x, halfsize.y );
659 
660  if( m_layerMask[F_Cu] ) /* Draw \ */
661  GRLine( aClipBox, aDC, holepos.x - dx0, holepos.y - dx0,
662  holepos.x + dx0, holepos.y + dx0, 0, aDrawInfo.m_NoNetMarkColor );
663 
664  if( m_layerMask[B_Cu] ) // Draw /
665  GRLine( aClipBox, aDC, holepos.x + dx0, holepos.y - dx0,
666  holepos.x - dx0, holepos.y + dx0, 0, aDrawInfo.m_NoNetMarkColor );
667  }
668 
669  if( !aDrawInfo.m_IsPrinting )
670  GRSetDrawMode( aDC, ( aDrawInfo.m_DrawMode != GR_XOR ) ? GR_COPY : GR_XOR );
671 
672  // Draw the pad number
673  if( !aDrawInfo.m_Display_padnum && !aDrawInfo.m_Display_netname )
674  return;
675 
676  wxPoint tpos0 = shape_pos; // Position of the centre of text
677  wxPoint tpos = tpos0;
678  wxSize AreaSize; // size of text area, normalized to AreaSize.y < AreaSize.x
679  int shortname_len = 0;
680 
681  if( aDrawInfo.m_Display_netname )
682  shortname_len = GetShortNetname().Len();
683 
684  if( GetShape() == PAD_SHAPE_CIRCLE )
685  angle = 0;
686 
687  AreaSize = m_Size;
688 
689  if( m_Size.y > m_Size.x )
690  {
691  angle += 900;
692  AreaSize.x = m_Size.y;
693  AreaSize.y = m_Size.x;
694  }
695 
696  if( shortname_len > 0 ) // if there is a netname, provides room to display this netname
697  {
698  AreaSize.y /= 2; // Text used only the upper area of the
699  // pad. The lower area displays the net name
700  tpos.y -= AreaSize.y / 2;
701  }
702 
703  // Calculate the position of text, that is the middle point of the upper
704  // area of the pad
705  RotatePoint( &tpos, shape_pos, angle );
706 
707  // Draw text with an angle between -90 deg and + 90 deg
708  double t_angle = angle;
709  NORMALIZE_ANGLE_90( t_angle );
710 
711  /* Note: in next calculations, texte size is calculated for 3 or more
712  * chars. Of course, pads numbers and nets names can have less than 3
713  * chars. but after some tries, i found this is gives the best look
714  */
715  constexpr int MIN_CHAR_COUNT = 3;
716 
717  unsigned int tsize;
718  EDA_RECT* clipBox = aDrawInfo.m_DrawPanel?
719  aDrawInfo.m_DrawPanel->GetClipBox() : NULL;
720 
721  if( aDrawInfo.m_Display_padnum )
722  {
723  int numpad_len = std::max( (int) m_name.Length(), MIN_CHAR_COUNT );
724  tsize = std::min( (int) AreaSize.y, AreaSize.x / numpad_len );
725 
726  if( aDC->LogicalToDeviceXRel( tsize ) >= MIN_TEXT_SIZE ) // Not drawable when size too small.
727  {
728  // tsize reserve room for marges and segments thickness
729  tsize = ( tsize * 7 ) / 10;
730  DrawGraphicHaloText( clipBox, aDC, tpos,
731  aDrawInfo.m_Color, BLACK, WHITE,
732  m_name, t_angle,
733  wxSize( tsize , tsize ), GR_TEXT_HJUSTIFY_CENTER,
734  GR_TEXT_VJUSTIFY_CENTER, tsize / 7, false, false );
735 
736  }
737  }
738 
739  // display the short netname, if exists
740  if( shortname_len == 0 )
741  return;
742 
743  shortname_len = std::max( shortname_len, MIN_CHAR_COUNT );
744  tsize = std::min( AreaSize.y, AreaSize.x / shortname_len );
745 
746  if( aDC->LogicalToDeviceXRel( tsize ) >= MIN_TEXT_SIZE ) // Not drawable in size too small.
747  {
748  tpos = tpos0;
749 
750  if( aDrawInfo.m_Display_padnum )
751  tpos.y += AreaSize.y / 2;
752 
753  RotatePoint( &tpos, shape_pos, angle );
754 
755  // tsize reserve room for marges and segments thickness
756  tsize = ( tsize * 7 ) / 10;
757  DrawGraphicHaloText( clipBox, aDC, tpos,
758  aDrawInfo.m_Color, BLACK, WHITE,
759  GetShortNetname(), t_angle,
760  wxSize( tsize, tsize ), GR_TEXT_HJUSTIFY_CENTER,
761  GR_TEXT_VJUSTIFY_CENTER, tsize / 7, false, false );
762  }
763 }
static int m_PadSketchModePenSize
Pen size used to draw pads in sketch mode (mode used to print pads on silkscreen layer) ...
Definition: class_pad.h:136
PAD_SHAPE_T GetAnchorPadShape() const
Function GetAnchorPadShape.
Definition: class_pad.h:226
bool m_Display_padnum
Definition: class_pad.h:75
void GRSetDrawMode(wxDC *DC, GR_DRAWMODE draw_mode)
Definition: gr_basic.cpp:223
void BuildPadPolygon(wxPoint aCoord[4], wxSize aInflateValue, double aRotation) const
Function BuildPadPolygon Has meaning only for polygonal pads (trapezoid and rectangular) Build the Co...
int PointCount() const
Function PointCount()
void TransformRoundRectToPolygon(SHAPE_POLY_SET &aCornerBuffer, const wxPoint &aPosition, const wxSize &aSize, double aRotation, int aCornerRadius, int aCircleToSegmentsCount)
Function TransformRoundRectToPolygon convert a rectangle with rounded corners to a polygon Convert ar...
int GetRoundRectCornerRadius() const
Function GetRoundRectCornerRadius Has meaning only for rounded rect pads.
Definition: class_pad.h:528
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
void GRCSegm(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, int aPenSize, COLOR4D Color)
Definition: gr_basic.cpp:415
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:388
COLOR4D m_NoNetMarkColor
Definition: class_pad.h:72
virtual EDA_RECT * GetClipBox()
bool m_ShowNCMark
Definition: class_pad.h:79
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:216
int OutlineCount() const
Returns the number of outlines in the set
void GRFilledCircle(EDA_RECT *ClipBox, wxDC *DC, int x, int y, int r, int width, COLOR4D Color, COLOR4D BgColor)
Definition: gr_basic.cpp:778
void DrawGraphicHaloText(EDA_RECT *aClipBox, wxDC *aDC, const wxPoint &aPos, const COLOR4D aBgColor, COLOR4D aColor1, COLOR4D aColor2, const wxString &aText, double aOrient, const wxSize &aSize, enum EDA_TEXT_HJUSTIFY_T aH_justify, enum EDA_TEXT_VJUSTIFY_T aV_justify, int aWidth, bool aItalic, bool aBold, void(*aCallback)(int x0, int y0, int xf, int yf, void *aData), void *aCallbackData, PLOTTER *aPlotter)
Draw graphic text with a border, so that it can be read on different backgrounds. ...
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
void NORMALIZE_ANGLE_90(T &Angle)
Definition: trigo.h:320
void GRClosedPoly(EDA_RECT *ClipBox, wxDC *DC, int n, wxPoint Points[], bool Fill, COLOR4D Color, COLOR4D BgColor)
Function GRClosedPoly draws a closed polygon onto the drawing context aDC and optionally fills and/or...
Definition: gr_basic.cpp:711
bool m_IsPrinting
Definition: class_pad.h:82
#define MIN_TEXT_SIZE
wxString m_name
Definition: class_pad.h:786
void CustomShapeAsPolygonToBoardPosition(SHAPE_POLY_SET *aMergedPolygon, wxPoint aPosition, double aRotation) const
When created, the corners coordinates are relative to the pad position, orientation 0...
void Inflate(int aFactor, int aCircleSegmentsCount)
Performs outline inflation/deflation, using round corners.
void GRForceBlackPen(bool flagforce)
Function GRForceBlackPen.
Definition: gr_basic.cpp:204
Class SHAPE_POLY_SET.
SHAPE_LINE_CHAIN & Outline(int aIndex)
Returns the reference to aIndex-th outline in the set
void GRFillCSegm(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color)
Definition: gr_basic.cpp:518
GR_DRAWMODE m_DrawMode
Definition: class_pad.h:67
EDA_DRAW_PANEL * m_DrawPanel
Definition: class_pad.h:66
COLOR4D m_HoleColor
Definition: class_pad.h:70
const wxSize & GetSize() const
Definition: class_pad.h:269
bool m_ShowNotPlatedHole
Definition: class_pad.h:80
SHAPE_POLY_SET m_customShapeAsPolygon
for free shape pads: the set of basic shapes, merged as one polygon, in local coordinates, orient 0, coordinates relative to m_Pos
Definition: class_pad.h:803
void TransformShapeWithClearanceToPolygon(SHAPE_POLY_SET &aCornerBuffer, int aClearanceValue, int aCircleToSegmentsCount, double aCorrectionFactor) const override
Function TransformShapeWithClearanceToPolygon Convert the pad shape to a closed polygon Used in filli...
void GRLine(EDA_RECT *ClipBox, wxDC *DC, int x1, int y1, int x2, int y2, int width, COLOR4D Color, wxPenStyle aStyle)
Definition: gr_basic.cpp:285
int m_PadClearance
Definition: class_pad.h:73
int GetNetCode() const
Function GetNetCode.
LSET m_layerMask
Bitwise layer :1= copper layer, 15= cmp, 2..14 = internal layers 16 .
Definition: class_pad.h:846
int BuildSegmentFromOvalShape(wxPoint &aSegStart, wxPoint &aSegEnd, double aRotation, const wxSize &aMargin) const
Function BuildSegmentFromOvalShape Has meaning only for OVAL (and ROUND) pads Build an equivalent seg...
wxPoint m_Offset
Definition: class_pad.h:83
void GetOblongDrillGeometry(wxPoint &aStartPoint, wxPoint &aEndPoint, int &aWidth) const
Function GetOblongDrillGeometry calculates the start point, end point and width of an equivalent segm...
Definition: class_pad.cpp:787
#define max(a, b)
Definition: auxiliary.h:86
Class SHAPE_LINE_CHAIN.
void GRFilledSegment(EDA_RECT *aClipBox, wxDC *aDC, wxPoint aStart, wxPoint aEnd, int aWidth, COLOR4D aColor)
Definition: gr_basic.cpp:526
static DIRECTION_45::AngleType angle(const VECTOR2I &a, const VECTOR2I &b)
void GRCircle(EDA_RECT *ClipBox, wxDC *DC, int xc, int yc, int r, int width, COLOR4D Color)
Definition: gr_basic.cpp:755
void RemoveAllContours()
Removes all outlines & holes (clears) the polygon set.
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees, but soon degrees.
Definition: class_pad.h:382
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
void GetRoundRectCornerCenters(wxPoint aCenters[4], int aRadius, const wxPoint &aPosition, const wxSize &aSize, double aRotation)
Helper function GetRoundRectCornerCenters Has meaning only for rounded rect Returns the centers of th...
Definition: colors.h:49
wxPoint ShapePos() const
Definition: class_pad.cpp:517
bool m_ShowPadFilled
Definition: class_pad.h:77
COLOR4D m_NPHoleColor
Definition: class_pad.h:71
COLOR4D m_Color
Definition: class_pad.h:68
VECTOR2I & Point(int aIndex)
Function Point()
wxSize m_Drill
Drill diam (drill shape = PAD_CIRCLE) or drill size (shape = OVAL) for drill shape = PAD_CIRCLE...
Definition: class_pad.h:816
Definition: colors.h:45
double m_Orient
in 1/10 degrees
Definition: class_pad.h:857
bool m_Display_netname
Definition: class_pad.h:76
bool GetGRForceBlackPenState(void)
Function GetGRForceBlackPenState.
Definition: gr_basic.cpp:214
const wxPoint GetPosition() const override
Definition: class_pad.h:220
wxSize m_Mask_margin
Definition: class_pad.h:74
#define min(a, b)
Definition: auxiliary.h:85
#define SEGCOUNT
wxPoint m_Pos
pad Position on board
Definition: class_pad.h:788
int Append(int x, int y, int aOutline=-1, int aHole=-1, bool aAllowDuplication=false)
Appends a vertex at the end of the given outline/hole (default: the last outline) ...
Class COLOR4D is the color representation with 4 components: red, green, blue, alpha.
Definition: color4d.h:39
const wxString & GetShortNetname() const
Function GetShortNetname.
D_PAD* D_PAD::Duplicate ( ) const
inline

same as Clone, but returns a D_PAD item.

Useful mainly for pythons scripts, because Clone (virtual function) returns an EDA_ITEM.

Definition at line 729 of file class_pad.h.

References PNS::Clone().

730  {
731  return (D_PAD*) Clone();
732  }
EDA_ITEM * Clone() const override
Function Clone creates a duplicate of this item with linked list members set to NULL.
Definition: class_pad.cpp:1244
void BOARD_ITEM::Flip ( const VECTOR2I aCentre)
inlineinherited

Definition at line 271 of file class_board_item.h.

References BOARD_ITEM::Flip(), BOARD_ITEM::GetBoard(), BOARD_ITEM::GetLayerName(), VECTOR2< T >::x, and VECTOR2< T >::y.

272  {
273  Flip( wxPoint( aCentre.x, aCentre.y ) );
274  }
virtual void Flip(const wxPoint &aCentre)
Function Flip Flip this object, i.e.
void D_PAD::Flip ( const wxPoint aCentre)
overridevirtual

Function Flip Flip this object, i.e.

change the board side for this object

Parameters
aCentre- the rotation point.

Reimplemented from BOARD_ITEM.

Definition at line 425 of file class_pad.cpp.

References FlipLayerMask(), FlipPrimitives(), GetOrientation(), GetPosition(), m_DeltaSize, m_layerMask, m_Offset, m_Pos0, MIRROR(), SetLayerSet(), SetOrientation(), SetY(), and wxPoint::y.

426 {
427  int y = GetPosition().y;
428  MIRROR( y, aCentre.y ); // invert about x axis.
429  SetY( y );
430 
431  MIRROR( m_Pos0.y, 0 );
432  MIRROR( m_Offset.y, 0 );
433  MIRROR( m_DeltaSize.y, 0 );
434 
436 
437  // flip pads layers
438  // PADS items are currently on all copper layers, or
439  // currently, only on Front or Back layers.
440  // So the copper layers count is not taken in account
442 
443  // Flip the basic shapes, in custom pads
444  FlipPrimitives();
445 
446  // m_boundingRadius = -1; the shape has not been changed
447 }
LSET FlipLayerMask(LSET aMask, int aCopperLayersCount)
Calculate the mask layer when flipping a footprint BACK and FRONT copper layers, mask, paste, solder layers are swapped internal layers are flipped only if the copper layers count is known.
Definition: lset.cpp:518
void FlipPrimitives()
Flip the basic shapes, in custom pads.
Definition: class_pad.cpp:451
void MIRROR(T &aPoint, const T &aMirrorRef)
Definition: macros.h:111
wxSize m_DeltaSize
delta on rectangular shapes
Definition: class_pad.h:850
LSET m_layerMask
Bitwise layer :1= copper layer, 15= cmp, 2..14 = internal layers 16 .
Definition: class_pad.h:846
void SetLayerSet(LSET aLayerMask)
Definition: class_pad.h:401
void SetY(int y)
Definition: class_pad.h:259
wxPoint m_Pos0
Initial Pad position (i.e.
Definition: class_pad.h:852
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees, but soon degrees.
Definition: class_pad.h:382
void SetOrientation(double aAngle)
Function SetOrientation sets the rotation angle of the pad.
Definition: class_pad.cpp:418
wxPoint m_Offset
m_Offset is useful only for oblong and rect pads (it can be used for other shapes, but without any interest).
Definition: class_pad.h:844
const wxPoint GetPosition() const override
Definition: class_pad.h:220
void D_PAD::FlipPrimitives ( )

Flip the basic shapes, in custom pads.

Definition at line 451 of file class_pad.cpp.

References PAD_CS_PRIMITIVE::m_ArcAngle, m_basicShapes, m_customShapeAsPolygon, PAD_CS_PRIMITIVE::m_End, PAD_CS_PRIMITIVE::m_Poly, PAD_CS_PRIMITIVE::m_Shape, PAD_CS_PRIMITIVE::m_Start, MIRROR(), SHAPE_POLY_SET::Outline(), SHAPE_POLY_SET::OutlineCount(), SHAPE_LINE_CHAIN::Point(), SHAPE_LINE_CHAIN::PointCount(), S_POLYGON, wxPoint::y, and VECTOR2< T >::y.

Referenced by Flip(), DIALOG_PAD_PROPERTIES::initValues(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

452 {
453  // Flip custom shapes
454  for( unsigned ii = 0; ii < m_basicShapes.size(); ++ii )
455  {
456  PAD_CS_PRIMITIVE& primitive = m_basicShapes[ii];
457 
458  MIRROR( primitive.m_Start.y, 0 );
459  MIRROR( primitive.m_End.y, 0 );
460  primitive.m_ArcAngle = -primitive.m_ArcAngle;
461 
462  switch( primitive.m_Shape )
463  {
464  case S_POLYGON: // polygon
465  for( unsigned jj = 0; jj < primitive.m_Poly.size(); jj++ )
466  MIRROR( primitive.m_Poly[jj].y, 0 );
467  break;
468 
469  default:
470  break;
471  }
472  }
473 
474  // Flip local coordinates in merged Polygon
475  for( int cnt = 0; cnt < m_customShapeAsPolygon.OutlineCount(); ++cnt )
476  {
478 
479  for( int ii = 0; ii < poly.PointCount(); ++ii )
480  MIRROR( poly.Point( ii ).y, 0 );
481  }
482 }
std::vector< PAD_CS_PRIMITIVE > m_basicShapes
for free shape pads: a list of basic shapes, in local coordinates, orient 0, coordinates relative to ...
Definition: class_pad.h:798
int PointCount() const
Function PointCount()
wxPoint m_Start
angle of an arc, from its starting point, in 0.1 deg
Definition: class_pad.h:100
polygon (not yet used for tracks, but could be in microwave apps)
int OutlineCount() const
Returns the number of outlines in the set
void MIRROR(T &aPoint, const T &aMirrorRef)
Definition: macros.h:111
std::vector< wxPoint > m_Poly
is also the start point of the arc
Definition: class_pad.h:102
SHAPE_LINE_CHAIN & Outline(int aIndex)
Returns the reference to aIndex-th outline in the set
Helper class to handle a primitive (basic shape: polygon, segment, circle or arc) to build a custom p...
Definition: class_pad.h:91
SHAPE_POLY_SET m_customShapeAsPolygon
for free shape pads: the set of basic shapes, merged as one polygon, in local coordinates, orient 0, coordinates relative to m_Pos
Definition: class_pad.h:803
wxPoint m_End
is also the center of the circle and arc
Definition: class_pad.h:101
STROKE_T m_Shape
Definition: class_pad.h:94
Class SHAPE_LINE_CHAIN.
VECTOR2I & Point(int aIndex)
Function Point()
double m_ArcAngle
radius of a circle
Definition: class_pad.h:99
std::string BOARD_ITEM::FormatAngle ( double  aAngle)
staticinherited

Function FormatAngle converts aAngle from board units to a string appropriate for writing to file.

Note
Internal angles for board items can be either degrees or tenths of degree on how KiCad is built.
Parameters
aAngleA angle value to convert.
Returns
A std::string object containing the converted angle.

Definition at line 171 of file class_board_item.cpp.

Referenced by BOARD_ITEM::HitTest().

172 {
173  char temp[50];
174 
175  int len = snprintf( temp, sizeof(temp), "%.10g", aAngle / 10.0 );
176 
177  return std::string( temp, len );
178 }
std::string BOARD_ITEM::FormatInternalUnits ( int  aValue)
staticinherited

Function FormatInternalUnits converts aValue from board internal units to a string appropriate for writing to file.

Note
Internal units for board items can be either deci-mils or nanometers depending on how KiCad is build.
Parameters
aValueA coordinate value to convert.
Returns
A std::string object containing the converted value.

Definition at line 90 of file class_board_item.cpp.

Referenced by checkConnectedTo(), BOARD_ITEM::FormatInternalUnits(), BOARD_ITEM::HitTest(), and BOARD::TracksInNetBetweenPoints().

91 {
92 #if 1
93 
94  char buf[50];
95  int len;
96  double mm = aValue / IU_PER_MM;
97 
98  if( mm != 0.0 && fabs( mm ) <= 0.0001 )
99  {
100  len = sprintf( buf, "%.10f", mm );
101 
102  while( --len > 0 && buf[len] == '0' )
103  buf[len] = '\0';
104 
105  if( buf[len] == '.' )
106  buf[len] = '\0';
107  else
108  ++len;
109  }
110  else
111  {
112  len = sprintf( buf, "%.10g", mm );
113  }
114 
115  return std::string( buf, len );
116 
117 #else
118 
119  // Assume aValue is in nanometers, and that we want the result in millimeters,
120  // and that int is 32 bits wide. Then perform an alternative algorithm.
121  // Can be used to verify that the above algorithm is correctly generating text.
122  // Convert aValue into an integer string, then insert a decimal point manually.
123  // Results are the same as above general purpose algorithm.
124 
125  wxASSERT( sizeof(int) == 4 );
126 
127  if( aValue == 0 )
128  return std::string( 1, '0' );
129  else
130  {
131  char buf[50];
132  int len = sprintf( buf, aValue > 0 ? "%06d" : "%07d", aValue ); // optionally pad w/leading zeros
133 
134  std::string ret( buf, len );
135 
136  std::string::iterator it = ret.end() - 1; // last byte
137 
138  // insert '.' at 6 positions from end, dividing by 10e6 (a million), nm => mm
139  std::string::iterator decpoint = ret.end() - 6;
140 
141  // truncate trailing zeros, up to decimal point position
142  for( ; *it=='0' && it >= decpoint; --it )
143  ret.erase( it ); // does not invalidate iterators it or decpoint
144 
145  if( it >= decpoint )
146  {
147  ret.insert( decpoint, '.' );
148 
149  // decpoint is invalidated here, after insert()
150 
151 #if 1 // want a leading zero when decimal point is in first position?
152  if( ret[0] == '.' )
153  {
154  // insert leading zero ahead of decimal point.
155  ret.insert( ret.begin(), '0' );
156  }
157  else if( ret[0]=='-' && ret[1]=='.' )
158  {
159  ret.insert( ret.begin() + 1, '0' );
160  }
161 #endif
162  }
163 
164  return ret;
165  }
166 
167 #endif
168 }
std::string BOARD_ITEM::FormatInternalUnits ( const wxPoint aPoint)
staticinherited

Definition at line 181 of file class_board_item.cpp.

References BOARD_ITEM::FormatInternalUnits(), wxPoint::x, and wxPoint::y.

182 {
183  return FormatInternalUnits( aPoint.x ) + " " + FormatInternalUnits( aPoint.y );
184 }
static std::string FormatInternalUnits(int aValue)
Function FormatInternalUnits converts aValue from board internal units to a string appropriate for wr...
std::string BOARD_ITEM::FormatInternalUnits ( const VECTOR2I aPoint)
staticinherited

Definition at line 187 of file class_board_item.cpp.

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

188 {
189  return FormatInternalUnits( aPoint.x ) + " " + FormatInternalUnits( aPoint.y );
190 }
static std::string FormatInternalUnits(int aValue)
Function FormatInternalUnits converts aValue from board internal units to a string appropriate for wr...
std::string BOARD_ITEM::FormatInternalUnits ( const wxSize &  aSize)
staticinherited

Definition at line 193 of file class_board_item.cpp.

References BOARD_ITEM::FormatInternalUnits().

194 {
195  return FormatInternalUnits( aSize.GetWidth() ) + " " + FormatInternalUnits( aSize.GetHeight() );
196 }
static std::string FormatInternalUnits(int aValue)
Function FormatInternalUnits converts aValue from board internal units to a string appropriate for wr...
PAD_SHAPE_T D_PAD::GetAnchorPadShape ( ) const
inline

Function GetAnchorPadShape.

Returns
the shape of the anchor pad shape, for custom shaped pads.

Definition at line 226 of file class_pad.h.

Referenced by PCB_IO::format(), ImportSettingsFromMaster(), DIALOG_PAD_PROPERTIES::initValues(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), and DIALOG_PAD_PROPERTIES::transferDataToPad().

226 { return m_anchorPadShape; }
PAD_SHAPE_T m_anchorPadShape
for custom shaped pads: shape of pad anchor, PAD_SHAPE_RECT, PAD_SHAPE_CIRCLE
Definition: class_pad.h:827
bool D_PAD::GetBestAnchorPosition ( VECTOR2I aPos)

Definition at line 329 of file pad_custom_shape_functions.cpp.

References SHAPE_POLY_SET::BBox(), SHAPE_POLY_SET::Contains(), SHAPE_POLY_SET::COutline(), dist, SHAPE_LINE_CHAIN::Distance(), EuclideanNorm(), BOX2< Vec >::GetHeight(), max, min, NULLOPT, PAD_SHAPE_CIRCLE, rescale(), VECTOR2< T >::x, and VECTOR2< T >::y.

330 {
331  SHAPE_POLY_SET poly;
332 
333  if ( !buildCustomPadPolygon( &poly, 16 ) )
334  return false;
335 
336  const int minSteps = 10;
337  const int maxSteps = 50;
338 
339  int stepsX, stepsY;
340 
341  auto bbox = poly.BBox();
342 
343  if( bbox.GetWidth() < bbox.GetHeight() )
344  {
345  stepsX = minSteps;
346  stepsY = minSteps * (double) bbox.GetHeight() / (double )(bbox.GetWidth() + 1);
347  }
348  else
349  {
350  stepsY = minSteps;
351  stepsX = minSteps * (double) bbox.GetWidth() / (double )(bbox.GetHeight() + 1);
352  }
353 
354  stepsX = std::max(minSteps, std::min( maxSteps, stepsX ) );
355  stepsY = std::max(minSteps, std::min( maxSteps, stepsY ) );
356 
357  auto center = bbox.Centre();
358 
359  auto minDist = std::numeric_limits<int64_t>::max();
360  int64_t minDistEdge;
361 
363  {
364  minDistEdge = GetSize().x;
365  }
366  else
367  {
368  minDistEdge = std::max( GetSize().x, GetSize().y );
369  }
370 
371  OPT<VECTOR2I> bestAnchor( []()->OPT<VECTOR2I> { return NULLOPT; }() );
372 
373  for ( int y = 0; y < stepsY ; y++ )
374  {
375  for ( int x = 0; x < stepsX; x++ )
376  {
377  VECTOR2I p = bbox.GetPosition();
378  p.x += rescale( x, bbox.GetWidth(), (stepsX - 1) );
379  p.y += rescale( y, bbox.GetHeight(), (stepsY - 1) );
380 
381  if ( poly.Contains(p) )
382  {
383 
384  auto dist = (center - p).EuclideanNorm();
385  auto distEdge = poly.COutline(0).Distance( p, true );
386  if ( distEdge >= minDistEdge )
387  {
388  if ( dist < minDist )
389  {
390  bestAnchor = p;
391  minDist = dist;
392  }
393  }
394  }
395  }
396  }
397 
398  if ( bestAnchor )
399  {
400  aPos = *bestAnchor;
401  return true;
402  }
403 
404  return false;
405 }
double EuclideanNorm(const wxPoint &vector)
Euclidean norm of a 2D vector.
Definition: trigo.h:112
PAD_SHAPE_T GetAnchorPadShape() const
Function GetAnchorPadShape.
Definition: class_pad.h:226
static const int dist[10][10]
Definition: ar_matrix.cpp:320
bool Contains(const VECTOR2I &aP, int aSubpolyIndex=-1, bool aIgnoreHoles=false) const
Returns true if a given subpolygon contains the point aP.
const auto NULLOPT
Definition: optional.h:9
Class SHAPE_POLY_SET.
const wxSize & GetSize() const
Definition: class_pad.h:269
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
int rescale(int aNumerator, int aValue, int aDenominator)
Definition: math_util.cpp:32
coord_type GetHeight() const
Definition: box2.h:196
#define max(a, b)
Definition: auxiliary.h:86
boost::optional< T > OPT
Definition: optional.h:7
bool buildCustomPadPolygon(SHAPE_POLY_SET *aMergedPolygon, int aCircleToSegmentsCount)
int Distance(const VECTOR2I &aP, bool aOutlineOnly=false) const
Function Distance()
const BOX2I BBox(int aClearance=0) const override
Function BBox()
#define min(a, b)
Definition: auxiliary.h:85
BOARD * BOARD_ITEM::GetBoard ( ) const
virtualinherited

Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none.

Definition at line 64 of file class_board_item.cpp.

References BOARD_ITEM::GetBoard(), BOARD_ITEM::GetParent(), PCB_T, and EDA_ITEM::Type().

Referenced by DIALOG_GEN_FOOTPRINT_POSITION::CreateFiles(), DeleteMarkedItems(), TEXTE_PCB::Draw(), PCB_TARGET::Draw(), EDGE_MODULE::Draw(), ZONE_CONTAINER::Draw(), TEXTE_MODULE::Draw(), TRACK::Draw(), DIMENSION::Draw(), DRAWSEGMENT::Draw(), MODULE::Draw(), SEGZONE::Draw(), VIA::Draw(), MODULE::DrawAncre(), ZONE_CONTAINER::DrawFilledArea(), BOARD_PRINTOUT_CONTROLLER::DrawPage(), TEXTE_PCB::Flip(), TRACK::Flip(), BOARD_ITEM::Flip(), ZONE_CONTAINER::Flip(), VIA::Flip(), BOARD_ITEM::GetBoard(), GAL_ARRAY_CREATOR::getBoard(), LEGACY_ARRAY_CREATOR::getBoard(), MODULE::GetBoundingPoly(), BOARD_ITEM::GetLayerName(), TRACK::GetMsgPanelInfo(), NETINFO_ITEM::GetMsgPanelInfo(), GetMsgPanelInfo(), TRACK::GetMsgPanelInfoBase(), SEGZONE::GetMsgPanelInfoBase(), VIA::GetMsgPanelInfoBase(), TRACK::GetMsgPanelInfoBase_Common(), BOARD_CONNECTED_ITEM::GetNetClass(), BOARD_CONNECTED_ITEM::GetNetnameMsg(), VIA::GetSelectMenuText(), GetSelectMenuText(), GetSolderMaskMargin(), GetSolderPasteMargin(), PushTrack(), BOARD_CONNECTED_ITEM::SetNet(), BOARD_CONNECTED_ITEM::SetNetCode(), MODULE::ViewBBox(), VIA::ViewGetLOD(), and ViewGetLOD().

65 {
66  if( Type() == PCB_T )
67  return (BOARD*) this;
68 
69  BOARD_ITEM* parent = GetParent();
70 
71  if( parent )
72  return parent->GetBoard();
73 
74  return NULL;
75 }
KICAD_T Type() const
Function Type()
Definition: base_struct.h:198
BOARD_ITEM_CONTAINER * GetParent() const
Definition: typeinfo.h:85
Class BOARD_ITEM is a base class for any item which can be embedded within the BOARD container class...
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:170
virtual BOARD * GetBoard() const
Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
const EDA_RECT D_PAD::GetBoundingBox ( ) const
overridevirtual

Function GetBoundingBox returns the orthogonal, bounding box of this object for display purposes.

This box should be an enclosing perimeter for visible components of this object, and the units should be in the pcb or schematic coordinate system. It is OK to overestimate the size by a few counts.

Reimplemented from EDA_ITEM.

Definition at line 216 of file class_pad.cpp.

References abs, SHAPE_POLY_SET::COutline(), SHAPE_LINE_CHAIN::CPoint(), CustomShapeAsPolygonToBoardPosition(), EDA_RECT::GetBoundingBoxRotated(), GetOrientation(), GetPosition(), GetShape(), EDA_RECT::Inflate(), m_customShapeAsPolygon, m_DeltaSize, m_Orient, m_Pos, m_Size, max, EDA_RECT::Merge(), min, SHAPE_POLY_SET::OutlineCount(), PAD_SHAPE_CIRCLE, PAD_SHAPE_CUSTOM, PAD_SHAPE_OVAL, PAD_SHAPE_RECT, PAD_SHAPE_ROUNDRECT, PAD_SHAPE_TRAPEZOID, SHAPE_LINE_CHAIN::PointCount(), RotatePoint(), EDA_RECT::SetEnd(), EDA_RECT::SetOrigin(), EDA_RECT::SetSize(), ShapePos(), wxPoint::x, VECTOR2< T >::x, wxPoint::y, and VECTOR2< T >::y.

Referenced by CreateThermalReliefPadPolygon(), HitTest(), PCB_BASE_FRAME::Import_Pad_Settings(), DSN::SPECCTRA_DB::makePADSTACK(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), and ViewBBox().

217 {
218  EDA_RECT area;
219  wxPoint quadrant1, quadrant2, quadrant3, quadrant4;
220  int x, y, r, dx, dy;
221 
222  wxPoint center = ShapePos();
223  wxPoint endPoint;
224 
225  EDA_RECT endRect;
226 
227  switch( GetShape() )
228  {
229  case PAD_SHAPE_CIRCLE:
230  area.SetOrigin( center );
231  area.Inflate( m_Size.x / 2 );
232  break;
233 
234  case PAD_SHAPE_OVAL:
235  /* To get the BoundingBox of an oval pad:
236  * a) If the pad is ROUND, see method for PAD_SHAPE_CIRCLE above
237  * OTHERWISE:
238  * b) Construct EDA_RECT for portion between circular ends
239  * c) Rotate that EDA_RECT
240  * d) Add the circular ends to the EDA_RECT
241  */
242 
243  // Test if the shape is circular
244  if( m_Size.x == m_Size.y )
245  {
246  area.SetOrigin( center );
247  area.Inflate( m_Size.x / 2 );
248  break;
249  }
250 
251  if( m_Size.x > m_Size.y )
252  {
253  // Pad is horizontal
254  dx = ( m_Size.x - m_Size.y ) / 2;
255  dy = m_Size.y / 2;
256 
257  // Location of end-points
258  x = dx;
259  y = 0;
260  r = dy;
261  }
262  else
263  {
264  // Pad is vertical
265  dx = m_Size.x / 2;
266  dy = ( m_Size.y - m_Size.x ) / 2;
267 
268  x = 0;
269  y = dy;
270  r = dx;
271  }
272 
273  // Construct the center rectangle and rotate
274  area.SetOrigin( center );
275  area.Inflate( dx, dy );
276  area = area.GetBoundingBoxRotated( center, m_Orient );
277 
278  endPoint = wxPoint( x, y );
279  RotatePoint( &endPoint, m_Orient );
280 
281  // Add points at each quadrant of circular regions
282  endRect.SetOrigin( center + endPoint );
283  endRect.Inflate( r );
284 
285  area.Merge( endRect );
286 
287  endRect.SetSize( 0, 0 );
288  endRect.SetOrigin( center - endPoint );
289  endRect.Inflate( r );
290 
291  area.Merge( endRect );
292 
293  break;
294 
295  case PAD_SHAPE_RECT:
296  case PAD_SHAPE_ROUNDRECT:
297  // Use two opposite corners and track their rotation
298  // (use symmetry for other points)
299  quadrant1.x = m_Size.x/2;
300  quadrant1.y = m_Size.y/2;
301  quadrant2.x = -m_Size.x/2;
302  quadrant2.y = m_Size.y/2;
303 
304  RotatePoint( &quadrant1, m_Orient );
305  RotatePoint( &quadrant2, m_Orient );
306  dx = std::max( std::abs( quadrant1.x ) , std::abs( quadrant2.x ) );
307  dy = std::max( std::abs( quadrant1.y ) , std::abs( quadrant2.y ) );
308 
309  // Set the bbox
310  area.SetOrigin( ShapePos() );
311  area.Inflate( dx, dy );
312  break;
313 
314  case PAD_SHAPE_TRAPEZOID:
315  // Use the four corners and track their rotation
316  // (Trapezoids will not be symmetric)
317 
318  quadrant1.x = (m_Size.x + m_DeltaSize.y)/2;
319  quadrant1.y = (m_Size.y - m_DeltaSize.x)/2;
320 
321  quadrant2.x = -(m_Size.x + m_DeltaSize.y)/2;
322  quadrant2.y = (m_Size.y + m_DeltaSize.x)/2;
323 
324  quadrant3.x = -(m_Size.x - m_DeltaSize.y)/2;
325  quadrant3.y = -(m_Size.y + m_DeltaSize.x)/2;
326 
327  quadrant4.x = (m_Size.x - m_DeltaSize.y)/2;
328  quadrant4.y = -(m_Size.y - m_DeltaSize.x)/2;
329 
330  RotatePoint( &quadrant1, m_Orient );
331  RotatePoint( &quadrant2, m_Orient );
332  RotatePoint( &quadrant3, m_Orient );
333  RotatePoint( &quadrant4, m_Orient );
334 
335  x = std::min( quadrant1.x, std::min( quadrant2.x, std::min( quadrant3.x, quadrant4.x) ) );
336  y = std::min( quadrant1.y, std::min( quadrant2.y, std::min( quadrant3.y, quadrant4.y) ) );
337  dx = std::max( quadrant1.x, std::max( quadrant2.x, std::max( quadrant3.x, quadrant4.x) ) );
338  dy = std::max( quadrant1.y, std::max( quadrant2.y, std::max( quadrant3.y, quadrant4.y) ) );
339 
340  area.SetOrigin( ShapePos().x + x, ShapePos().y + y );
341  area.SetSize( dx-x, dy-y );
342  break;
343 
344  case PAD_SHAPE_CUSTOM:
345  {
347  // Move shape to actual position
349  quadrant1 = m_Pos;
350  quadrant2 = m_Pos;
351 
352  for( int cnt = 0; cnt < polySet.OutlineCount(); ++cnt )
353  {
354  const SHAPE_LINE_CHAIN& poly = polySet.COutline( cnt );
355 
356  for( int ii = 0; ii < poly.PointCount(); ++ii )
357  {
358  quadrant1.x = std::min( quadrant1.x, poly.CPoint( ii ).x );
359  quadrant1.y = std::min( quadrant1.y, poly.CPoint( ii ).y );
360  quadrant2.x = std::max( quadrant2.x, poly.CPoint( ii ).x );
361  quadrant2.y = std::max( quadrant2.y, poly.CPoint( ii ).y );
362  }
363  }
364 
365  area.SetOrigin( quadrant1 );
366  area.SetEnd( quadrant2 );
367  }
368  break;
369 
370  default:
371  break;
372  }
373 
374  return area;
375 }
void Merge(const EDA_RECT &aRect)
Function Merge modifies the position and size of the rectangle in order to contain aRect...
int PointCount() const
Function PointCount()
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
void SetOrigin(const wxPoint &pos)
Definition: eda_rect.h:124
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:216
PAD_SHAPE_T GetShape() const
Function GetShape.
Definition: class_pad.h:216
#define abs(a)
Definition: auxiliary.h:84
void CustomShapeAsPolygonToBoardPosition(SHAPE_POLY_SET *aMergedPolygon, wxPoint aPosition, double aRotation) const
When created, the corners coordinates are relative to the pad position, orientation 0...
Class SHAPE_POLY_SET.
void SetEnd(int x, int y)
Definition: eda_rect.h:134
const EDA_RECT GetBoundingBoxRotated(wxPoint aRotCenter, double aAngle)
Function GetBoundingBoxRotated.
SHAPE_POLY_SET m_customShapeAsPolygon
for free shape pads: the set of basic shapes, merged as one polygon, in local coordinates, orient 0, coordinates relative to m_Pos
Definition: class_pad.h:803
wxSize m_DeltaSize
delta on rectangular shapes
Definition: class_pad.h:850
void SetSize(const wxSize &size)
Definition: eda_rect.h:126
#define max(a, b)
Definition: auxiliary.h:86
Class SHAPE_LINE_CHAIN.
double GetOrientation() const
Function GetOrientation returns the rotation angle of the pad in tenths of degrees, but soon degrees.
Definition: class_pad.h:382
Class EDA_RECT handles the component boundary box.
Definition: eda_rect.h:44
wxPoint ShapePos() const
Definition: class_pad.cpp:517
double m_Orient
in 1/10 degrees
Definition: class_pad.h:857
const wxPoint GetPosition() const override
Definition: class_pad.h:220
const VECTOR2I & CPoint(int aIndex) const
Function CPoint()
EDA_RECT & Inflate(wxCoord dx, wxCoord dy)
Function Inflate inflates the rectangle horizontally by dx and vertically by dy.
#define min(a, b)
Definition: auxiliary.h:85
wxPoint m_Pos
pad Position on board
Definition: class_pad.h:788
int D_PAD::GetBoundingRadius ( ) const
inline

Function GetBoundingRadius returns the radius of a minimum sized circle which fully encloses this pad.

The center is the pad position

Definition at line 609 of file class_pad.h.

Referenced by DRC::checkClearancePadToPad(), DRC::checkClearanceSegmToPad(), HitTest(), DIALOG_PAD_PROPERTIES::OnPaintShowPanel(), and DRC::testPad2Pad().

610  {
611  // Any member function which would affect this calculation should set
612  // m_boundingRadius to -1 to re-trigger the calculation from here.
613  // Currently that is only m_Size, m_DeltaSize, and m_padShape accessors.
614  if( m_boundingRadius == -1 )
615  {
617  }
618 
619  return m_boundingRadius;
620  }
int m_boundingRadius
radius of the circle containing the pad shape
Definition: class_pad.h:784
int boundingRadius() const
Function boundingRadius returns a calculated radius of a bounding circle for this pad...
Definition: class_pad.cpp:141
virtual const wxPoint BOARD_ITEM::GetCenter ( ) const
inlinevirtualinherited

Function GetCenter()

This defaults to the same point as returned by GetPosition(), unless overridden

Returns
centre point of the item

Reimplemented in DRAWSEGMENT.

Definition at line 97 of file class_board_item.h.

References BOARD_ITEM::GetPosition(), and BOARD_ITEM::SetPosition().

Referenced by BOARD::chainMarkedSegments(), and DIALOG_CREATE_ARRAY::ARRAY_CIRCULAR_OPTIONS::TransformItem().

97 { return GetPosition(); }
virtual const wxPoint GetPosition() const =0
wxString D_PAD::GetClass ( ) const
inlineoverridevirtual

Function GetClass returns the class name.

Returns
wxString

Implements EDA_ITEM.

Definition at line 669 of file class_pad.h.

670  {
671  return wxT( "PAD" );
672  }
int D_PAD::GetClearance ( BOARD_CONNECTED_ITEM aItem = NULL) const
overridevirtual

Function GetClearance returns the clearance in internal units.

If aItem is not NULL then the returned clearance is the greater of this object's clearance and aItem's clearance. If aItem is NULL, then this objects clearance is returned.

Parameters
aItemis another BOARD_CONNECTED_ITEM or NULL
Returns
int - the clearance in internal units.

Reimplemented from BOARD_CONNECTED_ITEM.

Definition at line 563 of file class_pad.cpp.

References BOARD_CONNECTED_ITEM::GetClearance(), MODULE::GetLocalClearance(), GetLocalClearance(), GetParent(), m_LocalClearance, and max.

Referenced by ZONE_FILLER::buildZoneFeatureHoleList(), DRC::checkClearancePadToPad(), KIGFX::PCB_PAINTER::draw(), and DRC::testPad2Pad().

564 {
565  // A pad can have specific clearance parameters that
566  // overrides its NETCLASS clearance value
567  int clearance = m_LocalClearance;
568 
569  if( clearance == 0 )
570  {
571  // If local clearance is 0, use the parent footprint clearance value
572  if( GetParent() && GetParent()->GetLocalClearance() )
573  clearance = GetParent()->GetLocalClearance();
574  }
575 
576  if( clearance == 0 ) // If the parent footprint clearance value = 0, use NETCLASS value
577  return BOARD_CONNECTED_ITEM::GetClearance( aItem );
578 
579  // We have a specific clearance.
580  // if aItem, return the biggest clearance
581  if( aItem )
582  {
583  int hisClearance = aItem->GetClearance();
584  return std::max( hisClearance, clearance );
585  }
586 
587  // Return the specific clearance.
588  return clearance;
589 }
int m_LocalClearance
Local clearance.
Definition: class_pad.h:864
int GetLocalClearance() const
Definition: class_module.h:208
MODULE * GetParent() const
Definition: class_pad.h:162
virtual int GetClearance(BOARD_CONNECTED_ITEM *aItem=NULL) const
Function GetClearance returns the clearance in internal units.
int GetLocalClearance() const
Definition: class_pad.h:417
#define max(a, b)
Definition: auxiliary.h:86
const SHAPE_POLY_SET& D_PAD::GetCustomShapeAsPolygon ( ) const
inline

Accessor to the custom shape as one polygon.

Definition at line 341 of file class_pad.h.

References Flip().

Referenced by CINFO3D_VISU::buildPadShapePolygon(), DRC::checkClearancePadToPad(), DRC::checkClearanceSegmToPad(), CINFO3D_VISU::createNewPadWithClearance(), CreatePadsShapesSection(), KIGFX::PCB_PAINTER::draw(), DSN::SPECCTRA_DB::makePADSTACK(), and PNS_KICAD_IFACE::syncPad().

341 { return m_customShapeAsPolygon; }
SHAPE_POLY_SET m_customShapeAsPolygon
for free shape pads: the set of basic shapes, merged as one polygon, in local coordinates, orient 0, coordinates relative to m_Pos
Definition: class_pad.h:803
CUST_PAD_SHAPE_IN_ZONE D_PAD::GetCustomShapeInZoneOpt ( ) const
inline
Returns
the option for the custom pad shape to use as clearance area in copper zones

Definition at line 232 of file class_pad.h.

Referenced by PCB_IO::format(), DIALOG_PAD_PROPERTIES::initValues(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

233  {
235  }
CUST_PAD_SHAPE_IN_ZONE m_customShapeClearanceArea
How to build the custom shape in zone, to create the clearance area: CUST_PAD_SHAPE_IN_ZONE_OUTLINE =...
Definition: class_pad.h:811
STATUS_FLAGS EDA_ITEM::GetFlags ( ) const
inlineinherited

Definition at line 255 of file base_struct.h.

References EDA_ITEM::m_Flags.

Referenced by AbortMoveAndEditTarget(), SCH_SCREEN::addConnectedItemsToBlock(), AddMenusForBitmap(), AddMenusForBusEntry(), AddMenusForComponent(), AddMenusForComponentField(), AddMenusForEditComponent(), AddMenusForGLabel(), AddMenusForHierchicalSheet(), AddMenusForHLabel(), AddMenusForLabel(), AddMenusForSheetPin(), AddMenusForText(), SCH_EDIT_FRAME::BeginSegment(), SCH_EDIT_FRAME::ChangeTextOrient(), Collect_TrackSegmentsToDrag(), SCH_EDIT_FRAME::ConvertPart(), SCH_EDIT_FRAME::copyBlockItems(), LIB_EDIT_FRAME::copySelectedItems(), LIB_EDIT_FRAME::CreatePin(), PCB_EDIT_FRAME::createPopUpMenuForFootprints(), PCB_EDIT_FRAME::createPopUpMenuForFpPads(), PCB_EDIT_FRAME::createPopUpMenuForFpTexts(), PCB_EDIT_FRAME::createPopUpMenuForTexts(), PCB_EDIT_FRAME::createPopupMenuForTracks(), PCB_EDIT_FRAME::createPopUpMenuForZones(), PCB_EDIT_FRAME::Delete_Segment_Edge(), SCH_EDIT_FRAME::DeleteItem(), SCH_EDIT_FRAME::DeleteItemsInList(), SCH_EDIT_FRAME::DeleteJunction(), PCB_BASE_FRAME::DeleteTextModule(), BOARD::Draw(), PCB_EDIT_FRAME::Edit_TrackSegm_Width(), SCH_EDIT_FRAME::EditComponentFieldText(), SCH_EDIT_FRAME::EditImage(), PCB_EDIT_FRAME::FlipTextePcb(), LIB_VIEW_FRAME::GeneralControl(), SCH_EDIT_FRAME::GeneralControl(), LIB_EDIT_FRAME::GetComponentFromRedoList(), LIB_EDIT_FRAME::GetComponentFromUndoList(), SCH_SCREEN::GetConnection(), InitialiseDragParameters(), EDA_DRAW_FRAME::isBusy(), Magnetize(), SCH_EDIT_FRAME::MirrorImage(), SCH_EDIT_FRAME::MirrorSheet(), SCH_EDIT_FRAME::OnAutoplaceFields(), SCH_EDIT_FRAME::OnConvertTextType(), SCH_EDIT_FRAME::OnCopySchematicItemRequest(), SCH_EDIT_FRAME::OnDragItem(), SCH_EDIT_FRAME::OnEditItem(), LIB_EDIT_FRAME::OnEditPin(), FOOTPRINT_EDIT_FRAME::OnHotKey(), SCH_EDIT_FRAME::OnHotKey(), PCB_EDIT_FRAME::OnHotKey(), PCB_EDIT_FRAME::OnHotkeyBeginRoute(), PCB_EDIT_FRAME::OnHotkeyCopyItem(), PCB_EDIT_FRAME::OnHotkeyDeleteItem(), PCB_EDIT_FRAME::OnHotkeyDuplicateOrArrayItem(), PCB_EDIT_FRAME::OnHotkeyEditItem(), PCB_EDIT_FRAME::OnHotkeyFlipItem(), PCB_EDIT_FRAME::OnHotkeyMoveItem(), PCB_EDIT_FRAME::OnHotkeyPlaceItem(), PCB_EDIT_FRAME::OnHotkeyRotateItem(), FOOTPRINT_EDIT_FRAME::OnLeftClick(), SCH_EDIT_FRAME::OnLeftClick(), PCB_EDIT_FRAME::OnLeftClick(), FOOTPRINT_EDIT_FRAME::OnLeftDClick(), SCH_EDIT_FRAME::OnLeftDClick(), PCB_EDIT_FRAME::OnLeftDClick(), EDA_DRAW_PANEL::OnMouseEvent(), SCH_EDIT_FRAME::OnMoveItem(), SCH_EDIT_FRAME::OnOpenLibraryEditor(), SCH_EDIT_FRAME::OnOrient(), FOOTPRINT_EDIT_FRAME::OnRightClick(), GERBVIEW_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRightClick(), PCB_EDIT_FRAME::OnRightClick(), SCH_EDIT_FRAME::OnRotate(), SCH_EDIT_FRAME::OnSelectUnit(), SCH_EDIT_FRAME::OrientComponent(), PCB_EDIT_FRAME::PlaceTarget(), FOOTPRINT_EDIT_FRAME::PrepareItemForHotkey(), LIB_EDIT_FRAME::Process_Special_Functions(), TRACKS_CLEANER::removeDuplicatesOfTrack(), PCB_BASE_FRAME::Rotate_Module(), PCB_EDIT_FRAME::Rotate_Texte_Pcb(), SCH_EDIT_FRAME::RotateField(), SCH_EDIT_FRAME::RotateHierarchicalSheet(), SCH_EDIT_FRAME::RotateImage(), PCB_BASE_FRAME::RotateTextModule(), LIB_EDIT_FRAME::SaveCopyInUndoList(), SCH_EDIT_FRAME::SaveCopyInUndoList(), SCH_EDIT_FRAME::SchematicCleanUp(), SCH_SCREEN::SelectBlockItems(), SCH_EDIT_FRAME::SetBusEntryShape(), Show_Drag_Track_Segment_With_Cte_Slope(), Show_MoveNode(), PCB_EDIT_FRAME::Start_DragTrackSegmentAndKeepSlope(), PCB_EDIT_FRAME::StartMoveOneNodeOrSegment(), DIALOG_TEXT_PROPERTIES::TransferDataFromWindow(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataFromWindow(), DIALOG_TARGET_PROPERTIES::TransferDataFromWindow(), DIALOG_LABEL_EDITOR::TransferDataFromWindow(), and DIALOG_FOOTPRINT_BOARD_EDITOR::TransferDataFromWindow().

255 { return m_Flags; }
STATUS_FLAGS m_Flags
Flag bits for editing and other uses.
Definition: base_struct.h:175
virtual PCB_LAYER_ID BOARD_ITEM::GetLayer ( ) const
inlinevirtualinherited

Function GetLayer returns the primary layer this item is on.

Reimplemented in ZONE_CONTAINER.

Definition at line 124 of file class_board_item.h.

References BOARD_ITEM::m_Layer.

Referenced by Abort_MoveOrCopyModule(), DIALOG_GLOBAL_DELETION::AcceptPcbDelete(), CN_CONNECTIVITY_ALGO::Add(), CN_LIST::Add(), CINFO3D_VISU::AddGraphicsShapesWithClearanceToContainer(), DIMENSION::AdjustDimensionDetails(), PCB_EDIT_FRAME::Begin_DrawSegment(), FOOTPRINT_EDIT_FRAME::Begin_Edge_Module(), PCB_EDIT_FRAME::Change_Side_Module(), checkConnectedTo(), MODULE::CopyNetlistSettings(), CreateBoardSection(), MWAVE::CreateMicrowaveInductor(), CreateRoutesSection(), DIALOG_TEXT_PROPERTIES::DIALOG_TEXT_PROPERTIES(), DIALOG_TRACK_VIA_PROPERTIES::DIALOG_TRACK_VIA_PROPERTIES(), PCB_EDIT_FRAME::DoGenFootprintsPositionFile(), DRC::doTrackKeepoutDrc(), TEXTE_MODULE::Draw(), DRAWSEGMENT::Draw(), KIGFX::PCB_PAINTER::draw(), FOOTPRINT_EDIT_FRAME::Edit_Edge_Layer(), FOOTPRINT_EDIT_FRAME::Edit_Edge_Width(), export_vrml_drawsegment(), export_vrml_edge_module(), export_vrml_module(), export_vrml_pcbtext(), export_vrml_text_module(), PCB_EDIT_FRAME::ExportToGenCAD(), TEXTE_PCB::Flip(), PCB_TARGET::Flip(), EDGE_MODULE::Flip(), TEXTE_MODULE::Flip(), TRACK::Flip(), DIMENSION::Flip(), MODULE::Flip(), DRAWSEGMENT::Flip(), PCB_IO::FootprintSave(), FootprintWriteShape(), PCB_IO::formatLayer(), DSN::SPECCTRA_DB::FromBOARD(), AR_AUTOPLACER::genModuleOnRoutingMatrix(), AR_AUTOPLACER::genPlacementRoutingMatrix(), BOARD::GetFootprint(), ZONE_CONTAINER::GetLayer(), AR_AUTOPLACER::getOptimalModulePlacement(), BOARD::GetPad(), TEXT_MOD_GRID_TABLE::GetValueAsLong(), BOARD::GetVisibleTrack(), SELECTION_TOOL::guessSelectionCandidates(), idf_export_module(), GENERAL_COLLECTOR::Inspect(), PCB_LAYER_COLLECTOR::Inspect(), IsFlipped(), EDGE_MODULE::IsParentFlipped(), TEXTE_MODULE::IsParentFlipped(), itemIsIncludedByFilter(), FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD(), BOARD::MarkTrace(), DIALOG_FOOTPRINT_FP_EDITOR::OnAddField(), DIALOG_FOOTPRINT_BOARD_EDITOR::OnAddField(), PCB_EDIT_FRAME::OnRightClick(), PCB_EDIT_FRAME::PlaceDraggedOrMovedTrackSegment(), BRDITEMS_PLOTTER::Plot_1_EdgeModule(), BRDITEMS_PLOTTER::Plot_Edges_Modules(), BRDITEMS_PLOTTER::PlotAllTextsModule(), BRDITEMS_PLOTTER::PlotDimension(), BRDITEMS_PLOTTER::PlotDrawSegment(), BRDITEMS_PLOTTER::PlotPcbTarget(), BRDITEMS_PLOTTER::PlotTextePcb(), Print_Module(), processBoardItem(), DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::processItem(), processTextItem(), TRACKS_CLEANER::removeDuplicatesOfTrack(), PCB_BASE_FRAME::ResetTextSize(), SELECTION_TOOL::selectable(), TEXT_MOD_GRID_TABLE::SetValueAsLong(), ShowClearance(), PNS_KICAD_IFACE::syncGraphicalItem(), PNS_KICAD_IFACE::syncTrack(), DRC::testCopperDrawItem(), DRC::testCopperTextItem(), DRC::testDisabledLayers(), AR_AUTOPLACER::testModuleOnBoard(), TEXTE_MODULE::TEXTE_MODULE(), AR_MATRIX::TraceSegmentPcb(), TraceSegmentPcb(), TrackListSortByNetcode(), DIALOG_FOOTPRINT_BOARD_EDITOR::TransferDataFromWindow(), DIALOG_TEXT_PROPERTIES::TransferDataToWindow(), DIALOG_GRAPHIC_ITEM_PROPERTIES::TransferDataToWindow(), DIALOG_FOOTPRINT_BOARD_EDITOR::TransferDataToWindow(), CINFO3D_VISU::transformGraphicModuleEdgeToPolygonSet(), MODULE::TransformGraphicShapesWithClearanceToPolygonSet(), MODULE::TransformGraphicTextWithClearanceToPolygonSet(), TEXTE_MODULE::ViewGetLayers(), TRACK::ViewGetLayers(), TEXTE_MODULE::ViewGetLOD(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::visitItem(), and DIALOG_GLOBAL_EDIT_TEXT_AND_GRAPHICS::visitItem().

124 { return m_Layer; }
PCB_LAYER_ID m_Layer
wxString BOARD_ITEM::GetLayerName ( ) const
inherited

Function GetLayerName returns the name of the PCB layer on which the item resides.

Returns
wxString containing the layer name associated with this item.

Definition at line 78 of file class_board_item.cpp.

References BOARD_ITEM::GetBoard(), BOARD::GetLayerName(), BOARD::GetStandardLayerName(), and BOARD_ITEM::m_Layer.

Referenced by BOARD_ITEM::Flip(), PCB_IO::format(), PCB_IO::formatLayer(), TEXTE_PCB::GetMsgPanelInfo(), ZONE_CONTAINER::GetMsgPanelInfo(), EDGE_MODULE::GetMsgPanelInfo(), TEXTE_MODULE::GetMsgPanelInfo(), DRAWSEGMENT::GetMsgPanelInfo(), TEXTE_PCB::GetSelectMenuText(), EDGE_MODULE::GetSelectMenuText(), TEXTE_MODULE::GetSelectMenuText(), DIMENSION::GetSelectMenuText(), DRAWSEGMENT::GetSelectMenuText(), TRACK::GetSelectMenuText(), SEGZONE::GetSelectMenuText(), ZONE_CONTAINER::GetSelectMenuText(), MODULE::GetSelectMenuText(), TEXT_MOD_GRID_TABLE::GetValue(), and main().

79 {
80  BOARD* board = GetBoard();
81 
82  if( board )
83  return board->GetLayerName( m_Layer );
84 
85  // If no parent, return standard name
87 }
PCB_LAYER_ID m_Layer
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Function GetLayerName returns the name of a layer given by aLayer.
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:170
virtual BOARD * GetBoard() const
Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
static wxString GetStandardLayerName(PCB_LAYER_ID aLayerId)
Function GetStandardLayerName returns an "English Standard" name of a PCB layer when given aLayerNumb...
Definition: class_board.h:653
DHEAD* EDA_ITEM::GetList ( ) const
inlineinherited
bool BOARD_CONNECTED_ITEM::GetLocalRatsnestVisible ( ) const
inlineinherited

Definition at line 188 of file board_connected_item.h.

References BOARD_CONNECTED_ITEM::m_localRatsnestVisible.

189  {
190  return m_localRatsnestVisible;
191  }
int D_PAD::GetLocalSolderMaskMargin ( ) const
inline

Definition at line 414 of file class_pad.h.

Referenced by PCB_IO::format(), ImportSettingsFromMaster(), DIALOG_PAD_PROPERTIES::initValues(), DIALOG_PAD_PROPERTIES::padValuesOK(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

414 { return m_LocalSolderMaskMargin; }
int m_LocalSolderMaskMargin
Local mask margins: when 0, the parent footprint design values are used.
Definition: class_pad.h:868
int D_PAD::GetLocalSolderPasteMargin ( ) const
inline

Definition at line 420 of file class_pad.h.

Referenced by PCB_IO::format(), ImportSettingsFromMaster(), DIALOG_PAD_PROPERTIES::initValues(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

420 { return m_LocalSolderPasteMargin; }
int m_LocalSolderPasteMargin
Local solder paste margin absolute value.
Definition: class_pad.h:869
double D_PAD::GetLocalSolderPasteMarginRatio ( ) const
inline

Definition at line 423 of file class_pad.h.

Referenced by PCB_IO::format(), ImportSettingsFromMaster(), DIALOG_PAD_PROPERTIES::initValues(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

double m_LocalSolderPasteMarginRatio
Local solder mask margin ratio value of pad size The final margin is the sum of these 2 values...
Definition: class_pad.h:871
BITMAP_DEF D_PAD::GetMenuImage ( ) const
overridevirtual

Function GetMenuImage returns a pointer to an image to be used in menus.

The default version returns the right arrow image. Override this function to provide object specific menu images.

Returns
The menu image associated with the item.

Reimplemented from EDA_ITEM.

Definition at line 1238 of file class_pad.cpp.

1239 {
1240  return pad_xpm;
1241 }
void D_PAD::GetMsgPanelInfo ( EDA_UNITS_T  aUnits,
std::vector< MSG_PANEL_ITEM > &  aList 
)
overridevirtual

Function GetMsgPanelInfo populates aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.

Note
This method replaces DisplayInfo() so that KiCad objects no longer have any knowledge of wxWidgets UI objects.
Parameters
aListis the list to populate.

Reimplemented from EDA_ITEM.

Definition at line 720 of file class_pad.cpp.

References BROWN, CYAN, DARKCYAN, DARKGREEN, BOARD_ITEM::GetBoard(), GetDrillShape(), BOARD_CONNECTED_ITEM::GetNetname(), MODULE::GetOrientationDegrees(), GetOrientationDegrees(), GetPadToDieLength(), MODULE::GetReference(), LayerMaskDescribe(), LIGHTBLUE, m_Drill, m_layerMask, m_name, EDA_ITEM::m_Parent, m_Pos, m_Size, MessageTextFromValue(), PAD_DRILL_SHAPE_CIRCLE, RED, ShowPadAttr(), ShowPadShape(), wxPoint::x, and wxPoint::y.

721 {
722  MODULE* module;
723  wxString msg;
724  BOARD* board;
725 
726  module = (MODULE*) m_Parent;
727 
728  if( module )
729  {
730  aList.push_back( MSG_PANEL_ITEM( _( "Footprint" ), module->GetReference(), DARKCYAN ) );
731  aList.push_back( MSG_PANEL_ITEM( _( "Pad" ), m_name, BROWN ) );
732  }
733 
734  aList.push_back( MSG_PANEL_ITEM( _( "Net" ), GetNetname(), DARKCYAN ) );
735 
736  board = GetBoard();
737 
738  aList.push_back( MSG_PANEL_ITEM( _( "Layer" ),
739  LayerMaskDescribe( board, m_layerMask ), DARKGREEN ) );
740 
741  aList.push_back( MSG_PANEL_ITEM( ShowPadShape(), ShowPadAttr(), DARKGREEN ) );
742 
743  msg = MessageTextFromValue( aUnits, m_Size.x, true );
744  aList.push_back( MSG_PANEL_ITEM( _( "Width" ), msg, RED ) );
745 
746  msg = MessageTextFromValue( aUnits, m_Size.y, true );
747  aList.push_back( MSG_PANEL_ITEM( _( "Height" ), msg, RED ) );
748 
749  msg = MessageTextFromValue( aUnits, m_Drill.x, true );
750 
752  {
753  aList.push_back( MSG_PANEL_ITEM( _( "Drill" ), msg, RED ) );
754  }
755  else
756  {
757  msg = MessageTextFromValue( aUnits, m_Drill.x, true )
758  + wxT( "/" )
759  + MessageTextFromValue( aUnits, m_Drill.y, true );
760  aList.push_back( MSG_PANEL_ITEM( _( "Drill X / Y" ), msg, RED ) );
761  }
762 
763  double module_orient_degrees = module ? module->GetOrientationDegrees() : 0;
764 
765  if( module_orient_degrees != 0.0 )
766  msg.Printf( wxT( "%3.1f(+%3.1f)" ),
767  GetOrientationDegrees() - module_orient_degrees,
768  module_orient_degrees );
769  else
770  msg.Printf( wxT( "%3.1f" ), GetOrientationDegrees() );
771 
772  aList.push_back( MSG_PANEL_ITEM( _( "Angle" ), msg, LIGHTBLUE ) );
773 
774  msg = MessageTextFromValue( aUnits, m_Pos.x )
775  + wxT( ", " )
776  + MessageTextFromValue( aUnits, m_Pos.y );
777  aList.push_back( MSG_PANEL_ITEM( _( "Position" ), msg, LIGHTBLUE ) );
778 
779  if( GetPadToDieLength() )
780  {
781  msg = MessageTextFromValue( aUnits, GetPadToDieLength(), true );
782  aList.push_back( MSG_PANEL_ITEM( _( "Length in package" ), msg, CYAN ) );
783  }
784 }
EDA_ITEM * m_Parent
Linked list: Link (parent struct)
Definition: base_struct.h:168
int GetPadToDieLength() const
Definition: class_pad.h:412
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
wxString ShowPadAttr() const
Function ShowPadAttr.
Definition: class_pad.cpp:1198
PAD_DRILL_SHAPE_T GetDrillShape() const
Definition: class_pad.h:388
wxString MessageTextFromValue(EDA_UNITS_T aUnits, int aValue, bool aUseMils)
Definition: base_units.cpp:125
wxString m_name
Definition: class_pad.h:786
double GetOrientationDegrees() const
Definition: class_module.h:190
Definition: colors.h:59
Definition: colors.h:60
LSET m_layerMask
Bitwise layer :1= copper layer, 15= cmp, 2..14 = internal layers 16 .
Definition: class_pad.h:846
const wxString & GetNetname() const
Function GetNetname.
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:170
const wxString & GetReference() const
Function GetReference.
Definition: class_module.h:460
wxString ShowPadShape() const
Function ShowPadShape.
Definition: class_pad.cpp:1170
virtual BOARD * GetBoard() const
Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
wxSize m_Drill
Drill diam (drill shape = PAD_CIRCLE) or drill size (shape = OVAL) for drill shape = PAD_CIRCLE...
Definition: class_pad.h:816
Class EDA_MSG_ITEM is used EDA_MSG_PANEL as the item type for displaying messages.
Definition: msgpanel.h:53
double GetOrientationDegrees() const
Definition: class_pad.h:383
static wxString LayerMaskDescribe(const BOARD *aBoard, LSET aMask)
Helper function Return a string (to be shown to the user) describing a layer mask.
Definition: class_pad.cpp:1369
wxPoint m_Pos
pad Position on board
Definition: class_pad.h:788
Definition: colors.h:62
NETINFO_ITEM* BOARD_CONNECTED_ITEM::GetNet ( ) const
inlineinherited
NETCLASSPTR BOARD_CONNECTED_ITEM::GetNetClass ( ) const
inherited

Function GetNetClass returns the NETCLASS for this item.

Definition at line 104 of file board_connected_item.cpp.

References DBG, BOARD::FindNet(), BOARD_ITEM::GetBoard(), BOARD_DESIGN_SETTINGS::GetDefault(), BOARD::GetDesignSettings(), NETINFO_ITEM::GetNetClass(), BOARD_CONNECTED_ITEM::GetNetCode(), and EDA_ITEM::Type().

Referenced by DRC::doTrackDrc(), ZONE_CONTAINER::GetClearance(), BOARD_CONNECTED_ITEM::GetClearance(), VIA::GetDrillValue(), TRACK::GetMsgPanelInfo(), BOARD_CONNECTED_ITEM::GetNetClassName(), BOARD_CONNECTED_ITEM::GetShortNetname(), ROUTER_TOOL::prepareInteractive(), and DIALOG_TRACK_VIA_PROPERTIES::TransferDataFromWindow().

105 {
106  // It is important that this be implemented without any sequential searching.
107  // Simple array lookups should be fine, performance-wise.
108  BOARD* board = GetBoard();
109 
110  // DO NOT use wxASSERT, because GetNetClass is called inside an OnPaint event
111  // and a call to wxASSERT can crash the application.
112 
113  if( board == NULL ) // Should not occur
114  {
115  DBG(printf( "%s: NULL board,type %d", __func__, Type() );)
116 
117  return NETCLASSPTR();
118  }
119 
120  NETCLASSPTR netclass;
121  NETINFO_ITEM* net = board->FindNet( GetNetCode() );
122 
123  if( net )
124  {
125  netclass = net->GetNetClass();
126 
127  //DBG( if(!netclass) printf( "%s: NULL netclass,type %d", __func__, Type() );)
128  }
129 
130  if( netclass )
131  return netclass;
132  else
133  return board->GetDesignSettings().GetDefault();
134 }
KICAD_T Type() const
Function Type()
Definition: base_struct.h:198
NETCLASSPTR GetDefault() const
Function GetDefault.
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:538
int GetNetCode() const
Function GetNetCode.
Class NETINFO_ITEM handles the data for a net.
Definition: netinfo.h:69
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:170
NETCLASSPTR GetNetClass()
Definition: netinfo.h:126
NETINFO_ITEM * FindNet(int aNetcode) const
Function FindNet searches for a net with the given netcode.
virtual BOARD * GetBoard() const
Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
#define DBG(x)
Definition: fctsys.h:33
wxString BOARD_CONNECTED_ITEM::GetNetClassName ( ) const
inherited

Function GetNetClassName returns a pointer to the netclass of the zone.

If the net is not found (can happen when a netlist is reread, and the net name does not exist, return the default net class (should not return a null pointer).

Returns
the Net Class name of this item

Definition at line 137 of file board_connected_item.cpp.

References NETCLASS::Default, BOARD_CONNECTED_ITEM::GetNetClass(), and name.

Referenced by PCB_EDIT_FRAME::createPopUpMenuForFpPads(), PCB_EDIT_FRAME::createPopupMenuForTracks(), BOARD_CONNECTED_ITEM::GetShortNetname(), and DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::visitItem().

138 {
139  wxString name;
140  NETCLASSPTR myclass = GetNetClass();
141 
142  if( myclass )
143  name = myclass->GetName();
144  else
145  name = NETCLASS::Default;
146 
147  return name;
148 }
std::shared_ptr< NETCLASS > GetNetClass() const
Function GetNetClass returns the NETCLASS for this item.
static const char Default[]
the name of the default NETCLASS
Definition: netclass.h:80
const char * name
Definition: DXF_plotter.cpp:61
int BOARD_CONNECTED_ITEM::GetNetCode ( ) const
inlineinherited

Function GetNetCode.

Returns
int - the net code.

Definition at line 103 of file board_connected_item.h.

References NETINFO_ITEM::GetNet(), BOARD_CONNECTED_ITEM::m_netinfo, and BOARD_CONNECTED_ITEM::SetNetCode().

Referenced by PCB_EDIT_FRAME::Attribut_net(), PCB_EDIT_FRAME::Begin_Route(), PCB_EDIT_FRAME::Begin_Zone(), ZONE_FILLER::buildUnconnectedThermalStubsPolygonList(), ZONE_FILLER::buildZoneFeatureHoleList(), Collect_TrackSegmentsToDrag(), BOARD::CombineAllAreasInNet(), ZONE_FILLER::computeRawFilledAreas(), connectedItemFilter(), CopyNetlistSettings(), CreateRoutesSection(), CreateSignalsSection(), PCB_EDIT_FRAME::Delete_net(), PCB_EDIT_FRAME::Delete_Segment(), DRC::doEdgeZoneDrc(), DRC::doPadToPadsDrc(), DRC::doTrackDrc(), KIGFX::PCB_PAINTER::draw(), VIA::Draw(), BOARD::DrawHighLight(), TRACK::DrawShortNetname(), DRAWING_TOOL::DrawVia(), PCB_EDIT_FRAME::duplicateZone(), PCB_EDIT_FRAME::End_Zone(), PCB_EDIT_FRAME::EraseRedundantTrack(), PCB_EDIT_FRAME::ExecuteRemoteCommand(), PNS::NODE::FindItemByParent(), PCB_IO::format(), DSN::SPECCTRA_DB::FromBOARD(), TRACK::GetBestInsertPoint(), CONNECTIVITY_DATA::GetConnectedItems(), TRACK::GetEndNetCode(), ZONE_CONTAINER::GetMsgPanelInfo(), TRACK::GetMsgPanelInfoBase_Common(), BOARD_CONNECTED_ITEM::GetNetClass(), BOARD_CONNECTED_ITEM::GetNetnameMsg(), TRACK::GetStartNetCode(), TRACK::GetTrack(), hash_eda(), highlightNet(), DIALOG_PAD_PROPERTIES::initValues(), ZONE_CONTAINER::IsSame(), LocateIntrusion(), Magnetize(), DSN::SPECCTRA_DB::makeIMAGE(), AR_AUTOPLACER::nearestPad(), CONNECTIVITY_DATA::NearestUnconnectedTargets(), ROUTER_TOOL::NeighboringSegmentFilter(), CN_ITEM::Net(), BOARD::NormalizeAreaPolygon(), BOARD::OnAreaPolygonModified(), ZONE_SETTINGS::operator<<(), DIALOG_PAD_PROPERTIES::PadTypeSelected(), PCB_EDIT_FRAME::PlaceDraggedOrMovedTrackSegment(), PCB_EDIT_FRAME::Process_Special_Functions(), PushTrack(), PCB_EDIT_FRAME::Remove_One_Track(), PCB_EDIT_FRAME::Remove_Zone_Corner(), TRACKS_CLEANER::removeDuplicatesOfTrack(), BOARD::ReplaceNetlist(), PCB_SELECTION_CONDITIONS::sameNetFunc(), SaveCopyOfZones(), BOARD::SetAreasNetCodesFromNetNames(), PCB_EDIT_FRAME::Start_DragTrackSegmentAndKeepSlope(), PCB_EDIT_FRAME::Start_Move_Zone_Corner(), PCB_EDIT_FRAME::Start_Move_Zone_Drag_Outline_Edge(), PCB_EDIT_FRAME::Start_Move_Zone_Outlines(), PCB_EDIT_FRAME::StartMoveOneNodeOrSegment(), PNS_KICAD_IFACE::syncPad(), PNS_KICAD_IFACE::syncTrack(), PNS_KICAD_IFACE::syncVia(), BOARD::TestAreaIntersections(), DRC::testZones(), DRC::TestZoneToZoneOutline(), TrackListSortByNetcode(), BOARD::TracksInNet(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::visitItem(), ZONE_CONTAINER::ZONE_CONTAINER(), and PCB_EDITOR_CONTROL::ZoneMerge().

104  {
105  return m_netinfo->GetNet();
106  }
int GetNet() const
Function GetNet.
Definition: netinfo.h:231
NETINFO_ITEM * m_netinfo
Stores all informations about the net that item belongs to.
const wxString& BOARD_CONNECTED_ITEM::GetNetname ( ) const
inlineinherited

Function GetNetname.

Returns
wxString - the full netname

Definition at line 122 of file board_connected_item.h.

References NETINFO_ITEM::GetNetname(), and BOARD_CONNECTED_ITEM::m_netinfo.

Referenced by KIGFX::PCB_PAINTER::draw(), PCB_IO::format(), DSN::SPECCTRA_DB::FromBOARD(), GetMsgPanelInfo(), BOARD_NETLIST_UPDATER::getNetname(), BOARD_CONNECTED_ITEM::GetNetnameMsg(), BRDITEMS_PLOTTER::PlotFilledAreas(), BRDITEMS_PLOTTER::PlotPad(), PlotStandardLayer(), BOARD::ReplaceNetlist(), and BOARD_NETLIST_UPDATER::updateCopperZoneNets().

123  {
124  return m_netinfo->GetNetname();
125  }
NETINFO_ITEM * m_netinfo
Stores all informations about the net that item belongs to.
const wxString & GetNetname() const
Function GetNetname.
Definition: netinfo.h:239
wxString BOARD_CONNECTED_ITEM::GetNetnameMsg ( ) const
inlineinherited

Function GetNetnameMsg.

Returns
wxString - the full netname or "<no net>" in square braces, followed by "(Not Found)" if the netcode is undefined.

Definition at line 132 of file board_connected_item.h.

References BOARD_ITEM::GetBoard(), BOARD_CONNECTED_ITEM::GetNetCode(), and BOARD_CONNECTED_ITEM::GetNetname().

Referenced by TRACK::GetSelectMenuText(), SEGZONE::GetSelectMenuText(), VIA::GetSelectMenuText(), and ZONE_CONTAINER::GetSelectMenuText().

133  {
134  if( !GetBoard() )
135  return wxT( "[** NO BOARD DEFINED **]" );
136 
137  wxString netname = GetNetname();
138 
139  if( !netname.length() )
140  return wxT( "[<no net>]" );
141  else if( GetNetCode() < 0 )
142  return wxT( "[" + netname + "](" + _( "Not Found" ) + ")" );
143  else
144  return wxT( "[" + netname + "]" );
145  }
int GetNetCode() const
Function GetNetCode.
const wxString & GetNetname() const
Function GetNetname.
virtual BOARD * GetBoard() const
Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
int BOARD_ITEM::getNextNumberInSequence ( const std::set< int > &  aSeq,
bool  aFillSequenceGaps 
)
staticprotectedinherited

Definition at line 230 of file class_board_item.cpp.

Referenced by MODULE::GetNextPadName().

231 {
232  if( aSeq.empty() )
233  return 1;
234 
235  // By default go to the end of the sequence
236  int candidate = *aSeq.rbegin();
237 
238  // Filling in gaps in pad numbering
239  if( aFillSequenceGaps )
240  {
241  // start at the beginning
242  candidate = *aSeq.begin();
243 
244  for( auto it : aSeq )
245  {
246  if( it - candidate > 1 )
247  break;
248 
249  candidate = it;
250  }
251  }
252 
253  ++candidate;
254 
255  return candidate;
256 }
void D_PAD::GetOblongDrillGeometry ( wxPoint aStartPoint,
wxPoint aEndPoint,
int &  aWidth 
) const

Function GetOblongDrillGeometry calculates the start point, end point and width of an equivalent segment which have the same position and width as the hole Usefull to plot/draw oblong holes like segments with rounded ends used in draw and plot functions.

Parameters
aStartPoint= first point of the equivalent segment, relative to the pad position.
aEndPoint= second point of the equivalent segment, relative to the pad position.
aWidth= width equivalent segment.

Definition at line 787 of file class_pad.cpp.

References GetDrillSize(), m_Drill, m_Orient, RotatePoint(), wxPoint::x, and wxPoint::y.

Referenced by CINFO3D_VISU::createNewPadDrill().

789 {
790  // calculates the start point, end point and width
791  // of an equivalent segment which have the same position and width as the hole
792  int delta_cx, delta_cy;
793 
794  wxSize halfsize = GetDrillSize();
795  halfsize.x /= 2;
796  halfsize.y /= 2;
797 
798  if( m_Drill.x > m_Drill.y ) // horizontal
799  {
800  delta_cx = halfsize.x - halfsize.y;
801  delta_cy = 0;
802  aWidth = m_Drill.y;
803  }
804  else // vertical
805  {
806  delta_cx = 0;
807  delta_cy = halfsize.y - halfsize.x;
808  aWidth = m_Drill.x;
809  }
810 
811  RotatePoint( &delta_cx, &delta_cy, m_Orient );
812 
813  aStartPoint.x = delta_cx;
814  aStartPoint.y = delta_cy;
815 
816  aEndPoint.x = - delta_cx;
817  aEndPoint.y = - delta_cy;
818 }
void RotatePoint(int *pX, int *pY, double angle)
Definition: trigo.cpp:216
const wxSize & GetDrillSize() const
Definition: class_pad.h:275
wxSize m_Drill
Drill diam (drill shape = PAD_CIRCLE) or drill size (shape = OVAL) for drill shape = PAD_CIRCLE...
Definition: class_pad.h:816
double m_Orient
in 1/10 degrees
Definition: class_pad.h:857
double D_PAD::GetOrientationDegrees ( ) const
inline

Definition at line 383 of file class_pad.h.

Referenced by GetMsgPanelInfo(), and DSN::SPECCTRA_DB::makeIMAGE().

383 { return m_Orient/10.0; }
double m_Orient
in 1/10 degrees
Definition: class_pad.h:857
double D_PAD::GetOrientationRadians ( ) const
inline

Definition at line 384 of file class_pad.h.

Referenced by KIGFX::PCB_PAINTER::draw().

384 { return m_Orient*M_PI/1800; }
double m_Orient
in 1/10 degrees
Definition: class_pad.h:857
int D_PAD::GetPadToDieLength ( ) const
inline

Definition at line 412 of file class_pad.h.

Referenced by PCB_IO::format(), GetMsgPanelInfo(), DIALOG_PAD_PROPERTIES::initValues(), BOARD::MarkTrace(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

412 { return m_LengthPadToDie; }
int m_LengthPadToDie
Length net from pad to die, inside the package.
Definition: class_pad.h:859
const std::vector<PAD_CS_PRIMITIVE>& D_PAD::GetPrimitives ( ) const
inline

Accessor to the basic shape list.

Definition at line 336 of file class_pad.h.

Referenced by PCB_IO::format(), ImportSettingsFromMaster(), DIALOG_PAD_PROPERTIES::initValues(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

336 { return m_basicShapes; }
std::vector< PAD_CS_PRIMITIVE > m_basicShapes
for free shape pads: a list of basic shapes, in local coordinates, orient 0, coordinates relative to ...
Definition: class_pad.h:798
int D_PAD::GetRoundRectCornerRadius ( ) const
inline

Function GetRoundRectCornerRadius Has meaning only for rounded rect pads.

Returns
The radius of the rounded corners for this pad.

Definition at line 528 of file class_pad.h.

Referenced by boundingRadius(), DRC::checkClearancePadToPad(), DRC::checkClearanceSegmToPad(), CINFO3D_VISU::createNewPadWithClearance(), CreatePadsShapesSection(), KIGFX::PCB_PAINTER::draw(), export_vrml_padshape(), HitTest(), DSN::SPECCTRA_DB::makePADSTACK(), DIALOG_PAD_PROPERTIES::onCornerSizePercentChange(), BRDITEMS_PLOTTER::PlotPad(), and DIALOG_PAD_PROPERTIES::updateRoundRectCornerValues().

529  {
531  }
int GetRoundRectCornerRadius() const
Function GetRoundRectCornerRadius Has meaning only for rounded rect pads.
Definition: class_pad.h:528
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
int D_PAD::GetRoundRectCornerRadius ( const wxSize &  aSize) const

Helper function GetRoundRectCornerRadius Has meaning only for rounded rect pads Returns the radius of the rounded corners of a rectangle size aSize, using others setting of the pad.

Parameters
aSize= size of the of the round rect. Usually the pad size but can be the size of the pad on solder mask or solder paste
Returns
The radius of the rounded corners for this pad size.

Definition at line 197 of file class_pad.cpp.

References m_padRoundRectRadiusScale.

198 {
199  // radius of rounded corners, usually 25% of shorter pad edge for now
200  int r = aSize.x > aSize.y ? aSize.y : aSize.x;
201  r = int( r * m_padRoundRectRadiusScale );
202 
203  return r;
204 }
double m_padRoundRectRadiusScale
scaling factor from smallest m_Size coord to corner radius, default 0.25
Definition: class_pad.h:824
double D_PAD::GetRoundRectRadiusRatio ( ) const
inline

has meaning only for rounded rect pads

Returns
the scaling factor between the smaller Y or Y size and the radius of the rounded corners. Cannot be > 0.5 the normalized IPC-7351C value is 0.25

Definition at line 631 of file class_pad.h.

Referenced by PCB_IO::format(), ImportSettingsFromMaster(), DIALOG_PAD_PROPERTIES::onCornerRadiusChange(), DIALOG_PAD_PROPERTIES::OnPadShapeSelection(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), and DIALOG_PAD_PROPERTIES::updateRoundRectCornerValues().

632  {
634  }
double m_padRoundRectRadiusScale
scaling factor from smallest m_Size coord to corner radius, default 0.25
Definition: class_pad.h:824
wxString D_PAD::GetSelectMenuText ( EDA_UNITS_T  aUnits) const
overridevirtual

Function GetSelectMenuText returns the text to display to be used in the selection clarification context menu when multiple items are found at the current cursor position.

The default version of this function raises an assertion in the debug mode and returns a string to indicate that it was not overridden to provide the object specific text.

Returns
The menu text string.

Reimplemented from EDA_ITEM.

Definition at line 1220 of file class_pad.cpp.

References Format(), BOARD_ITEM::GetBoard(), GetName(), GetParent(), LayerMaskDescribe(), and m_layerMask.

Referenced by PCB_EDIT_FRAME::createPopUpMenuForFpPads().

1221 {
1222  if( GetName().IsEmpty() )
1223  {
1224  return wxString::Format( _( "Pad of %s on %s" ),
1225  GetParent()->GetReference(),
1227  }
1228  else
1229  {
1230  return wxString::Format( _( "Pad %s of %s on %s" ),
1231  GetName(),
1232  GetParent()->GetReference(),
1234  }
1235 }
MODULE * GetParent() const
Definition: class_pad.h:162
const wxString & GetName() const
Definition: class_pad.h:190
LSET m_layerMask
Bitwise layer :1= copper layer, 15= cmp, 2..14 = internal layers 16 .
Definition: class_pad.h:846
void Format(OUTPUTFORMATTER *out, int aNestLevel, int aCtl, CPTREE &aTree)
Function Format outputs a PTREE into s-expression format via an OUTPUTFORMATTER derivative.
Definition: ptree.cpp:205
virtual BOARD * GetBoard() const
Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
static wxString LayerMaskDescribe(const BOARD *aBoard, LSET aMask)
Helper function Return a string (to be shown to the user) describing a layer mask.
Definition: class_pad.cpp:1369
PAD_SHAPE_T D_PAD::GetShape ( ) const
inline

Function GetShape.

Returns
the shape of this pad.

Definition at line 216 of file class_pad.h.

Referenced by CINFO3D_VISU::AddPadsShapesWithClearanceToContainer(), boundingRadius(), CINFO3D_VISU::buildPadShapePolygon(), CINFO3D_VISU::buildPadShapeThickOutlineAsPolygon(), CINFO3D_VISU::buildPadShapeThickOutlineAsSegments(), DRC::checkClearancePadToPad(), DRC::checkClearanceSegmToPad(), Compare(), CINFO3D_VISU::createNewPad(), CINFO3D_VISU::createNewPadWithClearance(), MODULE_EDITOR_TOOLS::CreatePadFromShapes(), CreatePadsShapesSection(), CreateThermalReliefPadPolygon(), doPushPadProperties(), PCB_BASE_FRAME::DoPushPadProperties(), KIGFX::PCB_PAINTER::draw(), export_vrml_padshape(), PCB_IO::format(), GetBoundingBox(), hash_eda(), HitTest(), ImportSettingsFromMaster(), DIALOG_PAD_PROPERTIES::initValues(), DSN::isRoundKeepout(), DSN::SPECCTRA_DB::makePADSTACK(), DIALOG_PAD_PROPERTIES::onCornerRadiusChange(), DIALOG_PAD_PROPERTIES::onCornerSizePercentChange(), DIALOG_PAD_PROPERTIES::OnPaintShowPanel(), EAGLE_PLUGIN::packagePad(), DIALOG_PAD_PROPERTIES::padValuesOK(), PlacePad(), AR_MATRIX::PlacePad(), BRDITEMS_PLOTTER::PlotPad(), ShowPadShape(), PNS_KICAD_IFACE::syncPad(), DIALOG_PAD_PROPERTIES::TransferDataFromWindow(), DIALOG_PAD_PROPERTIES::transferDataToPad(), MODULE::TransformPadsShapesWithClearanceToPolygon(), CINFO3D_VISU::transformPadsShapesWithClearanceToPolygon(), and DIALOG_PAD_PROPERTIES::updateRoundRectCornerValues().

216 { return m_padShape; }
PAD_SHAPE_T m_padShape
Shape: PAD_SHAPE_CIRCLE, PAD_SHAPE_RECT, PAD_SHAPE_OVAL, PAD_SHAPE_TRAPEZOID, PAD_SHAPE_ROUNDRECT, PAD_SHAPE_POLYGON.
Definition: class_pad.h:790
const wxString& BOARD_CONNECTED_ITEM::GetShortNetname ( ) const
inlineinherited

Function GetShortNetname.

Returns
wxString - the short netname

Definition at line 151 of file board_connected_item.h.

References BOARD_CONNECTED_ITEM::GetClearance(), BOARD_CONNECTED_ITEM::GetNetClass(), BOARD_CONNECTED_ITEM::GetNetClassName(), NETINFO_ITEM::GetShortNetname(), and BOARD_CONNECTED_ITEM::m_netinfo.

Referenced by KIGFX::PCB_PAINTER::draw().

152  {
153  return m_netinfo->GetShortNetname();
154  }
const wxString & GetShortNetname() const
Function GetShortNetname.
Definition: netinfo.h:245
NETINFO_ITEM * m_netinfo
Stores all informations about the net that item belongs to.
int D_PAD::GetSolderMaskMargin ( ) const

Function GetSolderMaskMargin.

Returns
the margin for the solder mask layer usually > 0 (mask shape bigger than pad For pads also on copper layers, the value (used to build a default shape) is 1 - the local value 2 - if 0, the parent footprint value 3 - if 0, the global value For pads NOT on copper layers, the value is the local value because there is not default shape to build

Definition at line 594 of file class_pad.cpp.

References LSET::AllCuMask(), BOARD_ITEM::GetBoard(), BOARD::GetDesignSettings(), MODULE::GetLocalSolderMaskMargin(), GetParent(), m_layerMask, m_LocalSolderMaskMargin, m_Size, BOARD_DESIGN_SETTINGS::m_SolderMaskMargin, and min.

Referenced by CINFO3D_VISU::AddPadsShapesWithClearanceToContainer(), KIGFX::PCB_PAINTER::draw(), MODULE::TransformPadsShapesWithClearanceToPolygon(), CINFO3D_VISU::transformPadsShapesWithClearanceToPolygon(), and ViewBBox().

595 {
596  // The pad inherits the margin only to calculate a default shape,
597  // therefore only if it is also a copper layer
598  // Pads defined only on mask layers (and perhaps on other tech layers) use the shape
599  // defined by the pad settings only
600  bool isOnCopperLayer = ( m_layerMask & LSET::AllCuMask() ).any();
601 
602  if( !isOnCopperLayer )
603  return 0;
604 
605  int margin = m_LocalSolderMaskMargin;
606 
607  MODULE* module = GetParent();
608 
609  if( module )
610  {
611  if( margin == 0 )
612  {
613  if( module->GetLocalSolderMaskMargin() )
614  margin = module->GetLocalSolderMaskMargin();
615  }
616 
617  if( margin == 0 )
618  {
619  BOARD* brd = GetBoard();
620  margin = brd->GetDesignSettings().m_SolderMaskMargin;
621  }
622  }
623 
624  // ensure mask have a size always >= 0
625  if( margin < 0 )
626  {
627  int minsize = -std::min( m_Size.x, m_Size.y ) / 2;
628 
629  if( margin < minsize )
630  margin = minsize;
631  }
632 
633  return margin;
634 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:673
int m_LocalSolderMaskMargin
Local mask margins: when 0, the parent footprint design values are used.
Definition: class_pad.h:868
int m_SolderMaskMargin
Solder mask margin.
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
MODULE * GetParent() const
Definition: class_pad.h:162
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:538
int GetLocalSolderMaskMargin() const
Definition: class_module.h:205
LSET m_layerMask
Bitwise layer :1= copper layer, 15= cmp, 2..14 = internal layers 16 .
Definition: class_pad.h:846
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:170
virtual BOARD * GetBoard() const
Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
#define min(a, b)
Definition: auxiliary.h:85
wxSize D_PAD::GetSolderPasteMargin ( ) const

Function GetSolderPasteMargin.

Returns
the margin for the solder mask layer usually < 0 (mask shape smaller than pad) because the margin can be dependent on the pad size, the margin has a x and a y value

For pads also on copper layers, the value (used to build a default shape) is 1 - the local value 2 - if 0, the parent footprint value 3 - if 0, the global value

For pads NOT on copper layers, the value is the local value because there is not default shape to build

Definition at line 637 of file class_pad.cpp.

References LSET::AllCuMask(), BOARD_ITEM::GetBoard(), BOARD::GetDesignSettings(), MODULE::GetLocalSolderPasteMargin(), MODULE::GetLocalSolderPasteMarginRatio(), GetParent(), KiROUND(), m_layerMask, m_LocalSolderPasteMargin, m_LocalSolderPasteMarginRatio, m_Size, BOARD_DESIGN_SETTINGS::m_SolderPasteMargin, and BOARD_DESIGN_SETTINGS::m_SolderPasteMarginRatio.

Referenced by CINFO3D_VISU::AddPadsShapesWithClearanceToContainer(), KIGFX::PCB_PAINTER::draw(), MODULE::TransformPadsShapesWithClearanceToPolygon(), CINFO3D_VISU::transformPadsShapesWithClearanceToPolygon(), and ViewBBox().

638 {
639  // The pad inherits the margin only to calculate a default shape,
640  // therefore only if it is also a copper layer.
641  // Pads defined only on mask layers (and perhaps on other tech layers) use the shape
642  // defined by the pad settings only
643  bool isOnCopperLayer = ( m_layerMask & LSET::AllCuMask() ).any();
644 
645  if( !isOnCopperLayer )
646  return wxSize( 0, 0 );
647 
648  int margin = m_LocalSolderPasteMargin;
649  double mratio = m_LocalSolderPasteMarginRatio;
650 
651  MODULE* module = GetParent();
652 
653  if( module )
654  {
655  if( margin == 0 )
656  margin = module->GetLocalSolderPasteMargin();
657 
658  BOARD * brd = GetBoard();
659 
660  if( margin == 0 )
661  margin = brd->GetDesignSettings().m_SolderPasteMargin;
662 
663  if( mratio == 0.0 )
664  mratio = module->GetLocalSolderPasteMarginRatio();
665 
666  if( mratio == 0.0 )
667  {
669  }
670  }
671 
672  wxSize pad_margin;
673  pad_margin.x = margin + KiROUND( m_Size.x * mratio );
674  pad_margin.y = margin + KiROUND( m_Size.y * mratio );
675 
676  // ensure mask have a size always >= 0
677  if( pad_margin.x < -m_Size.x / 2 )
678  pad_margin.x = -m_Size.x / 2;
679 
680  if( pad_margin.y < -m_Size.y / 2 )
681  pad_margin.y = -m_Size.y / 2;
682 
683  return pad_margin;
684 }
static LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Function AllCuMask returns a mask holding the requested number of Cu PCB_LAYER_IDs.
Definition: lset.cpp:673
static int KiROUND(double v)
Round a floating point number to an integer using "round halfway cases away from zero".
Definition: common.h:120
int m_SolderPasteMargin
Solder paste margin absolute value.
int m_LocalSolderPasteMargin
Local solder paste margin absolute value.
Definition: class_pad.h:869
wxSize m_Size
X and Y size ( relative to orient 0)
Definition: class_pad.h:820
MODULE * GetParent() const
Definition: class_pad.h:162
double GetLocalSolderPasteMarginRatio() const
Definition: class_module.h:214
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
Function GetDesignSettings.
Definition: class_board.h:538
int GetLocalSolderPasteMargin() const
Definition: class_module.h:211
LSET m_layerMask
Bitwise layer :1= copper layer, 15= cmp, 2..14 = internal layers 16 .
Definition: class_pad.h:846
Class BOARD holds information pertinent to a Pcbnew printed circuit board.
Definition: class_board.h:170
virtual BOARD * GetBoard() const
Function GetBoard returns the BOARD in which this BOARD_ITEM resides, or NULL if none.
double m_LocalSolderPasteMarginRatio
Local solder mask margin ratio value of pad size The final margin is the sum of these 2 values...
Definition: class_pad.h:871
double m_SolderPasteMarginRatio
Solder pask margin ratio value of pad size The final margin is the sum of these 2 values...
STATUS_FLAGS EDA_ITEM::GetStatus ( ) const
inlineinherited

Definition at line 250 of file base_struct.h.

References EDA_ITEM::m_Status.

Referenced by PCB_IO::format(), and GERBER_DRAW_ITEM::HitTest().

250 { return m_Status; }
STATUS_FLAGS m_Status
Definition: base_struct.h:161
int D_PAD::GetSubRatsnest ( ) const
inline

Function GetSubRatsnest.

Returns
int - the netcode

Definition at line 655 of file class_pad.h.

Referenced by CreatePadsShapesSection(), and CreateShapesSection().

655 { return m_SubRatsnest; }
int m_SubRatsnest
variable used in rats nest computations handle subnet (block) number in ratsnest connection ...
Definition: class_pad.h:813
int D_PAD::GetThermalGap ( ) const

Definition at line 709 of file class_pad.cpp.

References GetParent(), MODULE::GetThermalGap(), and m_ThermalGap.

Referenced by PCB_IO::format(), ZONE_CONTAINER::GetThermalReliefGap(), ImportSettingsFromMaster(), DIALOG_PAD_PROPERTIES::initValues(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

710 {
711  MODULE* module = GetParent();
712 
713  if( m_ThermalGap == 0 && module )
714  return module->GetThermalGap();
715  else
716  return m_ThermalGap;
717 }
int m_ThermalGap
Definition: class_pad.h:877
int GetThermalGap() const
Definition: class_module.h:224
MODULE * GetParent() const
Definition: class_pad.h:162
int D_PAD::GetThermalWidth ( ) const

Definition at line 698 of file class_pad.cpp.

References GetParent(), MODULE::GetThermalWidth(), and m_ThermalWidth.

Referenced by PCB_IO::format(), ZONE_CONTAINER::GetThermalReliefCopperBridge(), ImportSettingsFromMaster(), DIALOG_PAD_PROPERTIES::initValues(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

699 {
700  MODULE* module = GetParent();
701 
702  if( m_ThermalWidth == 0 && module )
703  return module->GetThermalWidth();
704  else
705  return m_ThermalWidth;
706 }
MODULE * GetParent() const
Definition: class_pad.h:162
int m_ThermalWidth
Definition: class_pad.h:876
int GetThermalWidth() const
Definition: class_module.h:221
timestamp_t EDA_ITEM::GetTimeStamp ( ) const
inlineinherited

Definition at line 204 of file base_struct.h.

References EDA_ITEM::m_TimeStamp.

Referenced by FIELDS_EDITOR_GRID_DATA_MODEL::AddColumn(), SCH_COMPONENT::AddSheetPathReferenceEntryIfMissing(), SCH_EDIT_FRAME::AnnotateComponents(), FIELDS_EDITOR_GRID_DATA_MODEL::ApplyData(), PCB_EDIT_FRAME::Delete_OldZone_Fill(), PCB_EDIT_FRAME::Delete_Zone_Contour(), DuplicateStruct(), DIALOG_FOOTPRINT_BOARD_EDITOR::EditFootprint(), EDIT_TOOL::editFootprintInFpEditor(), SCH_EDIT_FRAME::EditSheet(), PCB_EDIT_FRAME::Exchange_Module(), PCB_IO::format(), FormatProbeItem(), EDGE_MODULE::GetMsgPanelInfo(), NETLIST_OBJECT::GetShortNetName(), FIELDS_EDITOR_GRID_DATA_MODEL::groupMatch(), FOOTPRINT_EDIT_FRAME::Load_Module_From_BOARD(), NETLIST_EXPORTER_GENERIC::makeComponents(), mapExistingAnnotation(), FOOTPRINT_EDIT_FRAME::OnUpdateInsertModuleInBoard(), SCH_SHEET_PATH::Path(), PCB_BASE_FRAME::PcbGeneralLocateAndDisplay(), SCH_SCREENS::ReplaceDuplicateTimeStamps(), SCH_LEGACY_PLUGIN::saveComponent(), FOOTPRINT_EDIT_FRAME::SaveFootprintToBoard(), SCH_LEGACY_PLUGIN::saveSheet(), SCH_REFERENCE::SCH_REFERENCE(), ZONE_FILLER_TOOL::SegzoneDeleteFill(), SortByTimeStamp(), SwapItemData(), DIALOG_SCH_SHEET_PROPS::TransferDataToWindow(), DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::TransferDataToWindow(), DIALOG_EDIT_COMPONENT_IN_SCHEMATIC::TransferDataToWindow(), and DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS::~DIALOG_GLOBAL_EDIT_TRACKS_AND_VIAS().

204 { return m_TimeStamp; }
timestamp_t m_TimeStamp
Time stamp used for logical links.
Definition: base_struct.h:169
int BOARD_ITEM::getTrailingInt ( const wxString &  aStr)
staticprotectedinherited

Definition at line 207 of file class_board_item.cpp.

Referenced by MODULE::GetNextPadName(), and MODULE::IncrementReference().

208 {
209  int number = 0;
210  int base = 1;
211 
212  // Trim and extract the trailing numeric part
213  int index = aStr.Len() - 1;
214  while( index >= 0 )
215  {
216  const char chr = aStr.GetChar( index );
217 
218  if( chr < '0' || chr > '9' )
219  break;
220 
221  number += ( chr - '0' ) * base;
222  base *= 10;
223  index--;
224  }
225 
226  return number;
227 }
ZoneConnection D_PAD::GetZoneConnection ( ) const

Definition at line 687 of file class_pad.cpp.

References GetParent(), MODULE::GetZoneConnection(), m_ZoneConnection, and PAD_ZONE_CONN_INHERITED.

Referenced by PCB_IO::format(), ZONE_CONTAINER::GetPadConnection(), ImportSettingsFromMaster(), DIALOG_PAD_PROPERTIES::initValues(), and DIALOG_PAD_PROPERTIES::TransferDataFromWindow().

688 {
689  MODULE* module = GetParent();
690 
691  if( m_ZoneConnection == PAD_ZONE_CONN_INHERITED && module )
692  return module->GetZoneConnection();
693  else
694  return m_ZoneConnection;
695 }
MODULE * GetParent() const
Definition: class_pad.h:162
ZoneConnection GetZoneConnection() const
Definition: class_module.h:218
ZoneConnection m_ZoneConnection
how the connection to zone is made: no connection, thermal relief ...
Definition: class_pad.h:874