Fix some cases where PCB_FP_ZONE_T was left out.
Fixes https://gitlab.com/kicad/code/kicad/issues/7615
This commit is contained in:
parent
c1003e2ddd
commit
2bc10d58b5
|
@ -250,8 +250,11 @@ COLOR4D PCB_RENDER_SETTINGS::GetColor( const VIEW_ITEM* aItem, int aLayer ) cons
|
|||
}
|
||||
|
||||
// Zones should pull from the copper layer
|
||||
if( item && item->Type() == PCB_ZONE_T && IsZoneLayer( aLayer ) )
|
||||
aLayer = aLayer - LAYER_ZONE_START;
|
||||
if( item && ( item->Type() == PCB_ZONE_T || item->Type() == PCB_FP_ZONE_T ) )
|
||||
{
|
||||
if( IsZoneLayer( aLayer ) )
|
||||
aLayer = aLayer - LAYER_ZONE_START;
|
||||
}
|
||||
|
||||
// Hole walls should pull from the copper layer
|
||||
if( aLayer == LAYER_PAD_HOLEWALLS )
|
||||
|
|
|
@ -1790,19 +1790,23 @@ void PCB_POINT_EDITOR::setAltConstraint( bool aEnabled )
|
|||
if( aEnabled )
|
||||
{
|
||||
EDIT_LINE* line = dynamic_cast<EDIT_LINE*>( m_editedPoint );
|
||||
bool isPoly = false;
|
||||
bool isPoly;
|
||||
|
||||
if( m_editPoints->GetParent()->Type() == PCB_ZONE_T
|
||||
|| m_editPoints->GetParent()->Type() == PCB_FP_ZONE_T )
|
||||
switch( m_editPoints->GetParent()->Type() )
|
||||
{
|
||||
case PCB_ZONE_T:
|
||||
case PCB_FP_ZONE_T:
|
||||
isPoly = true;
|
||||
}
|
||||
break;
|
||||
|
||||
else if( m_editPoints->GetParent()->Type() == PCB_SHAPE_T
|
||||
|| m_editPoints->GetParent()->Type() == PCB_FP_SHAPE_T )
|
||||
{
|
||||
PCB_SHAPE* shape = static_cast<PCB_SHAPE*>( m_editPoints->GetParent() );
|
||||
isPoly = shape->GetShape() == S_POLYGON;
|
||||
case PCB_SHAPE_T:
|
||||
case PCB_FP_SHAPE_T:
|
||||
isPoly = static_cast<PCB_SHAPE*>( m_editPoints->GetParent() )->GetShape() == S_POLYGON;
|
||||
break;
|
||||
|
||||
default:
|
||||
isPoly = false;
|
||||
break;
|
||||
}
|
||||
|
||||
if( line && isPoly )
|
||||
|
@ -1929,26 +1933,32 @@ bool PCB_POINT_EDITOR::removeCornerCondition( const SELECTION& )
|
|||
if( !m_editPoints || !m_editedPoint )
|
||||
return false;
|
||||
|
||||
EDA_ITEM* item = m_editPoints->GetParent();
|
||||
EDA_ITEM* item = m_editPoints->GetParent();
|
||||
SHAPE_POLY_SET* polyset = nullptr;
|
||||
|
||||
if( !item )
|
||||
return false;
|
||||
|
||||
if( !( item->Type() == PCB_ZONE_T
|
||||
|| item->Type() == PCB_FP_ZONE_T
|
||||
|| ( ( item->Type() == PCB_FP_SHAPE_T || item->Type() == PCB_SHAPE_T )
|
||||
&& static_cast<PCB_SHAPE*>( item )->GetShape() == S_POLYGON ) ) )
|
||||
switch( item->Type() )
|
||||
{
|
||||
case PCB_ZONE_T:
|
||||
case PCB_FP_ZONE_T:
|
||||
polyset = static_cast<ZONE*>( item )->Outline();
|
||||
break;
|
||||
|
||||
case PCB_SHAPE_T:
|
||||
case PCB_FP_SHAPE_T:
|
||||
if( static_cast<PCB_SHAPE*>( item )->GetShape() == S_POLYGON )
|
||||
polyset = &static_cast<PCB_SHAPE*>( item )->GetPolyShape();
|
||||
else
|
||||
return false;
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
SHAPE_POLY_SET *polyset;
|
||||
|
||||
if( item->Type() == PCB_ZONE_T || item->Type() == PCB_FP_ZONE_T )
|
||||
polyset = static_cast<ZONE*>( item )->Outline();
|
||||
else
|
||||
polyset = &static_cast<PCB_SHAPE*>( item )->GetPolyShape();
|
||||
|
||||
auto vertex = findVertex( *polyset, *m_editedPoint );
|
||||
|
||||
if( !vertex.first )
|
||||
|
|
|
@ -378,7 +378,7 @@ int PCB_SELECTION_TOOL::Main( const TOOL_EVENT& aEvent )
|
|||
|
||||
for( EDA_ITEM* item : aCollector )
|
||||
{
|
||||
if( item->Type() == PCB_ZONE_T )
|
||||
if( item->Type() == PCB_ZONE_T || item->Type() == PCB_FP_ZONE_T )
|
||||
{
|
||||
ZONE* zone = static_cast<ZONE*>( item );
|
||||
|
||||
|
@ -2419,7 +2419,7 @@ void PCB_SELECTION_TOOL::GuessSelectionCandidates( GENERAL_COLLECTOR& aCollector
|
|||
BOARD_ITEM* item = aCollector[i];
|
||||
double area;
|
||||
|
||||
if( item->Type() == PCB_ZONE_T
|
||||
if( ( item->Type() == PCB_ZONE_T || item->Type() == PCB_FP_ZONE_T )
|
||||
&& static_cast<ZONE*>( item )->HitTestForEdge( where, MAX_SLOP * pixel / 2 ) )
|
||||
{
|
||||
// Zone borders are very specific, so make them "small"
|
||||
|
|
|
@ -198,7 +198,7 @@ int ZONE_FILLER_TOOL::ZoneUnfill( const TOOL_EVENT& aEvent )
|
|||
|
||||
for( EDA_ITEM* item : selection() )
|
||||
{
|
||||
assert( item->Type() == PCB_ZONE_T );
|
||||
assert( item->Type() == PCB_ZONE_T || item->Type() == PCB_FP_ZONE_T );
|
||||
|
||||
ZONE* zone = static_cast<ZONE*>( item );
|
||||
|
||||
|
|
|
@ -1095,7 +1095,7 @@ BITMAP_DEF ZONE::GetMenuImage() const
|
|||
|
||||
void ZONE::SwapData( BOARD_ITEM* aImage )
|
||||
{
|
||||
assert( aImage->Type() == PCB_ZONE_T );
|
||||
assert( aImage->Type() == PCB_ZONE_T || aImage->Type() == PCB_FP_ZONE_T );
|
||||
|
||||
std::swap( *((ZONE*) this), *((ZONE*) aImage) );
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue