Чертане на крива на Безие с помощта на 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);

Btw този код не чертае линии директно през XY, поради спецификата на алгоритъма на Bezier, ако имате нужда от точна графика - попитайте ме (или можете да потърсите javascript код, лесно е да го преведете на delphi.).

person alitrun    schedule 02.04.2018