26#include "../3d_rendering/camera.h"
44#define DEFAULT_BOARD_THICKNESS pcbIUScale.mmToIU( 1.6 )
45#define DEFAULT_COPPER_THICKNESS pcbIUScale.mmToIU( 0.035 )
47#define DEFAULT_TECH_LAYER_THICKNESS pcbIUScale.mmToIU( 0.025 )
50#define SOLDERPASTE_LAYER_THICKNESS pcbIUScale.mmToIU( 0.04 )
87 m_IsBoardView( true ),
88 m_MousewheelPanning( true ),
89 m_IsPreviewer( false ),
91 m_3dModelManager( nullptr ),
92 m_renderSettings( nullptr ),
97 wxLogTrace(
m_logTrace, wxT(
"BOARD_ADAPTER::BOARD_ADAPTER" ) );
149#define ADD_COLOR( list, r, g, b, a, name ) \
150 list.emplace_back( r/255.0, g/255.0, b/255.0, a, name )
231 const std::bitset<LAYER_3D_END>& aVisibilityFlags )
const
270 if( aFPAttributes &
FP_DNP )
276 if( aFPAttributes &
FP_SMD )
295 wxASSERT( aDiameter3DU > 0.0f );
303 wxASSERT( aDiameterBIU > 0 );
311 wxLogTrace(
m_logTrace, wxT(
"BOARD_ADAPTER::InitSettings" ) );
313 if( aStatusReporter )
314 aStatusReporter->
Report(
_(
"Build board outline" ) );
320 if( aWarningReporter )
325 aWarningReporter->
Report( wxEmptyString );
372 switch( item->GetType() )
375 for(
int sublayer = 0; sublayer < item->GetSublayersCount(); sublayer++ )
376 thickness += item->GetThickness( sublayer );
380 if( item->GetBrdLayerId() ==
F_Cu )
382 else if( item->GetBrdLayerId() ==
B_Cu )
384 else if( item->IsEnabled() )
385 thickness += item->GetThickness();
425 #define layerThicknessMargin 1.1
449 zposBottom = zpos_copperTop_back - 2.0f * zpos_offset;
454 zposBottom = zpos_copperTop_front + 2.0f * zpos_offset;
459 zposBottom = zpos_copperTop_back;
464 zposBottom = zpos_copperTop_back;
469 zposBottom = zpos_copperTop_front;
474 zposBottom = zpos_copperTop_front;
479 zposBottom = zpos_copperTop_back - 1.0f * zpos_offset;
484 zposBottom = zpos_copperTop_front + 1.0f * zpos_offset;
490 zposTop = zpos_copperTop_front + (layer_id -
MAX_CU_LAYERS + 3.0f) * zpos_offset;
513#ifdef PRINT_STATISTICS_3D_VIEWER
517 if( aStatusReporter )
518 aStatusReporter->
Report(
_(
"Create layers" ) );
525 return SFVEC4F( src.r, src.g, src.b, src.a );
548 std::map<int, COLOR4D> colors;
571 std::map<int, COLOR4D> colors;
586 if( aColorName.StartsWith( wxT(
"#" ) ) )
594 if(
color.m_ColorName == aColorName )
595 return color.m_Color;
604 wxString colorName = stackupItem->GetColor();
606 switch( stackupItem->GetType() )
609 if( stackupItem->GetBrdLayerId() ==
F_SilkS )
617 if( stackupItem->GetBrdLayerId() ==
F_Mask )
628 if( bodyColor ==
COLOR4D( 0, 0, 0, 0 ) )
629 bodyColor = layerColor;
631 bodyColor = bodyColor.
Mix( layerColor, 1.0 - layerColor.
a );
633 bodyColor.
a += ( 1.0 - bodyColor.
a ) * layerColor.
a / 2;
642 if( bodyColor !=
COLOR4D( 0, 0, 0, 0 ) )
647 if( finishName.EndsWith( wxT(
"OSP" ) ) )
651 else if( finishName.EndsWith( wxT(
"IG" ) )
652 || finishName.EndsWith( wxT(
"gold" ) ) )
656 else if( finishName.StartsWith( wxT(
"HAL" ) )
657 || finishName.StartsWith( wxT(
"HASL" ) )
658 || finishName.EndsWith( wxT(
"tin" ) )
659 || finishName.EndsWith( wxT(
"nickel" ) ) )
663 else if( finishName.EndsWith( wxT(
"silver" ) ) )
679 return preset->colors;
686 colors[ layer ] = settings->
GetColor( layer );
698 for(
const auto& [ layer,
color ] : aColors )
737 std::bitset<LAYER_3D_END> ret;
817 ret = preset->layers;
858 *aErrorMsg =
_(
"No footprint loaded." );
873 if( !success && aErrorMsg )
875 *aErrorMsg =
_(
"Footprint outline is missing or malformed. Run Footprint Checker for "
876 "a full analysis." );
883 if( !success && aErrorMsg )
884 *aErrorMsg =
_(
"Board outline is missing or malformed. Run DRC for a full analysis." );
918 return SFVEC4F( aColor.
r, aColor.
g, aColor.
b, aColor.
a );
928 sphericalCoord.x = glm::clamp( sphericalCoord.x, 0.0f, 1.0f );
929 sphericalCoord.y = glm::clamp( sphericalCoord.y, 0.0f, 2.0f );
931 return sphericalCoord;
Defines math related functions.
Defines math related functions.
constexpr int ARC_HIGH_DEF
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
static const ADVANCED_CFG & GetCfg()
Get the singleton instance's config, which is shared by all consumers.
wxString m_ColorTheme
Active color theme name.
SFVEC4F m_BgColorTop
background top color
void SetVisibleLayers(const std::bitset< LAYER_3D_END > &aLayers)
float m_solderPasteLayerThickness3DU
void createLayers(REPORTER *aStatusReporter)
VECTOR2I m_boardPos
Board center position in board internal units.
float m_backCopperThickness3DU
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
COLOR_SETTINGS * m_colors
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
std::array< float, PCB_LAYER_ID_COUNT > m_layerZcoordBottom
Bottom (Start) Z position of each layer in 3D units.
BVH_CONTAINER_2D m_TH_ODs
List of PTH outer diameters.
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 the board adaptater is living 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
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
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
static KIGFX::COLOR4D g_DefaultSolderPaste
float m_boardBodyThickness3DU
std::array< float, PCB_LAYER_ID_COUNT > m_layerZcoordTop
Top (End) Z position of each layer in 3D units.
static CUSTOM_COLORS_LIST g_BoardColors
VECTOR2I m_boardSize
Board size in board internal units.
void SetLayerColors(const std::map< int, COLOR4D > &aColors)
SHAPE_POLY_SET * m_backPlatedPadPolys
EDA_3D_VIEWER_SETTINGS * m_Cfg
SFVEC4F m_SilkScreenColorTop
in realistic mode: SilkScreen color ( top )
SFVEC4F m_SilkScreenColorBot
in realistic mode: SilkScreen color ( bot )
SFVEC4F GetItemColor(int aItemId) const
Get the technical color of a layer.
unsigned int GetCircleSegmentCount(float aDiameter3DU) const
float m_nonCopperLayerThickness3DU
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
SFVEC4F GetLayerColor(PCB_LAYER_ID aLayerId) const
Get the technical color of a layer.
bool Is3dLayerEnabled(PCB_LAYER_ID aLayer, const std::bitset< LAYER_3D_END > &aVisibilityFlags) const
Check if a layer is enabled.
BVH_CONTAINER_2D m_THAnnularRings
List of via annular rings.
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
SHAPE_POLY_SET * m_frontPlatedPadPolys
Container for design settings for a BOARD object.
int GetHolePlatingThickness() const
Pad & via drills are finish size.
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.
bool IsFootprintHolder() const
Find out if the board is being used to hold a single footprint for editing/viewing.
bool GetBoardPolygonOutlines(SHAPE_POLY_SET &aOutlines, OUTLINE_ERROR_HANDLER *aErrorHandler=nullptr, bool aAllowUseArcsInPolygons=false)
Extract the board outlines and build a closed polygon from lines, arcs and circle items on edge cut l...
bool IsElementVisible(GAL_LAYER_ID aLayer) const
Test whether a given element category is visible.
bool IsLayerEnabled(PCB_LAYER_ID aLayer) const
A proxy function that calls the correspondent function in m_BoardSettings tests whether a given layer...
FOOTPRINT * GetFirstFootprint() const
Get the first footprint on the board or nullptr.
BOX2I ComputeBoundingBox(bool aBoardEdgesOnly=false) const
Calculate the bounding box containing all board items (or board edge segments).
int GetCopperLayerCount() const
const PCB_PLOT_PARAMS & GetPlotOptions() const
int GetOutlinesChainingEpsilon()
bool IsLayerVisible(PCB_LAYER_ID aLayer) const
A proxy function that calls the correspondent function in m_BoardSettings tests whether a given layer...
BOARD_DESIGN_SETTINGS & GetDesignSettings() const
coord_type GetHeight() const
coord_type GetWidth() const
BOX2< Vec > & Inflate(coord_type dx, coord_type dy)
Inflates the rectangle horizontally by dx and vertically by dy.
const Vec & 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
LAYER_PRESET_3D * FindPreset(const wxString &aName)
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.
LSET GetLayerSelection() const
bool GetPlotReference() const
LSET GetPlotOnAllLayersSelection() const
bool GetPlotValue() const
bool GetPlotFPText() const
A pure virtual class used to derive REPORTER objects from.
virtual REPORTER & Report(const wxString &aText, SEVERITY aSeverity=RPT_SEVERITY_UNDEFINED)=0
Report a string with a given severity.
T * GetAppSettings()
Returns a handle to the a given settings by type If the settings have already been loaded,...
COLOR_SETTINGS * GetColorSettings(const wxString &aName="user")
Retrieves a color settings object that applications can read colors from.
void RemoveAllContours()
Remove all outlines & holes (clears) the polygon set.
void Simplify(POLYGON_MODE aFastMode)
Simplify the polyset (merges overlapping polys, eliminates degeneracy/self-intersections) For aFastMo...
bool BuildFootprintPolygonOutlines(BOARD *aBoard, SHAPE_POLY_SET &aOutlines, int aErrorMax, int aChainingEpsilon, OUTLINE_ERROR_HANDLER *aErrorHandler)
This function is used to extract a board outline for a footprint view.
PGM_BASE * PgmOrNull()
similar to PGM_BASE& Pgm(), but return a reference that can be nullptr when running a shared lib from...
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.
@ LAYER_3D_SOLDERMASK_TOP
@ LAYER_3D_BOUNDING_BOXES
@ LAYER_3D_BACKGROUND_TOP
@ LAYER_3D_SOLDERMASK_BOTTOM
@ 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
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:
unsigned GetRunningMicroSecs()
An alternate way to calculate an elapsed time (in microsecondes) to class PROF_COUNTER.
KIWAY Kiway & Pgm(), KFCTL_STANDALONE
The global Program "get" accessor.
wxString NotSpecifiedPrm()
Manage a bounding box defined by two SFVEC3F min max points.
void Reset()
Reset the bounding box to zero and de-initialize it.
A class to handle a custom color (predefined color) for the color picker dialog.
std::vector< int > raytrace_lightElevation
bool show_footprints_normal
bool show_footprints_virtual
bool opengl_show_model_bbox
bool show_silkscreen_bottom
std::vector< int > raytrace_lightAzimuth
bool show_footprints_not_in_posfile
bool show_footprints_insert
bool show_soldermask_bottom
bool opengl_show_off_board_silk
constexpr int mmToIU(double mm) const