32#include <magic_enum.hpp>
34#include <unordered_map>
105 return wxT(
"TUNING_STATUS" );
109void TUNING_STATUS_VIEW_ITEM::Show(
int nestLevel, std::ostream& os )
const {}
143 m_max = std::numeric_limits<double>::max();
152 m_chainMax = std::numeric_limits<double>::max();
197 gal->
Scale( { 1., 1. } );
209 int totalHeaderLines = scopeLines + 1;
210 int totalLines = totalHeaderLines + valueLines;
211 VECTOR2I size( glyphWidth * 38 + margin.
x * 2,
213 VECTOR2I offset( margin.
x * 2, -( size.
y + margin.
y * 2 ) );
215 if( drawingDropShadows )
220 gal->
SetStrokeColor( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNTEXT ) );
221 KIGFX::COLOR4D bgColor( wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE ) );
230 COLOR4D bg = wxSystemSettings::GetColour( wxSYS_COLOUR_BTNFACE );
231 COLOR4D normal = wxSystemSettings::GetColour( wxSYS_COLOUR_BTNTEXT );
235 double bg_h, bg_s, bg_l;
236 bg.
ToHSL( bg_h, bg_s, bg_l );
239 red.FromHSL( 0.0, 1.0, bg_l < 0.5 ? 0.7 : 0.3 );
240 green.FromHSL( 120.0, 1.0, bg_l < 0.5 ? 0.8 : 0.2 );
274 textPos.
x += glyphWidth * 18 + margin.
x;
275 font->
Draw( gal,
_(
"min" ), textPos, textAttrs, fontMetrics );
276 textPos.
x += glyphWidth * 7 + margin.
x;
277 font->
Draw( gal,
_(
"max" ), textPos, textAttrs, fontMetrics );
293 textPos.
x += glyphWidth * 18 + margin.
x;
294 font->
Draw( gal,
m_minText, textPos, textAttrs, fontMetrics );
295 textPos.
x += glyphWidth * 7 + margin.
x;
296 font->
Draw( gal,
m_maxText, textPos, textAttrs, fontMetrics );
307 textPos.
x += glyphWidth * 18 + margin.
x;
309 textPos.
x += glyphWidth * 7 + margin.
x;
319 if( aStr ==
"single" )
321 else if( aStr ==
"diff_pair" )
323 else if( aStr ==
"diff_pair_skew" )
327 wxFAIL_MSG( wxS(
"Unknown length tuning token" ) );
340 default: wxFAIL;
return "";
347 switch( aRouterMode )
359 if( aStr ==
"default" )
361 else if( aStr ==
"left" )
363 else if( aStr ==
"right" )
367 wxFAIL_MSG( wxS(
"Unknown length-tuning side token" ) );
380 default: wxFAIL;
return "";
387 if( aStr ==
"too_long" )
389 else if( aStr ==
"too_short" )
391 else if( aStr ==
"tuned" )
395 wxFAIL_MSG( wxS(
"Unknown tuning status token" ) );
408 default: wxFAIL;
return "";
417 double* aDelayIUOut )
424 padCount += fp->Pads().size();
479 if( aNet && track->GetNet() != aNet )
494 SEG seg( track->GetStart(), track->GetEnd() );
498 SEG::ecoord dist_sq = ( nearest - aP ).SquaredEuclideanNorm();
500 if( dist_sq < minDist_sq )
502 minDist_sq = dist_sq;
506 *aNearestTrack = track;
556 bool hasConstraint =
false;
557 bool isTimeDomain =
false;
562 effectiveTarget = netConstraint.
GetValue();
564 hasConstraint =
true;
571 wxString chainName = netInfo ? netInfo->
GetNetChain() : wxString();
573 if( !chainName.IsEmpty() )
579 double bridgingDelayIU = 0.0;
585 long long bridgingIU = isTimeDomain ?
static_cast<long long>( bridgingDelayIU )
588 if( adjustedTarget.
HasMin() )
592 if( adjustedTarget.
HasOpt() )
596 if( adjustedTarget.
HasMax() )
614 constraint = netConstraint.
IsNull() ? chainConstraint : netConstraint;
629 else if( isTimeDomain )
637 const std::shared_ptr<TUNING_PROFILES> tuningParams =
650 if( !constraint.
IsNull() )
678 aCommit->
Add(
this );
704 centerlineOffsetEnd =
711 baseEnd.
A += centerlineOffsetEnd;
712 baseEnd.
B += centerlineOffsetEnd;
714 if( baseEnd.
A != baseEnd.
B )
744 &pnsItem,
nullptr, layer, &constraint ) )
775 pnsCoupledItem.
SetParent( coupledTrack );
776 pnsCoupledItem.
SetNet( coupledNet );
781 &pnsItem, &pnsCoupledItem, layer, &constraint ) )
806 &pnsItem, &pnsCoupledItem, layer, &constraint ) )
834 static const int candidateCount = 2;
840 for(
int i = 0; i < candidateCount; i++ )
842 prioritized[i] =
nullptr;
847 for(
int slopRadius : { 0, maxSlopRadius } )
856 if( !item->IsRoutable() )
859 if( !item->Layers().Overlaps( aLayer ) )
869 SEG::ecoord d0 = ( nearest - aWhere ).SquaredEuclideanNorm();
874 if( aBaseline.PointCount() > 0 )
879 if( aBaseline.SegmentCount() > 0 )
882 dcBaseline = ( aBaseline.CPoint( 0 ) - target ).SquaredEuclideanNorm();
884 if( dcBaseline > distBaseline[1] )
887 distBaseline[1] = dcBaseline;
890 prioritized[1] = linked;
899 SEG::ecoord dd = ( aWhere - nearest ).SquaredEuclideanNorm();
904 if( aBaseline.PointCount() > 0 )
909 if( aBaseline.SegmentCount() > 0 )
912 dcBaseline = ( aBaseline.CPoint( 0 ) - target ).SquaredEuclideanNorm();
914 if( dcBaseline > distBaseline[1] )
917 distBaseline[1] = dcBaseline;
920 prioritized[1] = segm;
929 for(
int i = 0; i < candidateCount; i++ )
933 if( item && ( aLayer < 0 || item->Layers().Overlaps( aLayer ) ) )
936 aPointOut = point[i];
972 std::optional<SHAPE_LINE_CHAIN>& aBaseLine )
979 VECTOR2I startSnapPoint, endSnapPoint;
984 wxASSERT( startItem );
987 if( !startItem || !endItem )
995 wxASSERT(
chain.PointOnEdge( startSnapPoint, 40000 ) );
996 wxASSERT(
chain.PointOnEdge( endSnapPoint, 40000 ) );
1002 chain.Split( startSnapPoint, endSnapPoint, pre, mid, post );
1017 wxCHECK( track,
false );
1033 return initBaseLine( aRouter, aPNSLayer, aBoard, coupledStart, coupledEnd, coupledNet,
1068 VECTOR2I startSnapPoint, endSnapPoint;
1071 aPNSLayer, startSnapPoint, endSnapPoint );
1073 wxCHECK( pnsLine,
false );
1078 pnsLine->CLine().
Split( startSnapPoint, endSnapPoint, pre, mid, post );
1086 straightChain.
Append( pre );
1087 straightChain.
Append( aBaseLine );
1088 straightChain.
Append( post );
1091 PNS::LINE straightLine( *pnsLine, straightChain );
1121 bool success =
true;
1132 const std::vector<GENERATOR_PNS_CHANGES>& allPnsChanges = aTool->
GetRouterChanges();
1136 const std::set<BOARD_ITEM*> routerRemovedItems = pnsChanges.removedItems;
1137 const std::set<BOARD_ITEM*> routerAddedItems = pnsChanges.addedItems;
1145 item->ClearSelected();
1150 aCommit->
Add( item );
1183 if( lineWidth == 0 || li->Width() < lineWidth )
1184 lineWidth = li->Width();
1194 if( lineWidth == 0 )
1205 recoverLine.
SetNet( recoverNet );
1206 branch->
Add( recoverLine,
false );
1214 recoverLineCoupled.
SetWidth( lineWidth );
1216 recoverLineCoupled.
SetNet( recoverCoupledNet );
1217 branch->
Add( recoverLineCoupled,
false );
1235 VECTOR2I startSnapPoint, endSnapPoint;
1238 aPNSLayer, startSnapPoint, endSnapPoint );
1252 pnsLine->CLine().
Split( startSnapPoint, endSnapPoint, pre, mid, post );
1254 straightChain.
Append( pre );
1255 straightChain.
Append( aBaseLine );
1256 straightChain.
Append( post );
1260 branch->
Remove( *pnsLine );
1273 m_end = endSnapPoint;
1280 newLineChain.
Append( pre );
1281 newLineChain.
Append( mid );
1282 newLineChain.
Append( post );
1294 straightChain.
Split( start,
end, pre, mid, post );
1296 newLineChain.
Append( pre );
1297 newLineChain.
Append( mid );
1298 newLineChain.
Append( post );
1304 PNS::LINE newLine( *pnsLine, newLineChain );
1306 branch->
Add( newLine,
false );
1329 auto hideRemovedItems = [&](
bool aHide )
1335 for(
BOARD_ITEM* item : pnsCommit.removedItems )
1338 view->
Hide( item, aHide, aHide );
1381 hideRemovedItems(
true );
1383 VECTOR2I startSnapPoint, endSnapPoint;
1390 wxASSERT( startItem );
1391 wxASSERT( endItem );
1393 if( !startItem || !endItem )
1398 if( !router->
StartRouting( startSnapPoint, startItem, pnslayer ) )
1427 wxString statusMessage;
1434 default: statusMessage =
_(
"unknown" );
break;
1477 bool forceFinish =
true;
1478 bool forceCommit =
false;
1480 router->
FixRoute(
m_end,
nullptr, forceFinish, forceCommit );
1484 const std::vector<GENERATOR_PNS_CHANGES>& pnsCommits = aTool->
GetRouterChanges();
1488 const std::set<BOARD_ITEM*> routerRemovedItems = pnsCommit.removedItems;
1489 const std::set<BOARD_ITEM*> routerAddedItems = pnsCommit.addedItems;
1498 view->
Hide( item,
false );
1505 aCommit->
Add( item );
1535 for(
BOARD_ITEM* item : pnsCommit.removedItems )
1536 view->Hide( item,
false );
1561 base.
A += centerlineOffset;
1562 base.
B += centerlineOffset;
1572 VECTOR2I widthHandleOffset = ( base.
B - base.
A ).Perpendicular().Resize( amplitude );
1574 aPoints.
AddPoint( base.
A + widthHandleOffset );
1580 aPoints.
AddPoint( base.
A + spacingHandleOffset );
1601 base.
A += centerlineOffset;
1602 base.
B += centerlineOffset;
1620 int side = base.
Side( wHandle );
1656 base.
A += centerlineOffset;
1657 base.
B += centerlineOffset;
1667 VECTOR2I widthHandleOffset = ( base.
B - base.
A ).Perpendicular().Resize( amplitude );
1687 int clampedMaxAmplitude =
m_settings.m_maxAmplitude;
1688 int minAllowedAmplitude = 0;
1698 minAllowedAmplitude = baselineOffset +
correction;
1701 clampedMaxAmplitude = std::max( clampedMaxAmplitude, minAllowedAmplitude );
1719 chain.SetClosed(
true );
1824 size = std::max( size,
pcbIUScale.mmToIU( 0.05 ) );
1830 for(
int i = 0; i <
m_baseLine->SegmentCount(); i++ )
1853 for(
int i = 0; i <
chain.SegmentCount(); i++ )
1871 props.
set(
"corner_radius_percent",
m_settings.m_cornerRadiusPercentage );
1892 props.
set(
"override_custom_rules",
m_settings.m_overrideCustomRules );
1908 wxString tuningMode;
1909 aProps.
get_to(
"tuning_mode", tuningMode );
1913 aProps.
get_to(
"initial_side", side );
1917 aProps.
get_to(
"last_status", status );
1923 aProps.
get_to(
"corner_radius_percent",
m_settings.m_cornerRadiusPercentage );
1927 bool rounded =
false;
1928 aProps.
get_to(
"rounded", rounded );
1933 aProps.
get_to_iu(
"target_length", val );
1936 if( aProps.
get_to_iu(
"target_length_min", val ) )
1939 if( aProps.
get_to_iu(
"target_length_max", val ) )
1942 aProps.
get_to_iu(
"target_delay", val );
1945 if( aProps.
get_to_iu(
"target_delay_min", val ) )
1946 m_settings.m_targetLengthDelay.SetMin( val );
1948 if( aProps.
get_to_iu(
"target_delay_max", val ) )
1949 m_settings.m_targetLengthDelay.SetMax( val );
1953 aProps.
get_to_iu(
"target_skew", int_val );
1956 if( aProps.
get_to_iu(
"target_skew_min", int_val ) )
1959 if( aProps.
get_to_iu(
"target_skew_max", int_val ) )
1968 aProps.
get_to(
"override_custom_rules",
m_settings.m_overrideCustomRules );
1981 wxString statusMessage;
1988 default: statusMessage =
_(
"unknown" );
break;
1995 m_tuningInfo.Printf( wxS(
"%s (%s)" ), lengthStr, statusMessage );
2069 commit.
Push(
_(
"Edit Tuning Pattern" ) );
2076 bool aStatusItemsOnly )
2078 std::vector<EDA_ITEM*> previewItems;
2083 if( !aStatusItemsOnly )
2099 wxString netChainName;
2100 if( board && !netName.
IsEmpty() )
2106 netChainName = net->GetNetChain();
2111 if( !netName.IsEmpty() )
2113 if( !netChainName.IsEmpty() )
2114 scopeLine = wxString::Format(
_(
"%s | %s" ), netName, netChainName );
2116 scopeLine = netName;
2131 bool hasNetConstraint =
false;
2141 if( tr->GetNet() &&
UnescapeString( tr->GetNet()->GetNetname() ) == netName )
2159 hasNetConstraint =
true;
2164 if( !hasNetConstraint )
2218 statusItem->
SetCurrent( 0.0,
_(
"current skew" ) );
2220 statusItem->
SetCurrent( 0.0,
_(
"current delay" ) );
2222 statusItem->
SetCurrent( 0.0,
_(
"current length" ) );
2226 double netVal =
m_settings.m_isTimeDomain ?
static_cast<double>( placer->TuningDelayResult() )
2227 :
static_cast<double>( placer->TuningLengthResult() );
2228 wxString netStr = wxString::Format(
_(
"Net: %s" ),
2233 bool hasSignal =
false;
2234 if( !netChainName.IsEmpty() && board )
2236 double chainBoardLen = 0.0;
2237 double chainBoardDelay = 0.0;
2241 std::unordered_map<int, PCB_TRACK*> repByNet;
2246 repByNet.emplace( tr->GetNetCode(), tr );
2251 if( net->GetNetChain() != netChainName )
2254 auto it = repByNet.find( net->GetNetCode() );
2256 if( it != repByNet.end() && it->second )
2258 int cnt = 0;
double trk = 0, pd = 0, tDel = 0, pdDel = 0;
2259 std::tie( cnt, trk, pd, tDel, pdDel ) = board->
GetTrackLength( *it->second );
2260 chainBoardLen += trk + pd;
2261 chainBoardDelay += tDel + pdDel;
2266 double tuningDelta = 0.0;
2268 if( placer->HasBaseline() )
2271 ?
static_cast<double>( placer->TuningDelayDelta() )
2272 :
static_cast<double>( placer->TuningLengthDelta() );
2275 double sigVal = (
m_settings.m_isTimeDomain ? chainBoardDelay : chainBoardLen )
2279 double delayIU = 0.0;
2287 sigVal +=
static_cast<double>( bridging );
2290 sigStr = wxString::Format(
_(
"Chain: %s" ),
2297 previewItems.push_back( statusItem );
2300 return previewItems;
2305 std::vector<MSG_PANEL_ITEM>& aList )
2314 bool mixedWidth =
false;
2326 primaryItem = track;
2327 primaryNet = track->GetNet();
2329 else if( !coupledNet && track->GetNet() != primaryNet )
2331 coupledItem = track;
2332 coupledNet = track->GetNet();
2336 netclass = track->GetEffectiveNetClass();
2339 width = track->GetWidth();
2340 else if( width != track->GetWidth() )
2351 else if( primaryNet )
2357 aList.emplace_back(
_(
"Resolved Netclass" ),
2363 if( primaryNet && !primaryNet->
GetNetChain().IsEmpty() )
2364 aList.emplace_back(
_(
"Net Chain" ), primaryNet->
GetNetChain() );
2366 if( width && !mixedWidth )
2374 if( board && primaryItem && primaryItem->
GetNetCode() > 0 )
2377 double trackLen = 0.0;
2378 double lenPadToDie = 0.0;
2379 double trackDelay = 0.0;
2380 double delayPadToDie = 0.0;
2382 std::tie( count, trackLen, lenPadToDie, trackDelay, delayPadToDie ) = board->
GetTrackLength( *primaryItem );
2384 if( coupledItem && coupledItem->
GetNetCode() > 0 )
2386 double coupledLen = 0.0;
2387 double coupledLenPadToDie = 0.0;
2388 double coupledTrackDelay = 0.0;
2389 double doubledDelayPadToDie = 0.0;
2391 std::tie( count, coupledLen, coupledLenPadToDie, coupledTrackDelay, doubledDelayPadToDie ) =
2394 if( trackDelay == 0.0 || coupledTrackDelay == 0.0 )
2402 _(
"Routed Delays" ),
2409 if( trackDelay == 0.0 )
2415 aList.emplace_back(
_(
"Routed Delay" ),
2420 if( lenPadToDie != 0 && delayPadToDie == 0.0 )
2423 aList.emplace_back(
_(
"Pad To Die Length" ), msg );
2426 aList.emplace_back(
_(
"Full Length" ), msg );
2428 else if( delayPadToDie > 0.0 )
2431 aList.emplace_back(
_(
"Pad To Die Delay" ), msg );
2434 aList.emplace_back(
_(
"Full Delay" ), msg );
2438 if( primaryNet && !primaryNet->
GetNetChain().IsEmpty() )
2441 double totalOtherLen = 0.0;
2442 double totalOtherDelay = 0.0;
2443 BOARD* boardPtr = board;
2448 if( other->GetNetChain() != chainName || other == primaryNet )
2452 double oTrackLen = 0.0, oPadDieLen = 0.0, oTrackDelay = 0.0, oPadDieDelay = 0.0;
2458 if( tr->GetNetCode() == other->GetNetCode() ) { anyTrack = tr;
break; }
2464 std::tie( dummyCount, oTrackLen, oPadDieLen, oTrackDelay, oPadDieDelay ) =
2466 totalOtherLen += ( oTrackLen + oPadDieLen );
2467 totalOtherDelay += ( oTrackDelay + oPadDieDelay );
2473 if( trackDelay == 0.0 )
2475 double delayIUDummy = 0.0;
2477 aList.emplace_back(
_(
"Net Chain Full Length" ),
2479 + (
double) bridging ) );
2483 double bridgingDelayIU = 0.0;
2485 aList.emplace_back(
_(
"Net Chain Full Delay" ),
2501 aList.emplace_back( wxString::Format(
_(
"Target Skew: %s" ), msg ),
2502 wxString::Format(
_(
"(from tuning pattern properties)" ) ) );
2508 if( !msg.IsEmpty() )
2510 aList.emplace_back( wxString::Format(
_(
"Skew Constraints: %s" ), msg ),
2511 wxString::Format(
_(
"(from %s)" ), constraint.
GetName() ) );
2529 caption =
_(
"Target Delay: %s" );
2535 caption =
_(
"Target Length: %s" );
2539 aList.emplace_back( wxString::Format( caption, msg ),
2540 wxString::Format(
_(
"(from tuning pattern properties)" ) ) );
2546 wxString caption =
m_settings.m_isTimeDomain ?
_(
"Delay Constraints: %s" ) :
_(
"Length Constraints: %s" );
2548 if( !msg.IsEmpty() )
2550 aList.emplace_back( wxString::Format( caption, msg ),
2551 wxString::Format(
_(
"(from %s)" ), constraint.
GetName() ) );
2565#define HITTEST_THRESHOLD_PIXELS 5
2585 std::shared_ptr<DRC_ENGINE>& drcEngine = bds.
m_DRCEngine;
2613 const auto origTargetLength = aPattern->GetSettings().m_targetLength;
2614 const auto origTargetLengthDelay = aPattern->GetSettings().m_targetLengthDelay;
2615 const auto origTargetSignalLength = aPattern->GetSettings().m_targetSignalLength;
2616 const auto origTargetSignalLengthDelay = aPattern->GetSettings().m_targetSignalLengthDelay;
2617 const auto origTargetSkew = aPattern->GetSettings().m_targetSkew;
2618 const bool origIsTimeDomain = aPattern->GetSettings().m_isTimeDomain;
2620 aPattern->GetSettings() = meanderSettings;
2624 aPattern->GetSettings().m_targetLengthDelay = origTargetLengthDelay;
2625 aPattern->GetSettings().m_targetSignalLength = origTargetSignalLength;
2626 aPattern->GetSettings().m_targetSignalLengthDelay = origTargetSignalLengthDelay;
2627 aPattern->GetSettings().m_targetSkew = origTargetSkew;
2628 aPattern->GetSettings().m_isTimeDomain = origIsTimeDomain;
2631 auto updateHoverStatus =
2634 std::unique_ptr<PCB_TUNING_PATTERN> dummyPattern;
2640 dummyPattern->SetPosition(
m_pickerItem->GetFocusPosition() );
2641 dummyPattern->SetEnd(
m_pickerItem->GetFocusPosition() );
2646 applyCommonSettings( dummyPattern.get() );
2648 dummyPattern->EditStart( generatorTool,
m_board,
nullptr );
2649 dummyPattern->Update( generatorTool,
m_board,
nullptr );
2653 for(
EDA_ITEM* item : dummyPattern->GetPreviewItems( generatorTool,
m_frame ) )
2668 auto updateTuningPattern =
2689 if( evt->IsCancelInteractive() || evt->IsActivate()
2705 else if( evt->IsMotion() )
2715 guide.SetIncludeSecondary(
false );
2717 guide.SetIncludeSecondary(
true );
2719 guide.SetPreferredLayer(
m_frame->GetActiveLayer() );
2730 double min_dist_sq = std::numeric_limits<double>::max();
2732 for(
EDA_ITEM* candidate : collector )
2738 candidatePos =
static_cast<PCB_TRACK*
>( candidate )->GetCenter();
2740 else if( candidate->Type() ==
PCB_ARC_T )
2742 candidatePos =
static_cast<PCB_ARC*
>( candidate )->GetMid();
2745 double dist_sq = ( cursorPos - candidatePos ).SquaredEuclideanNorm();
2747 if( dist_sq < min_dist_sq )
2749 min_dist_sq = dist_sq;
2755 updateHoverStatus();
2764 updateTuningPattern();
2767 else if( evt->IsClick(
BUT_LEFT ) )
2775 m_frame->ShowInfoBarWarning(
_(
"Unable to tune segments inside other "
2776 "tuning patterns." ) );
2792 int dummyClearance = std::numeric_limits<int>::max() / 2;
2797 if(
m_pickerItem->GetEffectiveShape()->Collide( cursorPos, dummyClearance,
2798 &dummyDist, &closestPt ) )
2816 commit.
Push(
_(
"Tune" ) );
2838 meanderSettings.
m_spacing = placer->MeanderSettings().m_spacing;
2840 updateTuningPattern();
2845 m_frame->ShowInfoBarWarning(
_(
"Select a track to tune first." ) );
2858 m_tuningPattern->SetMaxAmplitude( placer->MeanderSettings().m_maxAmplitude );
2859 meanderSettings.
m_maxAmplitude = placer->MeanderSettings().m_maxAmplitude;
2861 updateTuningPattern();
2866 m_frame->ShowInfoBarWarning(
_(
"Select a track to tune first." ) );
2892 updateTuningPattern();
2903 evt->SetPassEvent();
2912 controls->ForceCursorPosition(
false );
2919 m_frame->GetCanvas()->Refresh();
2952 if( layerEnum.
Choices().GetCount() == 0 )
2962 layer->SetChoices( layerEnum.
Choices() );
2972 const wxString groupTechLayers =
_HKI(
"Technical Layers" );
2984 const wxString groupTab =
_HKI(
"Pattern Properties" );
3035 auto isTimeDomain = [](
INSPECTABLE* aItem ) ->
bool
3038 return pattern->GetSettings().m_isTimeDomain;
3043 auto isLengthIsSpaceDomain = [&](
INSPECTABLE* aItem ) ->
bool
3045 return !isSkew( aItem ) && !isTimeDomain( aItem );
3048 auto isLengthIsTimeDomain = [&](
INSPECTABLE* aItem ) ->
bool
3050 return !isSkew( aItem ) && isTimeDomain( aItem );
3053 auto isSkewIsSpaceDomain = [&](
INSPECTABLE* aItem ) ->
bool
3055 return isSkew( aItem ) && !isTimeDomain( aItem );
3058 auto isSkewIsTimeDomain = [&](
INSPECTABLE* aItem ) ->
bool
3060 return isSkew( aItem ) && isTimeDomain( aItem );
3108template <typename
T>
constexpr EDA_IU_SCALE pcbIUScale
constexpr int ARC_LOW_DEF
@ NORMAL
Inactive layers are shown normally (no high-contrast mode)
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.
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.
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
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...
BOARD_ITEM(BOARD_ITEM *aParent, KICAD_T idtype, PCB_LAYER_ID aLayer=F_Cu)
virtual PCB_LAYER_ID GetLayer() const
Return the primary layer this item is on.
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.
const NETINFO_LIST & GetNetInfo() const
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 FOOTPRINTS & Footprints() const
const TRACKS & Tracks() const
PROJECT * GetProject() const
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
constexpr void SetMaximum()
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.
SEVERITY GetSeverity() const
const MINOPTMAX< int > & GetValue() const
bool GetOption(OPTIONS option) const
DRC_CONSTRAINT EvalRules(DRC_CONSTRAINT_T aConstraintType, const BOARD_ITEM *a, const BOARD_ITEM *b, PCB_LAYER_ID aLayer, REPORTER *aReporter=nullptr)
The base class for create windows for drawing purpose.
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.
void SetFlags(EDA_ITEM_FLAGS aMask)
void ClearFlags(EDA_ITEM_FLAGS aMask=EDA_ITEM_ALL_FLAGS)
bool HasFlag(EDA_ITEM_FLAGS aFlag) const
EDA_ITEM_FLAGS GetFlags() const
EDA_ITEM(EDA_ITEM *parent, KICAD_T idType, bool isSCH_ITEM=false, bool isBOARD_ITEM=false)
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.
ENUM_MAP & Map(T aValue, const wxString &aName)
static ENUM_MAP< T > & Instance()
ENUM_MAP & Undefined(T aValue)
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, std::optional< VECTOR2I > aMousePos=std::nullopt, wxString *aActiveUrl=nullptr) 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,...
Hold a (potentially large) number of VIEW_ITEMs and renders them on a graphics device provided by the...
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.
static const LSET & AllLayersMask()
static wxString Name(PCB_LAYER_ID aLayerId)
Return the fixed name association with aLayerId.
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).
wxString GetTuningProfile() const
bool HasTuningProfile() const
Handle the data for a net.
const wxString & GetNetChain() const
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.
PCB_DRAW_PANEL_GAL * GetCanvas() const override
Return a pointer to GAL-based canvas of given EDA draw frame.
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)
PCB_GENERATOR(BOARD_ITEM *aParent, PCB_LAYER_ID aLayer)
virtual const STRING_ANY_MAP GetProperties() const
const VECTOR2I & GetStart() const
const VECTOR2I & GetEnd() const
virtual int GetWidth() const
void SetTargetSkew(int aValue)
bool initBaseLines(PNS::ROUTER *aRouter, int aPNSLayer, BOARD *aBoard)
const STRING_ANY_MAP GetProperties() const override
void SetLocalSolderMaskMargin(std::optional< int > aMargin)
void SetMinAmplitude(int aValue)
void SetSpacing(int aValue)
static const wxString DISPLAY_NAME
size_t m_cachedBridgingPadCount
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)
void SetLayer(PCB_LAYER_ID aLayer) override
Set the layer this item is on.
bool recoverBaseline(PNS::ROUTER *aRouter)
void SetWidth(int aValue)
PNS::MEANDER_SIDE GetInitialSide() const
std::optional< int > GetLocalSolderMaskMargin() const
bool HasSolderMask() const
void SetInitialSide(PNS::MEANDER_SIDE aValue)
wxString GetFriendlyName() const override
void SetTargetDelay(std::optional< int > aValue)
LENGTH_TUNING_MODE GetTuningMode() const
void SetHasSolderMask(bool aVal)
std::optional< int > GetTargetDelay() const
std::vector< EDA_ITEM * > GetPreviewItems(GENERATOR_TOOL *aTool, PCB_BASE_EDIT_FRAME *aFrame, bool aStatusItemsOnly=false) override
int GetMinAmplitude() const
long long m_cachedBridgingLen
double m_cachedBridgingDelayIU
void EditStart(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
long long GetCachedBridgingLength(BOARD *aBoard, const wxString &aNetChain, double *aDelayIUOut)
void SetOverrideCustomRules(bool aOverride)
void SetRounded(bool aFlag)
LENGTH_TUNING_MODE m_tuningMode
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
const BOARD * m_cachedBridgingBoardPtr
void SetProperties(const STRING_ANY_MAP &aProps) 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
wxString m_cachedBridgingSignal
void ShowPropertiesDialog(PCB_BASE_EDIT_FRAME *aEditFrame) override
PCB_LAYER_ID GetLayer() const override
Return the primary layer this item is on.
bool Update(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
void SetNetCode(int aNetCode)
bool UpdateEditPoints(EDIT_POINTS &aEditPoints) override
int GetTargetSkewDelay() const
void EditCancel(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
bool GetOverrideCustomRules() const
void SetMaxAmplitude(int aValue)
PNS::MEANDER_SETTINGS & GetSettings()
void SetSingleSided(bool aValue)
bool removeToBaseline(PNS::ROUTER *aRouter, int aPNSLayer, SHAPE_LINE_CHAIN &aBaseLine)
std::optional< int > GetTargetLength() const
void EditFinish(GENERATOR_TOOL *aTool, BOARD *aBoard, BOARD_COMMIT *aCommit) override
int GetCornerRadiusPercentage() const
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 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 long long int TuningLengthResult() const =0
Return the resultant length or skew of the tuned traces.
Dimensions for the meandering algorithm.
void SetTargetLength(long long int aOpt)
bool m_isTimeDomain
The net class this meander pattern belongs to.
void SetTargetLengthDelay(long long int aOpt)
MINOPTMAX< long long int > m_targetLength
Desired propagation delay of the tuned line.
void SetTargetSignalLengthDelay(long long int aOpt)
void SetTargetSkew(int aOpt)
void SetTargetSignalLength(long long int aOpt)
int m_maxAmplitude
Meandering period/spacing (see dialog picture for explanation).
bool m_overrideCustomRules
Type of corners for the meandered line.
void SetTargetSkewDelay(int aOpt)
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
std::shared_ptr< TUNING_PROFILES > & TuningProfileParameters()
virtual PROJECT_FILE & GetProjectFile() const
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.
PROPERTY_BASE & ReplaceProperty(size_t aBase, const wxString &aName, PROPERTY_BASE *aNew, const wxString &aGroup=wxEmptyString)
Replace an existing property for a specific type.
void AddTypeCast(TYPE_CAST_BASE *aCast)
Register a type converter.
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.
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.
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.
void Simplify(int aTolerance=0)
Simplify the line chain by removing colinear adjacent segments and duplicate vertices.
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.
const VECTOR2I & CLastPoint() const
Return the last point in 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.
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 SetScopeLine(const wxString &aLine)
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.
void SetChainMinMax(const double aMin, const double aMax)
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 SetNetAndSignalValues(const wxString &aNetVal, const wxString &aSignalVal, bool aHasSignal)
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
PCB_TUNING_PATTERN * m_pattern
UNLOCKER(PCB_TUNING_PATTERN *aPattern)
constexpr extended_type SquaredDistance(const VECTOR2< T > &aVector) const
Compute the squared distance between two vectors.
static constexpr extended_type ECOORD_MAX
@ ROUND_ALL_CORNERS
All angles are rounded.
@ NET_CHAIN_LENGTH_CONSTRAINT
#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.
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.
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
std::tuple< double, double > BoardChainBridging(const BOARD *aBoard, const wxString &aNetChain)
int SubtractBridgingClamped(int aValue, long long aDelta)
Saturating subtract for bridge-adjusting MINOPTMAX<int> bounds without overflow when the delta is in ...
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)
SCOPED_SET_RESET< DRAWING_TOOL::MODE > SCOPED_DRAW_MODE
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)
@ PT_DEFAULT
Default property for a given type.
@ PT_SIZE
Size expressed in distance units (mm/inch)
@ PT_NET
Net selection property.
@ PT_TIME
Time expressed in ps.
constexpr double correction
#define HITTEST_THRESHOLD_PIXELS
std::vector< FAB_LAYER_COLOR > dummy
wxString UnescapeString(const wxString &aSource)
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()
Represents a single line in the tuning profile configuration grid.
bool m_EnableTimeDomainTuning
const SHAPE_LINE_CHAIN chain
wxString result
Test unit parsing edge cases and error handling.
double DEG2RAD(double deg)
@ 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
VECTOR2< double > VECTOR2D