47#include <api/board/board_types.pb.h> 
   74        if( 
OPT_VECTOR2I intersection = ( *seg ).Intersect( aSeg ) )
 
   76            if( ( *intersection - start ).SquaredEuclideanNorm()
 
   77                < ( endpoint - start ).SquaredEuclideanNorm() )
 
   78                endpoint = *intersection;
 
   82    if( start == endpoint )
 
 
   97    std::vector<VECTOR2I> intersections = aCircle.
Intersect( aSeg );
 
  101        if( ( intersection - start ).SquaredEuclideanNorm()
 
  102            < ( endpoint - start ).SquaredEuclideanNorm() )
 
  103            endpoint = intersection;
 
  106    if( start == endpoint )
 
 
  118                                       std::vector<std::shared_ptr<SHAPE>>& aSegmentsAfterKnockout )
 
  121    const bool containsA = aPoly.
Contains( aSeg.
A );
 
  122    const bool containsB = aPoly.
Contains( aSeg.
B );
 
  128        aSegmentsAfterKnockout.emplace_back( 
new SHAPE_SEGMENT( aSeg.
A, *endpointA ) );
 
  136            if( ( *endpointB == aSeg.
A && *endpointA == aSeg.
B )
 
  137                || ( *endpointA == *endpointB && aSeg.
A == aSeg.
B ) )
 
  142            aSegmentsAfterKnockout.emplace_back( 
new SHAPE_SEGMENT( *endpointB, aSeg.
B ) );
 
  145    if( !containsA && !containsB && !endpointA && !endpointB )
 
  146        aSegmentsAfterKnockout.emplace_back( 
new SHAPE_SEGMENT( aSeg ) );
 
 
  179    return *
this == other;
 
 
  232    double similarity = 1.0;
 
 
  279    dimension.mutable_id()->set_value( 
m_Uuid.AsStdString() );
 
  281    dimension.set_locked( 
IsLocked() ? types::LockedState::LS_LOCKED
 
  282                                     : types::LockedState::LS_UNLOCKED );
 
  284    google::protobuf::Any 
any;
 
  286    any.UnpackTo( dimension.mutable_text() );
 
  288    types::Text* 
text = dimension.mutable_text();
 
  293    dimension.set_prefix( 
m_prefix.ToUTF8() );
 
  294    dimension.set_suffix( 
m_suffix.ToUTF8() );
 
  297    dimension.set_unit_format(
 
  299    dimension.set_arrow_direction(
 
  305    dimension.mutable_arrow_length()->set_value_nm( 
m_arrowLength );
 
  307    dimension.set_text_position(
 
  311    aContainer.PackFrom( dimension );
 
 
  318    kiapi::board::types::Dimension dimension;
 
  320    if( !aContainer.UnpackTo( &dimension ) )
 
  325    SetLocked( dimension.locked() == types::LockedState::LS_LOCKED );
 
  327    google::protobuf::Any 
any;
 
  328    any.PackFrom( dimension.text() );
 
  333    SetPrefix( wxString::FromUTF8( dimension.prefix() ) );
 
  334    SetSuffix( wxString::FromUTF8( dimension.suffix() ) );
 
 
  415template<
typename ShapeType>
 
  418    m_shapes.push_back( std::make_shared<ShapeType>( aShape ) );
 
 
  424    struct lconv* lc = localeconv();
 
  425    wxChar sep = lc->decimal_point[0];
 
  438        default:              precision = precision - 4;                
break;
 
  442    wxString format = wxT( 
"%." ) + wxString::Format( wxT( 
"%i" ), precision ) + wxT( 
"f" );
 
  448        while( 
text.EndsWith( 
'0' ) )
 
  452            if( 
text.EndsWith( 
'.' ) || 
text.EndsWith( sep ) )
 
 
  576    Mirror( aCentre, aFlipDirection );
 
 
  586    MIRROR( newPos, axis_pos, aFlipDirection );
 
 
  621                                          std::vector<MSG_PANEL_ITEM>& aList )
 
  626    wxCHECK_RET( 
m_parent != 
nullptr, wxT( 
"PCB_TEXT::GetMsgPanelInfo() m_Parent is NULL." ) );
 
  631    aList.emplace_back( 
_( 
"Prefix" ), 
GetPrefix() );
 
  647        default:  msg = wxT( 
"%" ) + wxString::Format( wxT( 
"1.%df" ), 
GetPrecision() );
 
  650        aList.emplace_back( 
_( 
"Precision" ), wxString::Format( msg, 0.0 ) );
 
  653    aList.emplace_back( 
_( 
"Suffix" ), 
GetSuffix() );
 
  662    aList.emplace_back( 
_( 
"Font" ), 
GetFont() ? 
GetFont()->GetName() : 
_( 
"Default" ) );
 
  672        wxString start = wxString::Format( wxT( 
"@(%s, %s)" ),
 
  676        aList.emplace_back( start, wxEmptyString );
 
  681        wxString start = wxString::Format( wxT( 
"@(%s, %s)" ),
 
  685        wxString 
end   = wxString::Format( wxT( 
"@(%s, %s)" ),
 
  689        aList.emplace_back( start, 
end );
 
  693        aList.emplace_back( 
_( 
"Status" ), 
_( 
"Locked" ) );
 
 
  701    std::shared_ptr<SHAPE_COMPOUND> effectiveShape = std::make_shared<SHAPE_COMPOUND>();
 
  705    for( 
const std::shared_ptr<SHAPE>& shape : 
GetShapes() )
 
  706        effectiveShape->AddShape( shape->Clone() );
 
  708    return effectiveShape;
 
 
  721    for( 
const std::shared_ptr<SHAPE>& shape : 
GetShapes() )
 
  723        if( shape->Collide( aPosition, dist_max ) )
 
 
  754    for( 
const std::shared_ptr<SHAPE>& shape : 
GetShapes() )
 
 
  767    int   xmin, xmax, ymin, ymax;
 
  775    for( 
const std::shared_ptr<SHAPE>& shape : 
GetShapes() )
 
  777        BOX2I shapeBox = shape->BBox();
 
  780        xmin = std::min( xmin, shapeBox.
GetOrigin().
x );
 
  781        xmax = std::max( xmax, shapeBox.
GetEnd().
x );
 
  782        ymin = std::min( ymin, shapeBox.
GetOrigin().
y );
 
  783        ymax = std::max( ymax, shapeBox.
GetEnd().
y );
 
 
  799    return wxString::Format( 
_( 
"Dimension '%s' on %s" ),
 
 
  817                                                  int aClearance, 
int aError, 
ERROR_LOC aErrorLoc,
 
  818                                                  bool aIgnoreLineWidth )
 const 
  820    wxASSERT_MSG( !aIgnoreLineWidth, wxT( 
"IgnoreLineWidth has no meaning for dimensions." ) );
 
  822    for( 
const std::shared_ptr<SHAPE>& shape : 
m_shapes )
 
  840            wxFAIL_MSG( wxT( 
"PCB_DIMENSION_BASE::TransformShapeToPolygon unknown shape type." ) );
 
 
  864    kiapi::board::types::Dimension dimension;
 
  867    aContainer.UnpackTo( &dimension );
 
  871    dimension.mutable_aligned()->mutable_height()->set_value_nm( 
m_height );
 
  872    dimension.mutable_aligned()->mutable_extension_height()->set_value_nm( 
m_extensionHeight );
 
  874    aContainer.PackFrom( dimension );
 
 
  885    kiapi::board::types::Dimension dimension;
 
  886    aContainer.UnpackTo( &dimension );
 
  888    if( !dimension.has_aligned() )
 
  893    SetHeight( dimension.aligned().height().value_nm());
 
 
  904    wxASSERT( aImage->
Type() == 
Type() );
 
 
  932    VECTOR2D crossBar( aCrossbarEnd - aCrossbarStart );
 
  934    if( height.
Cross( crossBar ) > 0 )
 
 
  959        extension = 
VECTOR2I( -dimension.
y, dimension.
x );
 
  961        extension = 
VECTOR2I( dimension.
y, -dimension.
x );
 
 
 1027        if( crossbarCenter.
x == 0 )
 
 1029        else if( crossbarCenter.
x < 0 )
 
 1034        VECTOR2I textOffset = crossbarCenter;
 
 1036        textOffset = crossbarCenter + textOffset.
Resize( textOffsetDistance );
 
 
 1091    kiapi::board::types::Dimension dimension;
 
 1094    aContainer.UnpackTo( &dimension );
 
 1098    dimension.mutable_orthogonal()->mutable_height()->set_value_nm( 
m_height );
 
 1099    dimension.mutable_orthogonal()->mutable_extension_height()->set_value_nm( 
m_extensionHeight );
 
 1102                                                           ? types::AxisAlignment::AA_Y_AXIS
 
 1103                                                           : types::AxisAlignment::AA_X_AXIS );
 
 1104    aContainer.PackFrom( dimension );
 
 
 1115    kiapi::board::types::Dimension dimension;
 
 1116    aContainer.UnpackTo( &dimension );
 
 1118    if( !dimension.has_orthogonal() )
 
 1123    SetHeight( dimension.orthogonal().height().value_nm());
 
 1125    SetOrientation( dimension.orthogonal().alignment() == types::AxisAlignment::AA_Y_AXIS
 
 
 1137    wxASSERT( aImage->
Type() == 
Type() );
 
 
 1267            textOffset.
y = -textOffsetDistance;
 
 1269            textOffset.
x = -textOffsetDistance;
 
 1271        textOffset += crossbarCenter;
 
 1282        if( abs( crossbarCenter.
x ) > abs( crossbarCenter.
y ) )
 
 
 1317    else if( angle < -ANGLE_45 && angle >= -
ANGLE_135 )
 
 
 1356    kiapi::board::types::Dimension dimension;
 
 1359    aContainer.UnpackTo( &dimension );
 
 1363    dimension.mutable_leader()->set_border_style(
 
 1367    aContainer.PackFrom( dimension );
 
 
 1378    kiapi::board::types::Dimension dimension;
 
 1379    aContainer.UnpackTo( &dimension );
 
 1381    if( !dimension.has_leader() )
 
 
 1402    wxASSERT( aImage->
Type() == 
Type() );
 
 
 1474        arrowSegEnd = 
m_end;
 
 1506    if( textSegEnd && *arrowSegEnd == 
m_end )
 
 
 1521    wxString start = wxString::Format( wxT( 
"@(%s, %s)" ),
 
 1525    aList.emplace_back( start, wxEmptyString );
 
 
 1545    kiapi::board::types::Dimension dimension;
 
 1548    aContainer.UnpackTo( &dimension );
 
 1552    dimension.mutable_radial()->mutable_leader_length()->set_value_nm( 
m_leaderLength );
 
 1554    aContainer.PackFrom( dimension );
 
 
 1565    kiapi::board::types::Dimension dimension;
 
 1566    aContainer.UnpackTo( &dimension );
 
 1568    if( !dimension.has_radial() )
 
 
 1589    wxASSERT( aImage->
Type() == 
Type() );
 
 
 1698    kiapi::board::types::Dimension dimension;
 
 1701    aContainer.UnpackTo( &dimension );
 
 1706    aContainer.PackFrom( dimension );
 
 
 1717    kiapi::board::types::Dimension dimension;
 
 1718    aContainer.UnpackTo( &dimension );
 
 1720    if( !dimension.has_center() )
 
 
 1740    wxASSERT( aImage->
Type() == 
Type() );
 
 
 1755    int   xmin, xmax, ymin, ymax;
 
 1762    for( 
const std::shared_ptr<SHAPE>& shape : 
GetShapes() )
 
 1764        BOX2I shapeBox = shape->BBox();
 
 1767        xmin = std::min( xmin, shapeBox.
GetOrigin().
x );
 
 1768        xmax = std::max( xmax, shapeBox.
GetEnd().
x );
 
 1769        ymin = std::min( ymin, shapeBox.
GetOrigin().
y );
 
 1770        ymax = std::max( ymax, shapeBox.
GetEnd().
y );
 
 
 1866        const wxString groupDimension = 
_HKI( 
"Dimension Properties" );
 
 1880        auto isMultiArrowDirection =
 
 1926        const wxString groupText = 
_HKI( 
"Text Properties" );
 
 1928        const auto isTextOrientationWriteable =
 
 
 
 1969        const wxString groupDimension = 
_HKI( 
"Dimension Properties" );
 
 1984                                      _HKI( 
"Vertical Justification" ),
 
 1987                                      _HKI( 
"Hyperlink" ),
 
 
 
 2017                                      _HKI( 
"Vertical Justification" ),
 
 2020                                      _HKI( 
"Hyperlink" ),
 
 
 
 2044        const wxString groupDimension = 
_HKI( 
"Dimension Properties" );
 
 2055                                      _HKI( 
"Vertical Justification" ),
 
 2058                                      _HKI( 
"Hyperlink" ),
 
 
 
 2087        const wxString groupDimension = 
_HKI( 
"Dimension Properties" );
 
 2097                                      _HKI( 
"Vertical Justification" ),
 
 2100                                      _HKI( 
"Hyperlink" ),
 
 
 
 2131                                      _HKI( 
"Vertical Justification" ),
 
 2134                                      _HKI( 
"Hyperlink" ),
 
 
 
types::KiCadObjectType ToProtoEnum(KICAD_T aValue)
 
KICAD_T FromProtoEnum(types::KiCadObjectType aValue)
 
ERROR_LOC
When approximating an arc or circle, should the error be placed on the outside or inside of the curve...
 
constexpr EDA_IU_SCALE pcbIUScale
 
BITMAPS
A list of all bitmap identifiers.
 
@ add_orthogonal_dimension
 
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
 
Container for design settings for a BOARD object.
 
DIM_PRECISION m_DimensionPrecision
Number of digits after the decimal.
 
DIM_UNITS_FORMAT m_DimensionUnitsFormat
 
bool m_DimensionSuppressZeroes
 
bool m_DimensionKeepTextAligned
 
int GetLineThickness(PCB_LAYER_ID aLayer) const
Return the default graphic segment thickness from the layer class for the given layer.
 
DIM_TEXT_POSITION m_DimensionTextPosition
 
DIM_UNITS_MODE m_DimensionUnitsMode
 
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
 
BOARD_ITEM(BOARD_ITEM *aParent, KICAD_T idtype, PCB_LAYER_ID aLayer=F_Cu)
 
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
 
void SetLocked(bool aLocked) override
 
bool IsLocked() const override
 
virtual void SetLayer(PCB_LAYER_ID aLayer)
Set the layer this item is on.
 
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
 
bool IsSideSpecific() const
 
wxString GetLayerName() const
Return the name of the PCB layer on which the item resides.
 
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
 
constexpr void SetHeight(size_type val)
 
constexpr const Vec GetEnd() const
 
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
 
constexpr coord_type GetY() const
 
constexpr size_type GetWidth() const
 
constexpr coord_type GetX() const
 
constexpr BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
 
constexpr const Vec GetCenter() const
 
constexpr bool Contains(const Vec &aPoint) const
 
constexpr void SetWidth(size_type val)
 
constexpr void SetX(coord_type val)
 
constexpr const Vec & GetOrigin() const
 
constexpr void SetY(coord_type val)
 
constexpr coord_type GetRight() const
 
constexpr bool Intersects(const BOX2< Vec > &aRect) const
 
constexpr coord_type GetBottom() const
 
Represent basic circle geometry with utility geometry functions.
 
std::vector< VECTOR2I > Intersect(const CIRCLE &aCircle) const
Compute the intersection points between this circle and aCircle.
 
bool Contains(const VECTOR2I &aP) const
Return true if aP is on the circumference of this circle.
 
ORIGIN_TRANSFORMS & GetOriginTransforms() override
Return a reference to the default ORIGIN_TRANSFORMS object.
 
The base class for create windows for drawing purpose.
 
A base class for most all the KiCad significant classes used in schematics and boards.
 
KICAD_T Type() const
Returns the type of object.
 
EDA_ITEM * m_parent
Owner.
 
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
 
int GetTextHeight() const
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
const VECTOR2I & GetTextPos() const
 
const EDA_ANGLE & GetTextAngle() const
 
virtual const wxString & GetText() const
Return the string associated with the text object.
 
void SetTextPos(const VECTOR2I &aPoint)
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
KIFONT::FONT * GetFont() const
 
void SetMirrored(bool isMirrored)
 
BOX2I GetTextBox(const RENDER_SETTINGS *aSettings, int aLine=-1) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
 
void Offset(const VECTOR2I &aOffset)
 
double Similarity(const EDA_TEXT &aOther) const
 
virtual void ClearRenderCache()
 
int GetEffectiveTextPenWidth(int aDefaultPenWidth=0) const
The EffectiveTextPenWidth uses the text thickness if > 1 or aDefaultPenWidth.
 
std::shared_ptr< SHAPE_COMPOUND > GetEffectiveTextShape(bool aTriangulate=true, const BOX2I &aBBox=BOX2I(), const EDA_ANGLE &aAngle=ANGLE_0) const
build a list of segments (SHAPE_SEGMENT) to describe a text shape.
 
void SetTextAngleDegrees(double aOrientation)
 
virtual void SetText(const wxString &aText)
 
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
 
int GetTextThickness() const
 
bool operator==(const EDA_TEXT &aRhs) const
 
static ENUM_MAP< T > & Instance()
 
Class that other classes need to inherit from, in order to be inspectable.
 
EDA_UNITS GetUnits() const
 
bool m_autoUnits
If true, follow the currently selected UI units.
 
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
 
void Update()
Update the dimension's cached text and geometry.
 
void ChangeSuffix(const wxString &aSuffix)
 
wxString GetOverrideText() const
 
wxString GetSuffix() const
 
std::vector< std::shared_ptr< SHAPE > > m_shapes
 
double Similarity(const BOARD_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
 
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool aIgnoreLineWidth=false) const override
Convert the item shape to a closed polygon.
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
void ClearRenderCache() override
 
int m_lineThickness
Thickness used for all graphics in the dimension.
 
void Move(const VECTOR2I &offset) override
Move this object.
 
void SetUnitsFormat(const DIM_UNITS_FORMAT aFormat)
 
bool m_suppressZeroes
Suppress trailing zeroes.
 
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
 
void SetUnits(EDA_UNITS aUnits)
 
DIM_PRECISION m_precision
Number of digits to display after decimal.
 
void addShape(const ShapeType &aShape)
 
std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT) const override
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
 
void SetPrefix(const wxString &aPrefix)
 
wxString m_suffix
String appended to the value.
 
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
 
void ChangeOverrideText(const wxString &aValue)
 
void SetExtensionOffset(int aOffset)
 
void SetSuppressZeroes(bool aSuppress)
 
bool m_inClearRenderCache
re-entrancy guard
 
PCB_DIMENSION_BASE(BOARD_ITEM *aParent, KICAD_T aType=PCB_DIMENSION_T)
 
int m_extensionOffset
Distance from feature points to extension line start.
 
void ChangeArrowDirection(const DIM_ARROW_DIRECTION &aDirection)
 
bool GetKeepTextAligned() const
 
void ChangeTextAngleDegrees(double aDegrees)
 
bool m_keepTextAligned
Calculate text orientation to match dimension.
 
DIM_PRECISION GetPrecision() const
 
wxString GetPrefix() const
 
void SetOverrideTextEnabled(bool aOverride)
 
void SetSuffix(const wxString &aSuffix)
 
bool operator==(const PCB_DIMENSION_BASE &aOther) const
 
const std::vector< std::shared_ptr< SHAPE > > & GetShapes() const
 
DIM_UNITS_MODE GetUnitsMode() const
 
void drawAnArrow(VECTOR2I aStartPoint, EDA_ANGLE anAngle, int aLength)
Draws an arrow and updates the shape container.
 
void SetTextPositionMode(DIM_TEXT_POSITION aMode)
 
virtual void updateText()
Update the text field value from the current geometry (called by updateGeometry normally).
 
bool HitTest(const VECTOR2I &aPosition, int aAccuracy) const override
Test if aPosition is inside or on the boundary of this item.
 
EDA_UNITS m_units
0 = inches, 1 = mm
 
int m_measuredValue
value of PCB dimensions
 
DIM_UNITS_FORMAT GetUnitsFormat() const
 
void SetLineThickness(int aWidth)
 
void SetArrowLength(int aLength)
 
virtual const VECTOR2I & GetStart() const
The dimension's origin is the first feature point for the dimension.
 
DIM_ARROW_DIRECTION GetArrowDirection() const
 
wxString m_valueString
Displayed value when m_overrideValue = true.
 
void ChangePrecision(DIM_PRECISION aPrecision)
 
virtual void SetEnd(const VECTOR2I &aPoint)
 
void SetPrecision(DIM_PRECISION aPrecision)
 
bool m_overrideTextEnabled
Manually specify the displayed measurement value.
 
virtual void SetStart(const VECTOR2I &aPoint)
 
DIM_UNITS_FORMAT m_unitsFormat
How to render the units suffix.
 
int GetMeasuredValue() const
 
bool GetSuppressZeroes() const
 
void SetArrowDirection(const DIM_ARROW_DIRECTION &aDirection)
 
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
 
DIM_TEXT_POSITION m_textPosition
How to position the text.
 
void SetOverrideText(const wxString &aValue)
 
wxString GetValueText() const
 
void ChangePrefix(const wxString &aPrefix)
 
wxString m_prefix
String prepended to the value.
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
 
DIM_ARROW_DIRECTION m_arrowDirection
direction of dimension arrow.
 
void ChangeKeepTextAligned(bool aKeepAligned)
 
void ChangeUnitsFormat(const DIM_UNITS_FORMAT aFormat)
 
void ChangeSuppressZeroes(bool aSuppress)
 
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
 
double GetTextAngleDegreesProp() const
 
bool GetOverrideTextEnabled() const
 
void SetUnitsMode(DIM_UNITS_MODE aMode)
 
int m_arrowLength
Length of arrow shapes.
 
virtual const VECTOR2I & GetEnd() const
 
virtual void Mirror(const VECTOR2I &axis_pos, FLIP_DIRECTION aFlipDirection) override
Mirror the dimension relative to a given horizontal axis.
 
VECTOR2I m_end
Internal cache of drawn shapes.
 
void ChangeUnitsMode(DIM_UNITS_MODE aMode)
 
void SetKeepTextAligned(bool aKeepAligned)
 
void StyleFromSettings(const BOARD_DESIGN_SETTINGS &settings, bool aCheckSide) override
 
VECTOR2I GetPosition() const override
 
For better understanding of the points that make a dimension:
 
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
 
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
int m_height
Perpendicular distance from features to crossbar.
 
void ChangeExtensionHeight(int aHeight)
 
void updateText() override
Update the text field value from the current geometry (called by updateGeometry normally).
 
void SetExtensionHeight(int aHeight)
 
VECTOR2I m_crossBarStart
Crossbar start control point.
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
void Mirror(const VECTOR2I &axis_pos, FLIP_DIRECTION aFlipDirection) override
Mirror the dimension relative to a given horizontal axis.
 
void UpdateHeight(const VECTOR2I &aCrossbarStart, const VECTOR2I &aCrossbarEnd)
Update the stored height basing on points coordinates.
 
virtual void swapData(BOARD_ITEM *aImage) override
 
int m_extensionHeight
Length of extension lines past the crossbar.
 
void SetHeight(int aHeight)
Set the distance from the feature points to the crossbar line.
 
VECTOR2I m_crossBarEnd
Crossbar end control point.
 
PCB_DIM_ALIGNED(BOARD_ITEM *aParent, KICAD_T aType=PCB_DIM_ALIGNED_T)
 
void ChangeHeight(int aHeight)
 
void updateGeometry() override
Update the cached geometry of the dimension after changing any of its properties.
 
int GetExtensionHeight() const
 
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
 
Mark the center of a circle or arc with a cross shape.
 
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
 
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
 
void updateGeometry() override
Update the cached geometry of the dimension after changing any of its properties.
 
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
virtual void swapData(BOARD_ITEM *aImage) override
 
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
PCB_DIM_CENTER(BOARD_ITEM *aParent)
 
void updateText() override
Update the text field value from the current geometry (called by updateGeometry normally).
 
A leader is a dimension-like object pointing to a specific point.
 
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
 
DIM_TEXT_BORDER m_textBorder
 
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
 
DIM_TEXT_BORDER GetTextBorder() const
 
virtual void swapData(BOARD_ITEM *aImage) override
 
void updateGeometry() override
Update the cached geometry of the dimension after changing any of its properties.
 
void updateText() override
Update the text field value from the current geometry (called by updateGeometry normally).
 
void SetTextBorder(DIM_TEXT_BORDER aBorder)
 
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
 
PCB_DIM_LEADER(BOARD_ITEM *aParent)
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
void ChangeTextBorder(DIM_TEXT_BORDER aBorder)
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
An orthogonal dimension is like an aligned dimension, but the extension lines are locked to the X or ...
 
void swapData(BOARD_ITEM *aImage) override
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
void updateText() override
Update the text field value from the current geometry (called by updateGeometry normally).
 
void SetOrientation(DIR aOrientation)
Set the orientation of the dimension line (so, perpendicular to the feature lines).
 
void updateGeometry() override
Update the cached geometry of the dimension after changing any of its properties.
 
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
 
DIR m_orientation
What axis to lock the dimension line to.
 
void Mirror(const VECTOR2I &axis_pos, FLIP_DIRECTION aFlipDirection) override
Mirror the dimension relative to a given horizontal axis.
 
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
 
PCB_DIM_ORTHOGONAL(BOARD_ITEM *aParent)
 
A radial dimension indicates either the radius or diameter of an arc or circle.
 
int GetLeaderLength() const
 
PCB_DIM_RADIAL(BOARD_ITEM *aParent)
 
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
 
void updateText() override
Update the text field value from the current geometry (called by updateGeometry normally).
 
virtual void swapData(BOARD_ITEM *aImage) override
 
void SetLeaderLength(int aLength)
 
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
 
void updateGeometry() override
Update the cached geometry of the dimension after changing any of its properties.
 
void ChangeLeaderLength(int aLength)
 
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
 
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
 
void StyleFromSettings(const BOARD_DESIGN_SETTINGS &settings, bool aCheckSide) override
 
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
 
wxString GetShownText(bool aAllowExtraText, int aDepth=0) const override
Return the string actually shown after processing of the base text.
 
PCB_TEXT(BOARD_ITEM *parent, KICAD_T idtype=PCB_TEXT_T)
 
bool TextHitTest(const VECTOR2I &aPoint, int aAccuracy=0) const override
Test if aPoint is within the bounds of this object.
 
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
 
PROPERTY_BASE & SetAvailableFunc(std::function< bool(INSPECTABLE *)> aFunc)
Set a callback function to determine whether an object provides this property.
 
PROPERTY_BASE & SetWriteableFunc(std::function< bool(INSPECTABLE *)> aFunc)
 
Provide class metadata.Helper macro to map type hashes to names.
 
void InheritsAfter(TYPE_ID aDerived, TYPE_ID aBase)
Declare an inheritance relationship between types.
 
void Mask(TYPE_ID aDerived, TYPE_ID aBase, const wxString &aName)
Sets a base class property as masked in a derived class.
 
static PROPERTY_MANAGER & Instance()
 
PROPERTY_BASE & AddProperty(PROPERTY_BASE *aProperty, const wxString &aGroup=wxEmptyString)
Register a property.
 
void OverrideAvailability(TYPE_ID aDerived, TYPE_ID aBase, const wxString &aName, std::function< bool(INSPECTABLE *)> aFunc)
Sets an override availability functor for a base class property of a given derived class.
 
void AddTypeCast(TYPE_CAST_BASE *aCast)
Register a type converter.
 
void AddShape(SHAPE *aShape)
 
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
 
Represent a set of closed polygons.
 
void Rotate(const EDA_ANGLE &aAngle, const VECTOR2I &aCenter={ 0, 0 }) override
Rotate all vertices by a given angle.
 
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 NewOutline()
Creates a new empty polygon in the set and returns its index.
 
SEGMENT_ITERATOR IterateSegments(int aFirst, int aLast, bool aIterateHoles=false)
Return an iterator object, for iterating between aFirst and aLast outline, with or without holes (def...
 
CONST_SEGMENT_ITERATOR CIterateSegments(int aFirst, int aLast, bool aIterateHoles=false) const
Return an iterator object, for iterating between aFirst and aLast outline, with or without holes (def...
 
SEGMENT_ITERATOR_TEMPLATE< SEG > SEGMENT_ITERATOR
 
bool Contains(const VECTOR2I &aP, int aSubpolyIndex=-1, int aAccuracy=0, bool aUseBBoxCaches=false) const
Return true if a given subpolygon contains the point aP.
 
SEGMENT_ITERATOR_TEMPLATE< const SEG > CONST_SEGMENT_ITERATOR
 
const SEG & GetSeg() const
 
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
 
void SetUserUnits(EDA_UNITS aUnits)
 
constexpr extended_type Cross(const VECTOR2< T > &aVector) const
Compute cross product of self with aVector.
 
T EuclideanNorm() const
Compute the Euclidean norm of the vector, which is defined as sqrt(x ** 2 + y ** 2).
 
VECTOR2< T > Resize(T aNewLength) const
Return a vector of the same direction, but length specified in aNewLength.
 
A type-safe container of any type.
 
void TransformCircleToPolygon(SHAPE_LINE_CHAIN &aBuffer, const VECTOR2I &aCenter, int aRadius, int aError, ERROR_LOC aErrorLoc, int aMinSegCount=0)
Convert a circle to a polygon, using multiple straight lines.
 
void TransformOvalToPolygon(SHAPE_POLY_SET &aBuffer, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aWidth, int aError, ERROR_LOC aErrorLoc, int aMinSegCount=0)
Convert a oblong shape to a polygon, using multiple segments.
 
static constexpr EDA_ANGLE ANGLE_90
 
static constexpr EDA_ANGLE ANGLE_VERTICAL
 
static constexpr EDA_ANGLE ANGLE_HORIZONTAL
 
static constexpr EDA_ANGLE ANGLE_45
 
static constexpr EDA_ANGLE ANGLE_270
 
static constexpr EDA_ANGLE FULL_CIRCLE
 
static constexpr EDA_ANGLE ANGLE_180
 
static constexpr EDA_ANGLE ANGLE_135
 
#define PCB_EDIT_FRAME_NAME
 
a few functions useful in geometry calculations.
 
PCB_LAYER_ID FlipLayer(PCB_LAYER_ID aLayerId, int aCopperLayersCount)
 
FLASHING
Enum used during connectivity building to ensure we do not query connectivity while building the data...
 
PCB_LAYER_ID
A quick note on layer IDs:
 
constexpr void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
 
@ LEFT_RIGHT
Flip left to right (around the Y axis)
 
@ TOP_BOTTOM
Flip top to bottom (around the X axis)
 
KICOMMON_API double ToUserUnit(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnit, double aValue)
Convert aValue in internal units to the appropriate user units defined by aUnit.
 
KICOMMON_API wxString GetText(EDA_UNITS aUnits, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Get the units string for a given units type.
 
KICOMMON_API wxString GetLabel(EDA_UNITS aUnits, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
Get the units string for a given units type.
 
bool ShapeHitTest(const SHAPE_LINE_CHAIN &aHitter, const SHAPE &aHittee, bool aHitteeContained)
Perform a shape-to-shape hit test.
 
KICOMMON_API wxString EllipsizeMenuText(const wxString &aString)
Ellipsize text (at the end) to be no more than 36 characters.
 
KICOMMON_API wxString EllipsizeStatusText(wxWindow *aWindow, const wxString &aString)
Ellipsize text (at the end) to be no more than 1/3 of the window width.
 
KICOMMON_API VECTOR2I UnpackVector2(const types::Vector2 &aInput)
 
KICOMMON_API void PackVector2(types::Vector2 &aOutput, const VECTOR2I &aInput)
 
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
 
static const int INWARD_ARROW_LENGTH_TO_HEAD_RATIO
 
static const EDA_ANGLE s_arrowAngle(27.5, DEGREES_T)
 
static struct DIMENSION_DESC _DIMENSION_DESC
 
static OPT_VECTOR2I segPolyIntersection(const SHAPE_POLY_SET &aPoly, const SEG &aSeg, bool aStart=true)
Find the intersection between a given segment and polygon outline.
 
static OPT_VECTOR2I segCircleIntersection(CIRCLE &aCircle, SEG &aSeg, bool aStart=true)
 
static void CollectKnockedOutSegments(const SHAPE_POLY_SET &aPoly, const SEG &aSeg, std::vector< std::shared_ptr< SHAPE > > &aSegmentsAfterKnockout)
Knockout a polygon from a segment.
 
DIM_TEXT_POSITION
Where to place the text on a dimension.
 
@ OUTSIDE
Text appears outside the dimension line (default)
 
@ INLINE
Text appears in line with the dimension line.
 
DIM_UNITS_FORMAT
How to display the units in a dimension's text.
 
DIM_UNITS_MODE
Used for storing the units selection in the file because EDA_UNITS alone doesn't cut it.
 
DIM_ARROW_DIRECTION
Used for dimension's arrow.
 
DIM_TEXT_BORDER
Frame to show around dimension text.
 
#define ENUM_TO_WXANY(type)
Macro to define read-only fields (no setter method available)
 
@ PT_DEGREE
Angle expressed in degrees.
 
@ PT_SIZE
Size expressed in distance units (mm/inch)
 
std::optional< VECTOR2I > OPT_VECTOR2I
 
ORTHOGONAL_DIMENSION_DESC()
 
SHAPE_CIRCLE circle(c.m_circle_center, c.m_circle_radius)
 
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.
 
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
 
@ 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_DIM_CENTER_T
class PCB_DIM_CENTER, a center point marking (graphic item)
 
@ PCB_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
 
constexpr int sign(T val)
 
VECTOR2< int32_t > VECTOR2I
 
VECTOR2< double > VECTOR2D