3D viewer: make solder paste layer thickness bigger than the mask layer.
Some specific footprints need shapes on paste layer covering the mask layer, so ensure these shapes are visible. Fixes #8041 https://gitlab.com/kicad/code/kicad/issues/8041
This commit is contained in:
parent
57518fd0f9
commit
23667fc4c4
|
@ -34,7 +34,7 @@
|
||||||
#include <3d_math.h>
|
#include <3d_math.h>
|
||||||
#include "3d_fastmath.h"
|
#include "3d_fastmath.h"
|
||||||
#include <geometry/geometry_utils.h>
|
#include <geometry/geometry_utils.h>
|
||||||
#include <math/util.h> // for KiROUND
|
#include <convert_to_biu.h>
|
||||||
#include <pgm_base.h>
|
#include <pgm_base.h>
|
||||||
#include <settings/settings_manager.h>
|
#include <settings/settings_manager.h>
|
||||||
|
|
||||||
|
@ -82,6 +82,7 @@ BOARD_ADAPTER::BOARD_ADAPTER() :
|
||||||
m_epoxyThickness3DU = 0.0f;
|
m_epoxyThickness3DU = 0.0f;
|
||||||
m_copperThickness3DU = 0.0f;
|
m_copperThickness3DU = 0.0f;
|
||||||
m_nonCopperLayerThickness3DU = 0.0f;
|
m_nonCopperLayerThickness3DU = 0.0f;
|
||||||
|
m_solderPasteLayerThickness3DU = 0.0f;
|
||||||
m_biuTo3Dunits = 1.0;
|
m_biuTo3Dunits = 1.0;
|
||||||
|
|
||||||
m_trackCount = 0;
|
m_trackCount = 0;
|
||||||
|
@ -238,10 +239,13 @@ bool BOARD_ADAPTER::IsFootprintShown( FOOTPRINT_ATTR_T aFPAttributes ) const
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// !TODO: define the actual copper thickness by user
|
// !TODO: define the actual copper thickness by user from board stackup
|
||||||
#define COPPER_THICKNESS KiROUND( 0.035 * IU_PER_MM ) // for 35 um
|
#define COPPER_THICKNESS Millimeter2iu( 0.035 ) // for 35 um
|
||||||
#define TECH_LAYER_THICKNESS KiROUND( 0.04 * IU_PER_MM )
|
// The solder mask layer (and silkscreen) thickness
|
||||||
|
#define TECH_LAYER_THICKNESS Millimeter2iu( 0.04 )
|
||||||
|
// The solder paste thickness is chosen bigger than the solder mask layer
|
||||||
|
// to be sure is covers the mask when overlapping.
|
||||||
|
#define SOLDERPASTE_LAYER_THICKNESS Millimeter2iu( 0.08 )
|
||||||
|
|
||||||
int BOARD_ADAPTER::GetHolePlatingThickness() const noexcept
|
int BOARD_ADAPTER::GetHolePlatingThickness() const noexcept
|
||||||
{
|
{
|
||||||
|
@ -320,6 +324,7 @@ void BOARD_ADAPTER::InitSettings( REPORTER* aStatusReporter, REPORTER* aWarningR
|
||||||
// !TODO: use value defined by user (currently use default values by ctor
|
// !TODO: use value defined by user (currently use default values by ctor
|
||||||
m_copperThickness3DU = COPPER_THICKNESS * m_biuTo3Dunits;
|
m_copperThickness3DU = COPPER_THICKNESS * m_biuTo3Dunits;
|
||||||
m_nonCopperLayerThickness3DU = TECH_LAYER_THICKNESS * m_biuTo3Dunits;
|
m_nonCopperLayerThickness3DU = TECH_LAYER_THICKNESS * m_biuTo3Dunits;
|
||||||
|
m_solderPasteLayerThickness3DU = SOLDERPASTE_LAYER_THICKNESS * m_biuTo3Dunits;
|
||||||
|
|
||||||
// Init Z position of each layer
|
// Init Z position of each layer
|
||||||
// calculate z position for each copper layer
|
// calculate z position for each copper layer
|
||||||
|
@ -381,15 +386,23 @@ void BOARD_ADAPTER::InitSettings( REPORTER* aStatusReporter, REPORTER* aWarningR
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case B_Mask:
|
case B_Mask:
|
||||||
case B_Paste:
|
|
||||||
zposBottom = zpos_copperTop_back;
|
zposBottom = zpos_copperTop_back;
|
||||||
zposTop = zpos_copperTop_back - m_nonCopperLayerThickness3DU;
|
zposTop = zpos_copperTop_back - m_nonCopperLayerThickness3DU;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case B_Paste:
|
||||||
|
zposBottom = zpos_copperTop_back;
|
||||||
|
zposTop = zpos_copperTop_back - m_solderPasteLayerThickness3DU;
|
||||||
|
break;
|
||||||
|
|
||||||
case F_Mask:
|
case F_Mask:
|
||||||
case F_Paste:
|
|
||||||
zposTop = zpos_copperTop_front + m_nonCopperLayerThickness3DU;
|
|
||||||
zposBottom = zpos_copperTop_front;
|
zposBottom = zpos_copperTop_front;
|
||||||
|
zposTop = zpos_copperTop_front + m_nonCopperLayerThickness3DU;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case F_Paste:
|
||||||
|
zposBottom = zpos_copperTop_front;
|
||||||
|
zposTop = zpos_copperTop_front + m_solderPasteLayerThickness3DU;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case B_SilkS:
|
case B_SilkS:
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* This program source code file is part of KiCad, a free EDA CAD application.
|
* This program source code file is part of KiCad, a free EDA CAD application.
|
||||||
*
|
*
|
||||||
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
|
* Copyright (C) 2015-2016 Mario Luzeiro <mrluzeiro@ua.pt>
|
||||||
* Copyright (C) 1992-2020 KiCad Developers, see AUTHORS.txt for contributors.
|
* Copyright (C) 1992-2021 KiCad Developers, see AUTHORS.txt for contributors.
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
|
@ -726,6 +726,9 @@ private:
|
||||||
///< Non copper layers thickness in 3D units.
|
///< Non copper layers thickness in 3D units.
|
||||||
float m_nonCopperLayerThickness3DU;
|
float m_nonCopperLayerThickness3DU;
|
||||||
|
|
||||||
|
///< solder paste layers thickness in 3D units.
|
||||||
|
float m_solderPasteLayerThickness3DU;
|
||||||
|
|
||||||
///< Number of tracks in the board.
|
///< Number of tracks in the board.
|
||||||
unsigned int m_trackCount;
|
unsigned int m_trackCount;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue