Рисование кривой Безье с помощью Firemonkey

Как нарисовать кривую Безье с помощью Firemonkey (XE6)? Документация в настоящее время немного скудна в вики XE6.


person rhody    schedule 16.07.2014    source источник


Ответы (2)


Следующий код можно использовать для рисования простой кривой Безье с помощью Firemonkey XE6. Создайте новое приложение 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 принимает три аргумента: две контрольные точки Безье и конечную точку. MoveTo обеспечивает отправную точку.

person rhody    schedule 16.07.2014

Исправлен код для новых версий:

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, из-за специфики алгоритма Безье, если вам нужен точный график - спросите меня (или вы можете поискать код javascript, его легко перевести в delphi.).

person alitrun    schedule 02.04.2018