mirror of
https://gitlab.com/kicad/code/kicad.git
synced 2025-09-14 02:03:12 +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];
|
const float zpos_copperTop_front = m_layerZcoordTop[F_Cu];
|
||||||
|
|
||||||
// Fill not copper layers zpos
|
// 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;
|
continue;
|
||||||
|
|
||||||
float zposBottom = zpos_copperTop_front + 2.0f * zpos_offset;
|
float zposBottom;
|
||||||
float zposTop = zposBottom + m_frontCopperThickness3DU;
|
float zposTop;
|
||||||
|
|
||||||
switch( layer_id )
|
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:
|
case B_Mask:
|
||||||
zposBottom = zpos_copperTop_back;
|
zposBottom = zpos_copperTop_back;
|
||||||
zposTop = zpos_copperTop_back - m_backMaskThickness3DU;
|
zposTop = zpos_copperTop_back - m_backMaskThickness3DU;
|
||||||
@ -536,11 +528,21 @@ void BOARD_ADAPTER::InitSettings( REPORTER* aStatusReporter, REPORTER* aWarningR
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
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;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_layerZcoordTop[(PCB_LAYER_ID)layer_id] = zposTop;
|
m_layerZcoordTop[layer_id] = zposTop;
|
||||||
m_layerZcoordBottom[(PCB_LAYER_ID)layer_id] = zposBottom;
|
m_layerZcoordBottom[layer_id] = zposBottom;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_boardCenter = SFVEC3F( m_boardPos.x * m_biuTo3Dunits, m_boardPos.y * m_biuTo3Dunits, 0.0f );
|
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
|
LAYER_T BOARD::GetLayerType( PCB_LAYER_ID aLayer ) const
|
||||||
{
|
{
|
||||||
if( IsLayerEnabled( aLayer ) )
|
if( IsLayerEnabled( aLayer ) )
|
||||||
|
@ -849,6 +849,16 @@ public:
|
|||||||
*/
|
*/
|
||||||
bool SetLayerDescr( PCB_LAYER_ID aIndex, const LAYER& aLayer );
|
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.
|
* 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:
|
case PFC_LAYER:
|
||||||
field.SetLayer( ToLAYER_ID( (int) aValue ) );
|
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;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -458,9 +458,9 @@ void ODB_MATRIX_ENTITY::AddAuxilliaryMatrixLayer()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( IsFrontLayer( std::get<1>( aLayerPair ) ) )
|
if( m_board->IsFrontLayer( std::get<1>( aLayerPair ) ) )
|
||||||
dLayerName = wxString::Format( "%s_front", featureName );
|
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 );
|
dLayerName = wxString::Format( "%s_back", featureName );
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
@ -775,9 +775,9 @@ void ODB_LAYER_ENTITY::InitAuxilliaryData()
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if( IsFrontLayer( std::get<1>( layer_pair ) ) )
|
if( m_board->IsFrontLayer( std::get<1>( layer_pair ) ) )
|
||||||
dLayerName = wxString::Format( "%s_front", featureName );
|
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 );
|
dLayerName = wxString::Format( "%s_back", featureName );
|
||||||
else
|
else
|
||||||
return;
|
return;
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#include <font/font.h>
|
#include <font/font.h>
|
||||||
#include <widgets/msgpanel.h>
|
#include <widgets/msgpanel.h>
|
||||||
#include <string_utils.h>
|
#include <string_utils.h>
|
||||||
|
#include <board.h>
|
||||||
#include <pcb_table.h>
|
#include <pcb_table.h>
|
||||||
#include <pcb_tablecell.h>
|
#include <pcb_tablecell.h>
|
||||||
|
|
||||||
@ -34,8 +35,10 @@ PCB_TABLECELL::PCB_TABLECELL( BOARD_ITEM* aParent ) :
|
|||||||
m_colSpan( 1 ),
|
m_colSpan( 1 ),
|
||||||
m_rowSpan( 1 )
|
m_rowSpan( 1 )
|
||||||
{
|
{
|
||||||
if( IsBackLayer( aParent->GetLayer() ) )
|
if( BOARD* board = GetBoard() )
|
||||||
SetMirrored( true );
|
SetMirrored( board->IsBackLayer( aParent->GetLayer() ) );
|
||||||
|
else
|
||||||
|
SetMirrored( IsBackLayer( aParent->GetLayer() ) );
|
||||||
|
|
||||||
SetRectangleHeight( std::numeric_limits<int>::max() / 2 );
|
SetRectangleHeight( std::numeric_limits<int>::max() / 2 );
|
||||||
SetRectangleWidth( 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() ) );
|
SetTextThickness( settings.GetTextThickness( GetLayer() ) );
|
||||||
SetItalic( settings.GetTextItalic( GetLayer() ) );
|
SetItalic( settings.GetTextItalic( GetLayer() ) );
|
||||||
SetKeepUpright( settings.GetTextUpright( 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() ) );
|
SetTextThickness( settings.GetTextThickness( GetLayer() ) );
|
||||||
SetItalic( settings.GetTextItalic( GetLayer() ) );
|
SetItalic( settings.GetTextItalic( GetLayer() ) );
|
||||||
SetKeepUpright( settings.GetTextUpright( 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 );
|
InferBold( &m_textAttrs );
|
||||||
m_textAttrs.m_Italic = bds.GetTextItalic( m_layer );
|
m_textAttrs.m_Italic = bds.GetTextItalic( m_layer );
|
||||||
m_textAttrs.m_KeepUpright = bds.GetTextUpright( 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_Halign = GR_TEXT_H_ALIGN_LEFT;
|
||||||
m_textAttrs.m_Valign = GR_TEXT_V_ALIGN_TOP;
|
m_textAttrs.m_Valign = GR_TEXT_V_ALIGN_TOP;
|
||||||
|
|
||||||
@ -978,7 +978,7 @@ int DRAWING_TOOL::PlaceText( const TOOL_EVENT& aEvent )
|
|||||||
InferBold( &textAttrs );
|
InferBold( &textAttrs );
|
||||||
textAttrs.m_Italic = bds.GetTextItalic( layer );
|
textAttrs.m_Italic = bds.GetTextItalic( layer );
|
||||||
textAttrs.m_KeepUpright = bds.GetTextUpright( 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_Halign = GR_TEXT_H_ALIGN_LEFT;
|
||||||
textAttrs.m_Valign = GR_TEXT_V_ALIGN_BOTTOM;
|
textAttrs.m_Valign = GR_TEXT_V_ALIGN_BOTTOM;
|
||||||
|
|
||||||
@ -1538,7 +1538,7 @@ int DRAWING_TOOL::DrawDimension( const TOOL_EVENT& aEvent )
|
|||||||
t = dimension->Type();
|
t = dimension->Type();
|
||||||
|
|
||||||
dimension->SetLayer( layer );
|
dimension->SetLayer( layer );
|
||||||
dimension->SetMirrored( IsBackLayer( layer ) );
|
dimension->SetMirrored( m_board->IsBackLayer( layer ) );
|
||||||
dimension->SetTextSize( boardSettings.GetTextSize( layer ) );
|
dimension->SetTextSize( boardSettings.GetTextSize( layer ) );
|
||||||
dimension->SetTextThickness( boardSettings.GetTextThickness( layer ) );
|
dimension->SetTextThickness( boardSettings.GetTextThickness( layer ) );
|
||||||
dimension->SetItalic( boardSettings.GetTextItalic( layer ) );
|
dimension->SetItalic( boardSettings.GetTextItalic( layer ) );
|
||||||
@ -2124,7 +2124,7 @@ bool DRAWING_TOOL::drawShape( const TOOL_EVENT& aTool, PCB_SHAPE** aGraphic,
|
|||||||
InferBold( &m_textAttrs );
|
InferBold( &m_textAttrs );
|
||||||
m_textAttrs.m_Italic = bds.GetTextItalic( m_layer );
|
m_textAttrs.m_Italic = bds.GetTextItalic( m_layer );
|
||||||
m_textAttrs.m_KeepUpright = bds.GetTextUpright( 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_Halign = GR_TEXT_H_ALIGN_LEFT;
|
||||||
m_textAttrs.m_Valign = GR_TEXT_V_ALIGN_TOP;
|
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 );
|
InferBold( &m_textAttrs );
|
||||||
m_textAttrs.m_Italic = bds.GetTextItalic( m_layer );
|
m_textAttrs.m_Italic = bds.GetTextItalic( m_layer );
|
||||||
m_textAttrs.m_KeepUpright = bds.GetTextUpright( 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_Halign = GR_TEXT_H_ALIGN_LEFT;
|
||||||
m_textAttrs.m_Valign = GR_TEXT_V_ALIGN_TOP;
|
m_textAttrs.m_Valign = GR_TEXT_V_ALIGN_TOP;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user