Commit 834699ac authored by jean-pierre charras's avatar jean-pierre charras
Browse files

Pcbnew: fix bug #1313076 (Filled Zones on technical layers) does not show up on 3D rendering

parent 29c8ec42
Loading
Loading
Loading
Loading
+25 −16
Original line number Original line Diff line number Diff line
@@ -257,8 +257,8 @@ void EDA_3D_CANVAS::BuildBoard3DView()


    // Build a polygon from edge cut items
    // Build a polygon from edge cut items
    wxString msg;
    wxString msg;
    if( ! pcb->GetBoardPolygonOutlines( bufferPcbOutlines,

                                        allLayerHoles, &msg ) )
    if( !pcb->GetBoardPolygonOutlines( bufferPcbOutlines, allLayerHoles, &msg ) )
    {
    {
        msg << wxT("\n\n") <<
        msg << wxT("\n\n") <<
            _("Unable to calculate the board outlines.\n"
            _("Unable to calculate the board outlines.\n"
@@ -432,7 +432,7 @@ void EDA_3D_CANVAS::BuildBoard3DView()
    }
    }


    // Draw vias holes (vertical cylinders)
    // Draw vias holes (vertical cylinders)
    for( TRACK* track = pcb->m_Track; track != NULL; track = track->Next() )
    for( const TRACK* track = pcb->m_Track; track != NULL; track = track->Next() )
    {
    {
        const VIA *via = dynamic_cast<const VIA*>(track);
        const VIA *via = dynamic_cast<const VIA*>(track);


@@ -441,7 +441,7 @@ void EDA_3D_CANVAS::BuildBoard3DView()
    }
    }


    // Draw pads holes (vertical cylinders)
    // Draw pads holes (vertical cylinders)
    for( MODULE* module = pcb->m_Modules; module != NULL; module = module->Next() )
    for( const MODULE* module = pcb->m_Modules; module != NULL; module = module->Next() )
    {
    {
        for( D_PAD* pad = module->Pads(); pad != NULL; pad = pad->Next() )
        for( D_PAD* pad = module->Pads(); pad != NULL; pad = pad->Next() )
            Draw3DPadHole( pad );
            Draw3DPadHole( pad );
@@ -508,6 +508,7 @@ void EDA_3D_CANVAS::BuildTechLayers3DView()
                                                // to reduce time calculations
                                                // to reduce time calculations
                                                // for holes and items which do not need
                                                // for holes and items which do not need
                                                // a fine representation
                                                // a fine representation
    double          correctionFactorLQ = 1.0 / cos( M_PI / (segcountLowQuality * 2) );


    CPOLYGONS_LIST  bufferPolys;
    CPOLYGONS_LIST  bufferPolys;
    bufferPolys.reserve( 100000 );              // Reserve for large board
    bufferPolys.reserve( 100000 );              // Reserve for large board
@@ -517,8 +518,8 @@ void EDA_3D_CANVAS::BuildTechLayers3DView()
    CPOLYGONS_LIST  bufferPcbOutlines;          // stores the board main outlines
    CPOLYGONS_LIST  bufferPcbOutlines;          // stores the board main outlines
    // Build a polygon from edge cut items
    // Build a polygon from edge cut items
    wxString msg;
    wxString msg;
    if( ! pcb->GetBoardPolygonOutlines( bufferPcbOutlines,

                                        allLayerHoles, &msg ) )
    if( !pcb->GetBoardPolygonOutlines( bufferPcbOutlines, allLayerHoles, &msg ) )
    {
    {
        msg << wxT("\n\n") <<
        msg << wxT("\n\n") <<
            _("Unable to calculate the board outlines.\n"
            _("Unable to calculate the board outlines.\n"
@@ -610,22 +611,30 @@ void EDA_3D_CANVAS::BuildTechLayers3DView()
                        continue;
                        continue;


                    BuildPadShapeThickOutlineAsPolygon( pad, bufferPolys,
                    BuildPadShapeThickOutlineAsPolygon( pad, bufferPolys,
                                                        linewidth,
                            linewidth, segcountforcircle, correctionFactor );
                                                        segcountforcircle, correctionFactor );
                }
                }
            }
            }
            else
            else
                module->TransformPadsShapesWithClearanceToPolygon( layer,
                module->TransformPadsShapesWithClearanceToPolygon( layer,
                                                                   bufferPolys,
                        bufferPolys, 0, segcountforcircle, correctionFactor );
                                                                   0,
                                                                   segcountforcircle,
                                                                   correctionFactor );


            module->TransformGraphicShapesWithClearanceToPolygonSet( layer,
            module->TransformGraphicShapesWithClearanceToPolygonSet( layer,
                                                                     bufferPolys,
                    bufferPolys, 0, segcountforcircle, correctionFactor );
                                                                     0,
        }
                                                                     segcountforcircle,

                                                                     correctionFactor );
        // Draw non copper zones
        if( g_Parm_3D_Visu.GetFlag( FL_ZONE ) )
        {
            for( int ii = 0; ii < pcb->GetAreaCount(); ii++ )
            {
                ZONE_CONTAINER* zone = pcb->GetArea( ii );

                if( !zone->IsOnLayer( layer ) )
                    continue;

                zone->TransformSolidAreasShapesToPolygonSet(
                        bufferPolys, segcountLowQuality, correctionFactorLQ );
            }
        }
        }


        // bufferPolys contains polygons to merge. Many overlaps .
        // bufferPolys contains polygons to merge. Many overlaps .
+7 −1
Original line number Original line Diff line number Diff line
@@ -38,6 +38,12 @@
# Where the library is to be installed.
# Where the library is to be installed.
set( PREFIX ${DOWNLOAD_DIR}/avhttp )
set( PREFIX ${DOWNLOAD_DIR}/avhttp )


if( KICAD_SKIP_BOOST )
    set( AVHTTP_DEPEND "" )
else()
    set( AVHTTP_DEPEND "boost" )
endif()



# Install the AVHTTP header only library ${PREFIX}
# Install the AVHTTP header only library ${PREFIX}
ExternalProject_Add( avhttp
ExternalProject_Add( avhttp
@@ -46,7 +52,7 @@ ExternalProject_Add( avhttp


    # grab it from a local zip file for now, cmake caller's source dir
    # grab it from a local zip file for now, cmake caller's source dir
    URL             ${CMAKE_CURRENT_SOURCE_DIR}/avhttp-master.zip
    URL             ${CMAKE_CURRENT_SOURCE_DIR}/avhttp-master.zip
    DEPENDS         boost
    DEPENDS         ${AVHTTP_DEPEND}


    CONFIGURE_COMMAND ""
    CONFIGURE_COMMAND ""