29#include <google/protobuf/any.pb.h>
30#include <magic_enum.hpp>
46#include <api/board/board_types.pb.h>
74 kiapi::board::types::GraphicShape msg;
77 msg.set_layer( ToProtoEnum<PCB_LAYER_ID, kiapi::board::types::BoardLayer>(
GetLayer() ) );
78 msg.set_locked(
IsLocked() ? kiapi::common::types::LockedState::LS_LOCKED
79 : kiapi::common::types::LockedState::LS_UNLOCKED );
80 msg.mutable_net()->mutable_code()->set_value(
GetNetCode() );
83 kiapi::common::types::StrokeAttributes* stroke
84 = msg.mutable_attributes()->mutable_stroke();
85 kiapi::common::types::GraphicFillAttributes* fill = msg.mutable_attributes()->mutable_fill();
87 stroke->mutable_width()->set_value_nm(
GetWidth() );
91 case LINE_STYLE::DEFAULT: stroke->set_style( kiapi::common::types::SLS_DEFAULT );
break;
92 case LINE_STYLE::SOLID: stroke->set_style( kiapi::common::types::SLS_SOLID );
break;
93 case LINE_STYLE::DASH: stroke->set_style( kiapi::common::types::SLS_DASH );
break;
94 case LINE_STYLE::DOT: stroke->set_style( kiapi::common::types::SLS_DOT );
break;
95 case LINE_STYLE::DASHDOT: stroke->set_style( kiapi::common::types::SLS_DASHDOT );
break;
96 case LINE_STYLE::DASHDOTDOT: stroke->set_style( kiapi::common::types::SLS_DASHDOTDOT );
break;
102 case FILL_T::FILLED_SHAPE: fill->set_fill_type( kiapi::common::types::GFT_FILLED );
break;
103 default: fill->set_fill_type( kiapi::common::types::GFT_UNFILLED );
break;
108 case SHAPE_T::SEGMENT:
110 kiapi::board::types::GraphicSegmentAttributes* segment = msg.mutable_segment();
116 case SHAPE_T::RECTANGLE:
118 kiapi::board::types::GraphicRectangleAttributes* rectangle = msg.mutable_rectangle();
126 kiapi::board::types::GraphicArcAttributes* arc = msg.mutable_arc();
133 case SHAPE_T::CIRCLE:
135 kiapi::board::types::GraphicCircleAttributes* circle = msg.mutable_circle();
143 kiapi::common::types::PolySet* polyset = msg.mutable_polygon();
152 kiapi::common::types::PolygonWithHoles* polyMsg = polyset->mutable_polygons()->Add();
155 if( poly.size() > 1 )
157 for(
size_t hole = 1; hole < poly.size(); ++hole )
159 kiapi::common::types::PolyLine* pl = polyMsg->mutable_holes()->Add();
167 case SHAPE_T::BEZIER:
169 kiapi::board::types::GraphicBezierAttributes* bezier = msg.mutable_bezier();
178 wxASSERT_MSG(
false,
"Unhandled shape in PCB_SHAPE::Serialize" );
183 aContainer.PackFrom( msg );
189 kiapi::board::types::GraphicShape msg;
191 if( !aContainer.UnpackTo( &msg ) )
207 SetLocked( msg.locked() == kiapi::common::types::LS_LOCKED );
208 SetLayer( FromProtoEnum<PCB_LAYER_ID, kiapi::board::types::BoardLayer>( msg.layer() ) );
211 SetFilled( msg.attributes().fill().fill_type() == kiapi::common::types::GFT_FILLED );
212 SetWidth( msg.attributes().stroke().width().value_nm() );
214 switch( msg.attributes().stroke().style() )
216 case kiapi::common::types::SLS_DEFAULT:
SetLineStyle( LINE_STYLE::DEFAULT );
break;
217 case kiapi::common::types::SLS_SOLID:
SetLineStyle( LINE_STYLE::SOLID );
break;
218 case kiapi::common::types::SLS_DASH:
SetLineStyle( LINE_STYLE::DASH );
break;
219 case kiapi::common::types::SLS_DOT:
SetLineStyle( LINE_STYLE::DOT );
break;
220 case kiapi::common::types::SLS_DASHDOT:
SetLineStyle( LINE_STYLE::DASHDOT );
break;
221 case kiapi::common::types::SLS_DASHDOTDOT:
SetLineStyle( LINE_STYLE::DASHDOTDOT );
break;
225 if( msg.has_segment() )
231 else if( msg.has_rectangle() )
237 else if( msg.has_arc() )
244 else if( msg.has_circle() )
250 else if( msg.has_polygon() )
253 const auto& polyMsg = msg.polygon().polygons();
257 for(
const kiapi::common::types::PolygonWithHoles& polygonWithHoles : polyMsg )
263 for(
const kiapi::common::types::PolyLine& holeMsg : polygonWithHoles.holes() )
271 else if( msg.has_bezier() )
292 bool sametype =
false;
294 for(
KICAD_T scanType : aScanTypes )
299 sametype =
m_shape == SHAPE_T::ARC;
301 sametype =
m_shape == SHAPE_T::CIRCLE;
303 sametype =
m_shape == SHAPE_T::RECTANGLE;
305 sametype =
m_shape == SHAPE_T::SEGMENT;
307 sametype =
m_shape == SHAPE_T::POLY;
309 sametype =
m_shape == SHAPE_T::BEZIER;
350 margin = std::max( margin, -
GetWidth() / 2 );
380 if( layermask.test(
F_Cu ) )
383 if( layermask.test(
B_Cu ) )
406 std::vector<VECTOR2I> ret;
417 case SHAPE_T::CIRCLE:
422 ret.emplace_back( pt.m_point );
430 case SHAPE_T::SEGMENT:
431 case SHAPE_T::BEZIER:
433 ret.emplace_back(
GetEnd() );
437 for(
auto iter =
GetPolyShape().CIterate(); iter; ++iter )
438 ret.emplace_back( *iter );
442 case SHAPE_T::RECTANGLE:
444 ret.emplace_back( pt );
448 case SHAPE_T::UNDEFINED:
480 case SHAPE_T::CIRCLE:
486 case SHAPE_T::RECTANGLE:
506 case SHAPE_T::BEZIER:
517 std::vector<VECTOR2I> pts;
519 if(
GetShape() == SHAPE_T::RECTANGLE )
523 else if(
GetShape() == SHAPE_T::POLY )
528 pts.emplace_back( pt );
536 while( pts.size() < 4 )
537 pts.emplace_back( pts.back() +
VECTOR2I( 10, 10 ) );
557 if(
m_shape == SHAPE_T::RECTANGLE )
562 BOX2I rect( start, end - start );
568 else if(
m_shape == SHAPE_T::POLY )
573 return seg.A.y == seg.B.y;
579 return seg.A.x == seg.B.x;
587 if( horizontal( outline.
Segment( 0 ) )
588 && vertical( outline.
Segment( 1 ) )
589 && horizontal( outline.
Segment( 2 ) )
590 && vertical( outline.
Segment( 3 ) ) )
598 else if( vertical( outline.
Segment( 0 ) )
599 && horizontal( outline.
Segment( 1 ) )
600 && vertical( outline.
Segment( 2 ) )
601 && horizontal( outline.
Segment( 3 ) ) )
616 if(
m_shape == SHAPE_T::SEGMENT )
624 if( ( start.
x > end.
x )
625 || ( start.
x == end.
x && start.
y < end.
y ) )
638 rotate( aRotCentre, aAngle );
644 flip( aCentre, aFlipDirection );
658 case SHAPE_T::SEGMENT:
659 case SHAPE_T::RECTANGLE:
660 case SHAPE_T::CIRCLE:
661 case SHAPE_T::BEZIER:
688 PAD* parentPad =
nullptr;
694 for(
PAD*
pad : fp->Pads() )
696 if(
pad->IsEntered() )
707 if(
GetShape() == SHAPE_T::SEGMENT )
730 constexpr double HIDE = std::numeric_limits<double>::max();
731 constexpr double SHOW = 0.0;
775 aLayers[ aCount++ ] =
F_Mask;
777 aLayers[ aCount++ ] =
B_Mask;
795 aList.emplace_back(
_(
"Footprint" ), parent->GetReference() );
798 aList.emplace_back(
_(
"Type" ),
_(
"Drawing" ) );
801 aList.emplace_back(
_(
"Status" ),
_(
"Locked" ) );
823 return wxString::Format(
_(
"%s %s of %s on %s" ),
831 return wxString::Format(
_(
"%s %s on %s" ),
841 return wxString::Format(
_(
"%s of %s on %s" ),
848 return wxString::Format(
_(
"%s on %s" ),
859 return BITMAPS::show_mod_edge;
861 return BITMAPS::add_dashed_line;
911 if( aFirst->
Type() != aSecond->
Type() )
912 return aFirst->
Type() < aSecond->
Type();
931 int aClearance,
int aError,
ERROR_LOC aErrorLoc,
932 bool ignoreLineWidth )
const
945 return *
this == other;
991 double similarity = 1.0;
1037 if( layerEnum.
Choices().GetCount() == 0 )
1049 _HKI(
"Layer" ), shapeLayerSetter, shapeLayerGetter );
1059 return shape->GetShape() == SHAPE_T::POLY;
1065 _HKI(
"Position X" ), isPolygon );
1067 _HKI(
"Position Y" ), isPolygon );
1076 return shape->IsOnCopperLayer();
1084 auto isPadEditMode =
1085 [](
BOARD* aBoard ) ->
bool
1087 if( aBoard && aBoard->IsFootprintHolder() )
1089 for(
FOOTPRINT* fp : aBoard->Footprints() )
1091 for(
PAD*
pad : fp->Pads() )
1093 if(
pad->IsEntered() )
1102 auto showNumberBoxProperty =
1107 if( shape->GetShape() == SHAPE_T::RECTANGLE )
1108 return isPadEditMode( shape->GetBoard() );
1114 auto showSpokeTemplateProperty =
1119 if( shape->GetShape() == SHAPE_T::SEGMENT )
1120 return isPadEditMode( shape->GetBoard() );
1126 const wxString groupPadPrimitives =
_HKI(
"Pad Primitives" );
1131 groupPadPrimitives )
1138 groupPadPrimitives )
1142 const wxString groupTechLayers =
_HKI(
"Technical Layers" );
1144 auto isExternalCuLayer =
1147 if(
auto shape =
dynamic_cast<PCB_SHAPE*
>( aItem ) )
1157 .SetAvailableFunc( isExternalCuLayer );
1160 _HKI(
"Soldermask Margin Override" ),
1163 PROPERTY_DISPLAY::PT_SIZE ),
1165 .SetAvailableFunc( isExternalCuLayer );
ERROR_LOC
When approximating an arc or circle, should the error be placed on the outside or inside of the curve...
constexpr int ARC_HIGH_DEF
constexpr EDA_IU_SCALE pcbIUScale
BITMAPS
A list of all bitmap identifiers.
#define DEFAULT_LINE_WIDTH
BASE_SET & set(size_t pos)
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
wxString GetNetnameMsg() const
bool SetNetCode(int aNetCode, bool aNoAssert)
Set net using a net code.
wxString GetNetname() const
NETINFO_ITEM * m_netinfo
Store all information about the net that item belongs to.
Container for design settings for a BOARD object.
int m_SolderMaskExpansion
int GetLineThickness(PCB_LAYER_ID aLayer) const
Return the default graphic segment thickness from the layer class for the given layer.
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 SetLocked(bool aLocked)
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.
FOOTPRINT * GetParentFootprint() const
virtual bool IsLocked() const
virtual bool IsOnCopperLayer() const
wxString GetLayerName() const
Return the name of the PCB layer on which the item resides.
Information pertinent to a Pcbnew printed circuit board.
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
constexpr const Vec & GetPosition() const
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
constexpr const Vec GetEnd() const
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
Represent basic circle geometry with utility geometry functions.
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.
virtual bool IsType(const std::vector< KICAD_T > &aScanTypes) const
Check whether the item is one of the listed types.
virtual const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
EDA_ITEM * m_parent
Linked list: Link (parent struct)
const VECTOR2I & GetBezierC2() const
void SetBezierC2(const VECTOR2I &aPt)
void rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle)
FILL_T GetFillMode() const
void SetLineStyle(const LINE_STYLE aStyle)
virtual std::vector< SHAPE * > MakeEffectiveShapes(bool aEdgeOnly=false) const
Make a set of SHAPE objects representing the EDA_SHAPE.
SHAPE_POLY_SET & GetPolyShape()
void ShapeGetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList)
void SetFilled(bool aFlag)
bool operator==(const EDA_SHAPE &aOther) const
void SetPolyShape(const SHAPE_POLY_SET &aShape)
void RebuildBezierToSegmentsPointsList(int aMaxError)
Rebuild the m_bezierPoints vertex list that approximate the Bezier curve by a list of segments.
void flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection)
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
void SetStart(const VECTOR2I &aStart)
LINE_STYLE GetLineStyle() const
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
void SetShape(SHAPE_T aShape)
void SwapShape(EDA_SHAPE *aImage)
std::vector< VECTOR2I > GetRectCorners() const
void SetEnd(const VECTOR2I &aEnd)
void SetBezierC1(const VECTOR2I &aPt)
void SetArcGeometry(const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
Set the three controlling points for an arc.
wxString SHAPE_T_asString() const
double Similarity(const EDA_SHAPE &aOther) const
const VECTOR2I & GetBezierC1() const
virtual int GetWidth() const
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const
Convert the shape to a closed polygon.
void SetWidth(int aWidth)
VECTOR2I GetArcMid() const
ENUM_MAP & Map(T aValue, const wxString &aName)
static ENUM_MAP< T > & Instance()
ENUM_MAP & Undefined(T aValue)
Class that other classes need to inherit from, in order to be inspectable.
Contains methods for drawing PCB-specific items.
virtual PCB_RENDER_SETTINGS * GetSettings() override
Return a pointer to current settings that are going to be used when drawing items.
PCB specific render settings.
PCB_LAYER_ID GetPrimaryHighContrastLayer() const
Return the board layer which is in high-contrast mode.
bool GetHighContrast() const
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
bool IsLayerVisible(int aLayer) const
Return information about visibility of a particular layer.
PAINTER * GetPainter() const
Return the painter object used by the view for drawing #VIEW_ITEMS.
std::string AsStdString() const
LSET is a set of PCB_LAYER_IDs.
static LSET AllLayersMask()
void RunOnLayers(const std::function< void(PCB_LAYER_ID)> &aFunction) const
Execute a function on each layer of the LSET.
static wxString Name(PCB_LAYER_ID aLayerId)
Return the fixed name association with aLayerId.
int GetThermalSpokeWidth() const
virtual void Mirror(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Mirror this object relative to a given horizontal axis the layer is not changed.
void GetMsgPanelInfo(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) override
Populate aList of MSG_PANEL_ITEM objects with it's internal state for display purposes.
void swapData(BOARD_ITEM *aImage) override
bool IsConnected() const override
Returns information if the object is derived from BOARD_CONNECTED_ITEM.
std::optional< int > GetLocalSolderMaskMargin() const
VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
PCB_SHAPE(BOARD_ITEM *aParent, KICAD_T aItemType, SHAPE_T aShapeType)
int GetWidth() const override
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
bool HasSolderMask() const
std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT) const override
Make a set of SHAPE objects representing the PCB_SHAPE.
void SetHasSolderMask(bool aVal)
std::optional< int > m_solderMaskMargin
int GetSolderMaskExpansion() const
void NormalizeForCompare() override
Normalize coordinates to compare 2 similar PCB_SHAPES similat to Normalize(), but also normalize SEGM...
void ViewGetLayers(int aLayers[], int &aCount) const override
const VECTOR2I GetFocusPosition() const override
Allows items to return their visual center rather than their anchor.
virtual void SetLayerSet(const LSET &aLayers) override
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
virtual std::vector< VECTOR2I > GetCorners() const
Return 4 corners for a rectangle or rotated rectangle (stored as a poly).
bool IsProxyItem() const override
virtual LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
bool operator==(const PCB_SHAPE &aShape) const
void SetLayer(PCB_LAYER_ID aLayer) override
Set the layer this item is on.
wxString GetFriendlyName() const override
void TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const override
Convert the shape to a closed polygon.
void SetIsProxyItem(bool aIsProxy=true) override
void StyleFromSettings(const BOARD_DESIGN_SETTINGS &settings) override
void SetLocalSolderMaskMargin(std::optional< int > aMargin)
void Move(const VECTOR2I &aMoveVector) override
Move this object.
std::vector< VECTOR2I > GetConnectionPoints() const
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
double ViewGetLOD(int aLayer, KIGFX::VIEW *aView) const override
Return the level of detail (LOD) of the item.
bool IsOnLayer(PCB_LAYER_ID aLayer) const override
Test to see if this object is on the given layer.
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
void Scale(double aScale)
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
void Normalize() override
Perform any normalization required after a user rotate and/or flip.
bool IsType(const std::vector< KICAD_T > &aScanTypes) const override
Check whether the item is one of the listed types.
double Similarity(const BOARD_ITEM &aBoardItem) const override
Return a measure of how likely the other object is to represent the same object.
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
PROPERTY_BASE & SetAvailableFunc(std::function< bool(INSPECTABLE *)> aFunc)
Set a callback function to determine whether an object provides this property.
PROPERTY_BASE & SetIsHiddenFromRulesEditor(bool aHide=true)
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.
PROPERTY_BASE & ReplaceProperty(size_t aBase, const wxString &aName, PROPERTY_BASE *aNew, const wxString &aGroup=wxEmptyString)
Replace an existing property for a specific type.
void AddTypeCast(TYPE_CAST_BASE *aCast)
Register a type converter.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
SEG Segment(int aIndex) const
Return a copy of the aIndex-th segment in the line chain.
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
int SegmentCount() const
Return the number of segments in this line chain.
const std::vector< VECTOR2I > & CPoints() const
Represent a set of closed polygons.
POLYGON & Polygon(int aIndex)
Return the aIndex-th subpolygon in the set.
int AddPolygon(const POLYGON &apolygon)
Adds a polygon to the set.
std::vector< SHAPE_LINE_CHAIN > POLYGON
represents a single polygon outline with holes.
SHAPE_LINE_CHAIN & Outline(int aIndex)
Return the reference to aIndex-th outline in the set.
void Mirror(const VECTOR2I &aRef, FLIP_DIRECTION aFlipDirection)
Mirror the line points about y or x (or both)
int OutlineCount() const
Return the number of outlines in the set.
void SetWidth(int aWidth)
#define PCB_EDIT_FRAME_NAME
PCB_LAYER_ID FlipLayer(PCB_LAYER_ID aLayerId, int aCopperLayersCount)
bool IsSolderMaskLayer(int aLayer)
FLASHING
Enum used during connectivity building to ensure we do not query connectivity while building the data...
int GetNetnameLayer(int aLayer)
Returns a netname layer corresponding to the given layer.
bool IsCopperLayer(int aLayerId)
Tests whether a layer is a copper layer.
@ LAYER_LOCKED_ITEM_SHADOW
shadow layer for locked items
@ LAYER_FOOTPRINTS_FR
show footprints on front
@ LAYER_FOOTPRINTS_BK
show footprints on back
bool IsExternalCopperLayer(int aLayerId)
Tests 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)
constexpr void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
std::vector< TYPED_POINT2I > GetCircleKeyPoints(const CIRCLE &aCircle, bool aIncludeCenter)
Get key points of an CIRCLE.
VECTOR2I UnpackVector2(const types::Vector2 &aInput)
void PackVector2(types::Vector2 &aOutput, const VECTOR2I &aInput)
void PackPolyLine(kiapi::common::types::PolyLine &aOutput, const SHAPE_LINE_CHAIN &aSlc)
SHAPE_LINE_CHAIN UnpackPolyLine(const kiapi::common::types::PolyLine &aInput)
static struct PCB_SHAPE_DESC _PCB_SHAPE_DESC
static bool isCopper(const PNS::ITEM *aItem)
Utility functions for working with shapes.
constexpr int mmToIU(double mm) const
bool operator()(const BOARD_ITEM *aFirst, const BOARD_ITEM *aSecond) const
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
@ PCB_SHAPE_T
class PCB_SHAPE, a segment not on copper layers
@ PCB_LOCATE_BOARD_EDGE_T
@ PCB_SHAPE_LOCATE_CIRCLE_T
@ PCB_SHAPE_LOCATE_SEGMENT_T
@ PCB_SHAPE_LOCATE_RECT_T
@ PCB_SHAPE_LOCATE_BEZIER_T
@ PCB_SHAPE_LOCATE_POLY_T
VECTOR2< int32_t > VECTOR2I
#define ZONE_THERMAL_RELIEF_COPPER_WIDTH_MM