mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-13 17:53:11 +02:00
Honour front/back layer types for user layer.
Fixes https://gitlab.com/kicad/code/kicad/-/issues/21284
This commit is contained in:
parent
9d770fe243
commit
0495828a55
@ -485,26 +485,18 @@ void BOARD_ADAPTER::InitSettings( REPORTER* aStatusReporter, REPORTER* aWarningR
|
||||
const float zpos_copperTop_front = m_layerZcoordTop[F_Cu];
|
||||
|
||||
// Fill not copper layers zpos
|
||||
for( int layer_id = 0; layer_id < PCB_LAYER_ID_COUNT; layer_id++ )
|
||||
for( int layer = 0; layer < PCB_LAYER_ID_COUNT; layer++ )
|
||||
{
|
||||
if( IsCopperLayer( (PCB_LAYER_ID)layer_id ) )
|
||||
PCB_LAYER_ID layer_id = ToLAYER_ID( layer );
|
||||
|
||||
if( IsCopperLayer( layer_id ) )
|
||||
continue;
|
||||
|
||||
float zposBottom = zpos_copperTop_front + 2.0f * zpos_offset;
|
||||
float zposTop = zposBottom + m_frontCopperThickness3DU;
|
||||
float zposBottom;
|
||||
float zposTop;
|
||||
|
||||
switch( layer_id )
|
||||
{
|
||||
case B_Adhes:
|
||||
zposBottom = zpos_copperTop_back - 2.0f * zpos_offset;
|
||||
zposTop = zposBottom - m_nonCopperLayerThickness3DU;
|
||||
break;
|
||||
|
||||
case F_Adhes:
|
||||
zposBottom = zpos_copperTop_front + 2.0f * zpos_offset;
|
||||
zposTop = zposBottom + m_nonCopperLayerThickness3DU;
|
||||
break;
|
||||
|
||||
case B_Mask:
|
||||
zposBottom = zpos_copperTop_back;
|
||||
zposTop = zpos_copperTop_back - m_backMaskThickness3DU;
|
||||
@ -536,11 +528,21 @@ void BOARD_ADAPTER::InitSettings( REPORTER* aStatusReporter, REPORTER* aWarningR
|
||||
break;
|
||||
|
||||
default:
|
||||
if( m_board->IsBackLayer( layer_id ) )
|
||||
{
|
||||
zposBottom = zpos_copperTop_back - 2.0f * zpos_offset;
|
||||
zposTop = zposBottom - m_nonCopperLayerThickness3DU;
|
||||
}
|
||||
else
|
||||
{
|
||||
zposBottom = zpos_copperTop_front + 2.0f * zpos_offset;
|
||||
zposTop = zposBottom + m_nonCopperLayerThickness3DU;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
m_layerZcoordTop[(PCB_LAYER_ID)layer_id] = zposTop;
|
||||
m_layerZcoordBottom[(PCB_LAYER_ID)layer_id] = zposBottom;
|
||||
m_layerZcoordTop[layer_id] = zposTop;
|
||||
m_layerZcoordBottom[layer_id] = zposBottom;
|
||||
}
|
||||
|
||||
m_boardCenter = SFVEC3F( m_boardPos.x * m_biuTo3Dunits, m_boardPos.y * m_biuTo3Dunits, 0.0f );
|
||||
|
@ -714,6 +714,18 @@ bool BOARD::SetLayerName( PCB_LAYER_ID aLayer, const wxString& aLayerName )
|
||||
}
|
||||
|
||||
|
||||
bool BOARD::IsFrontLayer( PCB_LAYER_ID aLayer ) const
|
||||
{
|
||||
return ::IsFrontLayer( aLayer ) || GetLayerType( aLayer ) == LT_FRONT;
|
||||
}
|
||||
|
||||
|
||||
bool BOARD::IsBackLayer( PCB_LAYER_ID aLayer ) const
|
||||
{
|
||||
return ::IsBackLayer( aLayer ) || GetLayerType( aLayer ) == LT_BACK;
|
||||
}
|
||||
|
||||
|
||||
LAYER_T BOARD::GetLayerType( PCB_LAYER_ID aLayer ) const
|
||||
{
|
||||
if( IsLayerEnabled( aLayer ) )
|
||||
|
@ -849,6 +849,16 @@ public:
|
||||
*/
|
||||
bool SetLayerDescr( PCB_LAYER_ID aIndex, const LAYER& aLayer );
|
||||
|
||||
/**
|
||||
* @return true if the layer is a front layer, or a user layer designated "Off-board, front"
|
||||
*/
|
||||
bool IsFrontLayer( PCB_LAYER_ID aLayer ) const;
|
||||
|
||||
/**
|
||||
* @return true if the layer is a back layer, or a user layer designated "Off-board, back"
|
||||
*/
|
||||
bool IsBackLayer( PCB_LAYER_ID aLayer ) const;
|
||||
|
||||
/**
|
||||
* Return the type of the copper layer given by aLayer.
|
||||
*
|
||||
|
@ -430,7 +430,12 @@ void PCB_FIELDS_GRID_TABLE::SetValueAsLong( int aRow, int aCol, long aValue )
|
||||
{
|
||||
case PFC_LAYER:
|
||||
field.SetLayer( ToLAYER_ID( (int) aValue ) );
|
||||
field.SetMirrored( IsBackLayer( field.GetLayer() ) );
|
||||
|
||||
if( BOARD* board = field.GetBoard() )
|
||||
field.SetMirrored( board->IsBackLayer( field.GetLayer() ) );
|
||||
else
|
||||
field.SetMirrored( IsBackLayer( field.GetLayer() ) );
|
||||
|
||||
break;
|
||||
|
||||
default:
|
||||
|
@ -458,9 +458,9 @@ void ODB_MATRIX_ENTITY::AddAuxilliaryMatrixLayer()
|
||||
}
|
||||
else
|
||||
{
|
||||
if( IsFrontLayer( std::get<1>( aLayerPair ) ) )
|
||||
if( m_board->IsFrontLayer( std::get<1>( aLayerPair ) ) )
|
||||
dLayerName = wxString::Format( "%s_front", featureName );
|
||||
else if( IsBackLayer( std::get<1>( aLayerPair ) ) )
|
||||
else if( m_board->IsBackLayer( std::get<1>( aLayerPair ) ) )
|
||||
dLayerName = wxString::Format( "%s_back", featureName );
|
||||
else
|
||||
return;
|
||||
@ -775,9 +775,9 @@ void ODB_LAYER_ENTITY::InitAuxilliaryData()
|
||||
}
|
||||
else
|
||||
{
|
||||
if( IsFrontLayer( std::get<1>( layer_pair ) ) )
|
||||
if( m_board->IsFrontLayer( std::get<1>( layer_pair ) ) )
|
||||
dLayerName = wxString::Format( "%s_front", featureName );
|
||||
else if( IsBackLayer( std::get<1>( layer_pair ) ) )
|
||||
else if( m_board->IsBackLayer( std::get<1>( layer_pair ) ) )
|
||||
dLayerName = wxString::Format( "%s_back", featureName );
|
||||
else
|
||||
return;
|
||||
|
@ -25,6 +25,7 @@
|
||||
#include <font/font.h>
|
||||
#include <widgets/msgpanel.h>
|
||||
#include <string_utils.h>
|
||||
#include <board.h>
|
||||
#include <pcb_table.h>
|
||||
#include <pcb_tablecell.h>
|
||||
|
||||
@ -34,8 +35,10 @@ PCB_TABLECELL::PCB_TABLECELL( BOARD_ITEM* aParent ) :
|
||||
m_colSpan( 1 ),
|
||||
m_rowSpan( 1 )
|
||||
{
|
||||
if( IsBackLayer( aParent->GetLayer() ) )
|
||||
SetMirrored( true );
|
||||
if( BOARD* board = GetBoard() )
|
||||
SetMirrored( board->IsBackLayer( aParent->GetLayer() ) );
|
||||
else
|
||||
SetMirrored( IsBackLayer( aParent->GetLayer() ) );
|
||||
|
||||
SetRectangleHeight( std::numeric_limits<int>::max() / 2 );
|
||||
SetRectangleWidth( std::numeric_limits<int>::max() / 2 );
|
||||
|
@ -313,7 +313,11 @@ void PCB_TEXT::StyleFromSettings( const BOARD_DESIGN_SETTINGS& settings )
|
||||
SetTextThickness( settings.GetTextThickness( GetLayer() ) );
|
||||
SetItalic( settings.GetTextItalic( GetLayer() ) );
|
||||
SetKeepUpright( settings.GetTextUpright( GetLayer() ) );
|
||||
SetMirrored( IsBackLayer( GetLayer() ) );
|
||||
|
||||
if( BOARD* board = GetBoard() )
|
||||
SetMirrored( board->IsBackLayer( GetLayer() ) );
|
||||
else
|
||||
SetMirrored( IsBackLayer( GetLayer() ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -174,7 +174,11 @@ void PCB_TEXTBOX::StyleFromSettings( const BOARD_DESIGN_SETTINGS& settings )
|
||||
SetTextThickness( settings.GetTextThickness( GetLayer() ) );
|
||||
SetItalic( settings.GetTextItalic( GetLayer() ) );
|
||||
SetKeepUpright( settings.GetTextUpright( GetLayer() ) );
|
||||
SetMirrored( IsBackLayer( GetLayer() ) );
|
||||
|
||||
if( BOARD* board = GetBoard() )
|
||||
SetMirrored( board->IsBackLayer( GetLayer() ) );
|
||||
else
|
||||
SetMirrored( IsBackLayer( GetLayer() ) );
|
||||
}
|
||||
|
||||
|
||||
|
@ -316,7 +316,7 @@ void DRAWING_TOOL::Reset( RESET_REASON aReason )
|
||||
InferBold( &m_textAttrs );
|
||||
m_textAttrs.m_Italic = bds.GetTextItalic( m_layer );
|
||||
m_textAttrs.m_KeepUpright = bds.GetTextUpright( m_layer );
|
||||
m_textAttrs.m_Mirrored = IsBackLayer( m_layer );
|
||||
m_textAttrs.m_Mirrored = m_board->IsBackLayer( m_layer );
|
||||
m_textAttrs.m_Halign = GR_TEXT_H_ALIGN_LEFT;
|
||||
m_textAttrs.m_Valign = GR_TEXT_V_ALIGN_TOP;
|
||||
|
||||
@ -978,7 +978,7 @@ int DRAWING_TOOL::PlaceText( const TOOL_EVENT& aEvent )
|
||||
InferBold( &textAttrs );
|
||||
textAttrs.m_Italic = bds.GetTextItalic( layer );
|
||||
textAttrs.m_KeepUpright = bds.GetTextUpright( layer );
|
||||
textAttrs.m_Mirrored = IsBackLayer( layer );
|
||||
textAttrs.m_Mirrored = m_board->IsBackLayer( layer );
|
||||
textAttrs.m_Halign = GR_TEXT_H_ALIGN_LEFT;
|
||||
textAttrs.m_Valign = GR_TEXT_V_ALIGN_BOTTOM;
|
||||
|
||||
@ -1538,7 +1538,7 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
|
||||
t = dimension->Type();
|
||||
|
||||
dimension->SetLayer( layer );
|
||||
dimension->SetMirrored( IsBackLayer( layer ) );
|
||||
dimension->SetMirrored( m_board->IsBackLayer( layer ) );
|
||||
dimension->SetTextSize( boardSettings.GetTextSize( layer ) );
|
||||
dimension->SetTextThickness( boardSettings.GetTextThickness( layer ) );
|
||||
dimension->SetItalic( boardSettings.GetTextItalic( layer ) );
|
||||
@ -2124,7 +2124,7 @@ bool DRAWING_TOOL::drawShape( const TOOL_EVENT& aTool, PCB_SHAPE** aGraphic,
|
||||
InferBold( &m_textAttrs );
|
||||
m_textAttrs.m_Italic = bds.GetTextItalic( m_layer );
|
||||
m_textAttrs.m_KeepUpright = bds.GetTextUpright( m_layer );
|
||||
m_textAttrs.m_Mirrored = IsBackLayer( m_layer );
|
||||
m_textAttrs.m_Mirrored = m_board->IsBackLayer( m_layer );
|
||||
m_textAttrs.m_Halign = GR_TEXT_H_ALIGN_LEFT;
|
||||
m_textAttrs.m_Valign = GR_TEXT_V_ALIGN_TOP;
|
||||
}
|
||||
@ -2248,7 +2248,7 @@ bool DRAWING_TOOL::drawShape( const TOOL_EVENT& aTool, PCB_SHAPE** aGraphic,
|
||||
InferBold( &m_textAttrs );
|
||||
m_textAttrs.m_Italic = bds.GetTextItalic( m_layer );
|
||||
m_textAttrs.m_KeepUpright = bds.GetTextUpright( m_layer );
|
||||
m_textAttrs.m_Mirrored = IsBackLayer( m_layer );
|
||||
m_textAttrs.m_Mirrored = m_board->IsBackLayer( m_layer );
|
||||
m_textAttrs.m_Halign = GR_TEXT_H_ALIGN_LEFT;
|
||||
m_textAttrs.m_Valign = GR_TEXT_V_ALIGN_TOP;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user