47#include <google/protobuf/any.pb.h>
51#include <api/board/board_types.pb.h>
145 case VIATYPE::BLIND_BURIED: formatStr =
_(
"Blind/Buried Via %s on %s" );
break;
146 case VIATYPE::MICROVIA: formatStr =
_(
"Micro Via %s on %s" );
break;
147 default: formatStr =
_(
"Via %s on %s" );
break;
167 return *
this == other;
187 double similarity = 1.0;
212 return *
this == other;
233 double similarity = 1.0;
261 return *
this == other;
283 double similarity = 1.0;
321 kiapi::board::types::Track track;
324 track.mutable_start()->set_x_nm(
GetStart().x );
325 track.mutable_start()->set_y_nm(
GetStart().y );
326 track.mutable_end()->set_x_nm(
GetEnd().x );
327 track.mutable_end()->set_y_nm(
GetEnd().y );
328 track.mutable_width()->set_value_nm(
GetWidth() );
329 track.set_layer( ToProtoEnum<PCB_LAYER_ID, kiapi::board::types::BoardLayer>(
GetLayer() ) );
330 track.set_locked(
IsLocked() ? kiapi::common::types::LockedState::LS_LOCKED
331 : kiapi::common::types::LockedState::LS_UNLOCKED );
332 track.mutable_net()->mutable_code()->set_value(
GetNetCode() );
333 track.mutable_net()->set_name(
GetNetname() );
335 aContainer.PackFrom( track );
341 kiapi::board::types::Track track;
343 if( !aContainer.UnpackTo( &track ) )
349 SetWidth( track.width().value_nm() );
350 SetLayer( FromProtoEnum<PCB_LAYER_ID, kiapi::board::types::BoardLayer>( track.layer() ) );
352 SetLocked( track.locked() == kiapi::common::types::LockedState::LS_LOCKED );
360 kiapi::board::types::Arc arc;
363 arc.mutable_start()->set_x_nm(
GetStart().x );
364 arc.mutable_start()->set_y_nm(
GetStart().y );
365 arc.mutable_mid()->set_x_nm(
GetMid().x );
366 arc.mutable_mid()->set_y_nm(
GetMid().y );
367 arc.mutable_end()->set_x_nm(
GetEnd().x );
368 arc.mutable_end()->set_y_nm(
GetEnd().y );
369 arc.mutable_width()->set_value_nm(
GetWidth() );
370 arc.set_layer( ToProtoEnum<PCB_LAYER_ID, kiapi::board::types::BoardLayer>(
GetLayer() ) );
371 arc.set_locked(
IsLocked() ? kiapi::common::types::LockedState::LS_LOCKED
372 : kiapi::common::types::LockedState::LS_UNLOCKED );
373 arc.mutable_net()->mutable_code()->set_value(
GetNetCode() );
376 aContainer.PackFrom( arc );
382 kiapi::board::types::Arc arc;
384 if( !aContainer.UnpackTo( &arc ) )
392 SetLayer( FromProtoEnum<PCB_LAYER_ID, kiapi::board::types::BoardLayer>( arc.layer() ) );
394 SetLocked( arc.locked() == kiapi::common::types::LockedState::LS_LOCKED );
402 kiapi::board::types::Via
via;
410 google::protobuf::Any padStackWrapper;
412 padStackWrapper.UnpackTo(
via.mutable_pad_stack() );
416 via.set_type( ToProtoEnum<VIATYPE, kiapi::board::types::ViaType>(
GetViaType() ) );
417 via.set_locked(
IsLocked() ? kiapi::common::types::LockedState::LS_LOCKED
418 : kiapi::common::types::LockedState::LS_UNLOCKED );
419 via.mutable_net()->mutable_code()->set_value(
GetNetCode() );
422 aContainer.PackFrom(
via );
428 kiapi::board::types::Via
via;
430 if( !aContainer.UnpackTo( &
via ) )
436 SetDrill(
via.pad_stack().drill_diameter().x_nm() );
438 google::protobuf::Any padStackWrapper;
439 padStackWrapper.PackFrom(
via.pad_stack() );
448 SetLocked(
via.locked() == kiapi::common::types::LockedState::LS_LOCKED );
474 *aSource = constraint.
GetName();
476 return constraint.
Value();
492 *aSource = constraint.
GetName();
494 return constraint.
Value();
510 *aSource = constraint.
GetName();
512 return constraint.
Value();
521 *aSource =
_(
"removed annular ring" );
538 *aSource = constraint.
GetName();
581 if( min_dist >= dist )
586 if( min_dist >= dist )
597 int radius = (
m_Width + 1 ) / 2;
598 int ymax, xmax, ymin, xmin;
611 BOX2I bbox = arc->BBox();
635 VECTOR2L( (int64_t) xmax - xmin + 1, (int64_t) ymax - ymin + 1 ) );
662 if( aMirrorAroundXAxis )
677 if( aMirrorAroundXAxis )
734 return start_end.
Cross( start_mid ) < 0;
764 const std::vector<KICAD_T>& aScanTypes )
766 for(
KICAD_T scanType : aScanTypes )
768 if( scanType ==
Type() )
770 if( INSPECT_RESULT::QUIT == inspector(
this, testData ) )
771 return INSPECT_RESULT::QUIT;
775 return INSPECT_RESULT::CONTINUE;
801 TENTING_MODE::TENTED : TENTING_MODE::NOT_TENTED;
804 return TENTING_MODE::FROM_RULES;
824 TENTING_MODE::TENTED : TENTING_MODE::NOT_TENTED;
827 return TENTING_MODE::FROM_RULES;
834 "Invalid layer passed to IsTented" );
846 return front ? board->GetDesignSettings().m_TentViasFront
847 : board->GetDesignSettings().m_TentViasBack;
857 return board->GetDesignSettings().m_SolderMaskExpansion;
870 if( aLayer >=
Padstack().Drill().start && aLayer <=
Padstack().Drill().end )
875 else if( aLayer ==
B_Mask )
973 if( b_layer < t_layer )
974 std::swap( b_layer, t_layer );
978 *top_layer = t_layer;
981 *bottom_layer = b_layer;
1012 for(
size_t ii = 0; ii < aLayers.
size(); ++ii )
1014 if( aLayers.
test( ii ) )
1044 switch(
Padstack().UnconnectedLayerMode() )
1051 if( aLayer ==
Padstack().Drill().start || aLayer ==
Padstack().Drill().end )
1085 bool connected =
false;
1118 constexpr double HIDE = std::numeric_limits<double>::max();
1144 if(
VECTOR2I( end - start ).SquaredEuclideanNorm() < nameSize * nameSize )
1151 if(
VECTOR2I( end - start ).SquaredEuclideanNorm() == 0 )
1182 bbox.
Inflate( 2 * board->GetDesignSettings().GetBiggestClearanceValue() );
1213 aLayers[ aCount++ ] =
F_Mask;
1216 aLayers[ aCount++ ] =
B_Mask;
1222 constexpr double HIDE = (double)std::numeric_limits<double>::max();
1234 visible = board->GetVisibleLayers() & board->GetEnabledLayers();
1244 highContrastLayer =
F_Cu;
1246 highContrastLayer =
B_Cu;
1253 if( highContrastLayer <
Padstack().Drill().start
1254 || highContrastLayer >
Padstack().Drill().end )
1312 default:
return _(
"Track" );
1332 double radius =
static_cast<PCB_ARC*
>( this )->GetRadius();
1345 std::tie( count, trackLen, lenPadToDie ) = board->
GetTrackLength( *
this );
1349 if( lenPadToDie != 0 )
1352 aList.emplace_back(
_(
"Pad To Die Length" ), msg );
1355 aList.emplace_back(
_(
"Full Length" ), msg );
1362 aList.emplace_back( wxString::Format(
_(
"Min Clearance: %s" ),
1364 wxString::Format(
_(
"(from %s)" ), source ) );
1369 if( !msg.IsEmpty() )
1371 aList.emplace_back( wxString::Format(
_(
"Width Constraints: %s" ), msg ),
1372 wxString::Format(
_(
"(from %s)" ), source ) );
1383 case VIATYPE::MICROVIA: msg =
_(
"Micro Via" );
break;
1384 case VIATYPE::BLIND_BURIED: msg =
_(
"Blind/Buried Via" );
break;
1385 case VIATYPE::THROUGH: msg =
_(
"Through Via" );
break;
1386 default: msg =
_(
"Via" );
break;
1389 aList.emplace_back(
_(
"Type" ), msg );
1400 aList.emplace_back( wxString::Format(
_(
"Min Clearance: %s" ),
1402 wxString::Format(
_(
"(from %s)" ), source ) );
1406 aList.emplace_back( wxString::Format(
_(
"Min Annular Width: %s" ),
1408 wxString::Format(
_(
"(from %s)" ), source ) );
1413 std::vector<MSG_PANEL_ITEM>& aList )
const
1417 aList.emplace_back(
_(
"Resolved Netclass" ),
1422 aList.emplace_back(
_(
"NetCode" ), wxString::Format( wxT(
"%d" ),
GetNetCode() ) );
1424 aList.emplace_back( wxT(
"Flags" ), wxString::Format( wxT(
"0x%08X" ),
m_flags ) );
1426 aList.emplace_back( wxT(
"Start pos" ), wxString::Format( wxT(
"%d %d" ),
1429 aList.emplace_back( wxT(
"End pos" ), wxString::Format( wxT(
"%d %d" ),
1435 aList.emplace_back(
_(
"Status" ),
_(
"Locked" ) );
1459 double max_dist = aAccuracy + (
m_Width / 2.0 );
1468 VECTOR2L relpos = aPosition - center;
1472 if(
std::abs( dist - radius ) > max_dist )
1480 arc_hittest -= arc_angle_start;
1486 return arc_hittest >=
ANGLE_360 + arc_angle;
1488 return arc_hittest <= arc_angle;
1494 int max_dist = aAccuracy + (
GetWidth() / 2 );
1498 double dist = (double) rel_pos.
x * rel_pos.x + (
double) rel_pos.y * rel_pos.y;
1499 return dist <= (double) max_dist * max_dist;
1505 BOX2I arect = aRect;
1517 BOX2I arect = aRect;
1535 BOX2I arect = aRect;
1550 return wxString::Format(
Type() ==
PCB_ARC_T ?
_(
"Track (arc) %s on %s, length %s" )
1551 :
_(
"Track %s on %s, length %s" ),
1560 return BITMAPS::add_tracks;
1574 std::swap( *
this, *
static_cast<PCB_ARC*
>( aImage ) );
1595 return center.Distance(
m_Start );
1635 && (
GetMid() -
GetEnd() ).EuclideanNorm() < aThreshold;
1665 if( aFlash == FLASHING::ALWAYS_FLASHED
1666 || ( aFlash == FLASHING::DEFAULT && FlashLayer( aLayer ) ) )
1672 return std::make_shared<SHAPE_CIRCLE>(
m_Start, GetDrillValue() / 2 );
1684 int aClearance,
int aError,
ERROR_LOC aErrorLoc,
1685 bool ignoreLineWidth )
const
1687 wxASSERT_MSG( !ignoreLineWidth, wxT(
"IgnoreLineWidth has no meaning for tracks." ) );
1694 int radius = (
static_cast<const PCB_VIA*
>( this )->
GetWidth() / 2 ) + aClearance;
1702 int width =
m_Width + ( 2 * aClearance );
1705 aError, aErrorLoc );
1711 int width =
m_Width + ( 2 * aClearance );
1725 .Undefined( VIATYPE::NOT_DEFINED )
1726 .Map( VIATYPE::THROUGH,
_HKI(
"Through" ) )
1727 .Map( VIATYPE::BLIND_BURIED,
_HKI(
"Blind/buried" ) )
1728 .Map( VIATYPE::MICROVIA,
_HKI(
"Micro" ) );
1731 .Undefined( TENTING_MODE::FROM_RULES )
1732 .Map( TENTING_MODE::FROM_RULES,
_HKI(
"From design rules" ) )
1733 .Map( TENTING_MODE::TENTED,
_HKI(
"Tented" ) )
1734 .Map( TENTING_MODE::NOT_TENTED,
_HKI(
"Not tented" ) );
1738 if( layerEnum.
Choices().GetCount() == 0 )
1778 const wxString groupVia =
_HKI(
"Via Properties" );
constexpr EDA_IU_SCALE pcbIUScale
BITMAPS
A list of all bitmap identifiers.
BOX2I BOX2ISafe(const BOX2D &aInput)
BASE_SET & set(size_t pos=std::numeric_limits< size_t >::max(), bool value=true)
bool test(size_t pos) const
BASE_SET & reset(size_t pos=std::numeric_limits< size_t >::max())
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
wxString GetNetnameMsg() const
virtual NETCLASS * GetEffectiveNetClass() const
Return the NETCLASS for this item.
bool SetNetCode(int aNetCode, bool aNoAssert)
Set net using a net code.
wxString GetNetname() const
const wxString & GetDisplayNetname() const
virtual int GetOwnClearance(PCB_LAYER_ID aLayer, wxString *aSource=nullptr) const
Return an item's "own" clearance in internal units.
Container for design settings for a BOARD object.
std::shared_ptr< DRC_ENGINE > m_DRCEngine
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.
virtual bool IsLocked() const
virtual wxString layerMaskDescribe() const
Return a string (to be shown to the user) describing a layer mask.
wxString GetLayerName() const
Return the name of the PCB layer on which the item resides.
Information pertinent to a Pcbnew printed circuit board.
PCB_LAYER_ID FlipLayer(PCB_LAYER_ID aLayer) const
const wxString GetLayerName(PCB_LAYER_ID aLayer) const
Return the name of a aLayer.
std::tuple< int, double, double > GetTrackLength(const PCB_TRACK &aTrack) const
Return data on the length and number of track segments connected to a given track.
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
std::shared_ptr< CONNECTIVITY_DATA > GetConnectivity() const
Return a list of missing connections between components/tracks.
bool Intersects(const BOX2< Vec > &aRect) const
coord_type GetTop() const
bool IntersectsCircle(const Vec &aCenter, const int aRadius) const
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
coord_type GetLeft() const
coord_type GetBottom() const
BOX2< Vec > & Merge(const BOX2< Vec > &aRect)
Modify the position and size of the rectangle in order to contain aRect.
MINOPTMAX< int > & Value()
The base class for create windows for drawing purpose.
A base class for most all the KiCad significant classes used in schematics and boards.
EDA_ITEM & operator=(const EDA_ITEM &aItem)
Assign the members of aItem to another object.
KICAD_T Type() const
Returns the type of object.
ENUM_MAP & Map(T aValue, const wxString &aName)
static ENUM_MAP< T > & Instance()
ENUM_MAP & Undefined(T aValue)
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...
BOX2D GetViewport() const
Return the current viewport visible area rectangle.
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 LSET AllCuMask(int aCuLayerCount=MAX_CU_LAYERS)
Return a mask holding the requested number of Cu PCB_LAYER_IDs.
static LSET PhysicalLayersMask()
Return a mask holding all layers which are physically realized.
static const wxChar * Name(PCB_LAYER_ID aLayerId)
Return the fixed name association with aLayerId.
static LSET FrontTechMask()
Return a mask holding all technical layers (no CU layer) on front side.
static LSET BackTechMask()
Return a mask holding all technical layers (no CU layer) on back side.
A collection of nets and the parameters used to route or test these nets.
static const int UNCONNECTED
Constant that holds the "unconnected net" number (typically 0) all items "connected" to this net are ...
A PADSTACK defines the characteristics of a single or multi-layer pad, in the IPC sense of the word.
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
MASK_LAYER_PROPS & FrontOuterLayers()
void SetUnconnectedLayerMode(UNCONNECTED_LAYER_MODE aMode)
const LSET & LayerSet() const
VECTOR2I & Size(PCB_LAYER_ID aLayer=F_Cu)
@ REMOVE_EXCEPT_START_AND_END
MASK_LAYER_PROPS & BackOuterLayers()
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
void SetShape(PAD_SHAPE aShape, PCB_LAYER_ID aLayer=F_Cu)
virtual VECTOR2I GetPosition() const override
bool IsDegenerated(int aThreshold=5) const
virtual void swapData(BOARD_ITEM *aImage) override
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.
EDA_ANGLE GetArcAngleStart() const
virtual bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
EDA_ANGLE GetArcAngleEnd() const
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
void SetMid(const VECTOR2I &aMid)
EDA_ANGLE GetAngle() const
const VECTOR2I & GetMid() const
PCB_ARC(BOARD_ITEM *aParent)
void Flip(const VECTOR2I &aCentre, bool aFlipLeftRight) override
Flip this object, i.e.
double Similarity(const BOARD_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
VECTOR2I m_Mid
Arc mid point, halfway between start and end.
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
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.
bool operator==(const PCB_ARC &aOther) const
void Mirror(const VECTOR2I &aCentre, bool aMirrorAroundXAxis) override
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
virtual void ViewGetLayers(int aLayers[], int &aCount) const override
Return the all the layers within the VIEW the object is painted on.
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
double ViewGetLOD(int aLayer, KIGFX::VIEW *aView) const override
Return the level of detail (LOD) of the item.
virtual double GetLength() const
Get the length of the track using the hypotenuse calculation.
virtual void swapData(BOARD_ITEM *aImage) override
void SetEnd(const VECTOR2I &aEnd)
void SetStart(const VECTOR2I &aStart)
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
INSPECT_RESULT Visit(INSPECTOR inspector, void *testData, const std::vector< KICAD_T > &aScanTypes) override
May be re-implemented for each derived class in order to handle all the types given by its member dat...
bool ApproxCollinear(const PCB_TRACK &aTrack)
VECTOR2I m_End
Line end 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.
virtual 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 TransformShapeToPolygon(SHAPE_POLY_SET &aBuffer, PCB_LAYER_ID aLayer, int aClearance, int aError, ERROR_LOC aErrorLoc, bool ignoreLineWidth=false) const override
Convert the track shape to a closed polygon.
const VECTOR2I & GetStart() const
virtual bool operator==(const BOARD_ITEM &aOther) const override
VECTOR2I m_Start
Line start point.
wxString GetFriendlyName() const override
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
void Flip(const VECTOR2I &aCentre, bool aFlipLeftRight) override
Flip this object, i.e.
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
virtual double Similarity(const BOARD_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
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.
const VECTOR2I & GetEnd() const
PCB_TRACK(BOARD_ITEM *aParent, KICAD_T idtype=PCB_TRACE_T)
int m_Width
Thickness of track.
virtual MINOPTMAX< int > GetWidthConstraint(wxString *aSource=nullptr) const
virtual void Mirror(const VECTOR2I &aCentre, bool aMirrorAroundXAxis)
EDA_ITEM_FLAGS IsPointOnEnds(const VECTOR2I &point, int min_dist=0) const
Return STARTPOINT if point if near (dist = min_dist) start point, ENDPOINT if point if near (dist = m...
virtual void SetWidth(int aWidth)
virtual int GetWidth() const
void GetMsgPanelInfoBase_Common(EDA_DRAW_FRAME *aFrame, std::vector< MSG_PANEL_ITEM > &aList) const
PCB_LAYER_ID BottomLayer() const
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
VECTOR2I GetPosition() const override
bool IsTented(PCB_LAYER_ID aLayer) const override
Checks if the given object is tented (its copper shape is covered by solder mask) on a given side of ...
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.
bool Deserialize(const google::protobuf::Any &aContainer) override
Deserializes the given protobuf message into this object.
bool FlashLayer(int aLayer) const
Check to see whether the via should have a pad on the specific layer.
void SetDrillDefault()
Set the drill value for vias to the default value UNDEFINED_DRILL_DIAMETER.
const PADSTACK & Padstack() const
void SetFrontTentingMode(TENTING_MODE aMode)
bool m_isFree
"Free" vias don't get their nets auto-updated
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
TENTING_MODE GetFrontTentingMode() const
virtual void SetLayerSet(LSET aLayers) override
Note SetLayerSet() initialize the first and last copper layers connected by the via.
void SetBottomLayer(PCB_LAYER_ID aLayer)
std::array< ZONE_LAYER_OVERRIDE, MAX_CU_LAYERS > m_zoneLayerOverrides
int GetSolderMaskExpansion() const
void SetDrill(int aDrill)
Set the drill value for vias.
MINOPTMAX< int > GetDrillConstraint(wxString *aSource=nullptr) const
void SetBackTentingMode(TENTING_MODE aMode)
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.
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
bool operator==(const PCB_VIA &aOther) const
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
double ViewGetLOD(int aLayer, KIGFX::VIEW *aView) const override
Return the level of detail (LOD) of the item.
void SetTopLayer(PCB_LAYER_ID aLayer)
std::shared_ptr< SHAPE_SEGMENT > GetEffectiveHoleShape() const override
void SetLayerPair(PCB_LAYER_ID aTopLayer, PCB_LAYER_ID aBottomLayer)
For a via m_layer contains the top layer, the other layer is in m_bottomLayer/.
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
double Similarity(const BOARD_ITEM &aOther) const override
Return a measure of how likely the other object is to represent the same object.
void SetLayer(PCB_LAYER_ID aLayer) override
Set the layer this item is on.
void GetOutermostConnectedLayers(PCB_LAYER_ID *aTopmost, PCB_LAYER_ID *aBottommost) const
Return the top-most and bottom-most connected layers.
void ViewGetLayers(int aLayers[], int &aCount) const override
Return the all the layers within the VIEW the object is painted on.
void SanitizeLayers()
Check so that the layers are correct depending on the type of via, and so that the top actually is on...
int GetWidth() const override
PCB_VIA & operator=(const PCB_VIA &aOther)
void swapData(BOARD_ITEM *aImage) override
void Serialize(google::protobuf::Any &aContainer) const override
Serializes this object to the given Any message.
PCB_VIA(BOARD_ITEM *aParent)
wxString layerMaskDescribe() const override
Return a string (to be shown to the user) describing a layer mask.
void SetViaType(VIATYPE aViaType)
int GetMinAnnulus(PCB_LAYER_ID aLayer, wxString *aSource) const
bool IsOnLayer(PCB_LAYER_ID aLayer) const override
Test to see if this object is on the given layer.
TENTING_MODE GetBackTentingMode() const
PCB_LAYER_ID TopLayer() const
VIATYPE m_viaType
through, blind/buried or micro
int GetDrillValue() const
Calculate the drill value for vias (m_drill if > 0, or default drill value for the board).
VIATYPE GetViaType() const
MINOPTMAX< int > GetWidthConstraint(wxString *aSource=nullptr) const override
void SetWidth(int aWidth) override
virtual LSET GetLayerSet() const override
Return a std::bitset of all layers on which the item physically resides.
void LayerPair(PCB_LAYER_ID *top_layer, PCB_LAYER_ID *bottom_layer) const
Return the 2 layers used by the via (the via actually uses all layers between these 2 layers)
void Flip(const VECTOR2I &aCentre, bool aFlipLeftRight) override
Flip this object, i.e.
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.
PROPERTY_BASE & ReplaceProperty(size_t aBase, const wxString &aName, PROPERTY_BASE *aNew, const wxString &aGroup=wxEmptyString)
Replace an existing property for a specific type.
VECTOR2I::extended_type ecoord
bool ApproxCollinear(const SEG &aSeg, int aDistanceThreshold=1) const
const VECTOR2I & GetArcMid() const
const VECTOR2I & GetP1() const
const VECTOR2I & GetP0() const
Represent a set of closed polygons.
wxString MessageTextFromMinOptMax(const MINOPTMAX< int > &aValue) const
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
double Distance(const VECTOR2< extended_type > &aVector) const
Compute the distance between two vectors.
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.
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 TransformArcToPolygon(SHAPE_POLY_SET &aBuffer, const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd, int aWidth, int aError, ERROR_LOC aErrorLoc)
Convert arc to multiple straight segments.
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.
@ ANNULAR_WIDTH_CONSTRAINT
@ VIA_DIAMETER_CONSTRAINT
static constexpr EDA_ANGLE ANGLE_0
static constexpr EDA_ANGLE ANGLE_360
#define PCB_EDIT_FRAME_NAME
const INSPECTOR_FUNC & INSPECTOR
#define ENDPOINT
ends. (Used to support dragging.)
std::uint32_t EDA_ITEM_FLAGS
#define STARTPOINT
When a line is selected, these flags indicate which.
ERROR_LOC
When approximating an arc or circle, should the error be placed on the outside or inside of the curve...
bool ClipLine(const BOX2I *aClipBox, int &x1, int &y1, int &x2, int &y2)
Test if any part of a line falls within the bounds of a rectangle.
PCB_LAYER_ID FlipLayer(PCB_LAYER_ID aLayerId, int aCopperLayersCount)
constexpr PCB_LAYER_ID PCBNEW_LAYER_ID_START
bool IsFrontLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a front layer.
FLASHING
Enum used during connectivity building to ensure we do not query connectivity while building the data...
bool IsBackLayer(PCB_LAYER_ID aLayerId)
Layer classification: check if it's a back layer.
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_GP_OVERLAY
general purpose overlay
@ LAYER_VIA_HOLES
to draw via holes (pad holes do not use this layer)
@ LAYER_VIA_MICROVIA
to draw micro vias
@ LAYER_VIA_THROUGH
to draw usual through hole vias
@ LAYER_VIAS
Meta control for all vias opacity/visibility.
@ LAYER_VIA_BBLIND
to draw blind/buried vias
bool IsNetnameLayer(int aLayer)
Test whether a layer is a netname layer.
bool IsHoleLayer(int aLayer)
PCB_LAYER_ID
A quick note on layer IDs:
PCB_LAYER_ID ToLAYER_ID(int aLayer)
void MIRROR(T &aPoint, const T &aMirrorRef)
Updates aPoint with the mirror of aPoint relative to the aMirrorRef.
EDA_ANGLE abs(const EDA_ANGLE &aAngle)
static struct TRACK_VIA_DESC _TRACK_VIA_DESC
#define ENUM_TO_WXANY(type)
Macro to define read-only fields (no setter method available)
wxString UnescapeString(const wxString &aSource)
constexpr int mmToIU(double mm) const
VECTOR2I size
Drill diameter (x == y) or slot dimensions (x != y)
std::optional< bool > has_solder_mask
True if this outer layer has mask (is not tented)
bool operator()(const PCB_TRACK *aFirst, const PCB_TRACK *aSecond) const
bool TestSegmentHit(const VECTOR2I &aRefPoint, const VECTOR2I &aStart, const VECTOR2I &aEnd, int aDist)
Test if aRefPoint is with aDistance on the line defined by aStart and aEnd.
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.
const VECTOR2I CalcArcCenter(const VECTOR2I &aStart, const VECTOR2I &aMid, const VECTOR2I &aEnd)
Determine the center of an arc or circle given three points on its circumference.
KICAD_T
The set of class identification values stored in EDA_ITEM::m_structType.
@ PCB_VIA_T
class PCB_VIA, a via (like a track segment on a copper layer)
@ 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_TRACE_T
class PCB_TRACK, a track segment (segment on a copper layer)
VECTOR2< int32_t > VECTOR2I
VECTOR2< int64_t > VECTOR2L