68 const VECTOR2I& aCenter, uint64_t aWidth,
118 if( !hole || hole->GetSeg().A == hole->GetSeg().B )
122 AddFeatureLine( hole->GetSeg().A, hole->GetSeg().B, hole->GetWidth() );
164 int stroke_width = aShape.
GetWidth();
171 int64_t diameter =
static_cast<int64_t
>( aShape.
GetRadius() ) * 2;
176 int64_t innerDiameter = diameter - stroke_width;
211 if( stroke_width > 0 )
215 for(
size_t ii = 0; ii < corners.size(); ++ii )
216 AddFeatureLine( corners[ii], corners[( ii + 1 ) % corners.size()], stroke_width );
224 int soldermask_min_thickness = 0;
229 soldermask_min_thickness = stroke_width;
231 int maxError =
m_board->GetDesignSettings().m_MaxError;
234 if( soldermask_min_thickness == 0 )
249 poly_set.
Deflate( soldermask_min_thickness / 2 - 1,
263 if( stroke_width != 0 )
265 for(
int jj = 0; jj < poly_set.
COutline( ii ).SegmentCount(); ++jj )
277 for(
int jj = 0; jj < poly_set.
COutline( ii ).SegmentCount(); ++jj )
300 for(
size_t i = 0; i < points.size() - 1; i++ )
312 int maxError =
m_board->GetDesignSettings().m_MaxError;
318 chain.SetClosed(
true );
330 if( stroke_width > 0 )
332 for(
int ii = 0; ii <
chain.SegmentCount(); ++ii )
334 const SEG& seg =
chain.CSegment( ii );
344 int maxError =
m_board->GetDesignSettings().m_MaxError;
351 for(
int ii = 0; ii <
chain.SegmentCount(); ++ii )
353 const SEG& seg =
chain.CSegment( ii );
361 wxLogTrace(
traceOdbppIo, wxT(
"Unknown shape when adding ODB++ layer feature" ) );
367 for(
int ii = 0; ii < aShape.
GetHatching().OutlineCount(); ++ii )
376 if( aPolygon.empty() || aPolygon[0].PointCount() < 3 || aPolygon[0].Area(
false ) == 0.0 )
392 const PAD& resolved = geometry.
Pad();
454 int shorterSide = std::min( plotSize.
x, plotSize.
y );
483 default: wxLogTrace(
traceOdbppIo, wxT(
"Unknown pad type" ) );
break;
493 auto aDiameter,
auto aDepth,
auto aAngle )
514 ODB_ATTR::post_machining_top_depth{ 0.0 }, ODB_ATTR::post_machining_top_angle{ 0.0 } );
517 ODB_ATTR::post_machining_bottom_depth{ 0.0 }, ODB_ATTR::post_machining_bottom_angle{ 0.0 } );
535 AddSystemAttribute( aFeature, ODB_ATTR::IPC_VIA_TYPE_TOP{ std::to_string( topType ) } );
538 AddSystemAttribute( aFeature, ODB_ATTR::IPC_VIA_TYPE_BOTTOM{ std::to_string( bottomType ) } );
553 wxLogTrace(
traceOdbppIo, wxT(
"Failed to get subnet track data" ) );
557 auto subnet = iter->second;
562 subnet->AddFeatureID( EDA_DATA::FEATURE_ID::TYPE::COPPER,
m_layerName,
index );
630 subnet->AddFeatureID( EDA_DATA::FEATURE_ID::TYPE::HOLE,
m_layerName,
index );
641 ODB_ATTR::GEOMETRY{
"VIA_RoundD" + std::to_string(
via->GetWidth( aLayer ) ) } );
653 subnet->AddFeatureID( EDA_DATA::FEATURE_ID::TYPE::COPPER,
m_layerName,
index );
657 feature, ODB_ATTR::GEOMETRY{
"VIA_RoundD"
658 + std::to_string(
via->GetWidth( aLayer ) ) } );
676 wxLogTrace(
traceOdbppIo, wxT(
"Failed to get subnet plane data" ) );
680 plane = iter->second;
706 text_item =
static_cast<EDA_TEXT*
>( tmp_text );
708 text_item =
static_cast<EDA_TEXT*
>( tmp_textbox );
710 if( !text_item || !text_item->
IsVisible() )
713 wxString shownText = text_item->
GetShownText( aContext );
715 if( shownText.empty() )
727 if( penWidth == 0 && attributes.
m_Bold )
731 penWidth = -penWidth;
735 std::list<VECTOR2I> pts;
737 auto tagString = [&](
ODB_FEATURE& aFeature, size_t )
756 shape.
SetEnd( pts.back() );
764 for(
auto it = pts.begin(); std::next( it ) != pts.end(); ++it )
767 auto it2 = std::next( it );
788 if( aPt1 == pts.back() )
789 pts.push_back( aPt2 );
790 else if( aPt2 == pts.front() )
791 pts.push_front( aPt1 );
792 else if( aPt1 == pts.front() )
793 pts.push_front( aPt2 );
794 else if( aPt2 == pts.back() )
795 pts.push_back( aPt1 );
799 pts.push_back( aPt1 );
800 pts.push_back( aPt2 );
805 pts.push_back( aPt1 );
806 pts.push_back( aPt2 );
812 if( aPoly.PointCount() < 3 )
827 aFont->Draw( &callback_gal, aTextString, aPos, aAttributes, aFontMetrics );
835 bool isKnockout =
false;
840 isKnockout =
text->IsKnockout();
861 int maxError =
m_board->GetDesignSettings().m_MaxError;
870 for(
int ii = 0; ii < finalpolyset.
OutlineCount(); ++ii )
884 std::vector<VECTOR2I> positions;
885 wxArrayString strings_list;
887 positions.reserve( strings_list.Count() );
891 for(
unsigned ii = 0; ii < strings_list.Count(); ii++ )
893 wxString& txt = strings_list.Item( ii );
894 plot_text( positions[ii], txt, attrs, font, fontMetrics );
899 plot_text( pos, shownText, attrs, font, fontMetrics );
921 for(
const std::shared_ptr<SHAPE>& shape : dimension->
GetShapes() )
923 switch( shape->Type() )
964 wxLogTrace(
traceOdbppIo, wxT(
"Failed to get subnet top data" ) );
980 iter->second->AddFeatureID( EDA_DATA::FEATURE_ID::TYPE::COPPER,
m_layerName,
999 if( !
pad->HasHole() )
1008 wxCHECK_RET(
m_drillSpan.has_value(),
"Drill layer has no span" );
1038 iter->second->AddFeatureID( EDA_DATA::FEATURE_ID::TYPE::HOLE,
m_layerName,
1076 switch( item->Type() )
1089 AddPad( aLayer,
static_cast<PAD*
>( item ) );
1110 wxLogTrace(
traceOdbppIo, wxT(
"Net tie shape did not produce one copper feature" ) );
1124 if(
static_cast<PCB_TEXTBOX*
>( item )->IsBorderEnabled() )
1140 int lineWidth = aStroke.
GetWidth();
1200 wxCHECK_MSG(
m_drillSpan.has_value(),
false,
"Backdrill layer has no span" );
1231 ost <<
"UNITS=" << format.
m_unitsStr << std::endl;
1232 ost <<
"#\n#Num Features\n#" << std::endl;
1238 ost <<
"#\n#Layer features\n#" << std::endl;
1242 feat->WriteFeatures( ost, format );
1250 ost <<
"UNITS=" << format.
m_unitsStr << std::endl;
1251 ost <<
"#\n#Num Features\n#" << std::endl;
1257 ost <<
"#\n#Feature symbol names\n#" << std::endl;
1261 ost <<
"$" << n <<
" " <<
name << std::endl;
1266 ost <<
"#\n#Layer features\n#" << std::endl;
1270 feat->WriteFeatures( ost, format );
1332 m_surfaces = std::make_unique<ODB_SURFACE_DATA>( aPolygon );
1357 for(
size_t ii = 1; ii < aPolygon.size(); ++ii )
1367 double area = aChain.
Area(
false );
1372 const std::vector<VECTOR2I>& pts = aChain.
CPoints();
1373 bool reverse = aHole ? area > 0 : area < 0;
1375 contour.reserve( pts.size() + 1 );
1379 contour.emplace_back( pts.front() );
1381 for(
auto it = pts.rbegin(); it != pts.rend(); ++it )
1382 contour.emplace_back( *it );
1386 contour.emplace_back( pts.back() );
1389 contour.emplace_back( pt );
1400 if( contour.empty() )
1403 ost <<
"OB " <<
ODB::AddXY( aFormat, contour.back().m_end ).first <<
" "
1404 <<
ODB::AddXY( aFormat, contour.back().m_end ).second <<
" ";
1412 for(
const auto& line : contour )
1415 ost <<
"OS " <<
ODB::AddXY( aFormat, line.m_end ).first <<
" "
1416 <<
ODB::AddXY( aFormat, line.m_end ).second << std::endl;
1418 ost <<
"OC " <<
ODB::AddXY( aFormat, line.m_end ).first <<
" "
1419 <<
ODB::AddXY( aFormat, line.m_end ).second <<
" " <<
ODB::AddXY( aFormat, line.m_center ).first
1420 <<
" " <<
ODB::AddXY( aFormat, line.m_center ).second <<
" "
1423 ost <<
"OE" << std::endl;
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
void WriteAttributes(std::ostream &ost, const std::string &prefix="") const
void AddUserDefAttribute(Tr &r, Ta v)
void AddSystemAttribute(Tr &r, Ta v)
void WriteAttributes(std::ostream &ost) const
A base class for any item which can be embedded within the BOARD container class, and therefore insta...
virtual bool IsKnockout() const
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
FOOTPRINT * GetParentFootprint() const
const KIFONT::METRICS & GetFontMetrics() const
void AddFeatureID(FEATURE_ID::TYPE type, const wxString &layer, size_t feature_id)
KICAD_T Type() const
Returns the type of object.
int GetEllipseMinorRadius() const
const VECTOR2I & GetEllipseCenter() const
const SHAPE_POLY_SET & GetHatching() const
EDA_ANGLE GetEllipseEndAngle() const
int GetEllipseMajorRadius() const
int GetRectangleWidth() const
SHAPE_POLY_SET & GetPolyShape()
EDA_ANGLE GetEllipseRotation() const
bool IsHatchedFill() const
virtual void SetFilled(bool aFlag)
const VECTOR2I & GetEnd() const
Return the ending point of the graphic.
const VECTOR2I & GetStart() const
Return the starting point of the graphic.
std::vector< VECTOR2I > GetRectCorners() const
EDA_ANGLE GetEllipseStartAngle() const
const std::vector< VECTOR2I > & GetBezierPoints() const
int GetRectangleHeight() const
bool IsClockwiseArc() const
A mix-in class (via multiple inheritance) that handles texts such as labels, parts,...
virtual VECTOR2I GetTextPos() const
bool IsMultilineAllowed() const
virtual bool IsVisible() const
virtual EDA_ANGLE GetDrawRotation() const
virtual wxString GetShownText(RESOLUTION_CONTEXT aContext, int aDepth=0) const
Return the string actually shown after processing of the base text.
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...
void AddPadShape(const PAD &aPad, PCB_LAYER_ID aLayer)
uint32_t AddRectSymbol(const wxString &aWidth, const wxString &aHeight)
void AddRoutSlot(const PAD &aPad, int aChain)
void AddPad(PCB_LAYER_ID aLayer, PAD *pad)
size_t FeatureCount() const
void addPostMachiningAttributes(ODB_FEATURE &aFeature, const DRILL_OPERATION &aOperation)
void AddVia(const PCB_VIA *aVia, PCB_LAYER_ID aLayer)
void AddDimension(PCB_LAYER_ID aLayer, PCB_DIMENSION_BASE *dimension)
void tagRoutFeatures(size_t aFirst, int aChain, bool aPlated)
PCB_IO_ODBPP * GetODBPlugin()
void AddShape(PCB_LAYER_ID aLayer, PCB_SHAPE *shape)
void AddFeatureLine(const VECTOR2I &aStart, const VECTOR2I &aEnd, uint64_t aWidth)
void AddFeatureArc(const VECTOR2I &aStart, const VECTOR2I &aEnd, const VECTOR2I &aCenter, uint64_t aWidth, ODB_DIRECTION aDirection)
std::map< uint32_t, wxString > m_allSymMap
void GenerateFeatureFile(std::ostream &ost) const
void addViaDrillAttributes(ODB_FEATURE &aFeature, const PCB_VIA *aVia)
void AddTrack(PCB_LAYER_ID aLayer, PCB_TRACK *track)
void AddZone(PCB_LAYER_ID aLayer, ZONE *zone)
bool AddViaDrillHole(const PCB_VIA *aVia, PCB_LAYER_ID aLayer)
void AddText(PCB_LAYER_ID aLayer, BOARD_ITEM *item, RESOLUTION_CONTEXT aContext)
std::optional< DRILL_SPAN > m_drillSpan
std::optional< ODB_AUX_LAYER_TYPE > m_auxType
void InitFeatureList(PCB_LAYER_ID aLayer, const std::vector< BOARD_ITEM * > &aItems)
uint32_t AddRoundRectSymbol(const wxString &aWidth, const wxString &aHeight, const wxString &aRadius)
void AddPadCircle(const VECTOR2I &aCenter, uint64_t aDiameter)
void forEachNewFeature(size_t aFirst, F &&aFunc)
void AddRoutContour(const SHAPE_LINE_CHAIN &aContour, int aChain, bool aPlated)
bool AddFeatureSurface(const SHAPE_POLY_SET::POLYGON &aPolygon, FILL_T aFillType=FILL_T::FILLED_SHAPE)
uint32_t AddOvalSymbol(const wxString &aWidth, const wxString &aHeight)
void GenerateProfileFeatures(std::ostream &ost) const
std::list< std::unique_ptr< ODB_FEATURE > > m_featuresList
void AddFeature(Args &&... args)
uint32_t AddCircleSymbol(const wxString &aDiameter)
uint32_t AddChamferRectSymbol(const wxString &aWidth, const wxString &aHeight, const wxString &aRadius, int aPositions)
uint32_t AddRoundDonutSymbol(const wxString &aOuterDim, const wxString &aInnerDim)
bool AddContour(const SHAPE_POLY_SET &aPolySet, int aOutline=0, FILL_T aFillType=FILL_T::FILLED_SHAPE)
FONT is an abstract base class for both outline and stroke fonts.
LSET is a set of PCB_LAYER_IDs.
bool Contains(PCB_LAYER_ID aLayer) const
See if the layer set contains a PCB layer.
std::pair< wxString, wxString > m_end
std::pair< wxString, wxString > m_start
virtual void WriteRecordContent(std::ostream &ost, const ODB_FORMAT &aFormat) override
ODB_DIRECTION m_direction
std::pair< wxString, wxString > m_center
virtual FEATURE_TYPE GetFeatureType()=0
virtual void WriteRecordContent(std::ostream &ost, const ODB_FORMAT &aFormat)=0
virtual void WriteFeatures(std::ostream &ost, const ODB_FORMAT &aFormat)
ODB_FEATURE(uint32_t aIndex)
virtual void WriteRecordContent(std::ostream &ost, const ODB_FORMAT &aFormat) override
std::pair< wxString, wxString > m_start
std::pair< wxString, wxString > m_end
virtual void WriteRecordContent(std::ostream &ost, const ODB_FORMAT &aFormat) override
std::pair< wxString, wxString > m_center
std::vector< std::vector< SURFACE_LINE > > m_polygons
void AddContour(const SHAPE_LINE_CHAIN &aChain, bool aHole)
void WriteData(std::ostream &ost, const ODB_FORMAT &aFormat) const
ODB_SURFACE_DATA(const SHAPE_POLY_SET::POLYGON &aPolygon)
void AddPolygonHoles(const SHAPE_POLY_SET::POLYGON &aPolygon)
std::unique_ptr< ODB_SURFACE_DATA > m_surfaces
virtual void WriteRecordContent(std::ostream &ost, const ODB_FORMAT &aFormat) override
ODB_SURFACE(uint32_t aIndex, const SHAPE_POLY_SET::POLYGON &aPolygon, FILL_T aFillType=FILL_T::FILLED_SHAPE)
@ NORMAL
Shape is the same on all layers.
static constexpr PCB_LAYER_ID ALL_LAYERS
! The layer identifier to use for the single defintion on normal padstacks
A pad's resolved artwork on one fabrication layer.
SHAPE_POLY_SET Polygon() const
int GetRoundRectCornerRadius(PCB_LAYER_ID aLayer) const
std::shared_ptr< SHAPE_SEGMENT > GetEffectiveHoleShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, DRC_CONSTRAINT_T aUsage=NULL_CONSTRAINT) const override
Return a SHAPE_SEGMENT object representing the pad's hole.
PAD_ATTRIB GetAttribute() const
PAD_SHAPE GetShape(PCB_LAYER_ID aLayer) const
VECTOR2I GetSize(PCB_LAYER_ID aLayer) const
EDA_ANGLE GetOrientation() const
Return the rotation angle of the pad.
int GetChamferPositions(PCB_LAYER_ID aLayer) const
double GetChamferRectRatio(PCB_LAYER_ID aLayer) const
VECTOR2I ShapePos(PCB_LAYER_ID aLayer) const
bool IsDegenerated(int aThreshold=5) const
const VECTOR2I & GetMid() 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 barcode (text + symbol shapes) to polygonal geometry suitable for filling/collision tests...
int GetLineThickness() const
const std::vector< std::shared_ptr< SHAPE > > & GetShapes() const
std::map< std::pair< PCB_LAYER_ID, ZONE * >, EDA_DATA::SUB_NET_PLANE * > & GetPlaneSubnetMap()
std::map< PCB_TRACK *, EDA_DATA::SUB_NET * > & GetViaTraceSubnetMap()
void RecordNetTieFeature(const BOARD_ITEM *aItem, PCB_LAYER_ID aLayer, const wxString &aLayerName, size_t aIndex)
std::map< const PAD *, EDA_DATA::SUB_NET_TOEPRINT * > & GetPadSubnetMap()
VECTOR2I GetCenter() const override
This defaults to the center of the bounding box if not overridden.
void SetWidth(int aWidth) override
int GetWidth() const override
void SetShape(SHAPE_T aShape) override
void SetEnd(const VECTOR2I &aEnd) override
void SetLayer(PCB_LAYER_ID aLayer) override
Set the layer this item is on.
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 SetStart(const VECTOR2I &aStart) override
void SetStroke(const STROKE_PARAMS &aStroke) override
void SetArcGeometry(const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd) override
Set the three controlling points for an arc.
void TransformTextToPolySet(SHAPE_POLY_SET &aBuffer, int aClearance, int aMaxError, ERROR_LOC aErrorLoc) const
Convert the text to a polygonSet describing the actual character strokes (one per segment).
const VECTOR2I & GetStart() const
const VECTOR2I & GetEnd() const
PCB_LAYER_ID BottomLayer() const
bool FlashLayer(int aLayer) const
Check to see whether the via should have a pad on the specific layer.
const PADSTACK & Padstack() const
PCB_LAYER_ID TopLayer() const
const VECTOR2I & GetP1() const
const VECTOR2I & GetP0() const
const VECTOR2I & GetCenter() const
SHAPE_LINE_CHAIN ConvertToPolyline(int aMaxError) const
Build a polyline approximation of the ellipse or arc.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
const SHAPE_ARC & Arc(size_t aArc) const
int PointCount() const
Return the number of points (vertices) in this line chain.
ssize_t ArcIndex(size_t aSegment) const
Return the arc index for the given segment index.
int NextShape(int aPointIndex) const
Return the vertex index of the next shape in the chain, or -1 if aPointIndex is the last shape.
double Area(bool aAbsolute=true) const
Return the area of this chain.
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
const SEG CSegment(int aIndex) const
Return a constant copy of the aIndex segment in the line chain.
bool IsArcStart(size_t aIndex) const
const std::vector< VECTOR2I > & CPoints() const
Represent a set of closed polygons.
void BooleanAdd(const SHAPE_POLY_SET &b)
Perform boolean polyset union.
int AddOutline(const SHAPE_LINE_CHAIN &aOutline)
Adds a new outline to the set and returns its index.
POLYGON & Polygon(int aIndex)
Return the aIndex-th subpolygon in the set.
void Simplify()
Simplify the polyset (merges overlapping polys, eliminates degeneracy/self-intersections)
std::vector< SHAPE_LINE_CHAIN > POLYGON
represents a single polygon outline with holes.
void Deflate(int aAmount, CORNER_STRATEGY aCornerStrategy, int aMaxError)
int OutlineCount() const
Return the number of outlines in the set.
void Fracture(bool aSimplify=true)
Convert a set of polygons with holes to a single outline with "slits"/"fractures" connecting the oute...
SHAPE_POLY_SET CloneDropTriangulation() const
const SHAPE_LINE_CHAIN & COutline(int aIndex) const
const SEG & GetSeg() const
Simple container to manage line stroke parameters.
Handle a list of polygons defining a copper zone.
std::shared_ptr< SHAPE_POLY_SET > GetFilledPolysList(PCB_LAYER_ID aLayer) const
bool IsTeardropArea() const
@ CHAMFER_ALL_CORNERS
All angles are chamfered.
static constexpr EDA_ANGLE ANGLE_360
@ FILLED_SHAPE
Fill with object color.
@ RECTANGLE
Use RECTANGLE instead of RECT to avoid collision in a Windows header.
int FabTrackWidth(const PCB_TRACK &aTrack, PCB_LAYER_ID aLayer)
Use only for traces and arcs; vias require a layer-specific width.
bool FabMaskShape(const PCB_SHAPE &aShape, PCB_LAYER_ID aLayer, PCB_SHAPE &aResult)
Build an expanded mask copy of an exposed copper shape when needed.
PAD_LAYER_GEOMETRY ResolvePadLayer(const PAD &aPad, PCB_LAYER_ID aLayer, int aMaxError)
Artwork on one layer as plotted by PlotStandardLayer; keep the plotter independent as the parity orac...
FAB_PAD_ROLE GetFabPadRole(const PAD &aPad)
Explicit fabrication properties take precedence over the unnumbered NPTH fallback.
int GetPenSizeForBold(int aTextSize)
const wxChar *const traceOdbppIo
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
PCB_LAYER_ID
A quick note on layer IDs:
std::pair< wxString, wxString > AddXY(const ODB_FORMAT &aFormat, const VECTOR2I &aVec)
int IpcViaType(const DRILL_OPERATION &aOperation, bool aTop)
bool ViaInPad(const PCB_VIA &aVia)
VECTOR2I GetShapePosition(const PCB_SHAPE &aShape)
wxString SymDouble2String(const ODB_FORMAT &aFormat, double aVal)
wxString Double2String(const ODB_FORMAT &aFormat, double aVal)
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
@ PTH
Plated through hole pad.
BARCODE class definition.
std::vector< FAB_LAYER_COLOR > dummy
void wxStringSplit(const wxString &aText, wxArrayString &aStrings, wxChar aSplitter)
Split aString to a string list separated at aSplitter.
One machining action, which is also one NC hit and one tool assignment.
DRILL_POST_MACHINING m_BackPostMachining
VECTOR2I m_SizeXY
Source axes, never normalized to (width, length).
DRILL_POST_MACHINING m_FrontPostMachining
PAD_DRILL_POST_MACHINING_MODE m_Mode
const SHAPE_LINE_CHAIN chain
wxLogTrace helper definitions.
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_ZONE_T
class ZONE, a copper pour area
@ PCB_TEXT_T
class PCB_TEXT, text on a layer
@ PCB_FIELD_T
class PCB_FIELD, text associated with a footprint property
@ 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_PAD_T
class PAD, a pad in a footprint
@ PCB_ARC_T
class PCB_ARC, an arc track segment on a copper layer
@ PCB_TABLE_T
class PCB_TABLE, table of PCB_TABLECELLs
@ PCB_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
@ PCB_DIM_RADIAL_T
class PCB_DIM_RADIAL, a radius or diameter dimension
@ PCB_DRILL_CHART_T
class PCB_DRILL_CHART, a live drill chart derived from PCB_TABLE
VECTOR2< int32_t > VECTOR2I