Unify correction factor calculations

This commit is contained in:
Seth Hillbrand 2018-04-19 17:20:48 -07:00
parent dbfa9093ab
commit bd5eee50f4
2 changed files with 25 additions and 3 deletions

View File

@ -31,6 +31,24 @@
#include <common.h> #include <common.h>
#include <geometry/geometry_utils.h> #include <geometry/geometry_utils.h>
static const double correction_factor[58] =
{
1.1547005383792515, 1.1099162641747424, 1.0823922002923940, 1.0641777724759121,
1.0514622242382672, 1.0422171162264056, 1.0352761804100830, 1.0299278309497275,
1.0257168632725540, 1.0223405948650293, 1.0195911582083184, 1.0173218375167883,
1.0154266118857451, 1.0138272827109369, 1.0124651257880029, 1.0112953333155177,
1.0102832265380361, 1.0094016211705981, 1.0086289605801528, 1.0079479708092973,
1.0073446768656829, 1.0068076733095861, 1.0063275765801780, 1.0058966090203618,
1.0055082795635164, 1.0051571362062028, 1.0048385723763114, 1.0045486741757732,
1.0042840989156745, 1.0040419778191385, 1.0038198375433474, 1.0036155364690280,
1.0034272126621453, 1.0032532411243213, 1.0030921984828256, 1.0029428336753463,
1.0028040434931396, 1.0026748520830480, 1.0025543936921142, 1.0024418980811722,
1.0023366781455456, 1.0022381193690537, 1.0021456708072995, 1.0020588373518127,
1.0019771730711422, 1.0019002754608142, 1.0018277804630289, 1.0017593581404958,
1.0016947089079804, 1.0016335602408475, 1.0015756637927993, 1.0015207928656586,
1.0014687401828848, 1.0014193159258358, 1.0013723459979209, 1.0013276704868976,
1.0012851422998732, 1.0012446259491854
};
int GetArcToSegmentCount( int aRadius, int aErrorMax, double aArcAngleDegree ) int GetArcToSegmentCount( int aRadius, int aErrorMax, double aArcAngleDegree )
{ {
@ -58,8 +76,11 @@ double GetCircletoPolyCorrectionFactor( int aSegCountforCircle )
* therfore, to move the middle of the segment to the circle (distance = radius) * therfore, to move the middle of the segment to the circle (distance = radius)
* the correctionFactor is 1 /cos( PI/aSegCountforCircle ) * the correctionFactor is 1 /cos( PI/aSegCountforCircle )
*/ */
double correctionFactor = 1.0 / cos( M_PI / aSegCountforCircle ); if( aSegCountforCircle < 6 )
aSegCountforCircle = 6;
if( 1 || aSegCountforCircle > 64 )
return 1.0 / cos( M_PI / aSegCountforCircle );
return correctionFactor; return correction_factor[ aSegCountforCircle - 6 ];
} }

View File

@ -34,6 +34,7 @@
#include <plotter.h> #include <plotter.h>
#include <base_struct.h> #include <base_struct.h>
#include <draw_graphic_text.h> #include <draw_graphic_text.h>
#include <geometry/geometry_utils.h>
#include <trigo.h> #include <trigo.h>
#include <pcb_base_frame.h> #include <pcb_base_frame.h>
#include <macros.h> #include <macros.h>
@ -790,7 +791,7 @@ void PlotSolderMaskLayer( BOARD *aBoard, PLOTTER* aPlotter,
* due to the segment approx ( 1 /cos( PI/circleToSegmentsCount ) * due to the segment approx ( 1 /cos( PI/circleToSegmentsCount )
*/ */
int circleToSegmentsCount = 32; int circleToSegmentsCount = 32;
double correction = 1.0 / cos( M_PI / circleToSegmentsCount ); double correction = GetCircletoPolyCorrectionFactor( circleToSegmentsCount );
// Plot pads // Plot pads
for( MODULE* module = aBoard->m_Modules; module; module = module->Next() ) for( MODULE* module = aBoard->m_Modules; module; module = module->Next() )