Minor readability improvements.

This commit is contained in:
Jeff Young 2023-09-22 14:03:15 +01:00
parent 4bfebb4744
commit 78f70b45e6
9 changed files with 91 additions and 93 deletions

View File

@ -106,7 +106,7 @@ BOARD_ADAPTER::BOARD_ADAPTER() :
m_TH_IDs.Clear(); m_TH_IDs.Clear();
m_TH_ODs.Clear(); m_TH_ODs.Clear();
m_THAnnularRings.Clear(); m_viaAnnuli.Clear();
m_copperLayersCount = 2; m_copperLayersCount = 2;

View File

@ -262,14 +262,14 @@ public:
return m_TH_ODPolys; return m_TH_ODPolys;
} }
const BVH_CONTAINER_2D& GetTHAnnularRings() const noexcept const BVH_CONTAINER_2D& GetViaAnnuli() const noexcept
{ {
return m_THAnnularRings; return m_viaAnnuli;
} }
const SHAPE_POLY_SET& GetTHAnnularRingPolys() const noexcept const SHAPE_POLY_SET& GetViaAnnuliPolys() const noexcept
{ {
return m_THAnnularRingPolys; return m_viaAnnuliPolys;
} }
const SHAPE_POLY_SET& GetNPTH_ODPolys() const noexcept const SHAPE_POLY_SET& GetNPTH_ODPolys() const noexcept
@ -441,7 +441,7 @@ private:
SHAPE_POLY_SET m_NPTH_ODPolys; ///< NPTH outer diameters SHAPE_POLY_SET m_NPTH_ODPolys; ///< NPTH outer diameters
SHAPE_POLY_SET m_TH_ODPolys; ///< PTH outer diameters SHAPE_POLY_SET m_TH_ODPolys; ///< PTH outer diameters
SHAPE_POLY_SET m_viaTH_ODPolys; ///< Via hole outer diameters SHAPE_POLY_SET m_viaTH_ODPolys; ///< Via hole outer diameters
SHAPE_POLY_SET m_THAnnularRingPolys; ///< Via annular ring outer diameters SHAPE_POLY_SET m_viaAnnuliPolys; ///< Via annular ring outer diameters
SHAPE_POLY_SET m_board_poly; ///< Board outline polygon. SHAPE_POLY_SET m_board_poly; ///< Board outline polygon.
@ -453,7 +453,7 @@ private:
BVH_CONTAINER_2D m_TH_ODs; ///< List of PTH outer diameters BVH_CONTAINER_2D m_TH_ODs; ///< List of PTH outer diameters
BVH_CONTAINER_2D m_TH_IDs; ///< List of PTH inner diameters BVH_CONTAINER_2D m_TH_IDs; ///< List of PTH inner diameters
BVH_CONTAINER_2D m_THAnnularRings; ///< List of via annular rings BVH_CONTAINER_2D m_viaAnnuli; ///< List of via annular rings
BVH_CONTAINER_2D m_viaTH_ODs; ///< List of via hole outer diameters BVH_CONTAINER_2D m_viaTH_ODs; ///< List of via hole outer diameters
unsigned int m_copperLayersCount; unsigned int m_copperLayersCount;

View File

@ -125,7 +125,7 @@ void BOARD_ADAPTER::destroyLayers()
m_NPTH_ODPolys.RemoveAllContours(); m_NPTH_ODPolys.RemoveAllContours();
m_TH_ODPolys.RemoveAllContours(); m_TH_ODPolys.RemoveAllContours();
m_viaTH_ODPolys.RemoveAllContours(); m_viaTH_ODPolys.RemoveAllContours();
m_THAnnularRingPolys.RemoveAllContours(); m_viaAnnuliPolys.RemoveAllContours();
DELETE_AND_FREE_MAP( m_layerMap ) DELETE_AND_FREE_MAP( m_layerMap )
DELETE_AND_FREE_MAP( m_layerHoleMap ) DELETE_AND_FREE_MAP( m_layerHoleMap )
@ -135,7 +135,7 @@ void BOARD_ADAPTER::destroyLayers()
m_TH_ODs.Clear(); m_TH_ODs.Clear();
m_TH_IDs.Clear(); m_TH_IDs.Clear();
m_THAnnularRings.Clear(); m_viaAnnuli.Clear();
m_viaTH_ODs.Clear(); m_viaTH_ODs.Clear();
} }
@ -157,6 +157,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
PCB_LAYER_ID cu_seq[MAX_CU_LAYERS]; PCB_LAYER_ID cu_seq[MAX_CU_LAYERS];
LSET cu_set = LSET::AllCuMask( m_copperLayersCount ); LSET cu_set = LSET::AllCuMask( m_copperLayersCount );
EDA_3D_VIEWER_SETTINGS::RENDER_SETTINGS& cfg = m_Cfg->m_Render;
std::bitset<LAYER_3D_END> visibilityFlags = GetVisibleLayers(); std::bitset<LAYER_3D_END> visibilityFlags = GetVisibleLayers();
m_trackCount = 0; m_trackCount = 0;
@ -225,22 +227,20 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
BVH_CONTAINER_2D *layerContainer = new BVH_CONTAINER_2D; BVH_CONTAINER_2D *layerContainer = new BVH_CONTAINER_2D;
m_layerMap[layer] = layerContainer; m_layerMap[layer] = layerContainer;
if( m_Cfg->m_Render.opengl_copper_thickness if( cfg.opengl_copper_thickness && cfg.engine == RENDER_ENGINE::OPENGL )
&& m_Cfg->m_Render.engine == RENDER_ENGINE::OPENGL )
{ {
SHAPE_POLY_SET* layerPoly = new SHAPE_POLY_SET; SHAPE_POLY_SET* layerPoly = new SHAPE_POLY_SET;
m_layers_poly[layer] = layerPoly; m_layers_poly[layer] = layerPoly;
} }
} }
if( m_Cfg->m_Render.renderPlatedPadsAsPlated ) if( cfg.renderPlatedPadsAsPlated )
{ {
m_frontPlatedPadPolys = new SHAPE_POLY_SET; m_frontPlatedPadPolys = new SHAPE_POLY_SET;
m_backPlatedPadPolys = new SHAPE_POLY_SET; m_backPlatedPadPolys = new SHAPE_POLY_SET;
m_platedPadsFront = new BVH_CONTAINER_2D; m_platedPadsFront = new BVH_CONTAINER_2D;
m_platedPadsBack = new BVH_CONTAINER_2D; m_platedPadsBack = new BVH_CONTAINER_2D;
} }
if( aStatusReporter ) if( aStatusReporter )
@ -332,16 +332,11 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
m_viaTH_ODs.Add( new FILLED_CIRCLE_2D( via_center, hole_inner_radius + thickness, m_viaTH_ODs.Add( new FILLED_CIRCLE_2D( via_center, hole_inner_radius + thickness,
*track ) ); *track ) );
if( m_Cfg->m_Render.clip_silk_on_via_annulus && ring_radius > 0.0 ) if( cfg.clip_silk_on_via_annuli && ring_radius > 0.0 )
{ m_viaAnnuli.Add( new FILLED_CIRCLE_2D( via_center, ring_radius, *track ) );
m_THAnnularRings.Add( new FILLED_CIRCLE_2D( via_center, ring_radius,
*track ) );
}
if( hole_inner_radius > 0.0 ) if( hole_inner_radius > 0.0 )
{
m_TH_IDs.Add( new FILLED_CIRCLE_2D( via_center, hole_inner_radius, *track ) ); m_TH_IDs.Add( new FILLED_CIRCLE_2D( via_center, hole_inner_radius, *track ) );
}
} }
} }
} }
@ -419,9 +414,9 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
TransformCircleToPolygon( m_viaTH_ODPolys, via->GetStart(), hole_outer_radius, TransformCircleToPolygon( m_viaTH_ODPolys, via->GetStart(), hole_outer_radius,
maxError, ERROR_INSIDE ); maxError, ERROR_INSIDE );
if( m_Cfg->m_Render.clip_silk_on_via_annulus ) if( cfg.clip_silk_on_via_annuli )
{ {
TransformCircleToPolygon( m_THAnnularRingPolys, via->GetStart(), TransformCircleToPolygon( m_viaAnnuliPolys, via->GetStart(),
hole_outer_ring_radius, maxError, ERROR_INSIDE ); hole_outer_ring_radius, maxError, ERROR_INSIDE );
} }
} }
@ -430,7 +425,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
} }
// Creates vertical outline contours of the tracks and add it to the poly of the layer // Creates vertical outline contours of the tracks and add it to the poly of the layer
if( m_Cfg->m_Render.opengl_copper_thickness && m_Cfg->m_Render.engine == RENDER_ENGINE::OPENGL ) if( cfg.opengl_copper_thickness && cfg.engine == RENDER_ENGINE::OPENGL )
{ {
for( PCB_LAYER_ID layer : layer_ids ) for( PCB_LAYER_ID layer : layer_ids )
{ {
@ -450,7 +445,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
// Skip vias annulus when not flashed on this layer // Skip vias annulus when not flashed on this layer
if( track->Type() == PCB_VIA_T if( track->Type() == PCB_VIA_T
&& !static_cast<const PCB_VIA*>( track )->FlashLayer( layer ) ) && !static_cast<const PCB_VIA*>( track )->FlashLayer( layer ) )
{ {
continue; continue;
} }
@ -483,8 +478,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
createPadWithHole( pad, &m_TH_ODs, inflate ); createPadWithHole( pad, &m_TH_ODs, inflate );
if( m_Cfg->m_Render.clip_silk_on_via_annulus ) if( cfg.clip_silk_on_via_annuli )
createPadWithHole( pad, &m_THAnnularRings, inflate ); createPadWithHole( pad, &m_viaAnnuli, inflate );
createPadWithHole( pad, &m_TH_IDs, 0 ); createPadWithHole( pad, &m_TH_IDs, 0 );
} }
@ -508,16 +503,16 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
if( pad->GetAttribute () != PAD_ATTRIB::NPTH ) if( pad->GetAttribute () != PAD_ATTRIB::NPTH )
{ {
if( m_Cfg->m_Render.clip_silk_on_via_annulus ) if( cfg.clip_silk_on_via_annuli )
pad->TransformHoleToPolygon( m_THAnnularRingPolys, inflate, maxError, ERROR_INSIDE ); pad->TransformHoleToPolygon( m_viaAnnuliPolys, inflate, maxError, ERROR_INSIDE );
pad->TransformHoleToPolygon( m_TH_ODPolys, inflate, maxError, ERROR_INSIDE ); pad->TransformHoleToPolygon( m_TH_ODPolys, inflate, maxError, ERROR_INSIDE );
} }
else else
{ {
// If not plated, no copper. // If not plated, no copper.
if( m_Cfg->m_Render.clip_silk_on_via_annulus ) if( cfg.clip_silk_on_via_annuli )
pad->TransformHoleToPolygon( m_THAnnularRingPolys, 0, maxError, ERROR_INSIDE ); pad->TransformHoleToPolygon( m_viaAnnuliPolys, 0, maxError, ERROR_INSIDE );
pad->TransformHoleToPolygon( m_NPTH_ODPolys, 0, maxError, ERROR_INSIDE ); pad->TransformHoleToPolygon( m_NPTH_ODPolys, 0, maxError, ERROR_INSIDE );
} }
@ -534,15 +529,14 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
// ADD PADS // ADD PADS
for( FOOTPRINT* footprint : m_board->Footprints() ) for( FOOTPRINT* footprint : m_board->Footprints() )
{ {
addPads( footprint, layerContainer, layer, m_Cfg->m_Render.renderPlatedPadsAsPlated, addPads( footprint, layerContainer, layer, cfg.renderPlatedPadsAsPlated, false );
false );
// Micro-wave footprints may have items on copper layers // Micro-wave footprints may have items on copper layers
addFootprintShapes( footprint, layerContainer, layer, visibilityFlags ); addFootprintShapes( footprint, layerContainer, layer, visibilityFlags );
} }
} }
if( m_Cfg->m_Render.renderPlatedPadsAsPlated ) if( cfg.renderPlatedPadsAsPlated )
{ {
// ADD PLATED PADS // ADD PLATED PADS
for( FOOTPRINT* footprint : m_board->Footprints() ) for( FOOTPRINT* footprint : m_board->Footprints() )
@ -556,7 +550,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
} }
// Add footprints PADs poly contours (vertical outlines) // Add footprints PADs poly contours (vertical outlines)
if( m_Cfg->m_Render.opengl_copper_thickness && m_Cfg->m_Render.engine == RENDER_ENGINE::OPENGL ) if( cfg.opengl_copper_thickness && cfg.engine == RENDER_ENGINE::OPENGL )
{ {
for( PCB_LAYER_ID layer : layer_ids ) for( PCB_LAYER_ID layer : layer_ids )
{ {
@ -570,14 +564,13 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
// Note: NPTH pads are not drawn on copper layers when the pad has same shape as // Note: NPTH pads are not drawn on copper layers when the pad has same shape as
// its hole // its hole
footprint->TransformPadsToPolySet( *layerPoly, layer, 0, maxError, ERROR_INSIDE, footprint->TransformPadsToPolySet( *layerPoly, layer, 0, maxError, ERROR_INSIDE,
true, m_Cfg->m_Render.renderPlatedPadsAsPlated, true, cfg.renderPlatedPadsAsPlated, false );
false );
transformFPShapesToPolySet( footprint, layer, *layerPoly, maxError, ERROR_INSIDE ); transformFPShapesToPolySet( footprint, layer, *layerPoly, maxError, ERROR_INSIDE );
} }
} }
if( m_Cfg->m_Render.renderPlatedPadsAsPlated ) if( cfg.renderPlatedPadsAsPlated )
{ {
// ADD PLATED PADS contours // ADD PLATED PADS contours
for( FOOTPRINT* footprint : m_board->Footprints() ) for( FOOTPRINT* footprint : m_board->Footprints() )
@ -636,7 +629,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
} }
// Add graphic item on copper layers to poly contours (vertical outlines) // Add graphic item on copper layers to poly contours (vertical outlines)
if( m_Cfg->m_Render.opengl_copper_thickness && m_Cfg->m_Render.engine == RENDER_ENGINE::OPENGL ) if( cfg.opengl_copper_thickness && cfg.engine == RENDER_ENGINE::OPENGL )
{ {
for( PCB_LAYER_ID layer : layer_ids ) for( PCB_LAYER_ID layer : layer_ids )
{ {
@ -681,7 +674,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
} }
} }
if( m_Cfg->m_Render.show_zones ) if( cfg.show_zones )
{ {
if( aStatusReporter ) if( aStatusReporter )
aStatusReporter->Report( _( "Create zones" ) ); aStatusReporter->Report( _( "Create zones" ) );
@ -726,9 +719,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
if( layerContainer != m_layerMap.end() ) if( layerContainer != m_layerMap.end() )
addSolidAreasShapes( zone, layerContainer->second, layer ); addSolidAreasShapes( zone, layerContainer->second, layer );
if( m_Cfg->m_Render.opengl_copper_thickness if( cfg.opengl_copper_thickness && cfg.engine == RENDER_ENGINE::OPENGL
&& m_Cfg->m_Render.engine == RENDER_ENGINE::OPENGL && layerPolyContainer != m_layers_poly.end() )
&& layerPolyContainer != m_layers_poly.end() )
{ {
auto mut_it = layer_lock.find( layer ); auto mut_it = layer_lock.find( layer );
@ -753,9 +745,9 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
if( aStatusReporter ) if( aStatusReporter )
aStatusReporter->Report( _( "Simplifying copper layers polygons" ) ); aStatusReporter->Report( _( "Simplifying copper layers polygons" ) );
if( m_Cfg->m_Render.opengl_copper_thickness && m_Cfg->m_Render.engine == RENDER_ENGINE::OPENGL ) if( cfg.opengl_copper_thickness && cfg.engine == RENDER_ENGINE::OPENGL )
{ {
if( m_Cfg->m_Render.renderPlatedPadsAsPlated ) if( cfg.renderPlatedPadsAsPlated )
{ {
if( m_frontPlatedPadPolys && ( m_layers_poly.find( F_Cu ) != m_layers_poly.end() ) ) if( m_frontPlatedPadPolys && ( m_layers_poly.find( F_Cu ) != m_layers_poly.end() ) )
{ {
@ -783,7 +775,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
std::vector<PCB_LAYER_ID> &selected_layer_id = layer_ids; std::vector<PCB_LAYER_ID> &selected_layer_id = layer_ids;
std::vector<PCB_LAYER_ID> layer_id_without_F_and_B; std::vector<PCB_LAYER_ID> layer_id_without_F_and_B;
if( m_Cfg->m_Render.renderPlatedPadsAsPlated ) if( cfg.renderPlatedPadsAsPlated )
{ {
layer_id_without_F_and_B.clear(); layer_id_without_F_and_B.clear();
layer_id_without_F_and_B.reserve( layer_ids.size() ); layer_id_without_F_and_B.reserve( layer_ids.size() );
@ -864,7 +856,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
m_TH_ODPolys.Simplify( SHAPE_POLY_SET::PM_FAST ); m_TH_ODPolys.Simplify( SHAPE_POLY_SET::PM_FAST );
m_NPTH_ODPolys.Simplify( SHAPE_POLY_SET::PM_FAST ); m_NPTH_ODPolys.Simplify( SHAPE_POLY_SET::PM_FAST );
m_viaTH_ODPolys.Simplify( SHAPE_POLY_SET::PM_FAST ); m_viaTH_ODPolys.Simplify( SHAPE_POLY_SET::PM_FAST );
m_THAnnularRingPolys.Simplify( SHAPE_POLY_SET::PM_FAST ); m_viaAnnuliPolys.Simplify( SHAPE_POLY_SET::PM_FAST );
// Build Tech layers // Build Tech layers
// Based on: // Based on:
@ -876,8 +868,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
// Vertical walls (layer thickness) around shapes is really time consumming // Vertical walls (layer thickness) around shapes is really time consumming
// They are built on request // They are built on request
bool buildVerticalWallsForTechLayers = m_Cfg->m_Render.opengl_copper_thickness bool buildVerticalWallsForTechLayers = cfg.opengl_copper_thickness
&& m_Cfg->m_Render.engine == RENDER_ENGINE::OPENGL; && cfg.engine == RENDER_ENGINE::OPENGL;
static const PCB_LAYER_ID techLayerList[] = { static const PCB_LAYER_ID techLayerList[] = {
B_Adhes, B_Adhes,
@ -1070,7 +1062,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
} }
// Draw non copper zones // Draw non copper zones
if( m_Cfg->m_Render.show_zones ) if( cfg.show_zones )
{ {
for( ZONE* zone : m_board->Zones() ) for( ZONE* zone : m_board->Zones() )
{ {
@ -1097,7 +1089,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
// A somewhat experimental feature: if we're rendering off-board silk, turn any pads of // A somewhat experimental feature: if we're rendering off-board silk, turn any pads of
// footprints which are entirely outside the board outline into silk. This makes off-board // footprints which are entirely outside the board outline into silk. This makes off-board
// footprints more visually recognizable. // footprints more visually recognizable.
if( m_Cfg->m_Render.show_off_board_silk ) if( cfg.show_off_board_silk )
{ {
BOX2I boardBBox = m_board_poly.BBox(); BOX2I boardBBox = m_board_poly.BBox();
@ -1127,7 +1119,7 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter )
m_TH_IDs.BuildBVH(); m_TH_IDs.BuildBVH();
m_TH_ODs.BuildBVH(); m_TH_ODs.BuildBVH();
m_THAnnularRings.BuildBVH(); m_viaAnnuli.BuildBVH();
if( !m_layerHoleMap.empty() ) if( !m_layerHoleMap.empty() )
{ {

View File

@ -502,10 +502,10 @@ void RENDER_3D_OPENGL::reload( REPORTER* aStatusReporter, REPORTER* aWarningRepo
m_outerViaThroughHoles = generateHoles( m_boardAdapter.GetViaTH_ODs().GetList(), m_outerViaThroughHoles = generateHoles( m_boardAdapter.GetViaTH_ODs().GetList(),
m_boardAdapter.GetViaTH_ODPolys(), 1.0f, 0.0f, false ); m_boardAdapter.GetViaTH_ODPolys(), 1.0f, 0.0f, false );
if( m_boardAdapter.m_Cfg->m_Render.clip_silk_on_via_annulus ) if( m_boardAdapter.m_Cfg->m_Render.clip_silk_on_via_annuli )
{ {
m_outerThroughHoleRings = generateHoles( m_boardAdapter.GetTHAnnularRings().GetList(), m_outerThroughHoleRings = generateHoles( m_boardAdapter.GetViaAnnuli().GetList(),
m_boardAdapter.GetTHAnnularRingPolys(), m_boardAdapter.GetViaAnnuliPolys(),
1.0f, 0.0f, false ); 1.0f, 0.0f, false );
} }
@ -567,7 +567,7 @@ void RENDER_3D_OPENGL::reload( REPORTER* aStatusReporter, REPORTER* aWarningRepo
if( map_poly.find( layer ) != map_poly.end() ) if( map_poly.find( layer ) != map_poly.end() )
{ {
polyListSubtracted = *map_poly.at( layer );; polyListSubtracted = *map_poly.at( layer );
if( LSET::PhysicalLayersMask().test( layer ) ) if( LSET::PhysicalLayersMask().test( layer ) )
{ {
@ -605,7 +605,6 @@ void RENDER_3D_OPENGL::reload( REPORTER* aStatusReporter, REPORTER* aWarningRepo
if( oglList != nullptr ) if( oglList != nullptr )
m_layers[layer] = oglList; m_layers[layer] = oglList;
} }
if( m_boardAdapter.m_Cfg->m_Render.renderPlatedPadsAsPlated ) if( m_boardAdapter.m_Cfg->m_Render.renderPlatedPadsAsPlated )

View File

@ -452,6 +452,8 @@ bool RENDER_3D_OPENGL::Redraw( bool aIsMoving, REPORTER* aStatusReporter,
return false; return false;
} }
EDA_3D_VIEWER_SETTINGS::RENDER_SETTINGS& cfg = m_boardAdapter.m_Cfg->m_Render;
if( m_reloadRequested ) if( m_reloadRequested )
{ {
std::unique_ptr<BUSY_INDICATOR> busy = CreateBusyIndicator(); std::unique_ptr<BUSY_INDICATOR> busy = CreateBusyIndicator();
@ -462,16 +464,16 @@ bool RENDER_3D_OPENGL::Redraw( bool aIsMoving, REPORTER* aStatusReporter,
reload( aStatusReporter, aWarningReporter ); reload( aStatusReporter, aWarningReporter );
// generate a new 3D grid as the size of the board may had changed // generate a new 3D grid as the size of the board may had changed
m_lastGridType = static_cast<GRID3D_TYPE>( m_boardAdapter.m_Cfg->m_Render.grid_type ); m_lastGridType = static_cast<GRID3D_TYPE>( cfg.grid_type );
generate3dGrid( m_lastGridType ); generate3dGrid( m_lastGridType );
} }
else else
{ {
// Check if grid was changed // Check if grid was changed
if( m_boardAdapter.m_Cfg->m_Render.grid_type != m_lastGridType ) if( cfg.grid_type != m_lastGridType )
{ {
// and generate a new one // and generate a new one
m_lastGridType = static_cast<GRID3D_TYPE>( m_boardAdapter.m_Cfg->m_Render.grid_type ); m_lastGridType = static_cast<GRID3D_TYPE>( cfg.grid_type );
generate3dGrid( m_lastGridType ); generate3dGrid( m_lastGridType );
} }
} }
@ -485,7 +487,7 @@ bool RENDER_3D_OPENGL::Redraw( bool aIsMoving, REPORTER* aStatusReporter,
glEnable( GL_NORMALIZE ); // This allow OpenGL to normalize the normals after transformations glEnable( GL_NORMALIZE ); // This allow OpenGL to normalize the normals after transformations
glViewport( 0, 0, m_windowSize.x, m_windowSize.y ); glViewport( 0, 0, m_windowSize.x, m_windowSize.y );
if( aIsMoving && m_boardAdapter.m_Cfg->m_Render.opengl_AA_disableOnMove ) if( aIsMoving && cfg.opengl_AA_disableOnMove )
glDisable( GL_MULTISAMPLE ); glDisable( GL_MULTISAMPLE );
else else
glEnable( GL_MULTISAMPLE ); glEnable( GL_MULTISAMPLE );
@ -536,9 +538,9 @@ bool RENDER_3D_OPENGL::Redraw( bool aIsMoving, REPORTER* aStatusReporter,
glLightfv( GL_LIGHT0, GL_POSITION, headlight_pos ); glLightfv( GL_LIGHT0, GL_POSITION, headlight_pos );
} }
bool skipThickness = aIsMoving && m_boardAdapter.m_Cfg->m_Render.opengl_thickness_disableOnMove; bool skipThickness = aIsMoving && cfg.opengl_thickness_disableOnMove;
bool skipRenderHoles = aIsMoving && m_boardAdapter.m_Cfg->m_Render.opengl_holes_disableOnMove; bool skipRenderHoles = aIsMoving && cfg.opengl_holes_disableOnMove;
bool skipRenderVias = aIsMoving && m_boardAdapter.m_Cfg->m_Render.opengl_vias_disableOnMove; bool skipRenderVias = aIsMoving && cfg.opengl_vias_disableOnMove;
bool drawMiddleSegments = !skipThickness; bool drawMiddleSegments = !skipThickness;
@ -582,7 +584,7 @@ bool RENDER_3D_OPENGL::Redraw( bool aIsMoving, REPORTER* aStatusReporter,
if( isCopperLayer ) if( isCopperLayer )
{ {
if( m_boardAdapter.m_Cfg->m_Render.renderPlatedPadsAsPlated ) if( cfg.renderPlatedPadsAsPlated )
setCopperMaterial(); setCopperMaterial();
else else
setLayerMaterial( layer_id ); setLayerMaterial( layer_id );
@ -647,21 +649,18 @@ bool RENDER_3D_OPENGL::Redraw( bool aIsMoving, REPORTER* aStatusReporter,
OPENGL_RENDER_LIST* anti_board = nullptr; OPENGL_RENDER_LIST* anti_board = nullptr;
OPENGL_RENDER_LIST* solder_mask = nullptr; OPENGL_RENDER_LIST* solder_mask = nullptr;
if( isSilkLayer && m_boardAdapter.m_Cfg->m_Render.clip_silk_on_via_annulus ) if( isSilkLayer && cfg.clip_silk_on_via_annuli )
throughHolesOuter = m_outerThroughHoleRings; throughHolesOuter = m_outerThroughHoleRings;
else else
throughHolesOuter = m_outerThroughHoles; throughHolesOuter = m_outerThroughHoles;
if( isSilkLayer && m_boardAdapter.m_Cfg->m_Render.show_off_board_silk ) if( isSilkLayer && cfg.show_off_board_silk )
anti_board = nullptr; anti_board = nullptr;
else if( LSET::PhysicalLayersMask().test( layer_id ) ) else if( LSET::PhysicalLayersMask().test( layer_id ) )
anti_board = m_antiBoard; anti_board = m_antiBoard;
if( isSilkLayer && m_boardAdapter.m_Cfg->m_Render.subtract_mask_from_silk if( isSilkLayer && cfg.subtract_mask_from_silk && !cfg.show_off_board_silk )
&& !m_boardAdapter.m_Cfg->m_Render.show_off_board_silk )
{
solder_mask = m_layers[ (layer_id == B_SilkS) ? B_Mask : F_Mask ]; solder_mask = m_layers[ (layer_id == B_SilkS) ? B_Mask : F_Mask ];
}
if( throughHolesOuter ) if( throughHolesOuter )
throughHolesOuter->ApplyScalePosition( pLayerDispList ); throughHolesOuter->ApplyScalePosition( pLayerDispList );
@ -766,7 +765,7 @@ bool RENDER_3D_OPENGL::Redraw( bool aIsMoving, REPORTER* aStatusReporter,
glDepthMask( GL_TRUE ); glDepthMask( GL_TRUE );
// Render Grid // Render Grid
if( m_boardAdapter.m_Cfg->m_Render.grid_type != GRID3D_TYPE::NONE ) if( cfg.grid_type != GRID3D_TYPE::NONE )
{ {
glDisable( GL_LIGHTING ); glDisable( GL_LIGHTING );
@ -777,7 +776,7 @@ bool RENDER_3D_OPENGL::Redraw( bool aIsMoving, REPORTER* aStatusReporter,
} }
// Render 3D arrows // Render 3D arrows
if( m_boardAdapter.m_Cfg->m_Render.show_axis ) if( cfg.show_axis )
render3dArrows(); render3dArrows();
// Return back to the original viewport (this is important if we want // Return back to the original viewport (this is important if we want
@ -947,6 +946,8 @@ void RENDER_3D_OPENGL::get3dModelsSelected( std::list<MODELTORENDER> &aDstRender
if( !m_boardAdapter.GetBoard() ) if( !m_boardAdapter.GetBoard() )
return; return;
EDA_3D_VIEWER_SETTINGS::RENDER_SETTINGS& cfg = m_boardAdapter.m_Cfg->m_Render;
// Go for all footprints // Go for all footprints
for( FOOTPRINT* fp : m_boardAdapter.GetBoard()->Footprints() ) for( FOOTPRINT* fp : m_boardAdapter.GetBoard()->Footprints() )
{ {
@ -957,7 +958,7 @@ void RENDER_3D_OPENGL::get3dModelsSelected( std::list<MODELTORENDER> &aDstRender
if( fp->IsSelected() ) if( fp->IsSelected() )
highlight = true; highlight = true;
if( m_boardAdapter.m_Cfg->m_Render.highlight_on_rollover && fp == m_currentRollOverItem ) if( cfg.highlight_on_rollover && fp == m_currentRollOverItem )
highlight = true; highlight = true;
if( aRenderSelectedOnly != highlight ) if( aRenderSelectedOnly != highlight )
@ -1071,7 +1072,9 @@ void RENDER_3D_OPENGL::get3dModelsFromFootprint( std::list<MODELTORENDER> &aDstR
void RENDER_3D_OPENGL::renderOpaqueModels( const glm::mat4 &aCameraViewMatrix ) void RENDER_3D_OPENGL::renderOpaqueModels( const glm::mat4 &aCameraViewMatrix )
{ {
const SFVEC3F selColor = m_boardAdapter.GetColor( m_boardAdapter.m_Cfg->m_Render.opengl_selection_color ); EDA_3D_VIEWER_SETTINGS::RENDER_SETTINGS& cfg = m_boardAdapter.m_Cfg->m_Render;
const SFVEC3F selColor = m_boardAdapter.GetColor( cfg.opengl_selection_color );
glPushMatrix(); glPushMatrix();
@ -1113,7 +1116,9 @@ void RENDER_3D_OPENGL::renderOpaqueModels( const glm::mat4 &aCameraViewMatrix )
void RENDER_3D_OPENGL::renderTransparentModels( const glm::mat4 &aCameraViewMatrix ) void RENDER_3D_OPENGL::renderTransparentModels( const glm::mat4 &aCameraViewMatrix )
{ {
const SFVEC3F selColor = m_boardAdapter.GetColor( m_boardAdapter.m_Cfg->m_Render.opengl_selection_color ); EDA_3D_VIEWER_SETTINGS::RENDER_SETTINGS& cfg = m_boardAdapter.m_Cfg->m_Render;
const SFVEC3F selColor = m_boardAdapter.GetColor( cfg.opengl_selection_color );
std::list<MODELTORENDER> renderListModels; // do not clear it until this function returns std::list<MODELTORENDER> renderListModels; // do not clear it until this function returns
@ -1201,6 +1206,8 @@ void RENDER_3D_OPENGL::renderModel( const glm::mat4 &aCameraViewMatrix,
const MODELTORENDER &aModelToRender, const MODELTORENDER &aModelToRender,
const SFVEC3F &aSelColor, const SFVEC3F *aCameraWorldPos ) const SFVEC3F &aSelColor, const SFVEC3F *aCameraWorldPos )
{ {
EDA_3D_VIEWER_SETTINGS::RENDER_SETTINGS& cfg = m_boardAdapter.m_Cfg->m_Render;
const glm::mat4 modelviewMatrix = aCameraViewMatrix * aModelToRender.m_modelWorldMat; const glm::mat4 modelviewMatrix = aCameraViewMatrix * aModelToRender.m_modelWorldMat;
glLoadMatrixf( glm::value_ptr( modelviewMatrix ) ); glLoadMatrixf( glm::value_ptr( modelviewMatrix ) );
@ -1209,7 +1216,7 @@ void RENDER_3D_OPENGL::renderModel( const glm::mat4 &aCameraViewMatrix,
aModelToRender.m_isSelected, aSelColor, aModelToRender.m_isSelected, aSelColor,
&aModelToRender.m_modelWorldMat, aCameraWorldPos ); &aModelToRender.m_modelWorldMat, aCameraWorldPos );
if( m_boardAdapter.m_Cfg->m_Render.show_model_bbox ) if( cfg.show_model_bbox )
{ {
const bool wasBlendEnabled = glIsEnabled( GL_BLEND ); const bool wasBlendEnabled = glIsEnabled( GL_BLEND );

View File

@ -235,7 +235,9 @@ void RENDER_3D_RAYTRACE::createItemsFromContainer( const BVH_CONTAINER_2D* aCont
if( aContainer2d == nullptr ) if( aContainer2d == nullptr )
return; return;
const LIST_OBJECT2D& listObject2d = aContainer2d->GetList(); EDA_3D_VIEWER_SETTINGS::RENDER_SETTINGS& cfg = m_boardAdapter.m_Cfg->m_Render;
bool isSilk = aLayer_id == B_SilkS || aLayer_id == F_SilkS;
const LIST_OBJECT2D& listObject2d = aContainer2d->GetList();
if( listObject2d.size() == 0 ) if( listObject2d.size() == 0 )
return; return;
@ -274,10 +276,8 @@ void RENDER_3D_RAYTRACE::createItemsFromContainer( const BVH_CONTAINER_2D* aCont
// layer and the flag is set, then clip the silk at the outer edge of the annular ring, // layer and the flag is set, then clip the silk at the outer edge of the annular ring,
// rather than the at the outer edge of the copper plating. // rather than the at the outer edge of the copper plating.
const BVH_CONTAINER_2D& throughHoleOuter = const BVH_CONTAINER_2D& throughHoleOuter =
m_boardAdapter.m_Cfg->m_Render.clip_silk_on_via_annulus cfg.clip_silk_on_via_annuli && isSilk ? m_boardAdapter.GetViaAnnuli()
&& ( aLayer_id == B_SilkS || aLayer_id == F_SilkS ) ? : m_boardAdapter.GetTH_ODs();
m_boardAdapter.GetTHAnnularRings() :
m_boardAdapter.GetTH_ODs();
if( !throughHoleOuter.GetList().empty() ) if( !throughHoleOuter.GetList().empty() )
{ {
@ -303,13 +303,13 @@ void RENDER_3D_RAYTRACE::createItemsFromContainer( const BVH_CONTAINER_2D* aCont
const MAP_CONTAINER_2D_BASE& mapLayers = m_boardAdapter.GetLayerMap(); const MAP_CONTAINER_2D_BASE& mapLayers = m_boardAdapter.GetLayerMap();
if( m_boardAdapter.m_Cfg->m_Render.subtract_mask_from_silk if( cfg.subtract_mask_from_silk
&& ( ( aLayer_id == B_SilkS && mapLayers.find( B_Mask ) != mapLayers.end() ) && ( ( aLayer_id == B_SilkS && mapLayers.find( B_Mask ) != mapLayers.end() )
|| ( aLayer_id == F_SilkS && mapLayers.find( F_Mask ) != mapLayers.end() ) ) ) || ( aLayer_id == F_SilkS && mapLayers.find( F_Mask ) != mapLayers.end() ) ) )
{ {
const PCB_LAYER_ID layerMask_id = ( aLayer_id == B_SilkS ) ? B_Mask : F_Mask; const PCB_LAYER_ID maskLayer = ( aLayer_id == B_SilkS ) ? B_Mask : F_Mask;
const BVH_CONTAINER_2D* containerMaskLayer2d = mapLayers.at( layerMask_id ); const BVH_CONTAINER_2D* containerMaskLayer2d = mapLayers.at( maskLayer );
CONST_LIST_OBJECT2D intersecting; CONST_LIST_OBJECT2D intersecting;
@ -329,8 +329,8 @@ void RENDER_3D_RAYTRACE::createItemsFromContainer( const BVH_CONTAINER_2D* aCont
if( ( object2d_B == CSGITEM_EMPTY ) && ( object2d_C == CSGITEM_FULL ) ) if( ( object2d_B == CSGITEM_EMPTY ) && ( object2d_C == CSGITEM_FULL ) )
{ {
LAYER_ITEM* objPtr = new LAYER_ITEM( object2d_A, LAYER_ITEM* objPtr = new LAYER_ITEM( object2d_A,
m_boardAdapter.GetLayerBottomZPos( aLayer_id ) - aLayerZOffset, m_boardAdapter.GetLayerBottomZPos( aLayer_id ) - aLayerZOffset,
m_boardAdapter.GetLayerTopZPos( aLayer_id ) + aLayerZOffset ); m_boardAdapter.GetLayerTopZPos( aLayer_id ) + aLayerZOffset );
objPtr->SetMaterial( aMaterialLayer ); objPtr->SetMaterial( aMaterialLayer );
objPtr->SetColor( ConvertSRGBToLinear( aLayerColor ) ); objPtr->SetColor( ConvertSRGBToLinear( aLayerColor ) );
m_objectContainer.Add( objPtr ); m_objectContainer.Add( objPtr );
@ -342,8 +342,8 @@ void RENDER_3D_RAYTRACE::createItemsFromContainer( const BVH_CONTAINER_2D* aCont
m_containerWithObjectsToDelete.Add( itemCSG2d ); m_containerWithObjectsToDelete.Add( itemCSG2d );
LAYER_ITEM* objPtr = new LAYER_ITEM( itemCSG2d, LAYER_ITEM* objPtr = new LAYER_ITEM( itemCSG2d,
m_boardAdapter.GetLayerBottomZPos( aLayer_id ) - aLayerZOffset, m_boardAdapter.GetLayerBottomZPos( aLayer_id ) - aLayerZOffset,
m_boardAdapter.GetLayerTopZPos( aLayer_id ) + aLayerZOffset ); m_boardAdapter.GetLayerTopZPos( aLayer_id ) + aLayerZOffset );
objPtr->SetMaterial( aMaterialLayer ); objPtr->SetMaterial( aMaterialLayer );
objPtr->SetColor( ConvertSRGBToLinear( aLayerColor ) ); objPtr->SetColor( ConvertSRGBToLinear( aLayerColor ) );

View File

@ -365,7 +365,7 @@ EDA_3D_VIEWER_SETTINGS::EDA_3D_VIEWER_SETTINGS() :
m_params.emplace_back( new PARAM<bool>( "render.subtract_mask_from_silk", m_params.emplace_back( new PARAM<bool>( "render.subtract_mask_from_silk",
&m_Render.subtract_mask_from_silk, false ) ); &m_Render.subtract_mask_from_silk, false ) );
m_params.emplace_back( new PARAM<bool>( "render.clip_silk_on_via_annulus", m_params.emplace_back( new PARAM<bool>( "render.clip_silk_on_via_annulus",
&m_Render.clip_silk_on_via_annulus, false ) ); &m_Render.clip_silk_on_via_annuli, false ) );
m_params.emplace_back( new PARAM<bool>( "render.plated_and_bare_copper", m_params.emplace_back( new PARAM<bool>( "render.plated_and_bare_copper",
&m_Render.renderPlatedPadsAsPlated, false ) ); &m_Render.renderPlatedPadsAsPlated, false ) );
m_params.emplace_back( new PARAM<bool>( "camera.animation_enabled", m_params.emplace_back( new PARAM<bool>( "camera.animation_enabled",

View File

@ -145,7 +145,7 @@ public:
bool show_fp_values; bool show_fp_values;
bool show_fp_text; bool show_fp_text;
bool subtract_mask_from_silk; bool subtract_mask_from_silk;
bool clip_silk_on_via_annulus; bool clip_silk_on_via_annuli;
bool renderPlatedPadsAsPlated; bool renderPlatedPadsAsPlated;
}; };

View File

@ -48,7 +48,7 @@ void PANEL_3D_DISPLAY_OPTIONS::loadViewSettings( EDA_3D_VIEWER_SETTINGS* aCfg )
m_checkBoxAreas->SetValue( aCfg->m_Render.show_zones ); m_checkBoxAreas->SetValue( aCfg->m_Render.show_zones );
m_checkBoxSubtractMaskFromSilk->SetValue( aCfg->m_Render.subtract_mask_from_silk ); m_checkBoxSubtractMaskFromSilk->SetValue( aCfg->m_Render.subtract_mask_from_silk );
m_checkBoxClipSilkOnViaAnnulus->SetValue( aCfg->m_Render.clip_silk_on_via_annulus ); m_checkBoxClipSilkOnViaAnnulus->SetValue( aCfg->m_Render.clip_silk_on_via_annuli );
m_checkBoxRenderPlatedPadsAsPlated->SetValue( aCfg->m_Render.renderPlatedPadsAsPlated ); m_checkBoxRenderPlatedPadsAsPlated->SetValue( aCfg->m_Render.renderPlatedPadsAsPlated );
m_materialProperties->SetSelection( static_cast<int>( aCfg->m_Render.material_mode ) ); m_materialProperties->SetSelection( static_cast<int>( aCfg->m_Render.material_mode ) );
@ -79,7 +79,7 @@ bool PANEL_3D_DISPLAY_OPTIONS::TransferDataFromWindow()
// Set visibility of items // Set visibility of items
cfg->m_Render.show_zones = m_checkBoxAreas->GetValue(); cfg->m_Render.show_zones = m_checkBoxAreas->GetValue();
cfg->m_Render.subtract_mask_from_silk = m_checkBoxSubtractMaskFromSilk->GetValue(); cfg->m_Render.subtract_mask_from_silk = m_checkBoxSubtractMaskFromSilk->GetValue();
cfg->m_Render.clip_silk_on_via_annulus = m_checkBoxClipSilkOnViaAnnulus->GetValue(); cfg->m_Render.clip_silk_on_via_annuli = m_checkBoxClipSilkOnViaAnnulus->GetValue();
cfg->m_Render.renderPlatedPadsAsPlated = m_checkBoxRenderPlatedPadsAsPlated->GetValue(); cfg->m_Render.renderPlatedPadsAsPlated = m_checkBoxRenderPlatedPadsAsPlated->GetValue();
cfg->m_Render.material_mode = static_cast<MATERIAL_MODE>( m_materialProperties->GetSelection() ); cfg->m_Render.material_mode = static_cast<MATERIAL_MODE>( m_materialProperties->GetSelection() );