Prevent invalid via layers due to property editor

This commit is contained in:
Mark Roszko 2025-07-08 00:54:49 +00:00
parent fde51f4c79
commit 382f2ee302
2 changed files with 19 additions and 4 deletions

View File

@ -1156,7 +1156,6 @@ void PCB_VIA::SetLayerSet( const LSET& aLayerSet )
void PCB_VIA::SetLayerPair( PCB_LAYER_ID aTopLayer, PCB_LAYER_ID aBottomLayer )
{
Padstack().Drill().start = aTopLayer;
Padstack().Drill().end = aBottomLayer;
SanitizeLayers();
@ -1165,13 +1164,24 @@ void PCB_VIA::SetLayerPair( PCB_LAYER_ID aTopLayer, PCB_LAYER_ID aBottomLayer )
void PCB_VIA::SetTopLayer( PCB_LAYER_ID aLayer )
{
Padstack().Drill().start = aLayer;
// refuse invalid via
if( aLayer == Padstack().Drill().end )
return;
Padstack().Drill().start = aLayer;
SanitizeLayers();
}
void PCB_VIA::SetBottomLayer( PCB_LAYER_ID aLayer )
{
// refuse invalid via
if( aLayer == Padstack().Drill().start )
return;
Padstack().Drill().end = aLayer;
SanitizeLayers();
}
@ -2163,7 +2173,7 @@ static struct TRACK_VIA_DESC
propMgr.AddProperty( new PROPERTY<PCB_VIA, int>( _HKI( "Hole" ),
&PCB_VIA::SetDrill, &PCB_VIA::GetDrillValue, PROPERTY_DISPLAY::PT_SIZE ), groupVia );
propMgr.AddProperty( new PROPERTY_ENUM<PCB_VIA, PCB_LAYER_ID>( _HKI( "Layer Top" ),
&PCB_VIA::SetLayer, &PCB_VIA::GetLayer ), groupVia );
&PCB_VIA::SetTopLayer, &PCB_VIA::GetLayer ), groupVia );
propMgr.AddProperty( new PROPERTY_ENUM<PCB_VIA, PCB_LAYER_ID>( _HKI( "Layer Bottom" ),
&PCB_VIA::SetBottomLayer, &PCB_VIA::BottomLayer ), groupVia );
propMgr.AddProperty( new PROPERTY_ENUM<PCB_VIA, VIATYPE>( _HKI( "Via Type" ),

View File

@ -413,7 +413,12 @@ public:
bool HasValidLayerPair( int aCopperLayerCount );
VIATYPE GetViaType() const { return m_viaType; }
void SetViaType( VIATYPE aViaType ) { m_viaType = aViaType; }
void SetViaType( VIATYPE aViaType )
{
m_viaType = aViaType;
// If someone updates a VIA to TH, we want to kick out any non-outer layers
SanitizeLayers();
}
const PADSTACK& Padstack() const { return m_padStack; }
PADSTACK& Padstack() { return m_padStack; }