29#include <magic_enum.hpp>
91 wxString
GetClass()
const override {
return wxT(
"TUNING_STATUS" ); }
94 void Show(
int nestLevel, std::ostream& os )
const override {}
114 m_max = std::numeric_limits<double>::max();
118 void SetCurrent(
const double aCurrent,
const wxString& aLabel )
151 gal->
Scale( { 1., 1. } );
162 VECTOR2I offset( margin.
x * 2, -( size.
y + margin.
y * 2 ) );
164 if( drawingDropShadows )
169 gal->
SetStrokeColor( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNTEXT ) );
170 KIGFX::COLOR4D bgColor( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
179 COLOR4D bg = wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE );
180 COLOR4D normal = wxSystemSettings::GetColour( wxSYS_COLOUR_BTNTEXT );
184 double bg_h, bg_s, bg_l;
185 bg.
ToHSL( bg_h, bg_s, bg_l );
186 red.FromHSL( 0, 1.0, bg_l < 0.5 ? 0.7 : 0.3 );
211 textPos.
x += glyphWidth * 11 + margin.
x;
212 font->
Draw( gal,
_(
"min" ), textPos, textAttrs, fontMetrics );
214 textPos.
x += glyphWidth * 7 + margin.
x;
215 font->
Draw( gal,
_(
"max" ), textPos, textAttrs, fontMetrics );
224 textPos.
x += glyphWidth * 11 + margin.
x;
226 font->
Draw( gal,
m_minText, textPos, textAttrs, fontMetrics );
228 textPos.
x += glyphWidth * 7 + margin.
x;
230 font->
Draw( gal,
m_maxText, textPos, textAttrs, fontMetrics );
262 return wxString(
_(
"Tuning Pattern" ) );
267 return wxString(
_(
"Tuning Pattern" ) );
272 return wxString(
_(
"Tuning Patterns" ) );
279 case SINGLE:
return BITMAPS::ps_tune_length;
break;
280 case DIFF_PAIR:
return BITMAPS::ps_diff_pair_tune_length;
break;
281 case DIFF_PAIR_SKEW:
return BITMAPS::ps_diff_pair_tune_phase;
break;
284 return BITMAPS::unknown;
296 const wxString& aCommitMsg = wxEmptyString,
int aCommitFlags = 0 )
override;
311 m_end += aMoveVector;
375 bool HitTest(
const BOX2I& aRect,
bool aContained,
int aAccuracy )
const override
426 aValue = std::max( aValue, 0 );
437 aValue = std::max( aValue, 0 );
457 return std::optional<int>();
466 if( aValue.has_value() )
475 return std::optional<int>();
484 if( aValue.has_value() )
509 std::vector<std::pair<wxString, wxVariant>>
GetRowData()
override
523 bool aStatusItemsOnly =
false )
override;
541 std::optional<SHAPE_LINE_CHAIN>& aBaseLine );
558 m_baseLine->Mirror( aCentre, aFlipDirection );
596 if( aStr ==
"single" )
598 else if( aStr ==
"diff_pair" )
600 else if( aStr ==
"diff_pair_skew" )
604 wxFAIL_MSG( wxS(
"Unknown length tuning token" ) );
617 default: wxFAIL;
return "";
624 switch( aRouterMode )
636 if( aStr ==
"default" )
638 else if( aStr ==
"left" )
640 else if( aStr ==
"right" )
644 wxFAIL_MSG( wxS(
"Unknown length-tuning side token" ) );
657 default: wxFAIL;
return "";
664 if( aStr ==
"too_long" )
666 else if( aStr ==
"too_short" )
668 else if( aStr ==
"tuned" )
672 wxFAIL_MSG( wxS(
"Unknown tuning status token" ) );
685 default: wxFAIL;
return "";
695 m_tuningMode( aMode ),
696 m_tuningStatus(
PNS::MEANDER_PLACER_BASE::TUNING_STATUS::TUNED ),
697 m_updateSideFromEnd(false)
714 if( aNet && track->GetNet() != aNet )
729 SEG seg( track->GetStart(), track->GetEnd() );
733 SEG::ecoord dist_sq = ( nearest - aP ).SquaredEuclideanNorm();
735 if( dist_sq < minDist_sq )
737 minDist_sq = dist_sq;
741 *aNearestTrack = track;
786 if( !constraint.
IsNull() )
806 if( !constraint.
IsNull() )
834 aCommit->
Add(
this );
860 centerlineOffsetEnd =
867 baseEnd.
A += centerlineOffsetEnd;
868 baseEnd.
B += centerlineOffsetEnd;
870 if( baseEnd.
A != baseEnd.
B )
900 &pnsItem,
nullptr, layer, &constraint ) )
926 pnsCoupledItem.
SetParent( coupledTrack );
927 pnsCoupledItem.
SetNet( coupledNet );
932 &pnsItem, &pnsCoupledItem, layer, &constraint ) )
952 &pnsItem, &pnsCoupledItem, layer, &constraint ) )
980 static const int candidateCount = 2;
986 for(
int i = 0; i < candidateCount; i++ )
988 prioritized[i] =
nullptr;
993 for(
int slopRadius : { 0, maxSlopRadius } )
1002 if( !item->IsRoutable() )
1005 if( !item->Layers().Overlaps( aLayer ) )
1015 SEG::ecoord d0 = ( nearest - aWhere ).SquaredEuclideanNorm();
1020 if( aBaseline.PointCount() > 0 )
1025 if( aBaseline.SegmentCount() > 0 )
1028 dcBaseline = ( aBaseline.CPoint( 0 ) - target ).SquaredEuclideanNorm();
1030 if( dcBaseline > distBaseline[1] )
1033 distBaseline[1] = dcBaseline;
1036 prioritized[1] = linked;
1045 SEG::ecoord dd = ( aWhere - nearest ).SquaredEuclideanNorm();
1050 if( aBaseline.PointCount() > 0 )
1055 if( aBaseline.SegmentCount() > 0 )
1058 dcBaseline = ( aBaseline.CPoint( 0 ) - target ).SquaredEuclideanNorm();
1060 if( dcBaseline > distBaseline[1] )
1063 distBaseline[1] = dcBaseline;
1066 prioritized[1] = segm;
1075 for(
int i = 0; i < candidateCount; i++ )
1079 if( item && ( aLayer < 0 || item->Layers().Overlaps( aLayer ) ) )
1082 aPointOut = point[i];
1112 return std::nullopt;
1118 std::optional<SHAPE_LINE_CHAIN>& aBaseLine )
1125 VECTOR2I startSnapPoint, endSnapPoint;
1130 wxASSERT( startItem );
1131 wxASSERT( endItem );
1133 if( !startItem || !endItem )
1148 chain.
Split( startSnapPoint, endSnapPoint, pre, mid, post );
1163 wxCHECK( track,
false );
1179 return initBaseLine( aRouter, aPNSLayer, aBoard, coupledStart, coupledEnd, coupledNet,
1192 VECTOR2I startSnapPoint, endSnapPoint;
1195 aRouter, aPNSLayer, startSnapPoint, endSnapPoint );
1197 wxCHECK( pnsLine,
false );
1202 pnsLine->CLine().
Split( startSnapPoint, endSnapPoint, pre, mid, post );
1210 straightChain.
Append( pre );
1211 straightChain.
Append( aBaseLine );
1212 straightChain.
Append( post );
1215 PNS::LINE straightLine( *pnsLine, straightChain );
1244 bool success =
true;
1255 const std::vector<GENERATOR_PNS_CHANGES>& allPnsChanges = aTool->
GetRouterChanges();
1259 const std::set<BOARD_ITEM*> routerRemovedItems = pnsChanges.removedItems;
1260 const std::set<BOARD_ITEM*> routerAddedItems = pnsChanges.addedItems;
1268 item->ClearSelected();
1273 aCommit->
Add( item );
1276 aCommit->
Push(
"Remove Tuning Pattern" );
1308 if( lineWidth == 0 || li->Width() < lineWidth )
1309 lineWidth = li->Width();
1319 if( lineWidth == 0 )
1330 recoverLine.
SetNet( recoverNet );
1331 branch->
Add( recoverLine,
false );
1339 recoverLineCoupled.
SetWidth( lineWidth );
1341 recoverLineCoupled.
SetNet( recoverCoupledNet );
1342 branch->
Add( recoverLineCoupled,
false );
1360 VECTOR2I startSnapPoint, endSnapPoint;
1363 router, aPNSLayer, startSnapPoint, endSnapPoint );
1377 pnsLine->CLine().
Split( startSnapPoint, endSnapPoint, pre, mid, post );
1379 straightChain.
Append( pre );
1380 straightChain.
Append( aBaseLine );
1381 straightChain.
Append( post );
1385 branch->
Remove( *pnsLine );
1398 m_end = endSnapPoint;
1405 newLineChain.
Append( pre );
1406 newLineChain.
Append( mid );
1407 newLineChain.
Append( post );
1419 straightChain.
Split( start,
end, pre, mid, post );
1421 newLineChain.
Append( pre );
1422 newLineChain.
Append( mid );
1423 newLineChain.
Append( post );
1429 PNS::LINE newLine( *pnsLine, newLineChain );
1431 branch->
Add( newLine,
false );
1452 auto hideRemovedItems = [&](
bool aHide )
1458 for(
BOARD_ITEM* item : pnsCommit.removedItems )
1461 view->
Hide( item, aHide, aHide );
1504 hideRemovedItems(
true );
1506 VECTOR2I startSnapPoint, endSnapPoint;
1513 wxASSERT( startItem );
1514 wxASSERT( endItem );
1516 if( !startItem || !endItem )
1521 if( !router->
StartRouting( startSnapPoint, startItem, pnslayer ) )
1549 wxString statusMessage;
1556 default: statusMessage =
_(
"unknown" );
break;
1576 m_tuningInfo.Printf( wxS(
"%s (%s)" ), result, statusMessage );
1583 const wxString& aCommitMsg,
int aCommitFlags )
1600 bool forceFinish =
true;
1601 bool forceCommit =
false;
1603 router->
FixRoute(
m_end,
nullptr, forceFinish, forceCommit );
1607 const std::vector<GENERATOR_PNS_CHANGES>& pnsCommits = aTool->
GetRouterChanges();
1611 const std::set<BOARD_ITEM*> routerRemovedItems = pnsCommit.removedItems;
1612 const std::set<BOARD_ITEM*> routerAddedItems = pnsCommit.addedItems;
1621 view->
Hide( item,
false );
1628 aCommit->
Add( item );
1641 if( aCommitMsg.IsEmpty() )
1642 aCommit->
Push(
_(
"Edit Tuning Pattern" ), aCommitFlags );
1644 aCommit->
Push( aCommitMsg, aCommitFlags );
1663 for(
BOARD_ITEM* item : pnsCommit.removedItems )
1664 view->Hide( item,
false );
1692 base.
A += centerlineOffset;
1693 base.
B += centerlineOffset;
1703 VECTOR2I widthHandleOffset = ( base.
B - base.
A ).Perpendicular().
Resize( amplitude );
1705 aPoints.
AddPoint( base.
A + widthHandleOffset );
1711 aPoints.
AddPoint( base.
A + spacingHandleOffset );
1732 base.
A += centerlineOffset;
1733 base.
B += centerlineOffset;
1751 int side = base.
Side( wHandle );
1787 base.
A += centerlineOffset;
1788 base.
B += centerlineOffset;
1798 VECTOR2I widthHandleOffset = ( base.
B - base.
A ).Perpendicular().
Resize( amplitude );
1819 int minAllowedAmplitude = 0;
1829 minAllowedAmplitude = baselineOffset +
correction;
1832 clampedMaxAmplitude = std::max( clampedMaxAmplitude, minAllowedAmplitude );
1961 for(
int i = 0; i <
m_baseLine->SegmentCount(); i++ )
2039 wxString tuningMode;
2040 aProps.
get_to(
"tuning_mode", tuningMode );
2044 aProps.
get_to(
"initial_side", side );
2048 aProps.
get_to(
"last_status", status );
2058 bool rounded =
false;
2059 aProps.
get_to(
"rounded", rounded );
2064 aProps.
get_to_iu(
"target_length", val );
2067 if( aProps.
get_to_iu(
"target_length_min", val ) )
2070 if( aProps.
get_to_iu(
"target_length_max", val ) )
2073 aProps.
get_to_iu(
"target_delay", val );
2076 if( aProps.
get_to_iu(
"target_delay_min", val ) )
2079 if( aProps.
get_to_iu(
"target_delay_max", val ) )
2084 aProps.
get_to_iu(
"target_skew", int_val );
2087 if( aProps.
get_to_iu(
"target_skew_min", int_val ) )
2090 if( aProps.
get_to_iu(
"target_skew_max", int_val ) )
2181 bool aStatusItemsOnly )
2183 std::vector<EDA_ITEM*> previewItems;
2188 if( !aStatusItemsOnly )
2240 statusItem->
SetCurrent(
static_cast<double>( placer->TuningDelayResult() ),
_(
"current skew" ) );
2242 statusItem->
SetCurrent(
static_cast<double>( placer->TuningLengthResult() ),
_(
"current skew" ) );
2247 statusItem->
SetCurrent(
static_cast<double>( placer->TuningDelayResult() ),
_(
"current delay" ) );
2249 statusItem->
SetCurrent(
static_cast<double>( placer->TuningLengthResult() ),
_(
"current length" ) );
2253 previewItems.push_back( statusItem );
2256 return previewItems;
2261 std::vector<MSG_PANEL_ITEM>& aList )
2270 bool mixedWidth =
false;
2282 primaryItem = track;
2283 primaryNet = track->GetNet();
2285 else if( !coupledNet && track->GetNet() != primaryNet )
2287 coupledItem = track;
2288 coupledNet = track->GetNet();
2292 netclass = track->GetEffectiveNetClass();
2295 width = track->GetWidth();
2296 else if( width != track->GetWidth() )
2307 else if( primaryNet )
2313 aList.emplace_back(
_(
"Resolved Netclass" ),
2318 if( width && !mixedWidth )
2326 if( board && primaryItem && primaryItem->
GetNetCode() > 0 )
2329 double trackLen = 0.0;
2330 double lenPadToDie = 0.0;
2331 double trackDelay = 0.0;
2332 double delayPadToDie = 0.0;
2334 std::tie( count, trackLen, lenPadToDie, trackDelay, delayPadToDie ) = board->
GetTrackLength( *primaryItem );
2336 if( coupledItem && coupledItem->
GetNetCode() > 0 )
2338 double coupledLen = 0.0;
2339 double coupledLenPadToDie = 0.0;
2340 double coupledTrackDelay = 0.0;
2341 double doubledDelayPadToDie = 0.0;
2343 std::tie( count, coupledLen, coupledLenPadToDie, coupledTrackDelay, doubledDelayPadToDie ) =
2346 if( trackDelay == 0.0 || coupledTrackDelay == 0.0 )
2354 _(
"Routed Delays" ),
2361 if( trackDelay == 0.0 )
2367 aList.emplace_back(
_(
"Routed Delay" ),
2372 if( lenPadToDie != 0 && delayPadToDie == 0.0 )
2375 aList.emplace_back(
_(
"Pad To Die Length" ), msg );
2378 aList.emplace_back(
_(
"Full Length" ), msg );
2380 else if( delayPadToDie > 0.0 )
2383 aList.emplace_back(
_(
"Pad To Die Delay" ), msg );
2386 aList.emplace_back(
_(
"Full Delay" ), msg );
2398 aList.emplace_back( wxString::Format(
_(
"Target Skew: %s" ), msg ),
2399 wxString::Format(
_(
"(from tuning pattern properties)" ) ) );
2405 if( !msg.IsEmpty() )
2407 aList.emplace_back( wxString::Format(
_(
"Skew Constraints: %s" ), msg ),
2408 wxString::Format(
_(
"(from %s)" ), constraint.
GetName() ) );
2422 caption =
_(
"Target Delay: %s" );
2424 EDA_DATA_TYPE::TIME );
2428 caption =
_(
"Target Length: %s" );
2432 aList.emplace_back( wxString::Format( caption, msg ),
2433 wxString::Format(
_(
"(from tuning pattern properties)" ) ) );
2441 if( !msg.IsEmpty() )
2443 aList.emplace_back( wxString::Format( caption, msg ),
2444 wxString::Format(
_(
"(from %s)" ), constraint.
GetName() ) );
2458#define HITTEST_THRESHOLD_PIXELS 5
2464 wxLogDebug(
_(
"Tune Skew" ) );
2481 std::shared_ptr<DRC_ENGINE>& drcEngine = bds.
m_DRCEngine;
2514 auto applyCommonSettings =
2517 const auto& origTargetLength = aPattern->GetSettings().m_targetLength;
2518 const auto& origTargetSkew = aPattern->GetSettings().m_targetSkew;
2520 aPattern->GetSettings() = meanderSettings;
2526 aPattern->GetSettings().m_targetSkew = origTargetSkew;
2529 auto updateHoverStatus =
2532 std::unique_ptr<PCB_TUNING_PATTERN> dummyPattern;
2544 applyCommonSettings( dummyPattern.get() );
2546 dummyPattern->EditStart( generatorTool,
m_board,
nullptr );
2547 dummyPattern->Update( generatorTool,
m_board,
nullptr );
2551 for(
EDA_ITEM* item : dummyPattern->GetPreviewItems( generatorTool,
m_frame ) )
2566 auto updateTuningPattern =
2591 if( evt->IsCancelInteractive() || evt->IsActivate()
2607 else if( evt->IsMotion() )
2617 guide.SetIncludeSecondary(
false );
2619 guide.SetIncludeSecondary(
true );
2632 double min_dist_sq = std::numeric_limits<double>::max();
2634 for(
EDA_ITEM* candidate : collector )
2640 candidatePos =
static_cast<PCB_TRACK*
>( candidate )->GetCenter();
2642 else if( candidate->Type() ==
PCB_ARC_T )
2644 candidatePos =
static_cast<PCB_ARC*
>( candidate )->GetMid();
2647 double dist_sq = ( cursorPos - candidatePos ).SquaredEuclideanNorm();
2649 if( dist_sq < min_dist_sq )
2651 min_dist_sq = dist_sq;
2657 updateHoverStatus();
2666 updateTuningPattern();
2669 else if( evt->IsClick(
BUT_LEFT ) )
2678 "tuning patterns." ) );
2691 int dummyClearance = std::numeric_limits<int>::max() / 2;
2697 &dummyDist, &closestPt ) )
2733 meanderSettings.
m_spacing = placer->MeanderSettings().m_spacing;
2735 updateTuningPattern();
2751 meanderSettings.
m_maxAmplitude = placer->MeanderSettings().m_maxAmplitude;
2753 updateTuningPattern();
2783 updateTuningPattern();
2794 evt->SetPassEvent();
2825 .Map( LENGTH_TUNING_MODE::SINGLE,
_HKI(
"Single track" ) )
2826 .Map( LENGTH_TUNING_MODE::DIFF_PAIR,
_HKI(
"Differential pair" ) )
2827 .Map( LENGTH_TUNING_MODE::DIFF_PAIR_SKEW,
_HKI(
"Diff pair skew" ) );
2841 const wxString groupTab =
_HKI(
"Pattern Properties" );
2856 _HKI(
"Tuning Mode" ),
2862 _HKI(
"Min Amplitude" ),
2869 _HKI(
"Max Amplitude" ),
2876 _HKI(
"Initial Side" ),
2888 _HKI(
"Corner Radius %" ),
2903 auto isTimeDomain = [](
INSPECTABLE* aItem ) ->
bool
2906 return pattern->GetSettings().m_isTimeDomain;
2911 auto isLengthIsSpaceDomain = [&](
INSPECTABLE* aItem ) ->
bool
2913 return !isSkew( aItem ) && !isTimeDomain( aItem );
2916 auto isLengthIsTimeDomain = [&](
INSPECTABLE* aItem ) ->
bool
2918 return !isSkew( aItem ) && isTimeDomain( aItem );
2921 auto isSkewIsSpaceDomain = [&](
INSPECTABLE* aItem ) ->
bool
2923 return isSkew( aItem ) && !isTimeDomain( aItem );
2926 auto isSkewIsTimeDomain = [&](
INSPECTABLE* aItem ) ->
bool
2928 return isSkew( aItem ) && isTimeDomain( aItem );
2960 _HKI(
"Override Custom Rules" ),
2966 _HKI(
"Single-sided" ),
2984template <typename
T>
constexpr EDA_IU_SCALE pcbIUScale
constexpr int ARC_LOW_DEF
BITMAPS
A list of all bitmap identifiers.
constexpr BOX2I KiROUND(const BOX2D &aBoxD)
static TOOL_ACTION selectionClear
Clear the current selection.
virtual void Push(const wxString &aMessage=wxEmptyString, int aCommitFlags=0) override
Execute the changes.
virtual void Revert() override
Revert the commit by restoring the modified items state.
A base class derived from BOARD_ITEM for items that can be connected and have a net,...
virtual NETCLASS * GetEffectiveNetClass() const
Return the NETCLASS for this item.
NETINFO_ITEM * GetNet() const
Return #NET_INFO object for a given item.
Container for design settings for a BOARD object.
std::shared_ptr< DRC_ENGINE > m_DRCEngine
int GetDRCEpsilon() const
Return an epsilon which accounts for rounding errors, etc.
PNS::MEANDER_SETTINGS m_DiffPairMeanderSettings
PNS::MEANDER_SETTINGS m_SingleTrackMeanderSettings
PNS::MEANDER_SETTINGS m_SkewMeanderSettings
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 std::shared_ptr< SHAPE > GetEffectiveShape(PCB_LAYER_ID aLayer=UNDEFINED_LAYER, FLASHING aFlash=FLASHING::DEFAULT) const
Some pad shapes can be complex (rounded/chamfered rectangle), even without considering custom shapes.
virtual const BOARD * GetBoard() const
Return the BOARD in which this BOARD_ITEM resides, or NULL if none.
virtual wxString layerMaskDescribe() const
Return a string (to be shown to the user) describing a layer mask.
Information pertinent to a Pcbnew printed circuit board.
NETINFO_ITEM * DpCoupledNet(const NETINFO_ITEM *aNet)
std::tuple< int, double, double, double, double > GetTrackLength(const PCB_TRACK &aTrack) const
Return data on the length and number of track segments connected to a given track.
NETINFO_ITEM * FindNet(int aNetcode) const
Search for a net with the given netcode.
const TRACKS & Tracks() const
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
constexpr void SetMaximum()
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
constexpr bool Contains(const Vec &aPoint) const
constexpr bool Intersects(const BOX2< Vec > &aRect) const
int GetCount() const
Return the number of objects in the list.
COMMIT & Remove(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Remove a new item from the model.
COMMIT & Modify(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr, RECURSE_MODE aRecurse=RECURSE_MODE::NO_RECURSE)
Modify a given item in the model.
COMMIT & Add(EDA_ITEM *aItem, BASE_SCREEN *aScreen=nullptr)
Add a new item to the model.
const MINOPTMAX< int > & GetValue() const
bool GetOption(OPTIONS option) const
void ShowInfoBarWarning(const wxString &aWarningMsg, bool aShowCloseButton=false)
Show the WX_INFOBAR displayed on the top of the canvas with a message and a warning icon on the left ...
The base class for create windows for drawing purpose.
void SetCurrentCursor(KICURSOR aCursor)
Set the current cursor shape for this panel.
virtual void Refresh(bool aEraseBackground=true, const wxRect *aRect=nullptr) override
std::unordered_set< EDA_ITEM * > m_items
std::unordered_set< EDA_ITEM * > & GetItems()
void AddItem(EDA_ITEM *aItem)
Add item to group.
A base class for most all the KiCad significant classes used in schematics and boards.
virtual const VECTOR2I GetFocusPosition() const
Similar to GetPosition() but allows items to return their visual center rather than their anchor.
void SetFlags(EDA_ITEM_FLAGS aMask)
virtual EDA_GROUP * GetParentGroup() const
KICAD_T Type() const
Returns the type of object.
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
bool HasFlag(EDA_ITEM_FLAGS aFlag) const
EDA_ITEM_FLAGS GetFlags() const
EDIT_POINTS is a VIEW_ITEM that manages EDIT_POINTs and EDIT_LINEs and draws them.
void AddPoint(const EDIT_POINT &aPoint)
Add an EDIT_POINT.
EDIT_POINT & Point(unsigned int aIndex)
void SetGridConstraint(GRID_CONSTRAINT_TYPE aConstraint)
static const int POINT_SIZE
Single point size in pixels.
virtual void SetPosition(const VECTOR2I &aPosition)
Set new coordinates for an EDIT_POINT.
virtual VECTOR2I GetPosition() const
Return coordinates of an EDIT_POINT.
static ENUM_MAP< T > & Instance()
static const TOOL_EVENT SelectedItemsModified
Selected items were moved, this can be very high frequency on the canvas, use with care.
A general implementation of a COLLECTORS_GUIDE.
Used when the right click button is pressed, or when the select tool is in effect.
void Collect(BOARD_ITEM *aItem, const std::vector< KICAD_T > &aScanList, const VECTOR2I &aRefPos, const COLLECTORS_GUIDE &aGuide)
Scan a BOARD_ITEM using this class's Inspector method, which does the collection.
A factory which returns an instance of a PCB_GENERATOR.
void Register(const wxString &aTypeStr, const wxString &aName, std::function< PCB_GENERATOR *(void)> aCreateFunc)
Associate a type string to display name and create function.
static GENERATORS_MGR & Instance()
Class that other classes need to inherit from, in order to be inspectable.
FONT is an abstract base class for both outline and stroke fonts.
static FONT * GetFont(const wxString &aFontName=wxEmptyString, bool aBold=false, bool aItalic=false, const std::vector< wxString > *aEmbeddedFiles=nullptr, bool aForDrawingSheet=false)
void Draw(KIGFX::GAL *aGal, const wxString &aText, const VECTOR2I &aPosition, const VECTOR2I &aCursor, const TEXT_ATTRIBUTES &aAttributes, const METRICS &aFontMetrics) const
Draw a string.
static const METRICS & Default()
A color representation with 4 components: red, green, blue, alpha.
COLOR4D WithAlpha(double aAlpha) const
Return a color with the same color, but the given alpha.
void ToHSL(double &aOutHue, double &aOutSaturation, double &aOutLightness) const
Converts current color (stored in RGB) to HSL format.
Abstract interface for drawing on a 2D-surface.
virtual void SetIsFill(bool aIsFillEnabled)
Enable/disable fill.
virtual void DrawRectangle(const VECTOR2D &aStartPoint, const VECTOR2D &aEndPoint)
Draw a rectangle.
virtual void SetFillColor(const COLOR4D &aColor)
Set the fill color.
const MATRIX3x3D & GetScreenWorldMatrix() const
Get the screen <-> world transformation matrix.
virtual void Restore()
Restore the context.
virtual void SetLineWidth(float aLineWidth)
Set the line width.
virtual void SetStrokeColor(const COLOR4D &aColor)
Set the stroke color.
virtual void SetIsStroke(bool aIsStrokeEnabled)
Enable/disable stroked outlines.
virtual void Scale(const VECTOR2D &aScale)
Scale the context.
virtual void Save()
Save the context.
A KIGFX::PREVIEW::DRAW_CONTEXT is a wrapper around a GAL and some other settings that makes it easy t...
void DrawLineDashed(const VECTOR2I &aStart, const VECTOR2I &aEn, int aDashStep, int aDashFill, bool aDeEmphasised)
Draw a dashed line on the current layer.
An interface for classes handling user events controlling the view behavior such as zooming,...
virtual void CaptureCursor(bool aEnabled)
Force the cursor to stay within the drawing panel area.
virtual void ForceCursorPosition(bool aEnabled, const VECTOR2D &aPosition=VECTOR2D(0, 0))
Place the cursor immediately at a given point.
virtual void ShowCursor(bool aEnabled)
Enable or disables display of cursor.
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Return the current mouse pointer position.
virtual void SetAutoPan(bool aEnabled)
Turn on/off auto panning (this feature is used when there is a tool active (eg.
void FreeItems()
Free all the items that were added to the group.
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
virtual void Add(VIEW_ITEM *aItem, int aDrawPriority=-1)
Add a VIEW_ITEM to the view.
virtual void Remove(VIEW_ITEM *aItem)
Remove a VIEW_ITEM from the view.
virtual void Update(const VIEW_ITEM *aItem, int aUpdateFlags) const
For dynamic VIEWs, inform the associated VIEW that the graphical representation of this item has chan...
GAL * GetGAL() const
Return the #GAL this view is using to draw graphical primitives.
VECTOR2D ToWorld(const VECTOR2D &aCoord, bool aAbsolute=true) const
Converts a screen space point/vector to a point/vector in world space coordinates.
void Hide(VIEW_ITEM *aItem, bool aHide=true, bool aHideOverlay=false)
Temporarily hide the item in the view (e.g.
VECTOR2< T > GetScale() const
Get the scale components of the matrix.
A collection of nets and the parameters used to route or test these nets.
const wxString GetHumanReadableName() const
Gets the consolidated name of this netclass (which may be an aggregate).
Handle the data for a net.
const wxString & GetNetname() const
static TOOL_ACTION properties
Activation of the edit tool.
static TOOL_ACTION spacingDecrease
static TOOL_ACTION amplIncrease
static TOOL_ACTION amplDecrease
static TOOL_ACTION lengthTunerSettings
static TOOL_ACTION spacingIncrease
const VECTOR2I & GetMid() const
Common, abstract interface for edit frames.
const PCB_DISPLAY_OPTIONS & GetDisplayOptions() const
Display options control the way tracks, vias, outlines and other things are shown (for instance solid...
virtual PCB_LAYER_ID GetActiveLayer() const
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
GENERAL_COLLECTORS_GUIDE GetCollectorsGuide()
virtual void SetActiveLayer(PCB_LAYER_ID aLayer)
HIGH_CONTRAST_MODE m_ContrastModeDisplay
How inactive layers are displayed.
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
virtual void SetProperties(const STRING_ANY_MAP &aProps)
void baseMirror(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection)
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
void Mirror(const VECTOR2I &aCentre, FLIP_DIRECTION aMirrorDirection) override
Mirror this object relative to a given horizontal axis the layer is not changed.
void SetPosition(const VECTOR2I &aPos) override
VECTOR2I GetPosition() const override
virtual std::vector< std::pair< wxString, wxVariant > > GetRowData()
virtual const STRING_ANY_MAP GetProperties() const
void Move(const VECTOR2I &aMoveVector) override
Move this object.
std::unordered_set< BOARD_ITEM * > GetBoardItems() const
const VECTOR2I & GetStart() const
const VECTOR2I & GetEnd() const
virtual int GetWidth() const
void SetTargetSkew(int aValue)
void Mirror(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Mirror this object relative to a given horizontal axis the layer is not changed.
bool initBaseLines(PNS::ROUTER *aRouter, int aPNSLayer, BOARD *aBoard)
const STRING_ANY_MAP GetProperties() const override
bool HitTest(const BOX2I &aRect, bool aContained, int aAccuracy) const override
Test if aRect intersects this item.
void SetEnd(const VECTOR2I &aValue)
void SetMinAmplitude(int aValue)
void SetSpacing(int aValue)
wxString GetGeneratorType() const override
wxString GetItemDescription(UNITS_PROVIDER *aUnitsProvider, bool aFull) const override
Return a user-visible description string of this item.
std::vector< int > ViewGetLayers() const override
Return the all the layers within the VIEW the object is painted on.
bool HitTest(const SHAPE_LINE_CHAIN &aPoly, bool aContained) const override
Test if aPoly intersects this item.
static const wxString DISPLAY_NAME
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.
PNS::ROUTER_MODE GetPNSMode()
bool initBaseLine(PNS::ROUTER *aRouter, int aPNSLayer, BOARD *aBoard, VECTOR2I &aStart, VECTOR2I &aEnd, NETINFO_ITEM *aNet, std::optional< SHAPE_LINE_CHAIN > &aBaseLine)
void SetTargetSkewDelay(int aValue)
PCB_TUNING_PATTERN(BOARD_ITEM *aParent=nullptr, PCB_LAYER_ID aLayer=F_Cu, LENGTH_TUNING_MODE aMode=LENGTH_TUNING_MODE::SINGLE)
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
void swapData(BOARD_ITEM *aImage) override
bool recoverBaseline(PNS::ROUTER *aRouter)
void EditRevert(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
PNS::MEANDER_SIDE GetInitialSide() const
const VECTOR2I & GetEnd() const
void SetInitialSide(PNS::MEANDER_SIDE aValue)
wxString GetFriendlyName() const override
void SetTargetDelay(std::optional< int > aValue)
BITMAPS GetMenuImage() const override
Return a pointer to an image to be used in menus.
LENGTH_TUNING_MODE GetTuningMode() const
std::optional< int > GetTargetDelay() const
void Move(const VECTOR2I &aMoveVector) override
Move this object.
void Rotate(const VECTOR2I &aRotCentre, const EDA_ANGLE &aAngle) override
Rotate this object.
std::vector< EDA_ITEM * > GetPreviewItems(GENERATOR_TOOL *aTool, PCB_BASE_EDIT_FRAME *aFrame, bool aStatusItemsOnly=false) override
int GetMinAmplitude() const
void Flip(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection) override
Flip this object, i.e.
void EditStart(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
void baseMirror(const VECTOR2I &aCentre, FLIP_DIRECTION aFlipDirection)
EDA_ITEM * Clone() const override
Create a duplicate of this item with linked list members set to NULL.
void SetOverrideCustomRules(bool aOverride)
void SetRounded(bool aFlag)
LENGTH_TUNING_MODE m_tuningMode
std::vector< std::pair< wxString, wxVariant > > GetRowData() override
static const wxString GENERATOR_TYPE
bool resetToBaseline(GENERATOR_TOOL *aTool, int aPNSLayer, SHAPE_LINE_CHAIN &aBaseLine, bool aPrimary)
bool MakeEditPoints(EDIT_POINTS &points) const override
void SetCornerRadiusPercentage(int aValue)
PNS::MEANDER_PLACER_BASE::TUNING_STATUS m_tuningStatus
std::optional< SHAPE_LINE_CHAIN > m_baseLineCoupled
void SetProperties(const STRING_ANY_MAP &aProps) override
wxString GetPluralName() const override
void ViewDraw(int aLayer, KIGFX::VIEW *aView) const override final
Draw the parts of the object belonging to layer aLayer.
void Remove(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
bool UpdateFromEditPoints(EDIT_POINTS &aEditPoints) override
std::optional< SHAPE_LINE_CHAIN > m_baseLine
int GetMaxAmplitude() const
PNS::MEANDER_SETTINGS m_settings
void ShowPropertiesDialog(PCB_BASE_EDIT_FRAME *aEditFrame) override
bool Update(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
bool UpdateEditPoints(EDIT_POINTS &aEditPoints) override
int GetTargetSkewDelay() const
bool GetOverrideCustomRules() const
void SetMaxAmplitude(int aValue)
void EditPush(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit, const wxString &aCommitMsg=wxEmptyString, int aCommitFlags=0) override
PNS::MEANDER_SETTINGS & GetSettings()
void SetSingleSided(bool aValue)
bool removeToBaseline(PNS::ROUTER *aRouter, int aPNSLayer, SHAPE_LINE_CHAIN &aBaseLine)
std::optional< int > GetTargetLength() const
bool HitTest(const VECTOR2I &aPosition, int aAccuracy=0) const override
Test if aPosition is inside or on the boundary of this item.
int GetCornerRadiusPercentage() const
const BOX2I GetBoundingBox() const override
Return the orthogonal bounding box of this object for display purposes.
SHAPE_LINE_CHAIN getOutline() const
void SetTargetLength(std::optional< int > aValue)
bool IsSingleSided() const
static PCB_TUNING_PATTERN * CreateNew(GENERATOR_TOOL *aTool, PCB_BASE_EDIT_FRAME *aFrame, BOARD_CONNECTED_ITEM *aStartItem, LENGTH_TUNING_MODE aMode)
int GetTargetSkew() const
Differential Pair length-matching/meandering tool.
std::vector< ITEM * > & Items()
Base class for PNS router board items.
virtual NET_HANDLE Net() const
void SetNet(NET_HANDLE aNet)
void SetLayer(int aLayer)
void SetParent(BOARD_ITEM *aParent)
bool OfKind(int aKindMask) const
virtual VECTOR2I Anchor(int n) const
Represents a track on a PCB, connecting two non-trivial joints (that is, vias, pads,...
const SHAPE_LINE_CHAIN & CLine() const
SHAPE_LINE_CHAIN & Line()
void SetWidth(int aWidth)
Return line width.
virtual int Width() const
bool ContainsLink(const LINKED_ITEM *aItem) const
std::vector< LINKED_ITEM * > & Links()
Base class for Single trace & Differential pair meandering tools, as both of them share a lot of code...
virtual void UpdateSettings(const MEANDER_SETTINGS &aSettings)
TUNING_STATUS
< Result of the length tuning operation
virtual void SpacingStep(int aSign)
Increase/decrease the current meandering spacing by one step.
virtual TUNING_STATUS TuningStatus() const =0
Return the tuning status (too short, too long, etc.) of the trace(s) being tuned.
virtual const MEANDER_SETTINGS & MeanderSettings() const
Return the current meandering configuration.
virtual void AmplitudeStep(int aSign)
Increase/decreases the current meandering amplitude by one step.
virtual long long int TuningLengthResult() const =0
Return the resultant length or skew of the tuned traces.
Dimensions for the meandering algorithm.
int m_minAmplitude
Maximum meandering amplitude.
void SetTargetLength(long long int aOpt)
bool m_isTimeDomain
The net class this meander pattern belongs to.
static const long long int LENGTH_UNCONSTRAINED
int m_cornerRadiusPercentage
Place meanders on one side.
MEANDER_SIDE m_initialSide
Allowable tuning error.
bool m_singleSided
Initial side when placing meanders at segment.
void SetTargetLengthDelay(long long int aOpt)
MINOPTMAX< long long int > m_targetLength
Desired propagation delay of the tuned line.
void SetTargetSkew(int aOpt)
MINOPTMAX< int > m_targetSkew
Target skew value for diff pair de-skewing.
MEANDER_STYLE m_cornerStyle
Rounding percentage (0 - 100).
bool m_keepEndpoints
Calculate tuning in the time domain.
MINOPTMAX< int > m_targetSkewDelay
int m_maxAmplitude
Meandering period/spacing (see dialog picture for explanation).
bool m_overrideCustomRules
Type of corners for the meandered line.
MINOPTMAX< long long int > m_targetLengthDelay
Target skew value for diff pair de-skewing.
void SetTargetSkewDelay(int aOpt)
static const long long int DELAY_UNCONSTRAINED
int m_spacing
Amplitude/spacing adjustment step.
Keep the router "world" - i.e.
NODE * Branch()
Create a lightweight copy (called branch) of self that tracks the changes (added/removed items) wrs t...
bool Add(std::unique_ptr< SEGMENT > aSegment, bool aAllowRedundant=false)
Add an item to the current node.
std::set< OBSTACLE > OBSTACLES
const LINE AssembleLine(LINKED_ITEM *aSeg, int *aOriginSegmentIndex=nullptr, bool aStopAtLockedJoints=false, bool aFollowLockedSegments=false, bool aAllowSegmentSizeMismatch=true)
Follow the joint map to assemble a line connecting two non-trivial joints starting from segment aSeg.
int QueryColliding(const ITEM *aItem, OBSTACLES &aObstacles, const COLLISION_SEARCH_OPTIONS &aOpts=COLLISION_SEARCH_OPTIONS()) const
Find items colliding (closer than clearance) with the item aItem.
void Remove(ARC *aArc)
Remove an item from this branch.
virtual int GetPNSLayerFromBoardLayer(PCB_LAYER_ID aLayer) const =0
virtual void RemoveItem(ITEM *aItem)=0
virtual void AddItem(ITEM *aItem)=0
void SetMode(ROUTER_MODE aMode)
PLACEMENT_ALGO * Placer()
ROUTER_IFACE * GetInterface() const
const ITEM_SET QueryHoverItems(const VECTOR2I &aP, int aSlopRadius=0)
RULE_RESOLVER * GetRuleResolver() const
bool RoutingInProgress() const
bool StartRouting(const VECTOR2I &aP, ITEM *aItem, int aLayer)
bool FixRoute(const VECTOR2I &aP, ITEM *aItem, bool aForceFinish, bool aForceCommit)
bool Move(const VECTOR2I &aP, ITEM *aItem)
virtual int Clearance(const ITEM *aA, const ITEM *aB, bool aUseClearanceEpsilon=true)=0
const SHAPE_LINE_CHAIN CLine() const
const SHAPE * Shape(int aLayer) const override
Return the geometrical shape of the item.
void SetShape(SHAPE *shape)
void SetStartLayerFromPCBNew(PCB_LAYER_ID aLayer)
int GetPNSLayerFromBoardLayer(PCB_LAYER_ID aLayer) const override
void DisplayItem(const PNS::ITEM *aItem, int aClearance, bool aEdit=false, int aFlags=0) override
void EraseView() override
wxString GetNetName(PNS::NET_HANDLE aNet) const override
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 AddTypeCast(TYPE_CAST_BASE *aCast)
Register a type converter.
RAII class that sets an value at construction and resets it to the original value at destruction.
int LineDistance(const VECTOR2I &aP, bool aDetermineSide=false) const
Return the closest Euclidean distance between point aP and the line defined by the ends of segment (t...
VECTOR2I::extended_type ecoord
const VECTOR2I NearestPoint(const VECTOR2I &aP) const
Compute a point on the segment (this) that is closest to point aP.
int Side(const VECTOR2I &aP) const
Determine on which side of directed line passing via segment ends point aP lies.
virtual void Add(EDA_ITEM *aItem)
virtual void Clear() override
Remove all the stored items from the group.
const VECTOR2I & GetArcMid() const
VECTOR2I NearestPoint(const VECTOR2I &aP) const
bool PointOnEdge(const VECTOR2I &aP, int aAccuracy=0) const
Check if point aP lies on an edge or vertex of the line chain.
bool PointInside(const VECTOR2I &aPt, int aAccuracy=0, bool aUseBBoxCache=false) const override
Check if point aP lies inside a closed shape.
Represent a polyline containing arcs as well as line segments: A chain of connected line and/or arc s...
const SHAPE_LINE_CHAIN Reverse() const
Reverse point order in the line chain.
int Split(const VECTOR2I &aP, bool aExact=false)
Insert the point aP belonging to one of the our segments, splitting the adjacent segment in two.
void SetClosed(bool aClosed)
Mark the line chain as closed (i.e.
virtual bool Collide(const VECTOR2I &aP, int aClearance=0, int *aActual=nullptr, VECTOR2I *aLocation=nullptr) const override
Check if point aP lies closer to us than aClearance.
void Simplify(int aTolerance=0)
Simplify the line chain by removing colinear adjacent segments and duplicate vertices.
SEG Segment(int aIndex) const
Return a copy of the aIndex-th segment in the line chain.
void Append(int aX, int aY, bool aAllowDuplication=false)
Append a new point at the end of the line chain.
const VECTOR2I & CPoint(int aIndex) const
Return a reference to a given point in the line chain.
const VECTOR2I NearestPoint(const VECTOR2I &aP, bool aAllowInternalShapePoints=true) const
Find a point on the line chain that is closest to point aP.
int SegmentCount() const
Return the number of segments in this line chain.
const VECTOR2I & CLastPoint() const
Return the last point in the line chain.
const BOX2I BBox(int aClearance=0) const override
Compute a bounding box of the shape, with a margin of aClearance a collision.
SHAPE * Clone() const override
Return a dynamically allocated copy of the shape.
bool OffsetLine(int aAmount, CORNER_STRATEGY aCornerStrategy, int aMaxError, SHAPE_LINE_CHAIN &aLeft, SHAPE_LINE_CHAIN &aRight, bool aSimplify=false) const
Creates line chains aLeft and aRight offset to this line chain.
Represent a set of closed polygons.
void BooleanAdd(const SHAPE_POLY_SET &b)
Perform boolean polyset union.
void ClearArcs()
Removes all arc references from all the outlines and holes in the polyset.
SHAPE_LINE_CHAIN & Outline(int aIndex)
Return the reference to aIndex-th outline in the set.
void OffsetLineChain(const SHAPE_LINE_CHAIN &aLine, int aAmount, CORNER_STRATEGY aCornerStrategy, int aMaxError, bool aSimplify)
Perform offsetting of a line chain.
int OutlineCount() const
Return the number of outlines in the set.
virtual VECTOR2I Centre() const
Compute a center-of-mass of the shape.
A name/value tuple with unique names and wxAny values.
void set_iu(const std::string &aKey, const T &aVar)
bool get_to(const std::string &aKey, T &aVar) const
std::optional< T > get_opt(const std::string &aKey) const
void set(const std::string &aKey, const T &aVar)
bool get_to_iu(const std::string &aKey, T &aVar) const
GR_TEXT_H_ALIGN_T m_Halign
void SetIsTimeDomain(const bool aIsTimeDomain)
void SetCurrent(const double aCurrent, const wxString &aLabel)
wxString GetClass() const override
Return the class name.
VECTOR2I GetPosition() const override
void SetMinMax(const double aMin, const double aMax)
void ViewDraw(int aLayer, KIGFX::VIEW *aView) const override
Draw the parts of the object belonging to layer aLayer.
std::vector< int > ViewGetLayers() const override
Return the all the layers within the VIEW the object is painted on.
TUNING_STATUS_VIEW_ITEM(PCB_BASE_EDIT_FRAME *aFrame)
const BOX2I ViewBBox() const override
Return the bounding box of the item covering all its layers.
void SetPosition(const VECTOR2I &aPos) override
wxString MessageTextFromValue(double aValue, bool aAddUnitLabel=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
A lower-precision version of StringFromValue().
wxString MessageTextFromMinOptMax(const MINOPTMAX< int > &aValue, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE) const
constexpr extended_type SquaredDistance(const VECTOR2< T > &aVector) const
Compute the squared distance between two vectors.
static constexpr extended_type ECOORD_MAX
VECTOR2< T > Resize(T aNewLength) const
Return a vector of the same direction, but length specified in aNewLength.
#define IS_NEW
New item, just created.
#define IN_EDIT
Item currently edited.
EDA_DATA_TYPE
The type of unit.
static FILENAME_RESOLVER * resolver
a few functions useful in geometry calculations.
@ LAYER_ANCHOR
Anchor of items having an anchor point (texts, footprints).
PCB_LAYER_ID
A quick note on layer IDs:
KICOMMON_API wxString MessageTextFromValue(const EDA_IU_SCALE &aIuScale, EDA_UNITS aUnits, double aValue, bool aAddUnitsText=true, EDA_DATA_TYPE aType=EDA_DATA_TYPE::DISTANCE)
A helper to convert the double length aValue to a string in inches, millimeters, or unscaled units.
bool ShapeHitTest(const SHAPE_LINE_CHAIN &aHitter, const SHAPE &aHittee, bool aHitteeContained)
Perform a shape-to-shape hit test.
TEXT_DIMS GetConstantGlyphHeight(KIGFX::GAL *aGal, int aRelativeSize=0)
Set the GAL glyph height to a constant scaled value, so that it always looks the same on screen.
Push and Shove diff pair dimensions (gap) settings dialog.
@ PNS_MODE_TUNE_DIFF_PAIR
@ PNS_MODE_TUNE_DIFF_PAIR_SKEW
Class to handle a set of BOARD_ITEMs.
static PNS::MEANDER_SIDE sideFromString(const std::string &aStr)
static LENGTH_TUNING_MODE tuningFromString(const std::string &aStr)
static std::string tuningToString(const LENGTH_TUNING_MODE aTuning)
static struct PCB_TUNING_PATTERN_DESC _PCB_TUNING_PATTERN_DESC
static LENGTH_TUNING_MODE fromPNSMode(PNS::ROUTER_MODE aRouterMode)
static PNS::MEANDER_PLACER_BASE::TUNING_STATUS statusFromString(const std::string &aStr)
static std::string sideToString(const PNS::MEANDER_SIDE aValue)
static std::string statusToString(const PNS::MEANDER_PLACER_BASE::TUNING_STATUS aStatus)
static GENERATORS_MGR::REGISTER< PCB_TUNING_PATTERN > registerMe
static PNS::LINKED_ITEM * pickSegment(PNS::ROUTER *aRouter, const VECTOR2I &aWhere, int aLayer, VECTOR2I &aPointOut, const SHAPE_LINE_CHAIN &aBaseline=SHAPE_LINE_CHAIN())
static std::optional< PNS::LINE > getPNSLine(const VECTOR2I &aStart, const VECTOR2I &aEnd, PNS::ROUTER *router, int layer, VECTOR2I &aStartOut, VECTOR2I &aEndOut)
static VECTOR2I snapToNearestTrack(const VECTOR2I &aP, BOARD *aBoard, NETINFO_ITEM *aNet, PCB_TRACK **aNearestTrack)
static REGISTER_LEGACY_TUNING_PATTERN< PCB_TUNING_PATTERN > registerMeToo
#define NO_SETTER(owner, type)
#define ENUM_TO_WXANY(type)
Macro to define read-only fields (no setter method available)
constexpr double correction
std::vector< FAB_LAYER_COLOR > dummy
wxString UnescapeString(const wxString &aSource)
constexpr int mmToIU(double mm) const
PCB_TUNING_PATTERN_DESC()
bool m_useClearanceEpsilon
An abstract function object, returning a design rule (clearance, diff pair gap, etc) required between...
Hold an object colliding with another object, along with some useful data about the collision.
REGISTER_LEGACY_TUNING_PATTERN()
const SHAPE_LINE_CHAIN chain
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.
double DEG2RAD(double deg)
@ PCB_GENERATOR_T
class PCB_GENERATOR, generator on a layer
@ NOT_USED
the 3d code uses this value
@ 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