如何使用Firemonkey(XE6)绘制贝塞尔曲线? XE6维基中的文档目前有点稀疏。
答案 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。)。