Better safety around layersets.
This commit is contained in:
parent
40e0c8257d
commit
cf611f1742
|
@ -177,10 +177,13 @@ void DIALOG_FOOTPRINT_CHECKER::OnSelectItem( wxDataViewEvent& aEvent )
|
||||||
|
|
||||||
if( node && item )
|
if( node && item )
|
||||||
{
|
{
|
||||||
PCB_LAYER_ID principalLayer = item->GetLayerSet().Seq()[0];
|
PCB_LAYER_ID principalLayer = UNDEFINED_LAYER;
|
||||||
LSET violationLayers;
|
LSET violationLayers;
|
||||||
std::shared_ptr<RC_ITEM> rc_item = node->m_RcItem;
|
std::shared_ptr<RC_ITEM> rc_item = node->m_RcItem;
|
||||||
|
|
||||||
|
if( item->GetLayerSet().count() > 0 )
|
||||||
|
principalLayer = item->GetLayerSet().Seq().front();
|
||||||
|
|
||||||
if( rc_item->GetErrorCode() == DRCE_MALFORMED_COURTYARD )
|
if( rc_item->GetErrorCode() == DRCE_MALFORMED_COURTYARD )
|
||||||
{
|
{
|
||||||
BOARD_ITEM* a = board->GetItem( rc_item->GetMainItemID() );
|
BOARD_ITEM* a = board->GetItem( rc_item->GetMainItemID() );
|
||||||
|
|
|
@ -201,21 +201,25 @@ bool DRC_TEST_PROVIDER_DISALLOW::Run()
|
||||||
auto checkDisallow =
|
auto checkDisallow =
|
||||||
[&]( BOARD_ITEM* item )
|
[&]( BOARD_ITEM* item )
|
||||||
{
|
{
|
||||||
auto constraint = m_drcEngine->EvalRules( DISALLOW_CONSTRAINT, item, nullptr,
|
DRC_CONSTRAINT constraint = m_drcEngine->EvalRules( DISALLOW_CONSTRAINT, item,
|
||||||
UNDEFINED_LAYER );
|
nullptr, UNDEFINED_LAYER );
|
||||||
|
|
||||||
if( constraint.m_DisallowFlags && constraint.GetSeverity() != RPT_SEVERITY_IGNORE )
|
if( constraint.m_DisallowFlags && constraint.GetSeverity() != RPT_SEVERITY_IGNORE )
|
||||||
{
|
{
|
||||||
std::shared_ptr<DRC_ITEM> drcItem = DRC_ITEM::Create( DRCE_ALLOWED_ITEMS );
|
std::shared_ptr<DRC_ITEM> drcItem = DRC_ITEM::Create( DRCE_ALLOWED_ITEMS );
|
||||||
|
|
||||||
m_msg.Printf( drcItem->GetErrorText() + wxS( " (%s)" ),
|
m_msg.Printf( drcItem->GetErrorText() + wxS( " (%s)" ), constraint.GetName() );
|
||||||
constraint.GetName() );
|
|
||||||
|
|
||||||
drcItem->SetErrorMessage( m_msg );
|
drcItem->SetErrorMessage( m_msg );
|
||||||
drcItem->SetItems( item );
|
drcItem->SetItems( item );
|
||||||
drcItem->SetViolatingRule( constraint.GetParentRule() );
|
drcItem->SetViolatingRule( constraint.GetParentRule() );
|
||||||
|
|
||||||
reportViolation( drcItem, item->GetPosition(), item->GetLayerSet().Seq()[0] );
|
PCB_LAYER_ID layer = UNDEFINED_LAYER;
|
||||||
|
|
||||||
|
if( item->GetLayerSet().count() )
|
||||||
|
layer = item->GetLayerSet().Seq().front();
|
||||||
|
|
||||||
|
reportViolation( drcItem, item->GetPosition(), layer );
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -421,11 +421,13 @@ bool PCB_PAINTER::Draw( const VIEW_ITEM* aItem, int aLayer )
|
||||||
if( IsPcbLayer( aLayer ) && parentFP->GetPrivateLayers().test( aLayer ) )
|
if( IsPcbLayer( aLayer ) && parentFP->GetPrivateLayers().test( aLayer ) )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else if( item->GetLayerSet().count() == 1 )
|
||||||
{
|
{
|
||||||
// For single-layer objects, exclude all layers including ancillary layers
|
// For single-layer objects, exclude all layers including ancillary layers
|
||||||
// such as holes, netnames, etc.
|
// such as holes, netnames, etc.
|
||||||
if( parentFP->GetPrivateLayers().test( item->GetLayerSet().Seq()[0] ) )
|
PCB_LAYER_ID singleLayer = item->GetLayerSet().Seq()[0];
|
||||||
|
|
||||||
|
if( parentFP->GetPrivateLayers().test( singleLayer ) )
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -388,9 +388,11 @@ int BOARD_INSPECTION_TOOL::InspectClearance( const TOOL_EVENT& aEvent )
|
||||||
|
|
||||||
if( copperIntersection.any() && zone && pad && zone->GetNetCode() == pad->GetNetCode() )
|
if( copperIntersection.any() && zone && pad && zone->GetNetCode() == pad->GetNetCode() )
|
||||||
{
|
{
|
||||||
PCB_LAYER_ID layer = active;
|
PCB_LAYER_ID layer = UNDEFINED_LAYER;
|
||||||
|
|
||||||
if( !zone->IsOnLayer( active ) )
|
if( zone->IsOnLayer( active ) )
|
||||||
|
layer = active;
|
||||||
|
else if( zone->GetLayerSet().count() > 0 )
|
||||||
layer = zone->GetLayerSet().Seq().front();
|
layer = zone->GetLayerSet().Seq().front();
|
||||||
|
|
||||||
r = m_inspectClearanceDialog->AddPage( _( "Zone" ) );
|
r = m_inspectClearanceDialog->AddPage( _( "Zone" ) );
|
||||||
|
|
|
@ -884,7 +884,7 @@ void ZONE::HatchBorder()
|
||||||
int hatch_line_len = m_borderHatchPitch;
|
int hatch_line_len = m_borderHatchPitch;
|
||||||
|
|
||||||
// To have a better look, give a slope depending on the layer
|
// To have a better look, give a slope depending on the layer
|
||||||
int layer = GetLayerSet().Seq()[0];
|
int layer = GetFirstLayer();
|
||||||
int slope_flag = (layer & 1) ? 1 : -1; // 1 or -1
|
int slope_flag = (layer & 1) ? 1 : -1; // 1 or -1
|
||||||
double slope = 0.707106 * slope_flag; // 45 degrees slope
|
double slope = 0.707106 * slope_flag; // 45 degrees slope
|
||||||
int max_a, min_a;
|
int max_a, min_a;
|
||||||
|
|
Loading…
Reference in New Issue