From 88695af364fd0d3ac9da646898381d08af94d49d Mon Sep 17 00:00:00 2001 From: Jeff Young Date: Sat, 10 May 2025 13:12:00 +0100 Subject: [PATCH] Move sketched DNP items to plot_brditems_plotter.cpp. --- common/plotters/plotter.cpp | 19 +++++++++++++++-- include/plotters/plotter.h | 2 +- pcbnew/plot_brditems_plotter.cpp | 36 ++++++++++++++------------------ 3 files changed, 34 insertions(+), 23 deletions(-) diff --git a/common/plotters/plotter.cpp b/common/plotters/plotter.cpp index e8f19f5ba7..43105c17af 100644 --- a/common/plotters/plotter.cpp +++ b/common/plotters/plotter.cpp @@ -671,9 +671,24 @@ void PLOTTER::FilledCircle( const VECTOR2I& pos, int diametre, OUTLINE_MODE trac } -void PLOTTER::ThickPoly( const SHAPE_POLY_SET& aPoly, int aWidth, void* aData ) +void PLOTTER::ThickPoly( const SHAPE_POLY_SET& aPoly, int aWidth, OUTLINE_MODE tracemode, void* aData ) { - PlotPoly( aPoly.COutline( 0 ), FILL_T::NO_FILL, aWidth, aData ); + if( tracemode == SKETCH ) + { + SHAPE_POLY_SET outline = aPoly.CloneDropTriangulation(); + outline.Inflate( GetCurrentLineWidth() / 2, CORNER_STRATEGY::ROUND_ALL_CORNERS, + GetPlotterArcHighDef() ); + PlotPoly( outline.COutline( 0 ), FILL_T::NO_FILL, USE_DEFAULT_LINE_WIDTH, nullptr ); + + outline = aPoly.CloneDropTriangulation(); + outline.Deflate( GetCurrentLineWidth() / 2, CORNER_STRATEGY::ROUND_ALL_CORNERS, + GetPlotterArcHighDef() ); + PlotPoly( outline.COutline( 0 ), FILL_T::NO_FILL, USE_DEFAULT_LINE_WIDTH, nullptr ); + } + else + { + PlotPoly( aPoly.COutline( 0 ), FILL_T::NO_FILL, aWidth, aData ); + } } diff --git a/include/plotters/plotter.h b/include/plotters/plotter.h index adca15aff0..904b96fecb 100644 --- a/include/plotters/plotter.h +++ b/include/plotters/plotter.h @@ -322,7 +322,7 @@ public: virtual void ThickOval( const VECTOR2I& aPos, const VECTOR2I& aSize, const EDA_ANGLE& aOrient, int aWidth, void* aData ); - virtual void ThickPoly( const SHAPE_POLY_SET& aPoly, int aWidth, void* aData ); + virtual void ThickPoly( const SHAPE_POLY_SET& aPoly, int aWidth, OUTLINE_MODE tracemode, void* aData ); // Flash primitives diff --git a/pcbnew/plot_brditems_plotter.cpp b/pcbnew/plot_brditems_plotter.cpp index 59e993a52b..cc3a926fb0 100644 --- a/pcbnew/plot_brditems_plotter.cpp +++ b/pcbnew/plot_brditems_plotter.cpp @@ -311,7 +311,7 @@ void BRDITEMS_PLOTTER::PlotPad( const PAD* aPad, PCB_LAYER_ID aLayer, const COLO aPad->TransformShapeToPolygon( outline, aLayer, 0, m_plotter->GetPlotterArcHighDef(), ERROR_INSIDE, true ); - m_plotter->ThickPoly( outline, GetSketchPadLineWidth(), &metadata ); + m_plotter->ThickPoly( outline, GetSketchPadLineWidth(), FILLED, &metadata ); break; } @@ -917,7 +917,6 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) if( !( m_layerMask & aShape->GetLayerSet() ).any() ) return; - OUTLINE_MODE plotMode = GetPlotMode(); int thickness = aShape->GetWidth(); int margin = thickness; // unclamped thickness (can be negative) LINE_STYLE lineStyle = aShape->GetStroke().GetLineStyle(); @@ -954,7 +953,11 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) if( parentFP && parentFP->IsDNP() && GetSketchDNPFPsOnFabLayers() ) { if( aShape->GetLayer() == F_Fab || aShape->GetLayer() == B_Fab ) - plotMode = SKETCH; + { + thickness = GetSketchPadLineWidth(); + isSolidFill = false; + isHatchedFill = false; + } } if( aShape->GetLayer() == Edge_Cuts ) @@ -989,7 +992,7 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) switch( aShape->GetShape() ) { case SHAPE_T::SEGMENT: - m_plotter->ThickSegment( aShape->GetStart(), aShape->GetEnd(), thickness, plotMode, + m_plotter->ThickSegment( aShape->GetStart(), aShape->GetEnd(), thickness, GetPlotMode(), &gbr_metadata ); break; @@ -1004,12 +1007,12 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) diameter = std::max( diameter, 0 ); } - m_plotter->FilledCircle( aShape->GetStart(), diameter, plotMode, &gbr_metadata ); + m_plotter->FilledCircle( aShape->GetStart(), diameter, GetPlotMode(), &gbr_metadata ); } else { m_plotter->ThickCircle( aShape->GetStart(), aShape->GetRadius() * 2, thickness, - plotMode, &gbr_metadata ); + GetPlotMode(), &gbr_metadata ); } break; @@ -1021,11 +1024,11 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) if( std::abs( aShape->GetArcAngle().AsDegrees() ) == 360.0 ) { m_plotter->ThickCircle( aShape->GetCenter(), aShape->GetRadius() * 2, thickness, - plotMode, &gbr_metadata ); + GetPlotMode(), &gbr_metadata ); } else { - m_plotter->ThickArc( *aShape, plotMode, &gbr_metadata, thickness ); + m_plotter->ThickArc( *aShape, GetPlotMode(), &gbr_metadata, thickness ); } break; @@ -1039,13 +1042,9 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) case SHAPE_T::POLY: if( aShape->IsPolyShapeValid() ) { - if( plotMode == SKETCH ) + if( GetPlotMode() == SKETCH ) { - for( auto it = aShape->GetPolyShape().CIterateSegments( 0 ); it; it++ ) - { - const SEG& seg = it.Get(); - m_plotter->ThickSegment( seg.A, seg.B, thickness, SKETCH, &gbr_metadata ); - } + m_plotter->ThickPoly( aShape->GetPolyShape(), thickness, GetPlotMode(), &gbr_metadata ); } else { @@ -1095,12 +1094,9 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) { std::vector pts = aShape->GetRectCorners(); - if( plotMode == SKETCH ) + if( GetPlotMode() == SKETCH ) { - m_plotter->ThickSegment( pts[0], pts[1], thickness, SKETCH, &gbr_metadata ); - m_plotter->ThickSegment( pts[1], pts[2], thickness, SKETCH, &gbr_metadata ); - m_plotter->ThickSegment( pts[2], pts[3], thickness, SKETCH, &gbr_metadata ); - m_plotter->ThickSegment( pts[3], pts[0], thickness, SKETCH, &gbr_metadata ); + m_plotter->ThickRect( pts[0], pts[2], thickness, GetPlotMode(), &gbr_metadata ); } else { @@ -1150,7 +1146,7 @@ void BRDITEMS_PLOTTER::PlotShape( const PCB_SHAPE* aShape ) m_plotter->RenderSettings(), [&]( const VECTOR2I& a, const VECTOR2I& b ) { - m_plotter->ThickSegment( a, b, thickness, plotMode, + m_plotter->ThickSegment( a, b, thickness, GetPlotMode(), &gbr_metadata ); } ); }