使用Firemonkey绘制Bezier曲线

时间:2014-07-16 20:11:40

标签: firemonkey

如何使用Firemonkey(XE6)绘制贝塞尔曲线? XE6维基中的文档目前有点稀疏。

2 个答案:

答案 0 :(得分:4)

以下代码可用于使用Firemonkey XE6绘制简单的Bezier曲线。创建一个新的Firemonkey应用程序,并在Form OnPaint处理程序中包含代码:

procedure TForm1.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
var path : TPathData;
begin
  path := TPathData.Create;
  try
    path.MoveTo(TPointF.Create (10,100));
    path.CurveTo (TPointF.Create(100,10),TPointF.Create(150,150),
                  TPointF.Create(200,100));
    Canvas.Stroke.Thickness := 2;
    Canvas.Stroke.Color := claRed;
    Canvas.BeginScene;
    Canvas.DrawPath(path, 1.0);
    Canvas.EndScene;
  finally
    path.Free;
  end;
end;

CurveTo有三个参数,两个Bezier控制点和最后一个点。 MoveTo提供了起点。

答案 1 :(得分:1)

新版本的固定代码:

procedure TForm2.FormPaint(Sender: TObject; Canvas: TCanvas; const ARect: TRectF);
var path : TPathData;
begin
  path := TPathData.Create;
  try
    path.MoveTo(TPointF.Create (10,100));
    path.CurveTo (TPointF.Create(100,10),TPointF.Create(150,150),
                  TPointF.Create(200,100));
    Canvas.Stroke.Thickness := 2;
    Canvas.Stroke.Kind := TBrushKind.Solid;
    Canvas.Stroke.Color := TAlphaColorRec.Red;
    Canvas.BeginScene;
    Canvas.DrawPath(path, 1.0);
    Canvas.EndScene;
  finally
    path.Free;
  end;
end;

如果你需要绘制最简单的3点曲线:

path.MoveTo(Point1);
CurveTo (Point2, Point2, Point3);

顺便说一下,这段代码不直接通过XY绘制线条,因为Bezier算法的细节,如果你需要精确的图形 - 问我(或者你可以搜索javascript代码,很容易将它翻译成delphi。)。