libc: BGI Фаза 2c — floodfill/pieslice/sector
floodfill — скан-строчная заливка области до границы (self-bracket чтение: корректно, но медленно; raw-оптимизация в TODO). pieslice/sector — залитые сектора круга/эллипса: границу (центр→дуга→ центр) прогоняем через _bgi_poly_edge и заливаем min/max по строкам, как fillpoly (для >180° возможен перелив — упрощение). Проверено в MAME (tests/bgitest): floodfill круга, круговая диаграмма, штрих-сектор. Доки/справочник/память обновлены (Ф2a-c готовы; Ф2d = images/viewport/ text-style/line-style — осталось). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+21
-32
@@ -1,8 +1,6 @@
|
||||
/*
|
||||
* bgitest — демонстрация BGI-слоя graphics.h (режим 320×256×256).
|
||||
*
|
||||
* Собирается с `--gfx 256`. Фаза 2b: заливки — bar (сплошная/паттерн),
|
||||
* bar3d, fillpoly, fillellipse + setfillstyle. Визуальная проверка.
|
||||
* Фаза 2c: floodfill + pieslice/sector.
|
||||
*/
|
||||
|
||||
#include <graphics.h>
|
||||
@@ -10,49 +8,40 @@
|
||||
int main(void)
|
||||
{
|
||||
int mx, my;
|
||||
static const int tri[] = { 210, 235, 300, 235, 255, 150 };
|
||||
|
||||
initgraph();
|
||||
mx = getmaxx();
|
||||
my = getmaxy();
|
||||
|
||||
cleardevice();
|
||||
|
||||
setcolor(WHITE);
|
||||
rectangle(0, 0, mx, my);
|
||||
|
||||
setcolor(YELLOW);
|
||||
outtextxy(110, 6, "BGI FILLS P2b");
|
||||
outtextxy(96, 6, "BGI flood + pie");
|
||||
|
||||
/* Сплошной бар. */
|
||||
setfillstyle(SOLID_FILL, RED);
|
||||
bar(12, 28, 92, 78);
|
||||
/* Окружность-контур, затем floodfill её нутра. */
|
||||
setcolor(YELLOW);
|
||||
circle(66, 90, 46);
|
||||
setfillstyle(SOLID_FILL, LIGHTRED);
|
||||
floodfill(66, 90, YELLOW);
|
||||
setcolor(WHITE);
|
||||
outtextxy(12, 82, "solid");
|
||||
outtextxy(38, 142, "floodfill");
|
||||
|
||||
/* Бар с штриховкой (HATCH). */
|
||||
setfillstyle(HATCH_FILL, LIGHTGREEN);
|
||||
bar(110, 28, 190, 78);
|
||||
setcolor(WHITE);
|
||||
outtextxy(110, 82, "hatch");
|
||||
|
||||
/* 3D-брусок с диагональной штриховкой. */
|
||||
setcolor(WHITE);
|
||||
setfillstyle(SLASH_FILL, LIGHTCYAN);
|
||||
bar3d(210, 34, 280, 78, 14, 1);
|
||||
outtextxy(210, 82, "bar3d");
|
||||
|
||||
/* Залитый эллипс (сплошной). */
|
||||
setcolor(WHITE);
|
||||
/* Круговая диаграмма из трёх pieslice. */
|
||||
setfillstyle(SOLID_FILL, LIGHTGREEN);
|
||||
pieslice(210, 86, 0, 90, 52);
|
||||
setfillstyle(SOLID_FILL, LIGHTBLUE);
|
||||
fillellipse(70, 150, 55, 32);
|
||||
outtextxy(44, 186, "fillellipse");
|
||||
|
||||
/* Залитый треугольник (крестовая штриховка), контур WHITE. */
|
||||
pieslice(210, 86, 90, 200, 52);
|
||||
setfillstyle(SOLID_FILL, LIGHTMAGENTA);
|
||||
pieslice(210, 86, 200, 360, 52);
|
||||
setcolor(WHITE);
|
||||
setfillstyle(XHATCH_FILL, LIGHTMAGENTA);
|
||||
fillpoly(3, tri);
|
||||
outtextxy(214, 194, "fillpoly");
|
||||
outtextxy(184, 146, "pieslice");
|
||||
|
||||
/* Эллиптический сектор со штриховкой. */
|
||||
setfillstyle(HATCH_FILL, LIGHTCYAN);
|
||||
sector(120, 210, 20, 160, 90, 34);
|
||||
setcolor(WHITE);
|
||||
outtextxy(96, 236, "sector");
|
||||
|
||||
for (;;) { }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user