Skip to content
Member Filters
Show Inherited
Show Protected
Show abstract
GR32_Paths🞂TCustomPath🞂CurveToMethod

TCustomPath.CurveTo

Appends a cubic Bezier curve segment to the vector path.

Declarations ​

pascal
procedure CurveTo(const X1, Y1, X2, Y2, X, Y: TFloat); overload;
procedure CurveTo(const X2, Y2, X, Y: TFloat); overload;
procedure CurveTo(const C1, C2, P: TFloatPoint); overload; virtual;
procedure CurveTo(const C2, P: TFloatPoint); overload; virtual;
Overload Details

Overload 1 ​

pascal
procedure CurveTo(const X1, Y1, X2, Y2, X, Y: TFloat); overload;

Appends a cubic Bezier curve using explicit control points (X1, Y1) and (X2, Y2) to endpoint (X, Y).

ParameterTypeDescription
X1, Y1TFloatFirst control point coordinates.
X2, Y2TFloatSecond control point coordinates.
X, YTFloatEndpoint coordinates.

Overload 2 ​

pascal
procedure CurveTo(const X2, Y2, X, Y: TFloat); overload;

Appends a smooth cubic Bezier curve, automatically deriving the first control point from the previous control point.

ParameterTypeDescription
X2, Y2TFloatSecond control point coordinates.
X, YTFloatEndpoint coordinates.

Overload 3 ​

pascal
procedure CurveTo(const C1, C2, P: TFloatPoint); overload; virtual;

Appends a cubic Bezier curve using control points C1, C2 and endpoint P.

ParameterTypeDescription
C1TFloatPointFirst control point.
C2TFloatPointSecond control point.
PTFloatPointDestination endpoint.

Overload 4 ​

pascal
procedure CurveTo(const C2, P: TFloatPoint); overload; virtual;

Appends a smooth cubic Bezier curve using control point C2 and endpoint P.

ParameterTypeDescription
C2TFloatPointSecond control point.
PTFloatPointDestination endpoint.

Description ​

CurveTo appends a cubic Bezier curve segment extending from CurrentPoint to the designated endpoint P (or X, Y).

Cubic Bezier curves use two control points to shape the curve tangent:

  • Standard signatures accept both control points C1 and C2 explicitly.
  • Smooth curve signatures (CurveTo(C2, P)) accept only C2 and automatically calculate C1 by reflecting the last control point of a preceding CurveTo operation across CurrentPoint. If the preceding command was not a cubic curve, C1 defaults to CurrentPoint.

Curvature subdivision tolerance during flattening is governed by CBezierTolerance.

Example ​

pascal
var
  Canvas: TCanvas32;
begin
  Canvas := TCanvas32.Create(MyBitmap);
  try
    Canvas.MoveTo(10.0, 100.0);
    // Draw S-curve segment
    Canvas.CurveTo(50.0, 10.0, 150.0, 190.0, 200.0, 100.0);
    // Smooth continuation
    Canvas.CurveTo(250.0, 10.0, 300.0, 100.0);
    Canvas.EndPath;
  finally
    Canvas.Free;
  end;
end;