Add missing code to plot Bezier curves (EDGE_MODULE shape) in footprints

This commit is contained in:
jean-pierre charras 2019-11-05 20:14:48 +01:00
parent 46cd185524
commit cd7f3375b2
1 changed files with 25 additions and 9 deletions

View File

@ -452,17 +452,12 @@ void BRDITEMS_PLOTTER::Plot_Edges_Modules()
//* Plot a graphic item (outline) relative to a footprint //* Plot a graphic item (outline) relative to a footprint
void BRDITEMS_PLOTTER::Plot_1_EdgeModule( EDGE_MODULE* aEdge ) void BRDITEMS_PLOTTER::Plot_1_EdgeModule( EDGE_MODULE* aEdge )
{ {
int type_trace; // Type of item to plot.
int thickness; // Segment thickness.
int radius; // Circle radius.
if( aEdge->Type() != PCB_MODULE_EDGE_T ) if( aEdge->Type() != PCB_MODULE_EDGE_T )
return; return;
m_plotter->SetColor( getColor( aEdge->GetLayer() ) ); m_plotter->SetColor( getColor( aEdge->GetLayer() ) );
type_trace = aEdge->GetShape(); int thickness = aEdge->GetWidth();
thickness = aEdge->GetWidth();
wxPoint pos( aEdge->GetStart() ); wxPoint pos( aEdge->GetStart() );
wxPoint end( aEdge->GetEnd() ); wxPoint end( aEdge->GetEnd() );
@ -484,7 +479,9 @@ void BRDITEMS_PLOTTER::Plot_1_EdgeModule( EDGE_MODULE* aEdge )
gbr_metadata.SetApertureAttrib( GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_EDGECUT ); gbr_metadata.SetApertureAttrib( GBR_APERTURE_METADATA::GBR_APERTURE_ATTRIB_EDGECUT );
} }
switch( type_trace ) int radius; // Circle/arc radius.
switch( aEdge->GetShape() )
{ {
case S_SEGMENT: case S_SEGMENT:
m_plotter->ThickSegment( pos, end, thickness, GetPlotMode(), &gbr_metadata ); m_plotter->ThickSegment( pos, end, thickness, GetPlotMode(), &gbr_metadata );
@ -507,7 +504,7 @@ void BRDITEMS_PLOTTER::Plot_1_EdgeModule( EDGE_MODULE* aEdge )
else else
m_plotter->ThickArc( pos, -endAngle, -startAngle, radius, thickness, GetPlotMode(), &gbr_metadata ); m_plotter->ThickArc( pos, -endAngle, -startAngle, radius, thickness, GetPlotMode(), &gbr_metadata );
} }
break; break;
case S_POLYGON: case S_POLYGON:
if( aEdge->IsPolyShapeValid() ) if( aEdge->IsPolyShapeValid() )
@ -552,7 +549,26 @@ void BRDITEMS_PLOTTER::Plot_1_EdgeModule( EDGE_MODULE* aEdge )
m_plotter->PlotPoly( cornerList, FILLED_SHAPE, thickness, &gbr_metadata ); m_plotter->PlotPoly( cornerList, FILLED_SHAPE, thickness, &gbr_metadata );
} }
} }
break; break;
case S_CURVE:
{
m_plotter->SetCurrentLineWidth( thickness, &gbr_metadata );
int minSegLen = aEdge->GetWidth(); // The segment min length to approximate a bezier curve
aEdge->RebuildBezierToSegmentsPointsList( minSegLen );
const std::vector<wxPoint>& bezierPoints = aEdge->GetBezierPoints();
for( unsigned i = 1; i < bezierPoints.size(); i++ )
{
m_plotter->ThickSegment( bezierPoints[i - 1], bezierPoints[i],
thickness, GetPlotMode(), &gbr_metadata );
}
}
break;
default:
wxASSERT_MSG( false, "Unhandled EDGE_MODULE type" );
break;
} }
} }