Непонятка с компиляцией AGG

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Непонятка с компиляцией AGG

Сообщение de-signer » 24.06.2015 11:54:42

Привет всем.

Есть такой пакет AGG (AntiGrain Graphic). В нём есть файл agg_mode.inc. Полистав его вижу строчки:
Код: Выделить всё
{$IFDEF FPC }
{$MODE DELPHI }
{$ENDIF }

Ага, думаю, должен собраться. Подключаю к проекту, жму "собрать" и с минуту залипаю на сообщении: Error: Incompatible type for arg no. 1: Got "Double", expected "LongInt"
Код: Выделить всё
uses
  ... Math ...;
...
function TAgg2D.TextHeight(str : AnsiString ) : double;
var
x ,y  : double;
...
  y:= Max(y, glyph.bounds.y2 - glyph.bounds.y1); <-- вот тут ошибка
...

Смотрю glyph.bounds.y2 - тип целое. Ладно, думаю, в overload'ах запутался, бывает. Добавляю в var t : double; в код t := glyph.bounds.y2 - glyph.bounds.y1; и y:= Max(y, t) получаю Error: Incompatible type for arg no. 2: Got "Double", expected "LongInt"
Вот тут начинаю проверять откуда он берёт переменные - локальные, где он ищет функцию Max - в модуле Math. И залипаю уже минут на пять.
Открываю пустой проект, пишу:
Код: Выделить всё
procedure TForm1.FormCreate(Sender: TObject);
var
  a, b, c : double;
begin
  a := 5.7;
  b := 7.1;
  c := Max(a, b);
  Caption := FloatToStr(c);
end;

Запускаю - работает.
Перелистываю agg_mode.inc по новой. Криминала не нашёл. Погуглил - пусто.
Подскажите, куда копать дальше и какие маны курить?
de-signer
новенький
 
Сообщения: 12
Зарегистрирован: 24.06.2015 11:21:35

Re: Непонятка с компиляцией AGG

Сообщение Снег Север » 24.06.2015 12:05:18

AGG проверял в CT 5.30 и только на некоторых тестах. Компилировалось, выполнялось нормально.
Там, кстати, у TAgg2D процедура TextHeight отсутствует.
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3053
Зарегистрирован: 27.11.2007 16:14:47

Re: Непонятка с компиляцией AGG

Сообщение de-signer » 24.06.2015 12:47:38

Ага, в нативном, только что наткнулся. Не ожидал, что agg2d с lazarus по дефолту идёт. А в дельфовом она есть.
В нативном есть функция FontHeight, посмотрим подойдёт ли.
Ещё вопрос. Никак нарисовать не могу. В дельфях:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
  a : Tagg2d;
  b : TBitmap;
begin
  b := TBitmap.Create;
  b.HandleType := bmDIB;
  b.Width := 400;
  b.Height := 400;
  b.Canvas.Brush.Color := clWhite;
  b.Canvas.FillRect(Rect(0, 0, 400, 400));
  b.Canvas.Pen.Color := clBlack;
  b.Canvas.Pen.Width := 1;
  a := TAgg2D.Create;
  if not a.Attach(b, False) then raise Exception.Create('Oops!');
  a.FillEvenOdd(True);
  a.AntiAliasGamma(0.7);
  a.LineColor(0, 0, 255, 128);
  a.LineWidth(3);
  a.FillColor(255, 0, 0, 128);
  a.ResetPath;
  a.AddEllipse(200, 200, 75, 100, AGG_CW);
  a.MoveTo(10, 10);
  a.LineTo(100, 100);
  a.DrawPath();
  b.Canvas.MoveTo(0, 0);
  b.Canvas.LineTo(10, 10);
  Canvas.Draw(10, 10, b);
  a.Free;
  b.Free;
end;

Рисует всё как надо. В lazarus только b.Canvas.LineTo отрабатывает. =( Что не так?
de-signer
новенький
 
Сообщения: 12
Зарегистрирован: 24.06.2015 11:21:35

Re: Непонятка с компиляцией AGG

Сообщение hinst » 24.06.2015 13:25:29

AGG лучше брать отсюда https://github.com/graemeg/fpGUI/tree/m ... r/software
Аватара пользователя
hinst
энтузиаст
 
Сообщения: 781
Зарегистрирован: 12.04.2008 18:32:38

Re: Непонятка с компиляцией AGG

Сообщение de-signer » 24.06.2015 14:55:55

hinst писал(а):AGG лучше брать отсюда https://github.com/graemeg/fpGUI/tree/m ... r/software

Спасибо, учту.
Средствами Tagg2d нарисовать так и не вышло. Заюзал TAggLCLCanvas из примеров.
de-signer
новенький
 
Сообщения: 12
Зарегистрирован: 24.06.2015 11:21:35


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 227

Рейтинг@Mail.ru