Status bar messages for meanders.
This commit is contained in:
parent
2b28580f0c
commit
6baac175c5
|
@ -170,7 +170,7 @@ DIALOG_BOARD_SETUP::DIALOG_BOARD_SETUP( PCB_EDIT_FRAME* aFrame ) :
|
||||||
bds.m_singleTrackMeanderSettings,
|
bds.m_singleTrackMeanderSettings,
|
||||||
bds.m_diffPairMeanderSettings,
|
bds.m_diffPairMeanderSettings,
|
||||||
bds.m_skewMeanderSettings );
|
bds.m_skewMeanderSettings );
|
||||||
}, _( "Meanders" ) );
|
}, _( "Length Tuning Patterns" ) );
|
||||||
|
|
||||||
m_netclassesPage = m_treebook->GetPageCount();
|
m_netclassesPage = m_treebook->GetPageCount();
|
||||||
m_treebook->AddLazySubPage(
|
m_treebook->AddLazySubPage(
|
||||||
|
|
|
@ -36,11 +36,12 @@ DIALOG_MEANDER_PROPERTIES::DIALOG_MEANDER_PROPERTIES( PCB_BASE_EDIT_FRAME* aFram
|
||||||
m_maxA( aFrame, m_maxALabel, m_maxACtrl, m_maxAUnits ),
|
m_maxA( aFrame, m_maxALabel, m_maxACtrl, m_maxAUnits ),
|
||||||
m_spacing( aFrame, m_spacingLabel, m_spacingCtrl, m_spacingUnits ),
|
m_spacing( aFrame, m_spacingLabel, m_spacingCtrl, m_spacingUnits ),
|
||||||
m_r( aFrame, m_rLabel, m_rCtrl, m_rUnits ),
|
m_r( aFrame, m_rLabel, m_rCtrl, m_rUnits ),
|
||||||
m_settings( aSettings )
|
m_settings( aSettings ),
|
||||||
|
m_mode( aMeanderType )
|
||||||
{
|
{
|
||||||
m_r.SetUnits( EDA_UNITS::PERCENT );
|
m_r.SetUnits( EDA_UNITS::PERCENT );
|
||||||
|
|
||||||
switch( aMeanderType )
|
switch( m_mode )
|
||||||
{
|
{
|
||||||
case PNS::PNS_MODE_TUNE_SINGLE:
|
case PNS::PNS_MODE_TUNE_SINGLE:
|
||||||
m_legend->SetBitmap( KiBitmap( BITMAPS::tune_single_track_length_legend ) );
|
m_legend->SetBitmap( KiBitmap( BITMAPS::tune_single_track_length_legend ) );
|
||||||
|
@ -53,6 +54,7 @@ DIALOG_MEANDER_PROPERTIES::DIALOG_MEANDER_PROPERTIES( PCB_BASE_EDIT_FRAME* aFram
|
||||||
|
|
||||||
case PNS::PNS_MODE_TUNE_DIFF_PAIR_SKEW:
|
case PNS::PNS_MODE_TUNE_DIFF_PAIR_SKEW:
|
||||||
m_legend->SetBitmap( KiBitmap( BITMAPS::tune_diff_pair_skew_legend ) );
|
m_legend->SetBitmap( KiBitmap( BITMAPS::tune_diff_pair_skew_legend ) );
|
||||||
|
m_targetLengthLabel->SetLabel( _( "Target skew: ") );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -70,7 +72,11 @@ DIALOG_MEANDER_PROPERTIES::DIALOG_MEANDER_PROPERTIES( PCB_BASE_EDIT_FRAME* aFram
|
||||||
|
|
||||||
bool DIALOG_MEANDER_PROPERTIES::TransferDataToWindow()
|
bool DIALOG_MEANDER_PROPERTIES::TransferDataToWindow()
|
||||||
{
|
{
|
||||||
m_targetLength.SetValue( m_settings.m_targetLength );
|
if( m_mode == PNS::PNS_MODE_TUNE_DIFF_PAIR_SKEW )
|
||||||
|
m_targetLength.SetValue( m_settings.m_targetSkew );
|
||||||
|
else
|
||||||
|
m_targetLength.SetValue( m_settings.m_targetLength );
|
||||||
|
|
||||||
m_overrideCustomRules->SetValue( m_settings.m_overrideCustomRules );
|
m_overrideCustomRules->SetValue( m_settings.m_overrideCustomRules );
|
||||||
|
|
||||||
m_targetLength.Enable( m_constraint.IsNull() || m_settings.m_overrideCustomRules );
|
m_targetLength.Enable( m_constraint.IsNull() || m_settings.m_overrideCustomRules );
|
||||||
|
@ -93,7 +99,11 @@ bool DIALOG_MEANDER_PROPERTIES::TransferDataToWindow()
|
||||||
|
|
||||||
bool DIALOG_MEANDER_PROPERTIES::TransferDataFromWindow()
|
bool DIALOG_MEANDER_PROPERTIES::TransferDataFromWindow()
|
||||||
{
|
{
|
||||||
m_settings.m_targetLength = m_targetLength.GetValue();
|
if( m_mode == PNS::PNS_MODE_TUNE_DIFF_PAIR_SKEW )
|
||||||
|
m_settings.m_targetSkew = m_targetLength.GetIntValue();
|
||||||
|
else
|
||||||
|
m_settings.m_targetLength = m_targetLength.GetValue();
|
||||||
|
|
||||||
m_settings.m_overrideCustomRules = m_overrideCustomRules->GetValue();
|
m_settings.m_overrideCustomRules = m_overrideCustomRules->GetValue();
|
||||||
|
|
||||||
m_settings.m_minAmplitude = m_minA.GetIntValue();
|
m_settings.m_minAmplitude = m_minA.GetIntValue();
|
||||||
|
|
|
@ -59,6 +59,7 @@ private:
|
||||||
UNIT_BINDER m_r;
|
UNIT_BINDER m_r;
|
||||||
|
|
||||||
PNS::MEANDER_SETTINGS& m_settings;
|
PNS::MEANDER_SETTINGS& m_settings;
|
||||||
|
PNS::ROUTER_MODE m_mode;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // DIALOG_MEANDER_PROPERTIES_H
|
#endif // DIALOG_MEANDER_PROPERTIES_H
|
||||||
|
|
|
@ -50,7 +50,7 @@
|
||||||
<property name="size">-1,-1</property>
|
<property name="size">-1,-1</property>
|
||||||
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
<property name="style">wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER</property>
|
||||||
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
|
<property name="subclass">DIALOG_SHIM; dialog_shim.h</property>
|
||||||
<property name="title">Meander Properties</property>
|
<property name="title">Tuning Pattern Properties</property>
|
||||||
<property name="tooltip"></property>
|
<property name="tooltip"></property>
|
||||||
<property name="two_step_creation">0</property>
|
<property name="two_step_creation">0</property>
|
||||||
<property name="window_extra_style"></property>
|
<property name="window_extra_style"></property>
|
||||||
|
|
|
@ -71,7 +71,7 @@ class DIALOG_MEANDER_PROPERTIES_BASE : public DIALOG_SHIM
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
DIALOG_MEANDER_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Meander Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
DIALOG_MEANDER_PROPERTIES_BASE( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = _("Tuning Pattern Properties"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( -1,-1 ), long style = wxDEFAULT_DIALOG_STYLE|wxRESIZE_BORDER );
|
||||||
|
|
||||||
~DIALOG_MEANDER_PROPERTIES_BASE();
|
~DIALOG_MEANDER_PROPERTIES_BASE();
|
||||||
|
|
||||||
|
|
|
@ -81,6 +81,16 @@ public:
|
||||||
|
|
||||||
wxString GetGeneratorType() const override { return wxS( "meanders" ); }
|
wxString GetGeneratorType() const override { return wxS( "meanders" ); }
|
||||||
|
|
||||||
|
wxString GetItemDescription( UNITS_PROVIDER* aUnitsProvider ) const override
|
||||||
|
{
|
||||||
|
return wxString( _( "Tuning Pattern" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString GetFriendlyName() const override
|
||||||
|
{
|
||||||
|
return wxString( _( "Tuning Pattern" ) );
|
||||||
|
}
|
||||||
|
|
||||||
static PCB_GENERATOR_MEANDERS* CreateNew( GENERATOR_TOOL* aTool, PCB_BASE_EDIT_FRAME* aFrame,
|
static PCB_GENERATOR_MEANDERS* CreateNew( GENERATOR_TOOL* aTool, PCB_BASE_EDIT_FRAME* aFrame,
|
||||||
BOARD_CONNECTED_ITEM* aStartItem,
|
BOARD_CONNECTED_ITEM* aStartItem,
|
||||||
LENGTH_TUNING_MODE aMode );
|
LENGTH_TUNING_MODE aMode );
|
||||||
|
@ -196,6 +206,8 @@ public:
|
||||||
void UpdateStatus( GENERATOR_TOOL* aTool, PCB_BASE_EDIT_FRAME* aFrame,
|
void UpdateStatus( GENERATOR_TOOL* aTool, PCB_BASE_EDIT_FRAME* aFrame,
|
||||||
STATUS_TEXT_POPUP* aPopup ) override;
|
STATUS_TEXT_POPUP* aPopup ) override;
|
||||||
|
|
||||||
|
void GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame, std::vector<MSG_PANEL_ITEM>& aList ) override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void swapData( BOARD_ITEM* aImage ) override
|
void swapData( BOARD_ITEM* aImage ) override
|
||||||
{
|
{
|
||||||
|
@ -995,11 +1007,13 @@ bool PCB_GENERATOR_MEANDERS::Update( GENERATOR_TOOL* aTool, BOARD* aBoard,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_tuningMode == DIFF_PAIR
|
if( m_tuningMode == DIFF_PAIR )
|
||||||
&& !resetToBaseline( router, layer, aFrame, *m_baseLineCoupled, false ) )
|
|
||||||
{
|
{
|
||||||
initBaseLines( router, layer, aBoard );
|
if( !resetToBaseline( router, layer, aFrame, *m_baseLineCoupled, false ) )
|
||||||
return false;
|
{
|
||||||
|
initBaseLines( router, layer, aBoard );
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1109,7 +1123,7 @@ bool PCB_GENERATOR_MEANDERS::MakeEditPoints( std::shared_ptr<EDIT_POINTS> points
|
||||||
{
|
{
|
||||||
VECTOR2I centerlineOffset;
|
VECTOR2I centerlineOffset;
|
||||||
|
|
||||||
if( m_baseLineCoupled && m_baseLineCoupled->SegmentCount() > 0 )
|
if( m_tuningMode == DIFF_PAIR && m_baseLineCoupled && m_baseLineCoupled->SegmentCount() > 0 )
|
||||||
centerlineOffset = ( m_baseLineCoupled->CPoint( 0 ) - m_origin ) / 2;
|
centerlineOffset = ( m_baseLineCoupled->CPoint( 0 ) - m_origin ) / 2;
|
||||||
|
|
||||||
points->AddPoint( m_origin + centerlineOffset );
|
points->AddPoint( m_origin + centerlineOffset );
|
||||||
|
@ -1146,7 +1160,7 @@ bool PCB_GENERATOR_MEANDERS::UpdateFromEditPoints( std::shared_ptr<EDIT_POINTS>
|
||||||
{
|
{
|
||||||
VECTOR2I centerlineOffset;
|
VECTOR2I centerlineOffset;
|
||||||
|
|
||||||
if( m_baseLineCoupled && m_baseLineCoupled->SegmentCount() > 0 )
|
if( m_tuningMode == DIFF_PAIR && m_baseLineCoupled && m_baseLineCoupled->SegmentCount() > 0 )
|
||||||
centerlineOffset = ( m_baseLineCoupled->CPoint( 0 ) - m_origin ) / 2;
|
centerlineOffset = ( m_baseLineCoupled->CPoint( 0 ) - m_origin ) / 2;
|
||||||
|
|
||||||
SEG base = m_baseLine && m_baseLine->SegmentCount() > 0 ? m_baseLine->CSegment( 0 )
|
SEG base = m_baseLine && m_baseLine->SegmentCount() > 0 ? m_baseLine->CSegment( 0 )
|
||||||
|
@ -1191,7 +1205,7 @@ bool PCB_GENERATOR_MEANDERS::UpdateEditPoints( std::shared_ptr<EDIT_POINTS> aEdi
|
||||||
{
|
{
|
||||||
VECTOR2I centerlineOffset;
|
VECTOR2I centerlineOffset;
|
||||||
|
|
||||||
if( m_baseLineCoupled && m_baseLineCoupled->SegmentCount() > 0 )
|
if( m_tuningMode == DIFF_PAIR && m_baseLineCoupled && m_baseLineCoupled->SegmentCount() > 0 )
|
||||||
centerlineOffset = ( m_baseLineCoupled->CPoint( 0 ) - m_origin ) / 2;
|
centerlineOffset = ( m_baseLineCoupled->CPoint( 0 ) - m_origin ) / 2;
|
||||||
|
|
||||||
SEG base = m_baseLine && m_baseLine->SegmentCount() > 0 ? m_baseLine->CSegment( 0 )
|
SEG base = m_baseLine && m_baseLine->SegmentCount() > 0 ? m_baseLine->CSegment( 0 )
|
||||||
|
@ -1229,10 +1243,12 @@ SHAPE_LINE_CHAIN PCB_GENERATOR_MEANDERS::getRectShape() const
|
||||||
{
|
{
|
||||||
SHAPE_LINE_CHAIN cl = *m_baseLine;
|
SHAPE_LINE_CHAIN cl = *m_baseLine;
|
||||||
|
|
||||||
if( m_baseLineCoupled && m_baseLineCoupled->SegmentCount() > 0 )
|
if( m_tuningMode == DIFF_PAIR && m_baseLineCoupled && m_baseLineCoupled->SegmentCount() > 0 )
|
||||||
{
|
{
|
||||||
for( int i = 0; i < cl.PointCount() && i < m_baseLineCoupled->PointCount(); ++i )
|
for( int i = 0; i < cl.PointCount() - 1 && i < m_baseLineCoupled->PointCount(); ++i )
|
||||||
cl.SetPoint( i, ( cl.CPoint( i ) + m_baseLineCoupled->CPoint( i ) ) / 2 );
|
cl.SetPoint( i, ( cl.CPoint( i ) + m_baseLineCoupled->CPoint( i ) ) / 2 );
|
||||||
|
|
||||||
|
cl.SetPoint( -1, ( cl.CPoint( -1 ) + m_baseLineCoupled->CPoint( -1 ) ) / 2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
bool singleSided = m_tuningMode != DIFF_PAIR && m_singleSide;
|
bool singleSided = m_tuningMode != DIFF_PAIR && m_singleSide;
|
||||||
|
@ -1295,7 +1311,7 @@ void PCB_GENERATOR_MEANDERS::ViewDraw( int aLayer, KIGFX::VIEW* aView ) const
|
||||||
ctx.DrawLine( m_origin, m_end, false );
|
ctx.DrawLine( m_origin, m_end, false );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( m_baseLineCoupled )
|
if( m_tuningMode == DIFF_PAIR && m_baseLineCoupled )
|
||||||
{
|
{
|
||||||
for( int i = 0; i < m_baseLineCoupled->SegmentCount(); i++ )
|
for( int i = 0; i < m_baseLineCoupled->SegmentCount(); i++ )
|
||||||
{
|
{
|
||||||
|
@ -1461,7 +1477,178 @@ void PCB_GENERATOR_MEANDERS::UpdateStatus( GENERATOR_TOOL* aTool, PCB_BASE_EDIT_
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const wxString PCB_GENERATOR_MEANDERS::DISPLAY_NAME = _HKI( "Meanders" );
|
void PCB_GENERATOR_MEANDERS::GetMsgPanelInfo( EDA_DRAW_FRAME* aFrame,
|
||||||
|
std::vector<MSG_PANEL_ITEM>& aList )
|
||||||
|
{
|
||||||
|
wxString msg;
|
||||||
|
NETINFO_ITEM* primaryNet = nullptr;
|
||||||
|
NETINFO_ITEM* coupledNet = nullptr;
|
||||||
|
PCB_TRACK* primaryItem = nullptr;
|
||||||
|
PCB_TRACK* coupledItem = nullptr;
|
||||||
|
NETCLASS* netclass = nullptr;
|
||||||
|
int width = 0;
|
||||||
|
bool mixedWidth = false;
|
||||||
|
|
||||||
|
aList.emplace_back( _( "Type" ), GetFriendlyName() );
|
||||||
|
|
||||||
|
for( BOARD_ITEM* member : GetItems() )
|
||||||
|
{
|
||||||
|
if( PCB_TRACK* track = dynamic_cast<PCB_TRACK*>( member ) )
|
||||||
|
{
|
||||||
|
if( !primaryNet )
|
||||||
|
{
|
||||||
|
primaryItem = track;
|
||||||
|
primaryNet = track->GetNet();
|
||||||
|
}
|
||||||
|
else if( !coupledNet && track->GetNet() != primaryNet )
|
||||||
|
{
|
||||||
|
coupledItem = track;
|
||||||
|
coupledNet = track->GetNet();
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !netclass )
|
||||||
|
netclass = track->GetEffectiveNetClass();
|
||||||
|
|
||||||
|
if( !width )
|
||||||
|
width = track->GetWidth();
|
||||||
|
else if( width != track->GetWidth() )
|
||||||
|
mixedWidth = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( coupledNet )
|
||||||
|
{
|
||||||
|
aList.emplace_back( _( "Nets" ), UnescapeString( primaryNet->GetNetname() )
|
||||||
|
+ wxS( ", " )
|
||||||
|
+ UnescapeString( coupledNet->GetNetname() ) );
|
||||||
|
}
|
||||||
|
else if( primaryNet )
|
||||||
|
{
|
||||||
|
aList.emplace_back( _( "Net" ), UnescapeString( primaryNet->GetNetname() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( netclass )
|
||||||
|
aList.emplace_back( _( "Resolved Netclass" ), UnescapeString( netclass->GetName() ) );
|
||||||
|
|
||||||
|
aList.emplace_back( _( "Layer" ), layerMaskDescribe() );
|
||||||
|
|
||||||
|
if( width && !mixedWidth )
|
||||||
|
aList.emplace_back( _( "Width" ), aFrame->MessageTextFromValue( width ) );
|
||||||
|
|
||||||
|
BOARD* board = GetBoard();
|
||||||
|
std::shared_ptr<DRC_ENGINE>& drcEngine = board->GetDesignSettings().m_DRCEngine;
|
||||||
|
DRC_CONSTRAINT constraint;
|
||||||
|
|
||||||
|
// Display full track length (in Pcbnew)
|
||||||
|
if( board && primaryItem && primaryItem->GetNetCode() > 0 )
|
||||||
|
{
|
||||||
|
int count;
|
||||||
|
double trackLen;
|
||||||
|
double lenPadToDie;
|
||||||
|
|
||||||
|
std::tie( count, trackLen, lenPadToDie ) = board->GetTrackLength( *primaryItem );
|
||||||
|
|
||||||
|
if( coupledItem && coupledItem->GetNetCode() > 0 )
|
||||||
|
{
|
||||||
|
double coupledLen;
|
||||||
|
std::tie( count, coupledLen, lenPadToDie ) = board->GetTrackLength( *coupledItem );
|
||||||
|
|
||||||
|
aList.emplace_back( _( "Routed Lengths" ), aFrame->MessageTextFromValue( trackLen )
|
||||||
|
+ wxS( ", " )
|
||||||
|
+ aFrame->MessageTextFromValue( coupledLen ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
aList.emplace_back( _( "Routed Length" ), aFrame->MessageTextFromValue( trackLen ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( lenPadToDie != 0 )
|
||||||
|
{
|
||||||
|
msg = aFrame->MessageTextFromValue( lenPadToDie );
|
||||||
|
aList.emplace_back( _( "Pad To Die Length" ), msg );
|
||||||
|
|
||||||
|
msg = aFrame->MessageTextFromValue( trackLen + lenPadToDie );
|
||||||
|
aList.emplace_back( _( "Full Length" ), msg );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
auto getMinOptMax =
|
||||||
|
[&]( const MINOPTMAX<int>& v )
|
||||||
|
{
|
||||||
|
wxString msg;
|
||||||
|
|
||||||
|
if( v.HasMin() )
|
||||||
|
{
|
||||||
|
msg += wxString::Format( _( "min %s" ), aFrame->MessageTextFromValue( v.Min() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( v.HasOpt() )
|
||||||
|
{
|
||||||
|
if( !msg.IsEmpty() )
|
||||||
|
msg += wxS( "; " );
|
||||||
|
|
||||||
|
msg += wxString::Format( _( "opt %s" ), aFrame->MessageTextFromValue( v.Opt() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( v.HasMax() )
|
||||||
|
{
|
||||||
|
if( !msg.IsEmpty() )
|
||||||
|
msg += wxS( "; " );
|
||||||
|
|
||||||
|
msg += wxString::Format( _( "max %s" ), aFrame->MessageTextFromValue( v.Max() ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
return msg;
|
||||||
|
};
|
||||||
|
|
||||||
|
if( m_tuningMode == DIFF_PAIR_SKEW )
|
||||||
|
{
|
||||||
|
constraint = drcEngine->EvalRules( SKEW_CONSTRAINT, primaryItem, coupledItem, m_layer );
|
||||||
|
|
||||||
|
if( constraint.IsNull() || m_overrideCustomRules )
|
||||||
|
{
|
||||||
|
msg = aFrame->MessageTextFromValue( m_targetSkew );
|
||||||
|
|
||||||
|
aList.emplace_back( wxString::Format( _( "Target Skew: %s" ), msg ),
|
||||||
|
wxString::Format( _( "(from tuning pattern properties)" ) ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msg = getMinOptMax( constraint.GetValue() );
|
||||||
|
|
||||||
|
if( !msg.IsEmpty() )
|
||||||
|
{
|
||||||
|
aList.emplace_back( wxString::Format( _( "Skew Constraints: %s." ), msg ),
|
||||||
|
wxString::Format( _( "(from %s)" ), constraint.GetName() ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
constraint = drcEngine->EvalRules( LENGTH_CONSTRAINT, primaryItem, coupledItem, m_layer );
|
||||||
|
|
||||||
|
if( constraint.IsNull() || m_overrideCustomRules )
|
||||||
|
{
|
||||||
|
msg = aFrame->MessageTextFromValue( (double) m_targetLength );
|
||||||
|
|
||||||
|
aList.emplace_back( wxString::Format( _( "Target Length: %s" ), msg ),
|
||||||
|
wxString::Format( _( "(from tuning pattern properties)" ) ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
msg = getMinOptMax( constraint.GetValue() );
|
||||||
|
|
||||||
|
if( !msg.IsEmpty() )
|
||||||
|
{
|
||||||
|
aList.emplace_back( wxString::Format( _( "Length Constraints: %s." ), msg ),
|
||||||
|
wxString::Format( _( "(from %s)" ), constraint.GetName() ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const wxString PCB_GENERATOR_MEANDERS::DISPLAY_NAME = _HKI( "Tuning Pattern" );
|
||||||
const wxString PCB_GENERATOR_MEANDERS::GENERATOR_TYPE = wxS( "meanders" );
|
const wxString PCB_GENERATOR_MEANDERS::GENERATOR_TYPE = wxS( "meanders" );
|
||||||
|
|
||||||
|
|
||||||
|
@ -1705,7 +1892,7 @@ static struct PCB_GENERATOR_MEANDERS_DESC
|
||||||
propMgr.InheritsAfter( TYPE_HASH( PCB_GENERATOR_MEANDERS ), TYPE_HASH( PCB_GENERATOR ) );
|
propMgr.InheritsAfter( TYPE_HASH( PCB_GENERATOR_MEANDERS ), TYPE_HASH( PCB_GENERATOR ) );
|
||||||
propMgr.InheritsAfter( TYPE_HASH( PCB_GENERATOR_MEANDERS ), TYPE_HASH( BOARD_ITEM ) );
|
propMgr.InheritsAfter( TYPE_HASH( PCB_GENERATOR_MEANDERS ), TYPE_HASH( BOARD_ITEM ) );
|
||||||
|
|
||||||
const wxString groupTab = _HKI( "Meander Properties" );
|
const wxString groupTab = _HKI( "Pattern Properties" );
|
||||||
|
|
||||||
propMgr.AddProperty( new PROPERTY<PCB_GENERATOR_MEANDERS, int>(
|
propMgr.AddProperty( new PROPERTY<PCB_GENERATOR_MEANDERS, int>(
|
||||||
_HKI( "End X" ), &PCB_GENERATOR_MEANDERS::SetEndX,
|
_HKI( "End X" ), &PCB_GENERATOR_MEANDERS::SetEndX,
|
||||||
|
|
Loading…
Reference in New Issue