• 0
ader

Отрисовка составных полигонов

Вопрос

Задача: нужно рисовать много составных полигонов (с дырками). В gdi+ использовал Path.AddPolygon, в FireMonkey такой функции нет. Заполнять строку Path.Data - сомневаюсь в производительности такого метода (полигон может состоять из тысяч точек).

Какие ещё могут быть варианты?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

4 ответа на этот вопрос

  • 0

А такая DrawPolygon(Polygon,1 не подойдет? 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

А такая DrawPolygon(Polygon,1 не подойдет? 

а как ей нарисовать полигон с дыркой?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Что-то не пойму, Canvas.DrawPolygon(const Points: TPolygon; const AOpacity: Single) где TPolygon = array of TPointF рисует созданный вами полигон, а уж с дыркой он или нет зависит от вас.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
  • 0

Что-то не пойму, Canvas.DrawPolygon(const Points: TPolygon; const AOpacity: Single) где TPolygon = array of TPointF рисует созданный вами полигон, а уж с дыркой он или нет зависит от вас.

Полигон с дыркой - это два полигона, один внутри другого. Структура TPolygon не позволяет задать разбиение полигона на части (type TPolygon = array of TPointF). При отрисовке дырка будет соединена с внешней кромкой.

В windows есть спец.функция function PolyPolygon(DC: HDC, var Points; var PolyCounts; Count: Integer): Bool

В gdi+ использовал пути (см.выше). Как сделать это в FireMonkey - не вижу

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!


Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.


Войти сейчас

  • Похожие публикации

    • Автор: Geex
      Привет, Всем!
       
       
       
      Заметил странности отображения ломанных линий с помощью DrawPath. При острых углах ломанной она начинает выходить за координаты точек излома. Как на рисунке:

       
      Красным цветом построена линия с помощью DrawLine, зеленой с помощью DrawPath по одним и тем же координатам.
      procedure TFMain.Button1Click(Sender: TObject); var Pa:TPathData; p1,p2,p3,p4:TPointF; begin p1:=PointF(10,10); p2:=PointF(200,20); p3:=PointF(10,30); p4:=PointF(400,40); Pa:=TPathData.Create; Pa.MoveTo(p1); Pa.LineTo(p2); Pa.LineTo(p3); Pa.LineTo(p4); PaintBox.Bitmap.Canvas.BeginScene; PaintBox.Bitmap.Canvas.Stroke.Color:=claGreen; PaintBox.Bitmap.Canvas.Stroke.Thickness:=1;//PenWidth; PaintBox.Bitmap.Canvas.DrawPath(Pa,1.0); PaintBox.Bitmap.Canvas.EndScene; Pa.Free; PaintBox.Bitmap.Canvas.BeginScene; PaintBox.Bitmap.Canvas.Stroke.Color:=claRed; PaintBox.Bitmap.Canvas.DrawLine(p1,p2,1.0); PaintBox.Bitmap.Canvas.DrawLine(p2,p3,1.0); PaintBox.Bitmap.Canvas.DrawLine(p3,p4,1.0); PaintBox.Bitmap.Canvas.DrawLine(p1,p2,1.0); PaintBox.Bitmap.Canvas.EndScene; end; Можно заметить что зеленая линия немножко выходит за красную. Этого можно избежать только если строить линию с разрывами.
      Подозреваю что это связано с радиусом загиба кривой, вот только где его убрать?
      Можно как-нибудь элегантно сделать чтобы кривая линия строилась точно по координатам с помощью DrawPath?
       
  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу