diff --git a/3d-viewer/3d_canvas/board_adapter.cpp b/3d-viewer/3d_canvas/board_adapter.cpp index 7e31b52e7c..57f710dc27 100644 --- a/3d-viewer/3d_canvas/board_adapter.cpp +++ b/3d-viewer/3d_canvas/board_adapter.cpp @@ -260,7 +260,8 @@ bool BOARD_ADAPTER::Is3dLayerEnabled( PCB_LAYER_ID aLayer ) const case B_Cu: case F_Cu: - return !m_board || m_board->IsLayerVisible( aLayer ) || m_Cfg->m_Render.realistic; + return !m_board || m_board->IsLayerVisible( aLayer ) || m_Cfg->m_Render.realistic + || m_board->IsFootprintHolder(); default: // the layer is an internal copper layer, used the visibility diff --git a/3d-viewer/dialogs/panel_preview_3d_model.cpp b/3d-viewer/dialogs/panel_preview_3d_model.cpp index 53693173c3..82055706a9 100644 --- a/3d-viewer/dialogs/panel_preview_3d_model.cpp +++ b/3d-viewer/dialogs/panel_preview_3d_model.cpp @@ -56,14 +56,16 @@ PANEL_PREVIEW_3D_MODEL::PANEL_PREVIEW_3D_MODEL( wxWindow* aParent, PCB_BASE_FRAM m_userUnits = aFrame->GetUserUnits(); m_dummyBoard = new BOARD(); + m_dummyBoard->SetProject( &aFrame->Prj(), true ); // This board will only be used to hold a footprint for viewing m_dummyBoard->SetBoardUse( BOARD_USE::FPHOLDER ); BOARD_DESIGN_SETTINGS parent_bds = aFrame->GetDesignSettings(); - BOARD_DESIGN_SETTINGS dummy_bds = m_dummyBoard->GetDesignSettings(); + BOARD_DESIGN_SETTINGS& dummy_bds = m_dummyBoard->GetDesignSettings(); dummy_bds.SetBoardThickness( parent_bds.GetBoardThickness() ); + dummy_bds.SetEnabledLayers( LSET::FrontMask() | LSET::BackMask() ); BOARD_STACKUP& dummy_board_stackup = m_dummyBoard->GetDesignSettings().GetStackupDescriptor(); dummy_board_stackup.RemoveAll(); dummy_board_stackup.BuildDefaultStackupList( &dummy_bds, 2 ); diff --git a/pcbnew/board.cpp b/pcbnew/board.cpp index d14157a23b..e65c1dfb77 100644 --- a/pcbnew/board.cpp +++ b/pcbnew/board.cpp @@ -1295,6 +1295,11 @@ BOX2I BOARD::ComputeBoundingBox( bool aBoardEdgesOnly ) const bool showInvisibleText = IsElementVisible( LAYER_MOD_TEXT_INVISIBLE ) && PgmOrNull() && !PgmOrNull()->m_Printing; + // If the board is just showing a footprint, we want all footprint layers + // included in the bounding box + if( IsFootprintHolder() ) + visible.set(); + if( aBoardEdgesOnly ) visible.set( Edge_Cuts );