Opengl DrawArcSegment(): refinements for a better look of control points.
Use a segment count multiple of 2, because we have a control point on the middle of the arc, and the look is better if it is on a segment junction because there is no arc to segment approx error
This commit is contained in:
parent
6d12a0c95b
commit
cc81d97f78
|
@ -842,7 +842,18 @@ void OPENGL_GAL::DrawArcSegment( const VECTOR2D& aCenterPoint, double aRadius, d
|
||||||
SWAP( aStartAngle, >, aEndAngle );
|
SWAP( aStartAngle, >, aEndAngle );
|
||||||
|
|
||||||
// Bigger arcs need smaller alpha increment to make them look smooth
|
// Bigger arcs need smaller alpha increment to make them look smooth
|
||||||
const double alphaIncrement = std::min( 1e6 / aRadius, 2.0 * M_PI / CIRCLE_POINTS );
|
double alphaIncrement = std::min( 1e6 / aRadius, 2.0 * M_PI / CIRCLE_POINTS );
|
||||||
|
|
||||||
|
// Refinement: Use a segment count multiple of 2, because we have a control point
|
||||||
|
// on the middle of the arc, and the look is better if it is on a segment junction
|
||||||
|
// because there is no approx error
|
||||||
|
int seg_count = KiROUND( (aEndAngle -aStartAngle ) / alphaIncrement );
|
||||||
|
|
||||||
|
if( seg_count %2 != 0 )
|
||||||
|
seg_count += 1;
|
||||||
|
|
||||||
|
// Recalculate alphaIncrement with a even integer number of segment
|
||||||
|
alphaIncrement = (aEndAngle -aStartAngle ) / seg_count;
|
||||||
|
|
||||||
// Code disabled because it creates serious issues:
|
// Code disabled because it creates serious issues:
|
||||||
// - The arc is inside the polygonization error, but the interior of arc is also important
|
// - The arc is inside the polygonization error, but the interior of arc is also important
|
||||||
|
|
Loading…
Reference in New Issue