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).
| Parameter | Type | Description |
|---|---|---|
X1, Y1 | TFloat | First control point coordinates. |
X2, Y2 | TFloat | Second control point coordinates. |
X, Y | TFloat | Endpoint 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.
| Parameter | Type | Description |
|---|---|---|
X2, Y2 | TFloat | Second control point coordinates. |
X, Y | TFloat | Endpoint 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.
| Parameter | Type | Description |
|---|---|---|
C1 | TFloatPoint | First control point. |
C2 | TFloatPoint | Second control point. |
P | TFloatPoint | Destination 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.
| Parameter | Type | Description |
|---|---|---|
C2 | TFloatPoint | Second control point. |
P | TFloatPoint | Destination 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
C1andC2explicitly. - Smooth curve signatures (
CurveTo(C2, P)) accept onlyC2and automatically calculateC1by reflecting the last control point of a precedingCurveTooperation acrossCurrentPoint. If the preceding command was not a cubic curve,C1defaults toCurrentPoint.
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;