47 m_overrideTextEnabled( false ),
52 m_suppressZeroes( false ),
55 m_extensionOffset( 0 ),
57 m_keepTextAligned( true ),
59 m_inClearRenderCache( false )
71 case DIM_UNITS_FORMAT::NO_SUFFIX:
74 case DIM_UNITS_FORMAT::BARE_SUFFIX:
78 case DIM_UNITS_FORMAT::PAREN_SUFFIX:
106template<
typename ShapeType>
109 m_shapes.push_back( std::make_shared<ShapeType>( aShape ) );
115 struct lconv* lc = localeconv();
116 wxChar sep = lc->decimal_point[0];
126 case EDA_UNITS::INCHES: precision = precision - 4;
break;
127 case EDA_UNITS::MILS: precision = std::max( 0, precision - 7 );
break;
128 case EDA_UNITS::MILLIMETRES: precision = precision - 5;
break;
129 default: precision = precision - 4;
break;
133 wxString format = wxT(
"%." ) + wxString::Format( wxT(
"%i" ), precision ) + wxT(
"f" );
139 while(
text.Last() ==
'0' )
143 if(
text.Last() ==
'.' ||
text.Last() == sep )
177 return DIM_UNITS_MODE::AUTOMATIC;
184 case EDA_UNITS::INCHES:
return DIM_UNITS_MODE::INCHES;
185 case EDA_UNITS::MILLIMETRES:
return DIM_UNITS_MODE::MILLIMETRES;
186 case EDA_UNITS::MILS:
return DIM_UNITS_MODE::MILS;
196 case DIM_UNITS_MODE::INCHES:
201 case DIM_UNITS_MODE::MILS:
206 case DIM_UNITS_MODE::MILLIMETRES:
208 m_units = EDA_UNITS::MILLIMETRES;
211 case DIM_UNITS_MODE::AUTOMATIC:
259 int axis = aMirrorLeftRight ? axis_pos.
x : axis_pos.
y;
262#define INVERT( pos ) ( ( pos ) = axis - ( ( pos ) - axis ) )
263 if( aMirrorLeftRight )
273 if( aMirrorLeftRight )
292 std::vector<MSG_PANEL_ITEM>& aList )
297 wxCHECK_RET(
m_parent !=
nullptr, wxT(
"PCB_TEXT::GetMsgPanelInfo() m_Parent is NULL." ) );
302 aList.emplace_back(
_(
"Prefix" ),
GetPrefix() );
314 case DIM_PRECISION::V_VV: msg = wxT(
"0.00 in / 0 mils / 0.0 mm" );
break;
315 case DIM_PRECISION::V_VVV: msg = wxT(
"0.000 in / 0 mils / 0.00 mm" );
break;
316 case DIM_PRECISION::V_VVVV: msg = wxT(
"0.0000 in / 0.0 mils / 0.000 mm" );
break;
317 case DIM_PRECISION::V_VVVVV: msg = wxT(
"0.00000 in / 0.00 mils / 0.0000 mm" );
break;
318 default: msg = wxT(
"%" ) + wxString::Format( wxT(
"1.%df" ),
GetPrecision() );
321 aList.emplace_back(
_(
"Precision" ), wxString::Format( msg, 0.0 ) );
324 aList.emplace_back(
_(
"Suffix" ),
GetSuffix() );
333 aList.emplace_back(
_(
"Font" ),
GetFont() ?
GetFont()->GetName() :
_(
"Default" ) );
343 wxString start = wxString::Format( wxT(
"@(%s, %s)" ),
347 aList.emplace_back( start, wxEmptyString );
352 wxString start = wxString::Format( wxT(
"@(%s, %s)" ),
356 wxString end = wxString::Format( wxT(
"@(%s, %s)" ),
360 aList.emplace_back( start, end );
364 aList.emplace_back(
_(
"Status" ),
_(
"Locked" ) );
372 std::shared_ptr<SHAPE_COMPOUND> effectiveShape = std::make_shared<SHAPE_COMPOUND>();
376 for(
const std::shared_ptr<SHAPE>& shape :
GetShapes() )
377 effectiveShape->AddShape( shape->Clone() );
379 return effectiveShape;
392 for(
const std::shared_ptr<SHAPE>& shape :
GetShapes() )
394 if( shape->Collide( aPosition, dist_max ) )
422 int xmin, xmax, ymin, ymax;
430 for(
const std::shared_ptr<SHAPE>& shape :
GetShapes() )
432 BOX2I shapeBox = shape->BBox();
435 xmin = std::min( xmin, shapeBox.
GetOrigin().
x );
436 xmax = std::max( xmax, shapeBox.
GetEnd().
x );
437 ymin = std::min( ymin, shapeBox.
GetOrigin().
y );
438 ymax = std::max( ymax, shapeBox.
GetEnd().
y );
454 return wxString::Format(
_(
"Dimension '%s' on %s" ),
475 VECTOR2I endpoint( aStart ? aSeg.
B : aSeg.
A );
482 if(
OPT_VECTOR2I intersection = ( *seg ).Intersect( aSeg ) )
484 if( ( *intersection - start ).SquaredEuclideanNorm() <
485 ( endpoint - start ).SquaredEuclideanNorm() )
486 endpoint = *intersection;
490 if( start == endpoint )
500 VECTOR2I endpoint( aStart ? aSeg.
B : aSeg.
A );
505 std::vector<VECTOR2I> intersections = aCircle.
Intersect( aSeg );
509 if( ( intersection - start ).SquaredEuclideanNorm() <
510 ( endpoint - start ).SquaredEuclideanNorm() )
511 endpoint = intersection;
514 if( start == endpoint )
522 int aClearance,
int aError,
ERROR_LOC aErrorLoc,
523 bool aIgnoreLineWidth )
const
525 wxASSERT_MSG( !aIgnoreLineWidth, wxT(
"IgnoreLineWidth has no meaning for dimensions." ) );
527 for(
const std::shared_ptr<SHAPE>& shape :
m_shapes )
545 wxFAIL_MSG( wxT(
"PCB_DIMENSION_BASE::TransformShapeToPolygon unknown shape type." ) );
568 wxASSERT( aImage->
Type() ==
Type() );
589 return BITMAPS::add_aligned_dimension;
596 VECTOR2D crossBar( aCrossbarEnd - aCrossbarStart );
598 if( height.
Cross( crossBar ) > 0 )
618 extension =
VECTOR2I( -dimension.
y, dimension.
x );
620 extension =
VECTOR2I( dimension.
y, -dimension.
x );
659 bool containsA = polyBox.
Contains( crossbar.
A );
660 bool containsB = polyBox.
Contains( crossbar.
B );
671 if( !containsA && !containsB && !endpointA && !endpointB )
696 if( crossbarCenter.
x == 0 )
698 else if( crossbarCenter.
x < 0 )
703 VECTOR2I textOffset = crossbarCenter;
705 textOffset = crossbarCenter + textOffset.
Resize( textOffsetDistance );
759 wxASSERT( aImage->
Type() ==
Type() );
773 return BITMAPS::add_orthogonal_dimension;
841 bool containsA = polyBox.
Contains( crossbar.
A );
842 bool containsB = polyBox.
Contains( crossbar.
B );
853 if( !containsA && !containsB && !endpointA && !endpointB )
881 textOffset.
y = -textOffsetDistance;
883 textOffset.
x = -textOffsetDistance;
885 textOffset += crossbarCenter;
896 if( abs( crossbarCenter.
x ) > abs( crossbarCenter.
y ) )
931 else if( angle < -ANGLE_45 && angle >= -
ANGLE_135 )
975 wxASSERT( aImage->
Type() ==
Type() );
988 return BITMAPS::add_leader;
1029 double radius = ( textBox.
GetWidth() / 2.0 ) - penWidth;
1042 arrowSegEnd =
m_end;
1060 case DIM_TEXT_BORDER::RECTANGLE:
1068 case DIM_TEXT_BORDER::CIRCLE:
1071 double radius = ( textBox.
GetWidth() / 2.0 ) - penWidth;
1082 if( textSegEnd && *arrowSegEnd ==
m_end )
1095 wxString start = wxString::Format( wxT(
"@(%s, %s)" ),
1099 aList.emplace_back( start, wxEmptyString );
1125 wxASSERT( aImage->
Type() ==
Type() );
1138 return BITMAPS::add_radial_dimension;
1216 arrowSeg.
B = *arrowSegEnd;
1219 textSeg.
B = *textSegEnd;
1252 wxASSERT( aImage->
Type() ==
Type() );
1260 return BITMAPS::add_center_dimension;
1308 .Map( DIM_PRECISION::X,
_HKI(
"0" ) )
1309 .Map( DIM_PRECISION::X_X,
_HKI(
"0.0" ) )
1310 .Map( DIM_PRECISION::X_XX,
_HKI(
"0.00" ) )
1311 .Map( DIM_PRECISION::X_XXX,
_HKI(
"0.000" ) )
1312 .Map( DIM_PRECISION::X_XXXX,
_HKI(
"0.0000" ) )
1313 .Map( DIM_PRECISION::X_XXXXX,
_HKI(
"0.00000" ) )
1314 .Map( DIM_PRECISION::V_VV,
_HKI(
"0.00 in / 0 mils / 0.0 mm" ) )
1315 .Map( DIM_PRECISION::V_VVV,
_HKI(
"0.000 / 0 / 0.00" ) )
1316 .Map( DIM_PRECISION::V_VVVV,
_HKI(
"0.0000 / 0.0 / 0.000" ) )
1317 .Map( DIM_PRECISION::V_VVVVV,
_HKI(
"0.00000 / 0.00 / 0.0000" ) );
1320 .Map( DIM_UNITS_FORMAT::NO_SUFFIX,
_HKI(
"1234.0" ) )
1321 .Map( DIM_UNITS_FORMAT::BARE_SUFFIX,
_HKI(
"1234.0 mm" ) )
1322 .Map( DIM_UNITS_FORMAT::PAREN_SUFFIX,
_HKI(
"1234.0 (mm)" ) );
1325 .Map( DIM_UNITS_MODE::INCHES,
_HKI(
"Inches" ) )
1326 .Map( DIM_UNITS_MODE::MILS,
_HKI(
"Mils" ) )
1327 .Map( DIM_UNITS_MODE::MILLIMETRES,
_HKI(
"Millimeters" ) )
1328 .Map( DIM_UNITS_MODE::AUTOMATIC,
_HKI(
"Automatic" ) );
1339 const wxString groupDimension =
_HKI(
"Dimension Properties" );
1410 const wxString groupDimension =
_HKI(
"Dimension Properties" );
1428 _HKI(
"Vertical Justification" ),
1431 _HKI(
"Hyperlink" ),
1464 _HKI(
"Vertical Justification" ),
1467 _HKI(
"Hyperlink" ),
1491 const wxString groupDimension =
_HKI(
"Dimension Properties" );
1495 PROPERTY_DISPLAY::PT_SIZE ),
1505 _HKI(
"Vertical Justification" ),
1508 _HKI(
"Hyperlink" ),
1522 .Map( DIM_TEXT_BORDER::NONE,
_HKI(
"None" ) )
1523 .Map( DIM_TEXT_BORDER::RECTANGLE,
_HKI(
"Rectangle" ) )
1524 .Map( DIM_TEXT_BORDER::CIRCLE,
_HKI(
"Circle" ) );
1537 const wxString groupDimension =
_HKI(
"Dimension Properties" );
1550 _HKI(
"Vertical Justification" ),
1553 _HKI(
"Hyperlink" ),
1587 _HKI(
"Vertical Justification" ),
1590 _HKI(
"Hyperlink" ),
constexpr EDA_IU_SCALE pcbIUScale
BITMAPS
A list of all bitmap identifiers.
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 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.
virtual LSET GetLayerSet() const
Return a std::bitset of all layers on which the item physically resides.
virtual bool IsLocked() const
wxString GetLayerName() const
Return the name of the PCB layer on which the item resides.
BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
const Vec & GetOrigin() const
void SetX(coord_type val)
const Vec GetCenter() const
bool Intersects(const BOX2< Vec > &aRect) const
void SetY(coord_type val)
coord_type GetWidth() const
void SetWidth(coord_type val)
bool Contains(const Vec &aPoint) const
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
coord_type GetRight() const
void SetHeight(coord_type val)
coord_type GetBottom() const
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
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
Linked list: Link (parent struct)
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
int GetTextHeight() const
BOX2I GetTextBox(int aLine=-1, bool aInvertY=false) const
Useful in multiline texts to calculate the full text or a line area (for zones filling,...
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)
KIFONT::FONT * GetFont() const
void SetMirrored(bool isMirrored)
void Offset(const VECTOR2I &aOffset)
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, bool aUseTextRotation=true) const
build a list of segments (SHAPE_SEGMENT) to describe a text shape.
virtual void SetText(const wxString &aText)
virtual void SetTextAngle(const EDA_ANGLE &aAngle)
int GetTextThickness() const
static ENUM_MAP< T > & Instance()
Class that other classes need to inherit from, in order to be inspectable.
static LSET SideSpecificMask()
EDA_UNITS GetUnits() const
bool m_autoUnits
If true, follow the currently selected UI units.
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
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 Flip(const VECTOR2I &aCentre, bool aFlipLeftRight) override
Flip this object, i.e.
void ClearRenderCache() override
int m_lineThickness
Thickness used for all graphics in the dimension.
void Move(const VECTOR2I &offset) override
Move this object.
bool m_suppressZeroes
Suppress trailing zeroes.
void SetUnits(EDA_UNITS aUnits)
DIM_PRECISION m_precision
Number of digits to display after decimal.
std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer, FLASHING aFlash=FLASHING::DEFAULT) const override
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
static OPT_VECTOR2I segCircleIntersection(CIRCLE &aCircle, SEG &aSeg, bool aStart=true)
void addShape(const ShapeType &aShape)
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)
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.
bool m_keepTextAligned
Calculate text orientation to match dimension.
DIM_PRECISION GetPrecision() const
wxString GetPrefix() const
void SetSuffix(const wxString &aSuffix)
const std::vector< std::shared_ptr< SHAPE > > & GetShapes() const
DIM_UNITS_MODE GetUnitsMode() const
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
virtual const VECTOR2I & GetStart() const
The dimension's origin is the first feature point for the dimension.
wxString m_valueString
Displayed value when m_overrideValue = true.
void ChangePrecision(DIM_PRECISION aPrecision)
bool m_overrideTextEnabled
Manually specify the displayed measurement value.
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider) const override
Return a user-visible description string of this item.
DIM_UNITS_FORMAT m_unitsFormat
How to render the units suffix.
int GetMeasuredValue() const
bool GetSuppressZeroes() const
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.
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.
void SetOverrideText(const wxString &aValue)
wxString GetValueText() const
void ChangePrefix(const wxString &aPrefix)
wxString m_prefix
String prepended to the value.
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
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.
virtual void Mirror(const VECTOR2I &axis_pos, bool aMirrorLeftRight=false)
Mirror the dimension relative to a given horizontal axis.
bool GetOverrideTextEnabled() const
void SetUnitsMode(DIM_UNITS_MODE aMode)
int m_arrowLength
Length of arrow shapes.
virtual const VECTOR2I & GetEnd() const
VECTOR2I m_end
Internal cache of drawn shapes.
void ChangeUnitsMode(DIM_UNITS_MODE aMode)
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.
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).
VECTOR2I m_crossBarStart
Crossbar start control point.
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.
VECTOR2I m_crossBarEnd
Crossbar end control point.
void Mirror(const VECTOR2I &axis_pos, bool aMirrorLeftRight=false) override
Mirror the dimension relative to a given horizontal axis.
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.
virtual void swapData(BOARD_ITEM *aImage) override
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
PCB_DIM_CENTER(BOARD_ITEM *aParent)
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).
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 ChangeTextBorder(DIM_TEXT_BORDER aBorder)
An orthogonal dimension is like an aligned dimension, but the extension lines are locked to the X or ...
void swapData(BOARD_ITEM *aImage) override
void updateText() override
Update the text field value from the current geometry (called by updateGeometry normally).
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.
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 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 updateGeometry() override
Update the cached geometry of the dimension after changing any of its properties.
void ChangeLeaderLength(int aLength)
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
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.
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.
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.
const VECTOR2I GetCenter() const
Base class for iterating over all segments in a given SHAPE_POLY_SET.
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...
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.
const SEG & GetSeg() const
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
A lower-precision version of StringFromValue().
void SetUserUnits(EDA_UNITS aUnits)
T EuclideanNorm() const
Compute the Euclidean norm of the vector, which is defined as sqrt(x ** 2 + y ** 2).
extended_type Cross(const VECTOR2< T > &aVector) const
Compute cross product of self with aVector.
VECTOR2< T > Resize(T aNewLength) const
Return a vector of the same direction, but length specified in aNewLength.
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_180
static constexpr EDA_ANGLE & ANGLE_HORIZONTAL
static constexpr EDA_ANGLE & ANGLE_VERTICAL
static constexpr EDA_ANGLE & ANGLE_45
static constexpr EDA_ANGLE & FULL_CIRCLE
static constexpr EDA_ANGLE & ANGLE_90
static constexpr EDA_ANGLE & ANGLE_270
static constexpr EDA_ANGLE & ANGLE_135
#define PCB_EDIT_FRAME_NAME
ERROR_LOC
When approximating an arc or circle, should the error be placed on the outside or inside of the curve...
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:
PCB_LAYER_ID FlipLayer(PCB_LAYER_ID aLayerId, int aCopperLayersCount)
KICOMMON_API double ToUserUnit(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnit, double aValue)
Function To_User_Unit 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.
wxString EllipsizeMenuText(const wxString &aString)
Ellipsize text (at the end) to be no more than 36 characters.
wxString EllipsizeStatusText(wxWindow *aWindow, const wxString &aString)
Ellipsize text (at the end) to be no more than 1/3 of the window width.
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
static const EDA_ANGLE s_arrowAngle(27.5, DEGREES_T)
static struct DIMENSION_DESC _DIMENSION_DESC
DIM_TEXT_POSITION
Where to place the text on a dimension.
@ OUTSIDE
Text appears outside the dimension line (default)
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_TEXT_BORDER
Frame to show around dimension text.
#define ENUM_TO_WXANY(type)
Macro to define read-only fields (no setter method available)
@ PT_SIZE
Size expressed in distance units (mm/inch)
std::optional< VECTOR2I > OPT_VECTOR2I
ORTHOGONAL_DIMENSION_DESC()
void RotatePoint(int *pX, int *pY, const EDA_ANGLE &aAngle)
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 ret_type KiROUND(fp_type v)
Round a floating point number to an integer using "round halfway cases away from zero".