Перейти к содержанию
Fire Monkey от А до Я
  • 0

Как в FM нарисовать текст на Canvas под углом?


estra

Вопрос

Рекомендуемые сообщения

  • 0
  • Администраторы

В общем ничего кроме стандартных знаний линейной алгебры здесь не требуется. Согласно линейной алгебры нужно построить матрицу трансформации задать ее для канвы и рисовать все что угодно.

 

Если вспомнить, то выполнить нужно следующее:

  1. Сместить Систему Координат (СК) на вектор центра поворота.
  2. Повернуть СК на угол поворота
  3. Сместить СК на обратные вектор центра поворота.

В коде это будет выглядеть так:

uses
  System.Math.Vectors;

{$R *.fmx}

procedure TForm1.ButtonDrawRotatedTextClick(Sender: TObject);
var
  RotationMatrix: TMatrix;
  TranslationMatrix: TMatrix;
  ReverseTranslationMatrix: TMatrix;
begin
  Image1.Bitmap.SetSize(200, 200);
  Image1.Bitmap.Clear(TAlphaColorRec.Null);
  with Image1.Bitmap.Canvas do
  begin
    BeginScene;
    try
      TranslationMatrix := TMatrix.CreateTranslation(100, 100);
      RotationMatrix := TMatrix.CreateRotation(-Pi / 180 * nbAngle.Value);
      ReverseTranslationMatrix := TMatrix.CreateTranslation(-100, -100);
      SetMatrix(ReverseTranslationMatrix * RotationMatrix * TranslationMatrix);
      Fill.Color := TAlphaColorRec.Red;
      Fill.Kind := TBrushKind.Solid;
      Font.Size := 20;
      FillText(TRectF.Create(50, 50, 150, 150), 'Текст', False, 1, [], TTextAlign.Center, TTextAlign.Center);
    finally
      EndScene;
    end;
    Image1.Repaint;
  end;
end;

Результат:

post-1-0-96285600-1401307069.jpg

Проект: DrawRotatedTextDemo.zip

Ссылка на комментарий
Гость
Эта тема закрыта для публикации ответов.
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...