pcbnew: fix incorrect type cast in DRC_TEST_PROVIDER_TEXT_DIMS
FP_TEXT cannot be casted to PCB_TEXT for obvious reasons, but what I don't understand is why downcasting to EDA_TEXT also crashes due to incorrect vtable method pointer (Clang10/Linux here). I leave this as a curiosity for whoever knows C++.
This commit is contained in:
parent
93018375f8
commit
dafa8ec671
|
@ -103,10 +103,29 @@ bool DRC_TEST_PROVIDER_TEXT_DIMS::Run()
|
|||
if( !reportProgress( ii++, count, delta ) )
|
||||
return false;
|
||||
|
||||
PCB_TEXT* textItem = static_cast<PCB_TEXT*>( item );
|
||||
wxASSERT( item->Type() == PCB_TEXT_T || item->Type() == PCB_FP_TEXT_T );
|
||||
|
||||
int actualH = 0, actualT = 0;
|
||||
bool visible;
|
||||
|
||||
if( item->Type() == PCB_TEXT_T )
|
||||
{
|
||||
PCB_TEXT* textItem = static_cast<PCB_TEXT*>( item );
|
||||
visible = textItem->IsVisible();
|
||||
actualH = textItem->GetTextHeight();
|
||||
actualT = textItem->GetTextThickness();
|
||||
}
|
||||
else if ( item->Type() == PCB_FP_TEXT_T )
|
||||
{
|
||||
FP_TEXT* fpTextItem = static_cast<FP_TEXT*>( item );
|
||||
visible = fpTextItem->IsVisible();
|
||||
actualH = fpTextItem->GetTextHeight();
|
||||
actualT = fpTextItem->GetTextThickness();
|
||||
}
|
||||
DRC_CONSTRAINT constraint;
|
||||
|
||||
if( !textItem->IsVisible() )
|
||||
|
||||
if( !visible )
|
||||
return true;
|
||||
|
||||
if( !m_drcEngine->IsErrorLimitExceeded( DRCE_TEXT_HEIGHT ) )
|
||||
|
@ -116,17 +135,16 @@ bool DRC_TEST_PROVIDER_TEXT_DIMS::Run()
|
|||
bool fail_min = false;
|
||||
bool fail_max = false;
|
||||
int constraintHeight;
|
||||
int actual = textItem->GetTextHeight();
|
||||
|
||||
if( constraint.GetSeverity() != RPT_SEVERITY_IGNORE )
|
||||
{
|
||||
if( constraint.Value().HasMin() && actual < constraint.Value().Min() )
|
||||
if( constraint.Value().HasMin() && actualH < constraint.Value().Min() )
|
||||
{
|
||||
fail_min = true;
|
||||
constraintHeight = constraint.Value().Min();
|
||||
}
|
||||
|
||||
if( constraint.Value().HasMax() && actual > constraint.Value().Max() )
|
||||
if( constraint.Value().HasMax() && actualH > constraint.Value().Max() )
|
||||
{
|
||||
fail_max = true;
|
||||
constraintHeight = constraint.Value().Max();
|
||||
|
@ -142,14 +160,14 @@ bool DRC_TEST_PROVIDER_TEXT_DIMS::Run()
|
|||
m_msg.Printf( _( "(%s min height %s; actual %s)" ),
|
||||
constraint.GetName(),
|
||||
MessageTextFromValue( userUnits(), constraintHeight ),
|
||||
MessageTextFromValue( userUnits(), actual ) );
|
||||
MessageTextFromValue( userUnits(), actualH ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_msg.Printf( _( "(%s max height %s; actual %s)" ),
|
||||
constraint.GetName(),
|
||||
MessageTextFromValue( userUnits(), constraintHeight ),
|
||||
MessageTextFromValue( userUnits(), actual ) );
|
||||
MessageTextFromValue( userUnits(), actualH ) );
|
||||
}
|
||||
|
||||
drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS( " " ) + m_msg );
|
||||
|
@ -167,17 +185,16 @@ bool DRC_TEST_PROVIDER_TEXT_DIMS::Run()
|
|||
bool fail_min = false;
|
||||
bool fail_max = false;
|
||||
int constraintThickness;
|
||||
int actual = textItem->GetTextThickness();
|
||||
|
||||
if( constraint.GetSeverity() != RPT_SEVERITY_IGNORE )
|
||||
{
|
||||
if( constraint.Value().HasMin() && actual < constraint.Value().Min() )
|
||||
if( constraint.Value().HasMin() && actualT < constraint.Value().Min() )
|
||||
{
|
||||
fail_min = true;
|
||||
constraintThickness = constraint.Value().Min();
|
||||
}
|
||||
|
||||
if( constraint.Value().HasMax() && actual > constraint.Value().Max() )
|
||||
if( constraint.Value().HasMax() && actualT > constraint.Value().Max() )
|
||||
{
|
||||
fail_max = true;
|
||||
constraintThickness = constraint.Value().Max();
|
||||
|
@ -193,14 +210,14 @@ bool DRC_TEST_PROVIDER_TEXT_DIMS::Run()
|
|||
m_msg.Printf( _( "(%s min thickness %s; actual %s)" ),
|
||||
constraint.GetName(),
|
||||
MessageTextFromValue( userUnits(), constraintThickness ),
|
||||
MessageTextFromValue( userUnits(), actual ) );
|
||||
MessageTextFromValue( userUnits(), actualT ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
m_msg.Printf( _( "(%s max thickness %s; actual %s)" ),
|
||||
constraint.GetName(),
|
||||
MessageTextFromValue( userUnits(), constraintThickness ),
|
||||
MessageTextFromValue( userUnits(), actual ) );
|
||||
MessageTextFromValue( userUnits(), actualT ) );
|
||||
}
|
||||
|
||||
drcItem->SetErrorMessage( drcItem->GetErrorText() + wxS( " " ) + m_msg );
|
||||
|
|
Loading…
Reference in New Issue