Silkscreen clearance tests are run across layer pairs.
(So any rule areas must pretend they're on all the given side's layers to get expected results.)
This commit is contained in:
parent
ab2fdfb9cc
commit
560f6f87e5
|
@ -621,6 +621,31 @@ bool searchAreas( BOARD* aBoard, const wxString& aArg, PCBEXPR_CONTEXT* aCtx,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
class SCOPED_LAYERSET
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
SCOPED_LAYERSET( BOARD_ITEM* aItem )
|
||||||
|
{
|
||||||
|
m_item = aItem;
|
||||||
|
m_layers = aItem->GetLayerSet();
|
||||||
|
}
|
||||||
|
|
||||||
|
~SCOPED_LAYERSET()
|
||||||
|
{
|
||||||
|
m_item->SetLayerSet( m_layers );
|
||||||
|
}
|
||||||
|
|
||||||
|
void Add( PCB_LAYER_ID aLayer )
|
||||||
|
{
|
||||||
|
m_item->SetLayerSet( m_item->GetLayerSet().set( aLayer ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
BOARD_ITEM* m_item;
|
||||||
|
LSET m_layers;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
#define MISSING_AREA_ARG( f ) \
|
#define MISSING_AREA_ARG( f ) \
|
||||||
wxString::Format( _( "Missing rule-area argument (A, B, or rule-area name) to %s." ), f )
|
wxString::Format( _( "Missing rule-area argument (A, B, or rule-area name) to %s." ), f )
|
||||||
|
|
||||||
|
@ -660,6 +685,18 @@ static void intersectsAreaFunc( LIBEVAL::CONTEXT* aCtx, void* self )
|
||||||
if( !aArea || aArea == item || aArea->GetParent() == item )
|
if( !aArea || aArea == item || aArea->GetParent() == item )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
SCOPED_LAYERSET scopedLayerSet( aArea );
|
||||||
|
|
||||||
|
if( context->GetConstraint() == SILK_CLEARANCE_CONSTRAINT )
|
||||||
|
{
|
||||||
|
// Silk clearance tests are run across layer pairs
|
||||||
|
if( ( aArea->IsOnLayer( F_SilkS ) && IsFrontLayer( aLayer ) )
|
||||||
|
|| ( aArea->IsOnLayer( B_SilkS ) && IsBackLayer( aLayer ) ) )
|
||||||
|
{
|
||||||
|
scopedLayerSet.Add( aLayer );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
LSET commonLayers = aArea->GetLayerSet() & item->GetLayerSet();
|
LSET commonLayers = aArea->GetLayerSet() & item->GetLayerSet();
|
||||||
|
|
||||||
if( !commonLayers.any() )
|
if( !commonLayers.any() )
|
||||||
|
|
Loading…
Reference in New Issue