Jednoduchý rastrový paint program v Pythonu podobný Microsoft paint. Aplikace vykresluje tvary vlastními algoritmy (bez externích grafických knihoven pro kreslení), drží seznam objektů a renderuje je do pixelového rastru.
Požadavky:
- Python 3.10+
- Tkinter (běžně součást standardní instalace Pythonu)
Spuštění:
python3 main.pywui/app.py: hlavní třídaPaintApp, správa canvasu, event bindingy, přepínání nástrojů, plánování renderu.toolbar.py: horní panel (výběr nástroje, tloušťka, barva, clear).
models/- datové modely:
Point,Shape,Line,Rectangle,Oval,Polygon,Fill. LineStyle(SOLID, DOTTED, DASHED).
- datové modely:
tools/- logika interakce uživatele (klik, tah, klávesy) pro jednotlivé nástroje.
rasterizers/- převod modelu tvaru na pixely (
LineRasterizer,RectangleRasterizer,OvalRasterizer,PolygonRasterizer,FillRasterizer). CanvasRasterizer: skládání všech tvarů, cache pixelů, hit-test, fill operace.
- převod modelu tvaru na pixely (
rasters/Raster: správa RGB bufferu (bytearray),set_pixel/get_pixel, export doPhotoImagepřes dočasný PPM soubor.
- Nástroj vytvoří nebo upraví model tvaru
CanvasRasterizer.mark_dirty()označí změněný tvarPaintApp.render()naplánuje render přesafter_idle(omezování zbytečných překreslení)CanvasRasterizer.render_all()přerasterizuje pouze dirty tvary do cache- Všechny cachované segmenty pixelů se složí do bufferu rastru
- Buffer se převede na
PhotoImagea nastaví se do Tkinter canvasu
- Levé tlačítko: kreslení/umístění bodů/akce aktivního nástroje.
- Tah s levým tlačítkem: průběžné úpravy (např. délka čáry, velikost obdélníku, přesun).
- Pravé tlačítko: uzavření polygonu (když má alespoň 3 body).
Tools: výběr aktivního nástroje.Size: tloušťka stopy/čáry (1-20).Color: předdefinovaná paleta, vlastní výběr (Pick Color), poslední vlastní barva (Last Custom).Clear: vyčistí plátno.
L-> LineR-> RectangleO-> OvalP-> PolygonF-> FillE-> EraseM-> Move
Ctrl: tečkovaný styl čáryAlt: přerušovaný styl čáryShift: perfektní zarovnání (čára se zarovnává po 45°, z oválu se stane perfektní kruh, z libovolného obdélníku se stane čtverec, ...)
- Bez
Ctrl: mazání celého objektu pod kurzorem - S držením
Ctrl: maže pixely
- Bez
Ctrl: přesun celého objektu - S držením
Ctrl: modifikace bodů/rohů
- Zvolit
Polygon(P) - Levým klikem přidávat vrcholy
- Dokončení:
- pravým klikem, nebo
- levým klikem blízko prvního bodu
- při opuštění nástroje se polygon s >=3 body uzavře automaticky