84    if( padNumber.IsEmpty() )
 
   99                position = primitive->GetCenter();
 
  103                padsize.
x = abs( primitive->GetBotRight().x - primitive->GetTopLeft().x );
 
  104                padsize.
y = abs( primitive->GetBotRight().y - primitive->GetTopLeft().y );
 
  117        if( padsize.
x > limit && padsize.
y > limit )
 
  128    if( padsize.
x < ( padsize.
y * 0.95 ) )
 
  131        std::swap( padsize.
x, padsize.
y );
 
  137    tsize = std::min( tsize, padsize.
y );
 
  140    tsize = std::min( tsize, 
pcbIUScale.mmToIU( 5.0 ) );
 
  147    m_plotter->PlotText( position, aColor, padNumber, textAttrs );
 
 
  167    if( plotOnCopperLayer )
 
  178        const bool useUTF8 = 
false;
 
  179        const bool useQuoting = 
false;
 
  193        if( !plotOnExternalCopperLayer )
 
  222            if( plotOnExternalCopperLayer )
 
  228            if( plotOnExternalCopperLayer )
 
  238            if( plotOnExternalCopperLayer )
 
  251            if( plotOnExternalCopperLayer )
 
  303                                  VECTOR2I( shape_pos.
x + ( size.
x / 2 ), shape_pos.
y + (size.
y / 2 ) ),
 
  359        coord[0] = 
VECTOR2I( -half_size.
x - trap_delta.
y, half_size.
y + trap_delta.
x );
 
  360        coord[1] = 
VECTOR2I( half_size.
x + trap_delta.
y, half_size.
y - trap_delta.
x );
 
  361        coord[2] = 
VECTOR2I( half_size.
x - trap_delta.
y, -half_size.
y + trap_delta.
x );
 
  362        coord[3] = 
VECTOR2I( -half_size.
x + trap_delta.
y, -half_size.
y - trap_delta.
x );
 
  388        if( polygons->OutlineCount() )
 
  391                                       polygons.get(), &metadata );
 
 
  428    std::vector<PCB_TEXT*> texts;
 
  433        if( field->IsReference() || field->IsValue() )
 
  436        if( field->IsVisible() )
 
  437            texts.push_back( field );
 
  443            texts.push_back( textItem );
 
  449        bool         strikeout = 
false;
 
  460        if( 
text->GetText() == wxT( 
"${REFERENCE}" ) )
 
  468        if( 
text->GetText() == wxT( 
"${VALUE}" ) )
 
 
  481    switch( item->
Type() )
 
  519            PlotText( cell, cell->GetLayer(), cell->IsKnockout(), cell->GetFontMetrics() );
 
 
  567    for( 
const std::shared_ptr<SHAPE>& shape : aDim->
GetShapes() )
 
  569        switch( shape->Type() )
 
 
  606    int dx1, dx2, dy1, dy2, 
radius;
 
 
  673        switch( item->Type() )
 
  706                PlotText( cell, cell->GetLayer(), cell->IsKnockout(), cell->GetFontMetrics() );
 
 
  737#define getMetadata() ( m_plotter->GetPlotterType() == PLOT_FORMAT::GERBER ? (void*) &gbr_metadata   \ 
  738                         : m_plotter->GetPlotterType() == PLOT_FORMAT::DXF ? (void*) this            \ 
 
  745    int           maxError = 
m_board->GetDesignSettings().m_MaxError;
 
  749    if( shownText.IsEmpty() )
 
  799            textbox->TransformTextToPolySet( finalPoly, 0, maxError, 
ERROR_INSIDE );
 
  808        if( font->
IsOutline() && !
m_board->GetEmbeddedFiles()->GetAreFontsEmbedded() )
 
  828            std::vector<VECTOR2I> positions;
 
  829            wxArrayString strings_list;
 
  831            positions.reserve(  strings_list.Count() );
 
  835            for( 
unsigned ii = 0; ii < strings_list.Count(); ii++ )
 
  837                wxString& txt =  strings_list.Item( ii );
 
  841            if( aStrikeout && strings_list.Count() == 1 )
 
  842                strikeoutText( 
static_cast<const PCB_TEXT*
>( aText ) );
 
  849                strikeoutText( 
static_cast<const PCB_TEXT*
>( aText ) );
 
 
  889    for( 
int idx = 0; idx < aPolysList.
OutlineCount(); ++idx )
 
 
  919    int          margin = thickness; 
 
  926    if( onSolderMaskLayer
 
  931        thickness = std::max( margin, 0 );
 
  936            isHatchedFill = 
false;
 
  957            isHatchedFill = 
false;
 
  965    else if( onCopperLayer )
 
  999                int diameter = aShape->
GetRadius() * 2 + thickness;
 
 1004                    diameter = std::max( diameter, 0 );
 
 1048                    m_plotter->SetCurrentLineWidth( thickness, &gbr_metadata );
 
 1143        for( 
SHAPE* shape : shapes )
 
 1149                                       m_plotter->ThickSegment( a, b, thickness, getMetadata() );
 
 1153        for( 
SHAPE* shape : shapes )
 
 1159        for( 
int ii = 0; ii < aShape->
GetHatching().OutlineCount(); ++ii )
 
 
 1186    dummy.SetWidth( 0 );
 
 1190    dummy.SetPolyShape( shape );
 
 
 1226                                m_plotter->ThickSegment( a, b, lineWidth, getMetadata() );
 
 
 1235                                         const EDA_ANGLE& aOrientation, 
int aSmallDrill )
 
 1241        drillSize.
x = std::min( aSmallDrill, drillSize.
x );
 
 1245    drillSize.
x = std::clamp( drillSize.
x, 1, aPadSize.
x - 1 );
 
 1250        drillSize.
y = std::clamp( drillSize.
y, 1, aPadSize.
y - 1 );
 
 1252        m_plotter->FlashPadOval( aDrillPos, drillSize, aOrientation, 
nullptr );
 
 1256        m_plotter->FlashPadCircle( aDrillPos, drillSize.
x, 
nullptr );
 
 
 1299        for( 
PAD* 
pad : footprint->Pads() )
 
 1301            if( 
pad->GetDrillSize().x == 0 )
 
 1311                    if( !
pad->IsOnLayer( layer ) )
 
 1316                    if( padSize.
x > 
pad->GetDrillSizeX() || padSize.
y > 
pad->GetDrillSizeY() )
 
 
constexpr EDA_IU_SCALE pcbIUScale
 
constexpr int ARC_LOW_DEF
 
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
 
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
 
wxString GetNetname() const
 
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
 
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
 
virtual void TransformShapeToPolySet(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc) const
Convert the item shape to a polyset.
 
virtual bool IsKnockout() const
 
FOOTPRINT * GetParentFootprint() const
 
const KIFONT::METRICS & GetFontMetrics() const
 
BOARD_ITEM_CONTAINER * GetParent() const
 
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
 
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
 
constexpr Vec Centre() const
 
constexpr coord_type GetLeft() const
 
constexpr coord_type GetRight() const
 
constexpr const SizeVec & GetSize() const
 
constexpr coord_type GetTop() const
 
constexpr coord_type GetBottom() const
 
void PlotDrillMarks()
Draw a drill mark for pads and vias.
 
void PlotZone(const ZONE *aZone, PCB_LAYER_ID aLayer, const SHAPE_POLY_SET &aPolysList)
 
void PlotPadNumber(const PAD *aPad, const COLOR4D &aColor)
 
void PlotBoardGraphicItem(const BOARD_ITEM *item)
Plot items like text and graphics but not tracks and footprints.
 
void PlotPad(const PAD *aPad, PCB_LAYER_ID aLayer, const COLOR4D &aColor, bool aSketchMode)
Plot a pad.
 
void PlotDimension(const PCB_DIMENSION_BASE *aDim)
 
void PlotText(const EDA_TEXT *aText, PCB_LAYER_ID aLayer, bool aIsKnockout, const KIFONT::METRICS &aFontMetrics, bool aStrikeout=false)
 
void PlotShape(const PCB_SHAPE *aShape)
 
bool crossoutDNPItems(PCB_LAYER_ID aLayer)
 
void PlotBarCode(const PCB_BARCODE *aBarCode)
 
COLOR4D getColor(int aLayer) const
White color is special because it cannot be seen on a white paper in B&W mode.
 
void PlotPcbTarget(const PCB_TARGET *aMire)
 
void PlotTableBorders(const PCB_TABLE *aTable)
 
void PlotFootprintTextItems(const FOOTPRINT *aFootprint)
 
int getFineWidthAdj() const
 
void plotOneDrillMark(PAD_DRILL_SHAPE aDrillShape, const VECTOR2I &aDrillPos, const VECTOR2I &aDrillSize, const VECTOR2I &aPadSize, const EDA_ANGLE &aOrientation, int aSmallDrill)
Helper function to plot a single drill mark.
 
bool hideDNPItems(PCB_LAYER_ID aLayer)
 
void PlotFootprintGraphicItems(const FOOTPRINT *aFootprint)
 
static const COLOR4D WHITE
 
COLOR4D GetColor(int aLayer) const
 
KICAD_T Type() const
Returns the type of object.
 
EDA_ANGLE GetArcAngle() const
 
const VECTOR2I & GetBezierC2() const
 
const SHAPE_POLY_SET & GetHatching() const
 
virtual std::vector< SHAPE * > MakeEffectiveShapes(bool aEdgeOnly=false) const
Make a set of SHAPE objects representing the EDA_SHAPE.
 
SHAPE_POLY_SET & GetPolyShape()
 
bool IsHatchedFill() const
 
virtual void SetFilled(bool aFlag)
 
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
 
void SetStart(const VECTOR2I &aStart)
 
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
 
void SetShape(SHAPE_T aShape)
 
std::vector< VECTOR2I > GetRectCorners() const
 
void SetEnd(const VECTOR2I &aEnd)
 
wxString SHAPE_T_asString() const
 
const VECTOR2I & GetBezierC1() const
 
int GetCornerRadius() const
 
bool IsPolyShapeValid() const
 
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
 
const VECTOR2I & GetTextPos() const
 
bool IsMultilineAllowed() const
 
virtual bool IsVisible() const
 
std::vector< std::unique_ptr< KIFONT::GLYPH > > * GetRenderCache(const KIFONT::FONT *aFont, const wxString &forResolvedText, const VECTOR2I &aOffset={ 0, 0 }) const
 
virtual EDA_ANGLE GetDrawRotation() const
 
virtual KIFONT::FONT * GetDrawFont(const RENDER_SETTINGS *aSettings) const
 
const TEXT_ATTRIBUTES & GetAttributes() const
 
int GetEffectiveTextPenWidth(int aDefaultPenWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultPenWidth.
 
void GetLinePositions(const RENDER_SETTINGS *aSettings, std::vector< VECTOR2I > &aPositions, int aLineCount) const
Populate aPositions with the position of each line of a multiline text, according to the vertical jus...
 
virtual wxString GetShownText(bool aAllowExtraText, int aDepth=0) const
Return the string actually shown after processing of the base text.
 
void FlashPadChamferRoundRect(const VECTOR2I &aShapePos, const VECTOR2I &aPadSize, int aCornerRadius, double aChamferRatio, int aChamferPositions, const EDA_ANGLE &aPadOrient, void *aData)
Flash a chamfered round rect pad.
 
void PlotPolyAsRegion(const SHAPE_LINE_CHAIN &aPoly, FILL_T aFill, int aWidth, GBR_METADATA *aGbrMetadata)
Similar to PlotPoly(), plot a filled polygon using Gerber region, therefore adding X2 attributes to t...
 
FONT is an abstract base class for both outline and stroke fonts.
 
virtual bool IsOutline() const
 
A color representation with 4 components: red, green, blue, alpha.
 
virtual void DrawGlyphs(const std::vector< std::unique_ptr< KIFONT::GLYPH > > &aGlyphs)
Draw polygons representing font glyphs.
 
LSET is a set of PCB_LAYER_IDs.
 
static const LSET & ExternalCuMask()
Return a mask holding the Front and Bottom layers.
 
static LSET AllCuMask()
return AllCuMask( MAX_CU_LAYERS );
 
static constexpr PCB_LAYER_ID ALL_LAYERS
! Temporary layer identifier to identify code that is not padstack-aware
 
PAD_PROP GetProperty() const
 
const std::vector< std::shared_ptr< PCB_SHAPE > > & GetPrimitives(PCB_LAYER_ID aLayer) const
Accessor to the basic shape list for custom-shaped pads.
 
int GetRoundRectCornerRadius(PCB_LAYER_ID aLayer) const
 
const BOX2I GetBoundingBox() const override
The bounding box is cached, so this will be efficient most of the time.
 
PAD_ATTRIB GetAttribute() const
 
const wxString & GetPinFunction() const
 
const wxString & GetNumber() const
 
const VECTOR2I & GetDelta(PCB_LAYER_ID aLayer) const
 
PAD_SHAPE GetShape(PCB_LAYER_ID aLayer) const
 
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc=ERROR_INSIDE, bool ignoreLineWidth=false) const override
Convert the pad shape to a closed polygon.
 
EDA_ANGLE GetOrientation() const
Return the rotation angle of the pad.
 
int GetChamferPositions(PCB_LAYER_ID aLayer) const
 
const std::shared_ptr< SHAPE_POLY_SET > & GetEffectivePolygon(PCB_LAYER_ID aLayer, ERROR_LOC aErrorLoc=ERROR_INSIDE) const
 
double GetChamferRectRatio(PCB_LAYER_ID aLayer) const
 
VECTOR2I ShapePos(PCB_LAYER_ID aLayer) const
 
wxString ShowPadShape(PCB_LAYER_ID aLayer) const
 
const VECTOR2I & GetSize(PCB_LAYER_ID aLayer) const
 
int GetLineThickness() const
 
const std::vector< std::shared_ptr< SHAPE > > & GetShapes() const
 
bool GetSketchDNPFPsOnFabLayers() const
 
PLOT_TEXT_MODE GetTextMode() const override
 
bool GetPlotReference() const
 
DXF_OUTLINE_MODE GetDXFPlotMode() const override
 
int GetSketchPadLineWidth() const
 
DRILL_MARKS GetDrillMarksType() const
 
bool GetPlotValue() const
 
bool GetPlotFPText() const
 
COLOR_SETTINGS * ColorSettings() const
 
VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
 
int GetWidth() const override
 
bool HasSolderMask() const
 
int GetSolderMaskExpansion() const
 
virtual LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
 
void SetLayer(PCB_LAYER_ID aLayer) override
Set the layer this item is on.
 
STROKE_PARAMS GetStroke() const override
 
void SetStroke(const STROKE_PARAMS &aStroke) override
 
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
 
void DrawBorders(const std::function< void(const VECTOR2I &aPt1, const VECTOR2I &aPt2, const STROKE_PARAMS &aStroke)> &aCallback) const
 
VECTOR2I GetPosition() const override
 
bool IsBorderEnabled() const
Disables the border, this is done by changing the stroke internally.
 
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
 
void SetClosed(bool aClosed)
Mark the line chain as closed (i.e.
 
Represent a set of closed polygons.
 
void Rotate(const EDA_ANGLE &aAngle, const VECTOR2I &aCenter={ 0, 0 }) override
Rotate all vertices by a given angle.
 
bool IsEmpty() const
Return true if the set is empty (no polygons at all)
 
void Fracture()
Convert a set of polygons with holes to a single outline with "slits"/"fractures" connecting the oute...
 
void Inflate(int aAmount, CORNER_STRATEGY aCornerStrategy, int aMaxError, bool aSimplify=false)
Perform outline inflation/deflation.
 
SHAPE_LINE_CHAIN & Outline(int aIndex)
Return the reference to aIndex-th outline in the set.
 
int OutlineCount() const
Return the number of outlines in the set.
 
SHAPE_POLY_SET CloneDropTriangulation() const
 
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
 
const BOX2I BBox(int aClearance=0) const override
Compute a bounding box of the shape, with a margin of aClearance a collision.
 
const SHAPE_LINE_CHAIN Outline() const
 
void SetRadius(int aRadius)
 
const SEG & GetSeg() const
 
An abstract shape on 2D plane.
 
Simple container to manage line stroke parameters.
 
LINE_STYLE GetLineStyle() const
 
static void Stroke(const SHAPE *aShape, LINE_STYLE aLineStyle, int aWidth, const KIGFX::RENDER_SETTINGS *aRenderSettings, const std::function< void(const VECTOR2I &a, const VECTOR2I &b)> &aStroker)
 
Handle a list of polygons defining a copper zone.
 
bool IsOnCopperLayer() const override
 
A type-safe container of any type.
 
constexpr any() noexcept
Default constructor, creates an empty object.
 
@ ROUND_ALL_CORNERS
All angles are rounded.
 
static constexpr EDA_ANGLE ANGLE_0
 
static constexpr EDA_ANGLE ANGLE_90
 
@ RECTANGLE
Use RECTANGLE instead of RECT to avoid collision in a Windows header.
 
@ FILLED_SHAPE
Fill with object color.
 
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
 
bool IsExternalCopperLayer(int aLayerId)
Test whether a layer is an external (F_Cu or B_Cu) copper layer.
 
PCB_LAYER_ID
A quick note on layer IDs:
 
This file contains miscellaneous commonly used macros and functions.
 
#define KI_FALLTHROUGH
The KI_FALLTHROUGH macro is to be used when switch statement cases should purposely fallthrough from ...
 
#define UNIMPLEMENTED_FOR(type)
 
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
 
PAD_DRILL_SHAPE
The set of pad drill shapes, used with PAD::{Set,Get}DrillShape()
 
@ NPTH
like PAD_PTH, but not plated mechanical use only, no connection allowed
 
@ SMD
Smd pad, appears on the solder paste layer (default)
 
@ PTH
Plated through hole pad.
 
@ CONN
Like smd, does not appear on the solder paste layer (default) Note: also has a special attribute in G...
 
@ FIDUCIAL_LOCAL
a fiducial (usually a smd) local to the parent footprint
 
@ FIDUCIAL_GLBL
a fiducial (usually a smd) for the full board
 
@ MECHANICAL
a pad used for mechanical support
 
@ PRESSFIT
a PTH with a hole diameter with tight tolerances for press fit pin
 
@ HEATSINK
a pad used as heat sink, usually in SMD footprints
 
@ NONE
no special fabrication property
 
@ TESTPOINT
a test point pad
 
@ CASTELLATED
a pad with a castellated through hole
 
@ BGA
Smd pad, used in BGA footprints.
 
BARCODE class definition.
 
std::vector< FAB_LAYER_COLOR > dummy
 
wxString UnescapeString(const wxString &aSource)
 
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
 
int PrintableCharCount(const wxString &aString)
Return the number of printable (ie: non-formatting) chars.
 
LINE_STYLE
Dashed line types.
 
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
Calculate the new point of coord coord pX, pY, for a rotation center 0, 0.
 
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
 
@ PCB_DIM_ORTHOGONAL_T
class PCB_DIM_ORTHOGONAL, a linear dimension constrained to x/y
 
@ PCB_DIM_LEADER_T
class PCB_DIM_LEADER, a leader dimension (graphic item)
 
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
 
@ PCB_DIM_CENTER_T
class PCB_DIM_CENTER, a center point marking (graphic item)
 
@ PCB_TEXTBOX_T
class PCB_TEXTBOX, wrapped text on a layer
 
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
 
@ PCB_REFERENCE_IMAGE_T
class PCB_REFERENCE_IMAGE, bitmap on a layer
 
@ PCB_BARCODE_T
class PCB_BARCODE, a barcode (graphic item)
 
@ PCB_TARGET_T
class PCB_TARGET, a target (graphic item)
 
@ PCB_DIM_ALIGNED_T
class PCB_DIM_ALIGNED, a linear dimension (graphic item)
 
@ PCB_TABLE_T
class PCB_TABLE, table of PCB_TABLECELLs
 
@ PCB_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
 
VECTOR2< int32_t > VECTOR2I