46#define DEFAULT_BOARD_THICKNESS pcbIUScale.mmToIU( 1.6 ) 
   47#define DEFAULT_COPPER_THICKNESS pcbIUScale.mmToIU( 0.035 )  
   49#define DEFAULT_TECH_LAYER_THICKNESS pcbIUScale.mmToIU( 0.025 ) 
   52#define SOLDERPASTE_LAYER_THICKNESS pcbIUScale.mmToIU( 0.04 ) 
   97    wxLogTrace( 
m_logTrace, wxT( 
"BOARD_ADAPTER::BOARD_ADAPTER" ) );
 
  141    for( 
int ii = 0; ii < 45; ++ii )
 
  156#define ADD_COLOR( list, r, g, b, a, name ) \ 
  157    list.emplace_back( r/255.0, g/255.0, b/255.0, a, name ) 
 
  239                                      const std::bitset<LAYER_3D_END>& aVisibilityFlags )
 const 
  267            return aVisibilityFlags.test( layer3D );
 
 
  282        if( !
m_Cfg->m_Render.show_footprints_not_in_posfile )
 
  286    if( aFPAttributes & 
FP_DNP )
 
  288        if( !
m_Cfg->m_Render.show_footprints_dnp )
 
  292    if( aFPAttributes & 
FP_SMD )
 
  293        return m_Cfg->m_Render.show_footprints_insert;
 
  296        return m_Cfg->m_Render.show_footprints_normal;
 
  298    return m_Cfg->m_Render.show_footprints_virtual;
 
 
  304    return m_board ? 
m_board->GetDesignSettings().GetHolePlatingThickness()
 
 
  311    wxASSERT( aDiameter3DU > 0.0f );
 
 
  319    wxASSERT( aDiameterBIU > 0 );
 
 
  327    wxLogTrace( 
m_logTrace, wxT( 
"BOARD_ADAPTER::InitSettings" ) );
 
  329    if( aStatusReporter )
 
  330        aStatusReporter->
Report( 
_( 
"Build board outline" ) );
 
  336    if( aWarningReporter )
 
  341            aWarningReporter->
Report( wxEmptyString );
 
  347        bbbox = 
m_board->ComputeBoundingBox( !
m_board->IsFootprintHolder() && haveOutline );
 
  393            int body_thickness = 0;
 
  397                switch( item->GetType() )
 
  400                    for( 
int sublayer = 0; sublayer < item->GetSublayersCount(); sublayer++ )
 
  401                        body_thickness += item->GetThickness( sublayer );
 
  409                    int copper_thickness = std::max( item->GetThickness(), 
pcbIUScale.mmToIU( 0.001 ) );
 
  411                    if( item->GetBrdLayerId() == 
F_Cu )
 
  413                    else if( item->GetBrdLayerId() == 
B_Cu )
 
  415                    else if( item->IsEnabled() )
 
  416                        body_thickness += copper_thickness;
 
  425                    int mask_thickness = std::max( item->GetThickness(), 
pcbIUScale.mmToIU( 0.001 ) );
 
  427                    if( item->GetBrdLayerId() == 
F_Mask )
 
  429                    else if( item->GetBrdLayerId() == 
B_Mask )
 
  466            case F_Cu: layer_pos = 0; 
break;
 
  468            default: layer_pos = ( layer_id - 
B_Cu )/2; 
break;
 
  480    #define layerThicknessMargin 1.1 
  501            zposBottom = zpos_copperTop_back;
 
  506            zposBottom = zpos_copperTop_back;
 
  511            zposBottom = zpos_copperTop_front;
 
  516            zposBottom = zpos_copperTop_front;
 
  521            zposBottom = zpos_copperTop_back - 1.0f * zpos_offset;
 
  526            zposBottom = zpos_copperTop_front + 1.0f * zpos_offset;
 
  531            if( 
m_board->IsBackLayer( layer_id ) )
 
  533                zposBottom = zpos_copperTop_back - 2.0f * zpos_offset;
 
  538                zposBottom = zpos_copperTop_front + 2.0f * zpos_offset;
 
  561#ifdef PRINT_STATISTICS_3D_VIEWER 
  565    if( aStatusReporter )
 
  566        aStatusReporter->
Report( 
_( 
"Create layers" ) );
 
  573                return SFVEC4F( src.r, src.g, src.b, src.a );
 
 
  599    std::map<int, COLOR4D> colors;
 
  619        colors[ layer ] = settings->
GetColor( layer );
 
 
  627    std::map<int, COLOR4D> colors;
 
  631        colors = preset->colors;
 
  638            colors[ layer ] = settings->
GetColor( layer );
 
  648                []( 
const wxString& aColorName,
 
  651                    if( aColorName.StartsWith( wxT( 
"#" ) ) )
 
  659                            if( 
color.m_ColorName == aColorName )
 
  660                                return color.m_Color;
 
  669            wxString colorName = stackupItem->GetColor();
 
  671            switch( stackupItem->GetType() )
 
  674                if( stackupItem->GetBrdLayerId() == 
F_SilkS )
 
  682                if( stackupItem->GetBrdLayerId() == 
F_Mask )
 
  693                if( bodyColor == 
COLOR4D( 0, 0, 0, 0 ) )
 
  694                    bodyColor = layerColor;
 
  696                    bodyColor = bodyColor.
Mix( layerColor, 1.0 - layerColor.
a );
 
  698                bodyColor.
a += ( 1.0 - bodyColor.
a ) * layerColor.
a / 2;
 
  707        if( bodyColor != 
COLOR4D( 0, 0, 0, 0 ) )
 
  712        if( finishName.EndsWith( wxT( 
"OSP" ) ) )
 
  716        else if( finishName.EndsWith( wxT( 
"IG" ) )
 
  717              || finishName.EndsWith( wxT( 
"gold" ) ) )
 
  721        else if( finishName.StartsWith( wxT( 
"HAL" ) )
 
  722              || finishName.StartsWith( wxT( 
"HASL" ) )
 
  723              || finishName.EndsWith( wxT( 
"tin" ) )
 
  724              || finishName.EndsWith( wxT( 
"nickel" ) ) )
 
  728        else if( finishName.EndsWith( wxT( 
"silver" ) ) )
 
 
  747    for( 
const auto& [ layer, 
color ] : aColors )
 
 
  797    std::bitset<LAYER_3D_END> ret;
 
  801        if( 
m_Cfg->m_Render.preview_show_board_body )
 
  821            ret.set( layer, 
true );
 
  892            ret.set( layer, 
m_board->IsElementVisible( layer ) );
 
  903            layers.
set( commonLayer );
 
  928        ret = preset->layers;
 
 
  937    std::bitset<LAYER_3D_END> ret;
 
  955        ret.set( layer, 
false );
 
 
  977    return m_Cfg->m_Render.use_board_editor_copper_colors && !
m_board->IsFootprintHolder();
 
 
  990    if( 
m_board->IsFootprintHolder() )
 
  992        if( !
m_board->GetFirstFootprint() )
 
  995                *aErrorMsg = 
_( 
"No footprint loaded." );
 
 1001        int chainingEpsilon = 
m_board->GetOutlinesChainingEpsilon();
 
 1004                                                 m_board->GetDesignSettings().m_MaxError,
 
 1008        if( !success && aErrorMsg )
 
 1010            *aErrorMsg = 
_( 
"Footprint outline is missing or malformed. Run Footprint Checker for " 
 1011                            "a full analysis." );
 
 1018        if( !success && aErrorMsg )
 
 1019            *aErrorMsg = 
_( 
"Board outline is missing or malformed. Run DRC for a full analysis." );
 
 
 1056    return SFVEC4F( aColor.
r, aColor.
g, aColor.
b, aColor.
a );
 
 
 1062    SFVEC2F sphericalCoord = 
SFVEC2F( ( 
m_Cfg->m_Render.raytrace_lightElevation[i] + 90.0f ) / 180.0f,
 
 1063                                      m_Cfg->m_Render.raytrace_lightAzimuth[i] / 180.0f );
 
 1065    sphericalCoord.x = glm::clamp( sphericalCoord.x, 0.0f, 1.0f );
 
 1066    sphericalCoord.y = glm::clamp( sphericalCoord.y, 0.0f, 2.0f );
 
 1068    return sphericalCoord;
 
 
Defines math related functions.
 
Defines math related functions.
 
constexpr EDA_IU_SCALE pcbIUScale
 
#define SOLDERPASTE_LAYER_THICKNESS
 
#define ADD_COLOR(list, r, g, b, a, name)
 
float g_BevelThickness3DU
 
#define DEFAULT_TECH_LAYER_THICKNESS
 
#define DEFAULT_BOARD_THICKNESS
 
#define layerThicknessMargin
 
static bool g_ColorsLoaded
 
#define DEFAULT_COPPER_THICKNESS
 
#define RANGE_SCALE_3D
This defines the range that all coord will have to be rendered.
 
@ BS_ITEM_TYPE_SILKSCREEN
 
@ BS_ITEM_TYPE_DIELECTRIC
 
@ BS_ITEM_TYPE_SOLDERMASK
 
Define an abstract camera.
 
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
 
wxString m_ColorTheme
Active color theme name.
 
BASE_SET & set(size_t pos)
 
std::map< int, COLOR4D > m_BoardEditorColors
list of colors used by the board editor
 
BVH_CONTAINER_2D * m_offboardPadsBack
 
SFVEC4F m_BgColorTop
background top color
 
void SetVisibleLayers(const std::bitset< LAYER_3D_END > &aLayers)
 
float m_solderPasteLayerThickness3DU
 
SFVEC4F GetLayerColor(int aLayerId) const
Get the technical color of a layer.
 
std::map< PCB_LAYER_ID, float > m_layerZcoordBottom
Bottom (Start) Z pos of each layer.
 
S3D_CACHE * m_3dModelManager
 
void createLayers(REPORTER *aStatusReporter)
 
VECTOR2I m_boardPos
Board center position in board internal units.
 
float m_backCopperThickness3DU
 
bool GetUseBoardEditorCopperLayerColors() const
 
static KIGFX::COLOR4D g_DefaultComments
 
SFVEC4F m_SolderPasteColor
in realistic mode: solder paste color
 
static CUSTOM_COLORS_LIST g_PasteColors
 
BBOX_3D m_boardBoundingBox
3D bounding box of the board in 3D units.
 
static CUSTOM_COLORS_LIST g_FinishColors
 
static KIGFX::COLOR4D g_DefaultBoardBody
 
SFVEC4F m_UserDefinedLayerColor[45]
 
bool IsFootprintShown(FOOTPRINT_ATTR_T aFPAttributes) const
Test if footprint should be displayed in relation to attributes and the flags.
 
static KIGFX::COLOR4D g_DefaultSolderMask
 
std::map< int, COLOR4D > GetLayerColors() const
Build a color list which is used to store colors layers.
 
SHAPE_POLY_SET * m_frontPlatedCopperPolys
 
BVH_CONTAINER_2D m_TH_ODs
List of PTH outer diameters.
 
float m_frontMaskThickness3DU
 
unsigned int m_trackCount
 
float m_averageTrackWidth
 
SHAPE_POLY_SET m_board_poly
Board outline polygon.
 
std::bitset< LAYER_3D_END > GetVisibleLayers() const
 
SFVEC4F m_SolderMaskColorBot
in realistic mode: solder mask color ( bot )
 
bool m_IsPreviewer
true if we're in a 3D preview panel, false for the standard 3D viewer
 
static CUSTOM_COLORS_LIST g_MaskColors
 
int GetHolePlatingThickness() const noexcept
Get the hole plating thickness (NB: in BOARD UNITS!).
 
void InitSettings(REPORTER *aStatusReporter, REPORTER *aWarningReporter)
Function to be called by the render when it need to reload the settings for the board.
 
static KIGFX::COLOR4D g_DefaultECOs
 
SFVEC4F m_SolderMaskColorTop
in realistic mode: solder mask color ( top )
 
SFVEC4F GetColor(const COLOR4D &aColor) const
 
BVH_CONTAINER_2D * m_offboardPadsFront
 
float m_averageViaHoleDiameter
 
static KIGFX::COLOR4D g_DefaultBackgroundTop
 
static CUSTOM_COLORS_LIST g_SilkColors
 
float m_averageHoleDiameter
 
static KIGFX::COLOR4D g_DefaultSurfaceFinish
 
SFVEC4F m_CopperColor
in realistic mode: copper color
 
void ReloadColorSettings() noexcept
 
SFVEC2F GetSphericalCoord(int i) const
 
BVH_CONTAINER_2D * m_platedPadsBack
 
std::bitset< LAYER_3D_END > GetDefaultVisibleLayers() const
 
std::map< PCB_LAYER_ID, float > m_layerZcoordTop
Top (End) Z pos of each layer in 3D units.
 
float GetFootprintZPos(bool aIsFlipped) const
Get the position of the footprint in 3d integer units considering if it is flipped or not.
 
float m_frontCopperThickness3DU
 
float m_backMaskThickness3DU
 
static KIGFX::COLOR4D g_DefaultSolderPaste
 
float m_boardBodyThickness3DU
 
static CUSTOM_COLORS_LIST g_BoardColors
 
VECTOR2I m_boardSize
Board size in board internal units.
 
SHAPE_POLY_SET * m_backPlatedCopperPolys
 
void SetLayerColors(const std::map< int, COLOR4D > &aColors)
 
EDA_3D_VIEWER_SETTINGS * m_Cfg
 
std::map< int, COLOR4D > m_ColorOverrides
allows to override color scheme colors
 
SFVEC4F m_SilkScreenColorTop
in realistic mode: SilkScreen color ( top )
 
SFVEC4F m_SilkScreenColorBot
in realistic mode: SilkScreen color ( bot )
 
unsigned int GetCircleSegmentCount(float aDiameter3DU) const
 
float m_nonCopperLayerThickness3DU
 
BVH_CONTAINER_2D m_viaAnnuli
List of via annular rings.
 
SFVEC4F m_BoardBodyColor
in realistic mode: FR4 board color
 
bool createBoardPolygon(wxString *aErrorMsg)
Create the board outline polygon.
 
unsigned int m_copperLayersCount
 
std::map< int, COLOR4D > GetDefaultColors() const
 
BVH_CONTAINER_2D m_TH_IDs
List of PTH inner diameters.
 
SFVEC4F m_UserCommentsColor
 
static KIGFX::COLOR4D g_DefaultSilkscreen
 
BVH_CONTAINER_2D * m_platedPadsFront
 
SFVEC3F m_boardCenter
3D center position of the board in 3D units.
 
static KIGFX::COLOR4D g_DefaultBackgroundBot
 
bool Is3dLayerEnabled(PCB_LAYER_ID aLayer, const std::bitset< LAYER_3D_END > &aVisibilityFlags) const
Check if a layer is enabled.
 
SFVEC4F m_UserDrawingsColor
 
double m_biuTo3Dunits
Scale factor to convert board internal units to 3D units normalized between -1.0 and 1....
 
SFVEC4F m_BgColorBot
background bottom color
 
Container for design settings for a BOARD object.
 
BOARD_STACKUP & GetStackupDescriptor()
 
Manage one layer needed to make a physical board.
 
Manage layers needed to make a physical board.
 
const std::vector< BOARD_STACKUP_ITEM * > & GetList() const
 
wxString m_FinishType
The name of external copper finish.
 
constexpr BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
 
constexpr size_type GetWidth() const
 
constexpr Vec Centre() const
 
constexpr size_type GetHeight() const
 
constexpr const SizeVec & GetSize() const
 
Color settings are a bit different than most of the settings objects in that there can be more than o...
 
void SetColor(int aLayer, const COLOR4D &aColor)
 
COLOR4D GetColor(int aLayer) const
 
A color representation with 4 components: red, green, blue, alpha.
 
COLOR4D Mix(const COLOR4D &aColor, double aFactor) const
Return a color that is mixed with the input by a factor.
 
LSET is a set of PCB_LAYER_IDs.
 
Parameters and options when plotting/printing a board.
 
LSEQ GetPlotOnAllLayersSequence() const
 
LSET GetLayerSelection() const
 
bool GetPlotReference() const
 
bool GetPlotValue() const
 
bool GetPlotFPText() const
 
virtual SETTINGS_MANAGER & GetSettingsManager() const
 
A pure virtual class used to derive REPORTER objects from.
 
virtual REPORTER & Report(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED)
Report a string with a given severity.
 
void SaveColorSettings(COLOR_SETTINGS *aSettings, const std::string &aNamespace="")
Safely save a COLOR_SETTINGS to disk, preserving any changes outside the given namespace.
 
bool BuildFootprintPolygonOutlines(BOARD *aBoard, SHAPE_POLY_SET &aOutlines, int aErrorMax, int aChainingEpsilon, OUTLINE_ERROR_HANDLER *aErrorHandler)
Extract a board outline for a footprint view.
 
std::vector< CUSTOM_COLOR_ITEM > CUSTOM_COLORS_LIST
 
#define FOLLOW_PLOT_SETTINGS
 
static constexpr EDA_ANGLE FULL_CIRCLE
 
a few functions useful in geometry calculations.
 
int GetArcToSegmentCount(int aRadius, int aErrorMax, const EDA_ANGLE &aArcAngle)
 
static const wxChar * m_logTrace
Trace mask used to enable or disable debug output for this class.
 
PCB_LAYER_ID Map3DLayerToPCBLayer(int aLayer)
 
int MapPCBLayerTo3DLayer(PCB_LAYER_ID aLayer)
 
@ LAYER_3D_SOLDERMASK_TOP
 
@ LAYER_3D_BOUNDING_BOXES
 
@ LAYER_3D_BACKGROUND_TOP
 
@ LAYER_3D_SOLDERMASK_BOTTOM
 
@ LAYER_3D_PLATED_BARRELS
 
@ LAYER_3D_SILKSCREEN_TOP
 
@ LAYER_3D_VIRTUAL_MODELS
 
@ LAYER_3D_MODELS_MARKED_DNP
 
@ LAYER_3D_OFF_BOARD_SILK
 
@ LAYER_3D_MODELS_NOT_IN_POS
 
@ LAYER_3D_BACKGROUND_BOTTOM
 
@ LAYER_3D_SILKSCREEN_BOTTOM
 
bool IsCopperLayer(int aLayerId)
Test whether a layer is a copper layer.
 
GAL_LAYER_ID
GAL layers are "virtual" layers, i.e.
 
@ LAYER_FP_REFERENCES
Show footprints references (when texts are visible).
 
@ LAYER_FP_VALUES
Show footprints values (when texts are visible).
 
PCB_LAYER_ID
A quick note on layer IDs:
 
PCB_LAYER_ID ToLAYER_ID(int aLayer)
 
PGM_BASE & Pgm()
The global program "get" accessor.
 
int64_t GetRunningMicroSecs()
An alternate way to calculate an elapsed time (in microsecondes) to class PROF_COUNTER.
 
COLOR_SETTINGS * GetColorSettings(const wxString &aName)
 
T * GetAppSettings(const char *aFilename)
 
wxString NotSpecifiedPrm()
 
Manage a bounding box defined by two SFVEC3F min max points.
 
A class to handle a custom color (predefined color) for the color picker dialog.
 
VECTOR2< int32_t > VECTOR2I