Use board layer names when available.

Fixes https://gitlab.com/kicad/code/kicad/-/issues/20360
This commit is contained in:
Jeff Young 2025-03-17 21:23:39 +00:00
parent 142f8265c5
commit 6307f0aee8
7 changed files with 133 additions and 108 deletions

View File

@ -267,7 +267,7 @@ bool BOARD_ADAPTER::Is3dLayerEnabled( PCB_LAYER_ID aLayer,
case Eco2_User: return aVisibilityFlags.test( LAYER_3D_USER_ECO2 ); case Eco2_User: return aVisibilityFlags.test( LAYER_3D_USER_ECO2 );
default: default:
{ {
int layer3D = MapPCBUserLayerTo3DLayer( aLayer ); int layer3D = MapPCBLayerTo3DLayer( aLayer );
if( layer3D != UNDEFINED_LAYER ) if( layer3D != UNDEFINED_LAYER )
return aVisibilityFlags.test( layer3D ); return aVisibilityFlags.test( layer3D );
@ -922,7 +922,7 @@ std::bitset<LAYER_3D_END> BOARD_ADAPTER::GetVisibleLayers() const
ret.set( LAYER_3D_USER_ECO2, layers.test( Eco2_User ) ); ret.set( LAYER_3D_USER_ECO2, layers.test( Eco2_User ) );
for( int layer = LAYER_3D_USER_1; layer <= LAYER_3D_USER_45; ++layer ) for( int layer = LAYER_3D_USER_1; layer <= LAYER_3D_USER_45; ++layer )
ret.set( layer, layers.test( Map3DUserLayerToPCBLayer( layer ) ) ); ret.set( layer, layers.test( Map3DLayerToPCBLayer( layer ) ) );
ret.set( LAYER_FP_REFERENCES, plotParams.GetPlotReference() ); ret.set( LAYER_FP_REFERENCES, plotParams.GetPlotReference() );
ret.set( LAYER_FP_VALUES, plotParams.GetPlotValue() ); ret.set( LAYER_FP_VALUES, plotParams.GetPlotValue() );
@ -1047,7 +1047,7 @@ float BOARD_ADAPTER::GetFootprintZPos( bool aIsFlipped ) const
SFVEC4F BOARD_ADAPTER::GetLayerColor( int aLayerId ) const SFVEC4F BOARD_ADAPTER::GetLayerColor( int aLayerId ) const
{ {
if( aLayerId >= LAYER_3D_USER_1 && aLayerId <= LAYER_3D_USER_45 ) if( aLayerId >= LAYER_3D_USER_1 && aLayerId <= LAYER_3D_USER_45 )
aLayerId = Map3DUserLayerToPCBLayer( aLayerId ); aLayerId = Map3DLayerToPCBLayer( aLayerId );
wxASSERT( aLayerId < PCB_LAYER_ID_COUNT ); wxASSERT( aLayerId < PCB_LAYER_ID_COUNT );

View File

@ -361,11 +361,11 @@ void RENDER_3D_OPENGL::setLayerMaterial( PCB_LAYER_ID aLayerID )
default: default:
{ {
int layer3D = MapPCBUserLayerTo3DLayer( aLayerID ); int layer3D = MapPCBLayerTo3DLayer( aLayerID );
if( layer3D != UNDEFINED_LAYER ) // Note: MUST do this in LAYER_3D space; User_1..User_45 are NOT contiguous
if( layer3D >= LAYER_3D_USER_1 && layer3D <= LAYER_3D_USER_45 )
{ {
// Note: MUST do this in LAYER_3D space; User_1..User_45 are NOT contiguous
int user_idx = layer3D - LAYER_3D_USER_1; int user_idx = layer3D - LAYER_3D_USER_1;
m_materials.m_Plastic.m_Diffuse = m_boardAdapter.m_UserDefinedLayerColor[ user_idx ]; m_materials.m_Plastic.m_Diffuse = m_boardAdapter.m_UserDefinedLayerColor[ user_idx ];

View File

@ -633,11 +633,11 @@ void RENDER_3D_RAYTRACE_BASE::Reload( REPORTER* aStatusReporter, REPORTER* aWarn
default: default:
{ {
int layer3D = MapPCBUserLayerTo3DLayer( layer_id ); int layer3D = MapPCBLayerTo3DLayer( layer_id );
if( layer3D != UNDEFINED_LAYER ) // Note: MUST do this in LAYER_3D space; User_1..User_45 are NOT contiguous
if( layer3D >= LAYER_3D_USER_1 && layer3D <= LAYER_3D_USER_45 )
{ {
// Note: MUST do this in LAYER_3D space; User_1..User_45 are NOT contiguous
layerColor = m_boardAdapter.m_UserDefinedLayerColor[ layer3D - LAYER_3D_USER_1 ]; layerColor = m_boardAdapter.m_UserDefinedLayerColor[ layer3D - LAYER_3D_USER_1 ];
} }
else if( m_boardAdapter.m_Cfg->m_Render.differentiate_plated_copper ) else if( m_boardAdapter.m_Cfg->m_Render.differentiate_plated_copper )

View File

@ -579,8 +579,13 @@ void APPEARANCE_CONTROLS_3D::rebuildLayers()
sizer->AddSpacer( 5 ); sizer->AddSpacer( 5 );
wxStaticText* label = new wxStaticText( m_windowLayers, layer, wxString layerName = aSetting->GetLabel();
aSetting->GetLabel() ); PCB_LAYER_ID boardLayer = Map3DLayerToPCBLayer( layer );
if( boardLayer != UNDEFINED_LAYER )
layerName = m_frame->GetBoard()->GetLayerName( boardLayer );
wxStaticText* label = new wxStaticText( m_windowLayers, layer, layerName );
label->Wrap( -1 ); label->Wrap( -1 );
label->SetToolTip( aSetting->GetTooltip() ); label->SetToolTip( aSetting->GetTooltip() );
@ -630,7 +635,7 @@ void APPEARANCE_CONTROLS_3D::rebuildLayers()
} }
else if( setting->m_Id >= LAYER_3D_USER_1 && setting->m_Id <= LAYER_3D_USER_45 ) else if( setting->m_Id >= LAYER_3D_USER_1 && setting->m_Id <= LAYER_3D_USER_45 )
{ {
if( enabled.test( Map3DUserLayerToPCBLayer( setting->m_Id ) ) ) if( enabled.test( Map3DLayerToPCBLayer( setting->m_Id ) ) )
appendLayer( setting ); appendLayer( setting );
} }
else else

View File

@ -262,113 +262,133 @@ PCB_LAYER_ID BoardLayerFromLegacyId( int aLegacyId )
} }
PCB_LAYER_ID Map3DUserLayerToPCBLayer( int aLayer ) PCB_LAYER_ID Map3DLayerToPCBLayer( int aLayer )
{ {
// NOTE: User_1..User45 are NOT consecutive numbers! // NOTE: User_1..User45 are NOT consecutive numbers!
switch( aLayer ) switch( aLayer )
{ {
case LAYER_3D_USER_1: return User_1; case LAYER_3D_COPPER_TOP: return F_Cu;
case LAYER_3D_USER_2: return User_2; case LAYER_3D_COPPER_BOTTOM: return B_Cu;
case LAYER_3D_USER_3: return User_3; case LAYER_3D_SILKSCREEN_BOTTOM: return B_SilkS;
case LAYER_3D_USER_4: return User_4; case LAYER_3D_SILKSCREEN_TOP: return F_SilkS;
case LAYER_3D_USER_5: return User_5; case LAYER_3D_SOLDERMASK_BOTTOM: return B_Mask;
case LAYER_3D_USER_6: return User_6; case LAYER_3D_SOLDERMASK_TOP: return F_Mask;
case LAYER_3D_USER_7: return User_7; case LAYER_3D_USER_COMMENTS: return Cmts_User;
case LAYER_3D_USER_8: return User_8; case LAYER_3D_USER_DRAWINGS: return Dwgs_User;
case LAYER_3D_USER_9: return User_9; case LAYER_3D_USER_ECO1: return Eco1_User;
case LAYER_3D_USER_10: return User_10; case LAYER_3D_USER_ECO2: return Eco2_User;
case LAYER_3D_USER_11: return User_11; case LAYER_3D_USER_1: return User_1;
case LAYER_3D_USER_12: return User_12; case LAYER_3D_USER_2: return User_2;
case LAYER_3D_USER_13: return User_13; case LAYER_3D_USER_3: return User_3;
case LAYER_3D_USER_14: return User_14; case LAYER_3D_USER_4: return User_4;
case LAYER_3D_USER_15: return User_15; case LAYER_3D_USER_5: return User_5;
case LAYER_3D_USER_16: return User_16; case LAYER_3D_USER_6: return User_6;
case LAYER_3D_USER_17: return User_17; case LAYER_3D_USER_7: return User_7;
case LAYER_3D_USER_18: return User_18; case LAYER_3D_USER_8: return User_8;
case LAYER_3D_USER_19: return User_19; case LAYER_3D_USER_9: return User_9;
case LAYER_3D_USER_20: return User_20; case LAYER_3D_USER_10: return User_10;
case LAYER_3D_USER_21: return User_21; case LAYER_3D_USER_11: return User_11;
case LAYER_3D_USER_22: return User_22; case LAYER_3D_USER_12: return User_12;
case LAYER_3D_USER_23: return User_23; case LAYER_3D_USER_13: return User_13;
case LAYER_3D_USER_24: return User_24; case LAYER_3D_USER_14: return User_14;
case LAYER_3D_USER_25: return User_25; case LAYER_3D_USER_15: return User_15;
case LAYER_3D_USER_26: return User_26; case LAYER_3D_USER_16: return User_16;
case LAYER_3D_USER_27: return User_27; case LAYER_3D_USER_17: return User_17;
case LAYER_3D_USER_28: return User_28; case LAYER_3D_USER_18: return User_18;
case LAYER_3D_USER_29: return User_29; case LAYER_3D_USER_19: return User_19;
case LAYER_3D_USER_30: return User_30; case LAYER_3D_USER_20: return User_20;
case LAYER_3D_USER_31: return User_31; case LAYER_3D_USER_21: return User_21;
case LAYER_3D_USER_32: return User_32; case LAYER_3D_USER_22: return User_22;
case LAYER_3D_USER_33: return User_33; case LAYER_3D_USER_23: return User_23;
case LAYER_3D_USER_34: return User_34; case LAYER_3D_USER_24: return User_24;
case LAYER_3D_USER_35: return User_35; case LAYER_3D_USER_25: return User_25;
case LAYER_3D_USER_36: return User_36; case LAYER_3D_USER_26: return User_26;
case LAYER_3D_USER_37: return User_37; case LAYER_3D_USER_27: return User_27;
case LAYER_3D_USER_38: return User_38; case LAYER_3D_USER_28: return User_28;
case LAYER_3D_USER_39: return User_39; case LAYER_3D_USER_29: return User_29;
case LAYER_3D_USER_40: return User_40; case LAYER_3D_USER_30: return User_30;
case LAYER_3D_USER_41: return User_41; case LAYER_3D_USER_31: return User_31;
case LAYER_3D_USER_42: return User_42; case LAYER_3D_USER_32: return User_32;
case LAYER_3D_USER_43: return User_43; case LAYER_3D_USER_33: return User_33;
case LAYER_3D_USER_44: return User_44; case LAYER_3D_USER_34: return User_34;
case LAYER_3D_USER_45: return User_45; case LAYER_3D_USER_35: return User_35;
case LAYER_3D_USER_36: return User_36;
case LAYER_3D_USER_37: return User_37;
case LAYER_3D_USER_38: return User_38;
case LAYER_3D_USER_39: return User_39;
case LAYER_3D_USER_40: return User_40;
case LAYER_3D_USER_41: return User_41;
case LAYER_3D_USER_42: return User_42;
case LAYER_3D_USER_43: return User_43;
case LAYER_3D_USER_44: return User_44;
case LAYER_3D_USER_45: return User_45;
default: return UNDEFINED_LAYER; default: return UNDEFINED_LAYER;
} }
} }
int MapPCBUserLayerTo3DLayer( PCB_LAYER_ID aLayer ) int MapPCBLayerTo3DLayer( PCB_LAYER_ID aLayer )
{ {
// NOTE: User_1..User45 are NOT consecutive numbers! // NOTE: User_1..User45 are NOT consecutive numbers!
switch( aLayer ) switch( aLayer )
{ {
case User_1: return LAYER_3D_USER_1; case F_Cu: return LAYER_3D_COPPER_TOP;
case User_2: return LAYER_3D_USER_2; case B_Cu: return LAYER_3D_COPPER_BOTTOM;
case User_3: return LAYER_3D_USER_3; case B_SilkS: return LAYER_3D_SILKSCREEN_BOTTOM;
case User_4: return LAYER_3D_USER_4; case F_SilkS: return LAYER_3D_SILKSCREEN_TOP;
case User_5: return LAYER_3D_USER_5; case B_Mask: return LAYER_3D_SOLDERMASK_BOTTOM;
case User_6: return LAYER_3D_USER_6; case F_Mask: return LAYER_3D_SOLDERMASK_TOP;
case User_7: return LAYER_3D_USER_7; case Cmts_User: return LAYER_3D_USER_COMMENTS;
case User_8: return LAYER_3D_USER_8; case Dwgs_User: return LAYER_3D_USER_DRAWINGS;
case User_9: return LAYER_3D_USER_9; case Eco1_User: return LAYER_3D_USER_ECO1;
case User_10: return LAYER_3D_USER_10; case Eco2_User: return LAYER_3D_USER_ECO2;
case User_11: return LAYER_3D_USER_11; case User_1: return LAYER_3D_USER_1;
case User_12: return LAYER_3D_USER_12; case User_2: return LAYER_3D_USER_2;
case User_13: return LAYER_3D_USER_13; case User_3: return LAYER_3D_USER_3;
case User_14: return LAYER_3D_USER_14; case User_4: return LAYER_3D_USER_4;
case User_15: return LAYER_3D_USER_15; case User_5: return LAYER_3D_USER_5;
case User_16: return LAYER_3D_USER_16; case User_6: return LAYER_3D_USER_6;
case User_17: return LAYER_3D_USER_17; case User_7: return LAYER_3D_USER_7;
case User_18: return LAYER_3D_USER_18; case User_8: return LAYER_3D_USER_8;
case User_19: return LAYER_3D_USER_19; case User_9: return LAYER_3D_USER_9;
case User_20: return LAYER_3D_USER_20; case User_10: return LAYER_3D_USER_10;
case User_21: return LAYER_3D_USER_21; case User_11: return LAYER_3D_USER_11;
case User_22: return LAYER_3D_USER_22; case User_12: return LAYER_3D_USER_12;
case User_23: return LAYER_3D_USER_23; case User_13: return LAYER_3D_USER_13;
case User_24: return LAYER_3D_USER_24; case User_14: return LAYER_3D_USER_14;
case User_25: return LAYER_3D_USER_25; case User_15: return LAYER_3D_USER_15;
case User_26: return LAYER_3D_USER_26; case User_16: return LAYER_3D_USER_16;
case User_27: return LAYER_3D_USER_27; case User_17: return LAYER_3D_USER_17;
case User_28: return LAYER_3D_USER_28; case User_18: return LAYER_3D_USER_18;
case User_29: return LAYER_3D_USER_29; case User_19: return LAYER_3D_USER_19;
case User_30: return LAYER_3D_USER_30; case User_20: return LAYER_3D_USER_20;
case User_31: return LAYER_3D_USER_31; case User_21: return LAYER_3D_USER_21;
case User_32: return LAYER_3D_USER_32; case User_22: return LAYER_3D_USER_22;
case User_33: return LAYER_3D_USER_33; case User_23: return LAYER_3D_USER_23;
case User_34: return LAYER_3D_USER_34; case User_24: return LAYER_3D_USER_24;
case User_35: return LAYER_3D_USER_35; case User_25: return LAYER_3D_USER_25;
case User_36: return LAYER_3D_USER_36; case User_26: return LAYER_3D_USER_26;
case User_37: return LAYER_3D_USER_37; case User_27: return LAYER_3D_USER_27;
case User_38: return LAYER_3D_USER_38; case User_28: return LAYER_3D_USER_28;
case User_39: return LAYER_3D_USER_39; case User_29: return LAYER_3D_USER_29;
case User_40: return LAYER_3D_USER_40; case User_30: return LAYER_3D_USER_30;
case User_41: return LAYER_3D_USER_41; case User_31: return LAYER_3D_USER_31;
case User_42: return LAYER_3D_USER_42; case User_32: return LAYER_3D_USER_32;
case User_43: return LAYER_3D_USER_43; case User_33: return LAYER_3D_USER_33;
case User_44: return LAYER_3D_USER_44; case User_34: return LAYER_3D_USER_34;
case User_45: return LAYER_3D_USER_45; case User_35: return LAYER_3D_USER_35;
default: return UNDEFINED_LAYER; case User_36: return LAYER_3D_USER_36;
case User_37: return LAYER_3D_USER_37;
case User_38: return LAYER_3D_USER_38;
case User_39: return LAYER_3D_USER_39;
case User_40: return LAYER_3D_USER_40;
case User_41: return LAYER_3D_USER_41;
case User_42: return LAYER_3D_USER_42;
case User_43: return LAYER_3D_USER_43;
case User_44: return LAYER_3D_USER_44;
case User_45: return LAYER_3D_USER_45;
default: return UNDEFINED_LAYER;
} }
} }

View File

@ -253,7 +253,7 @@ COLOR_SETTINGS::COLOR_SETTINGS( const wxString& aFilename, bool aAbsolutePath )
for( int layer = LAYER_3D_USER_1; layer <= LAYER_3D_USER_45; ++layer ) for( int layer = LAYER_3D_USER_1; layer <= LAYER_3D_USER_45; ++layer )
{ {
int idx = layer - LAYER_3D_USER_1; int idx = layer - LAYER_3D_USER_1;
PCB_LAYER_ID pcb_layer = Map3DUserLayerToPCBLayer( layer ); PCB_LAYER_ID pcb_layer = Map3DLayerToPCBLayer( layer );
m_params.emplace_back( new COLOR_MAP_PARAM( "3d_viewer.user_" + std::to_string( idx + 1 ), m_params.emplace_back( new COLOR_MAP_PARAM( "3d_viewer.user_" + std::to_string( idx + 1 ),
layer, s_defaultTheme.at( pcb_layer ), layer, s_defaultTheme.at( pcb_layer ),

View File

@ -908,8 +908,8 @@ inline size_t CopperLayerToOrdinal( PCB_LAYER_ID aLayer )
KICOMMON_API PCB_LAYER_ID BoardLayerFromLegacyId( int aLegacyId ); KICOMMON_API PCB_LAYER_ID BoardLayerFromLegacyId( int aLegacyId );
KICOMMON_API PCB_LAYER_ID Map3DUserLayerToPCBLayer( int aLayer ); KICOMMON_API PCB_LAYER_ID Map3DLayerToPCBLayer( int aLayer );
KICOMMON_API int MapPCBUserLayerTo3DLayer( PCB_LAYER_ID aLayer ); KICOMMON_API int MapPCBLayerTo3DLayer( PCB_LAYER_ID aLayer );
KICOMMON_API PCB_LAYER_ID ToLAYER_ID( int aLayer ); KICOMMON_API PCB_LAYER_ID ToLAYER_ID( int aLayer );