• 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 пользователей онлайн

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