From 834699accb56580d76a7b61f1ec603a6c8a4394a Mon Sep 17 00:00:00 2001 From: jean-pierre charras Date: Sun, 27 Apr 2014 13:30:45 +0200 Subject: [PATCH] Pcbnew: fix bug #1313076 (Filled Zones on technical layers) does not show up on 3D rendering --- 3d-viewer/3d_draw.cpp | 41 ++++++++++++++++++------------ CMakeModules/download_avhttp.cmake | 8 +++++- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/3d-viewer/3d_draw.cpp b/3d-viewer/3d_draw.cpp index 3216947b8e..0a703179fa 100644 --- a/3d-viewer/3d_draw.cpp +++ b/3d-viewer/3d_draw.cpp @@ -257,8 +257,8 @@ void EDA_3D_CANVAS::BuildBoard3DView() // Build a polygon from edge cut items wxString msg; - if( ! pcb->GetBoardPolygonOutlines( bufferPcbOutlines, - allLayerHoles, &msg ) ) + + if( !pcb->GetBoardPolygonOutlines( bufferPcbOutlines, allLayerHoles, &msg ) ) { msg << wxT("\n\n") << _("Unable to calculate the board outlines.\n" @@ -432,7 +432,7 @@ void EDA_3D_CANVAS::BuildBoard3DView() } // 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(track); @@ -441,7 +441,7 @@ void EDA_3D_CANVAS::BuildBoard3DView() } // 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() ) Draw3DPadHole( pad ); @@ -508,6 +508,7 @@ void EDA_3D_CANVAS::BuildTechLayers3DView() // to reduce time calculations // for holes and items which do not need // a fine representation + double correctionFactorLQ = 1.0 / cos( M_PI / (segcountLowQuality * 2) ); CPOLYGONS_LIST bufferPolys; bufferPolys.reserve( 100000 ); // Reserve for large board @@ -517,8 +518,8 @@ void EDA_3D_CANVAS::BuildTechLayers3DView() CPOLYGONS_LIST bufferPcbOutlines; // stores the board main outlines // Build a polygon from edge cut items wxString msg; - if( ! pcb->GetBoardPolygonOutlines( bufferPcbOutlines, - allLayerHoles, &msg ) ) + + if( !pcb->GetBoardPolygonOutlines( bufferPcbOutlines, allLayerHoles, &msg ) ) { msg << wxT("\n\n") << _("Unable to calculate the board outlines.\n" @@ -610,22 +611,30 @@ void EDA_3D_CANVAS::BuildTechLayers3DView() continue; BuildPadShapeThickOutlineAsPolygon( pad, bufferPolys, - linewidth, - segcountforcircle, correctionFactor ); + linewidth, segcountforcircle, correctionFactor ); } } else module->TransformPadsShapesWithClearanceToPolygon( layer, - bufferPolys, - 0, - segcountforcircle, - correctionFactor ); + bufferPolys, 0, segcountforcircle, correctionFactor ); module->TransformGraphicShapesWithClearanceToPolygonSet( layer, - bufferPolys, - 0, - segcountforcircle, - correctionFactor ); + bufferPolys, 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 . diff --git a/CMakeModules/download_avhttp.cmake b/CMakeModules/download_avhttp.cmake index 6fa9f423b4..abc52b7e89 100644 --- a/CMakeModules/download_avhttp.cmake +++ b/CMakeModules/download_avhttp.cmake @@ -38,6 +38,12 @@ # Where the library is to be installed. 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} ExternalProject_Add( avhttp @@ -46,7 +52,7 @@ ExternalProject_Add( avhttp # grab it from a local zip file for now, cmake caller's source dir URL ${CMAKE_CURRENT_SOURCE_DIR}/avhttp-master.zip - DEPENDS boost + DEPENDS ${AVHTTP_DEPEND} CONFIGURE_COMMAND ""