diff --git a/3d-viewer/3d_canvas/create_layer_items.cpp b/3d-viewer/3d_canvas/create_layer_items.cpp index d60922f4a6..175a2c9af2 100644 --- a/3d-viewer/3d_canvas/create_layer_items.cpp +++ b/3d-viewer/3d_canvas/create_layer_items.cpp @@ -208,7 +208,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) } } - if( GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) ) + if( GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) && + GetFlag( FL_USE_REALISTIC_MODE ) ) { m_F_Cu_PlatedPads_poly = new SHAPE_POLY_SET; m_B_Cu_PlatedPads_poly = new SHAPE_POLY_SET; @@ -316,7 +317,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) hole_inner_radius + thickness, *track ) ); - if( GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) ) + if( GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) && + GetFlag( FL_USE_REALISTIC_MODE ) ) { m_through_holes_outer_ring.Add( new CFILLEDCIRCLE2D( via_center, ring_radius, @@ -413,7 +415,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) TransformCircleToPolygon( m_through_outer_holes_vias_poly, via->GetStart(), hole_outer_radius, ARC_HIGH_DEF, ERROR_INSIDE ); - if( GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) ) + if( GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) && + GetFlag( FL_USE_REALISTIC_MODE ) ) { TransformCircleToPolygon( m_through_outer_ring_holes_poly, via->GetStart(), hole_outer_ring_radius, @@ -479,7 +482,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) m_through_holes_outer.Add( createNewPadDrill( pad, inflate ) ); - if( GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) ) + if( GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) && + GetFlag( FL_USE_REALISTIC_MODE ) ) { m_through_holes_outer_ring.Add( createNewPadDrill( pad, inflate ) ); } @@ -507,7 +511,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) if( pad->GetAttribute () != PAD_ATTRIB_NPTH ) { - if( GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) ) + if( GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) && + GetFlag( FL_USE_REALISTIC_MODE ) ) { pad->TransformHoleWithClearanceToPolygon( m_through_outer_ring_holes_poly, inflate, @@ -520,7 +525,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) else { // If not plated, no copper. - if( GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) ) + if( GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) && + GetFlag( FL_USE_REALISTIC_MODE ) ) { pad->TransformHoleWithClearanceToPolygon( m_through_outer_ring_holes_poly, 0, ARC_HIGH_DEF, ERROR_INSIDE ); @@ -532,7 +538,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) } } - const bool renderPlatedPadsAsPlated = GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ); + const bool renderPlatedPadsAsPlated = GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) && + GetFlag( FL_USE_REALISTIC_MODE ); // Add footprints PADs objects to containers for( PCB_LAYER_ID curr_layer_id : layer_id ) @@ -777,7 +784,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) if( GetFlag( FL_RENDER_OPENGL_COPPER_THICKNESS ) && ( m_render_engine == RENDER_ENGINE::OPENGL_LEGACY ) ) { - if( GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) ) + if( GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) && + GetFlag( FL_USE_REALISTIC_MODE ) ) { if( m_F_Cu_PlatedPads_poly && ( m_layers_poly.find( F_Cu ) != m_layers_poly.end() ) ) { @@ -799,7 +807,8 @@ void BOARD_ADAPTER::createLayers( REPORTER* aStatusReporter ) std::vector< PCB_LAYER_ID > &selected_layer_id = layer_id; std::vector< PCB_LAYER_ID > layer_id_without_F_and_B; - if( GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) ) + if( GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) && + GetFlag( FL_USE_REALISTIC_MODE ) ) { layer_id_without_F_and_B.clear(); layer_id_without_F_and_B.reserve( layer_id.size() ); diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_createscene_ogl_legacy.cpp b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_createscene_ogl_legacy.cpp index a598248a4e..435498eb82 100644 --- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_createscene_ogl_legacy.cpp +++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_createscene_ogl_legacy.cpp @@ -504,21 +504,25 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin m_ogl_disp_list_board = createBoard( m_boardAdapter.GetBoardPoly(), &m_boardAdapter.GetThroughHole_Inner() ); - m_anti_board_poly.RemoveAllContours(); - m_anti_board_poly.NewOutline(); - m_anti_board_poly.Append( VECTOR2I( -INT_MAX/2, -INT_MAX/2 ) ); - m_anti_board_poly.Append( VECTOR2I( INT_MAX/2, -INT_MAX/2 ) ); - m_anti_board_poly.Append( VECTOR2I( INT_MAX/2, INT_MAX/2 ) ); - m_anti_board_poly.Append( VECTOR2I( -INT_MAX/2, INT_MAX/2 ) ); - m_anti_board_poly.Outline( 0 ).SetClosed( true ); + if( m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) ) + { + m_anti_board_poly.RemoveAllContours(); + m_anti_board_poly.NewOutline(); + m_anti_board_poly.Append( VECTOR2I( -INT_MAX/2, -INT_MAX/2 ) ); + m_anti_board_poly.Append( VECTOR2I( INT_MAX/2, -INT_MAX/2 ) ); + m_anti_board_poly.Append( VECTOR2I( INT_MAX/2, INT_MAX/2 ) ); + m_anti_board_poly.Append( VECTOR2I( -INT_MAX/2, INT_MAX/2 ) ); + m_anti_board_poly.Outline( 0 ).SetClosed( true ); - m_anti_board_poly.BooleanSubtract( m_boardAdapter.GetBoardPoly(), SHAPE_POLY_SET::PM_STRICTLY_SIMPLE ); - m_ogl_disp_list_anti_board = createBoard( m_anti_board_poly ); + m_anti_board_poly.BooleanSubtract( m_boardAdapter.GetBoardPoly(), SHAPE_POLY_SET::PM_STRICTLY_SIMPLE ); + m_ogl_disp_list_anti_board = createBoard( m_anti_board_poly ); + } SHAPE_POLY_SET board_poly_with_holes = m_boardAdapter.GetBoardPoly(); board_poly_with_holes.BooleanSubtract( m_boardAdapter.GetThroughHole_Outer_poly(), SHAPE_POLY_SET::PM_FAST ); board_poly_with_holes.BooleanSubtract( m_boardAdapter.GetThroughHole_Outer_poly_NPTH(), SHAPE_POLY_SET::PM_FAST ); + m_ogl_disp_list_board_with_holes = createBoard( board_poly_with_holes ); if( m_ogl_disp_list_anti_board ) @@ -531,7 +535,9 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin aStatusReporter->Report( _( "Load OpenGL: holes and vias" ) ); SHAPE_POLY_SET outerPolyTHT = m_boardAdapter.GetThroughHole_Outer_poly(); - outerPolyTHT.BooleanIntersection( m_boardAdapter.GetBoardPoly(), SHAPE_POLY_SET::PM_STRICTLY_SIMPLE ); + + if( m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) ) + outerPolyTHT.BooleanIntersection( m_boardAdapter.GetBoardPoly(), SHAPE_POLY_SET::PM_STRICTLY_SIMPLE ); m_ogl_disp_list_through_holes_outer = generate_holes_display_list( m_boardAdapter.GetThroughHole_Outer().GetList(), @@ -548,7 +554,8 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin 0.0f, false ); - if( m_boardAdapter.GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) ) + if( m_boardAdapter.GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) && + m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) ) { m_ogl_disp_list_through_holes_outer_ring = generate_holes_display_list( m_boardAdapter.GetThroughHole_Outer_Ring().GetList(), @@ -637,7 +644,8 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin SHAPE_POLY_SET polyListSubtracted; polyListSubtracted = *aPolyList; - if( ( layer_id != B_Paste ) && ( layer_id != F_Paste ) ) + if( ( layer_id != B_Paste ) && ( layer_id != F_Paste ) && + m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) ) { polyListSubtracted.BooleanIntersection( m_boardAdapter.GetBoardPoly(), SHAPE_POLY_SET::PM_FAST ); @@ -668,7 +676,8 @@ void C3D_RENDER_OGL_LEGACY::reload( REPORTER* aStatusReporter, REPORTER* aWarnin }// for each layer on - if( m_boardAdapter.GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) ) + if( m_boardAdapter.GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) && + m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) ) { if( m_boardAdapter.GetPolyPlatedPads_Front() ) { @@ -878,7 +887,9 @@ void C3D_RENDER_OGL_LEGACY::generate_3D_Vias_and_Pads() // Subtract the holes tht_outer_holes_poly.BooleanSubtract( tht_inner_holes_poly, SHAPE_POLY_SET::PM_FAST ); - tht_outer_holes_poly.BooleanSubtract( m_anti_board_poly, SHAPE_POLY_SET::PM_FAST ); + + if( m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) ) + tht_outer_holes_poly.BooleanSubtract( m_anti_board_poly, SHAPE_POLY_SET::PM_FAST ); CCONTAINER2D holesContainer; diff --git a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.cpp b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.cpp index 20e9444147..c79079e0bd 100644 --- a/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.cpp +++ b/3d-viewer/3d_rendering/3d_render_ogl_legacy/c3d_render_ogl_legacy.cpp @@ -729,7 +729,8 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, if( (layer_id >= F_Cu) && (layer_id <= B_Cu) ) { if( !m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) || - !m_boardAdapter.GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) ) + !( m_boardAdapter.GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) && + m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) ) ) set_layer_material( layer_id ); else setCopperMaterial(); @@ -848,7 +849,8 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, set_layer_material( layer_id ); CLAYERS_OGL_DISP_LISTS* dispListThroughHolesOuter = - ( m_boardAdapter.GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) + ( m_boardAdapter.GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) && + m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) && ( ( layer_id == B_SilkS ) || ( layer_id == F_SilkS ) ) ) ? m_ogl_disp_list_through_holes_outer_ring : m_ogl_disp_list_through_holes_outer; @@ -872,6 +874,7 @@ bool C3D_RENDER_OGL_LEGACY::Redraw( bool aIsMoving, REPORTER* aStatusReporter, if( (!skipRenderHoles) && m_boardAdapter.GetFlag( FL_SUBTRACT_MASK_FROM_SILK ) && + m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) && ( ( ( layer_id == B_SilkS ) && ( m_ogl_disp_lists_layers.find( B_Mask ) != m_ogl_disp_lists_layers.end() ) ) || ( ( layer_id == F_SilkS ) && diff --git a/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_createscene.cpp b/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_createscene.cpp index acbd804aba..9868a07b91 100644 --- a/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_createscene.cpp +++ b/3d-viewer/3d_rendering/3d_render_raytracing/c3d_render_createscene.cpp @@ -342,7 +342,8 @@ void C3D_RENDER_RAYTRACING::createItemsFromContainer( const CBVHCONTAINER2D *aCo // clip the silk screening at the outer edge of the annular ring, rather // than the at the outer edge of the copper plating. const CBVHCONTAINER2D& throughHoleOuter = - ( m_boardAdapter.GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) + ( m_boardAdapter.GetFlag( FL_CLIP_SILK_ON_VIA_ANNULUS ) && + m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) && ( ( aLayer_id == B_SilkS ) || ( aLayer_id == F_SilkS ) ) ) ? m_boardAdapter.GetThroughHole_Outer_Ring() : m_boardAdapter.GetThroughHole_Outer(); @@ -389,6 +390,7 @@ void C3D_RENDER_RAYTRACING::createItemsFromContainer( const CBVHCONTAINER2D *aCo const MAP_CONTAINER_2D& mapLayers = m_boardAdapter.GetMapLayers(); if( m_boardAdapter.GetFlag( FL_SUBTRACT_MASK_FROM_SILK ) && + m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) && ( ( ( aLayer_id == B_SilkS ) && ( mapLayers.find( B_Mask ) != mapLayers.end() ) ) || ( ( aLayer_id == F_SilkS ) && @@ -779,7 +781,8 @@ void C3D_RENDER_RAYTRACING::Reload( REPORTER* aStatusReporter, }// for each layer on map // Create plated copper - if( m_boardAdapter.GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) ) + if( m_boardAdapter.GetFlag( FL_RENDER_PLATED_PADS_AS_PLATED ) && + m_boardAdapter.GetFlag( FL_USE_REALISTIC_MODE ) ) { SFVEC3F layerColor_F_Cu = m_boardAdapter.GetLayerColor( F_Cu ); SFVEC3F layerColor_B_Cu = m_boardAdapter.GetLayerColor( B_Cu );