"""
Funzioni per creare grafiche primitive (forme e testo).
Tranne quando specificato diversamente, la posizione di fissaggio iniziale è al
centro del rettangolo di delimitazione (bounding box) della grafica.
"""
from __future__ import annotations
from pytamaro.it.color import Colore
from pytamaro.it.graphic import Grafica
from pytamaro.primitives import (circular_sector, ellipse, empty_graphic,
rectangle, text, triangle)
[docs]def rettangolo(larghezza: float, altezza: float, colore: Colore) -> Grafica:
"""
Crea un rettangolo delle dimensioni indicate, riempito con un colore.
:param larghezza: larghezza del rettangolo
:param altezza: altezza del rettangolo
:param colore: colore da usare per riempire il rettangolo
:returns: una grafica con il rettangolo specificato
"""
return rectangle(larghezza, altezza, colore)
[docs]def grafica_vuota() -> Grafica:
"""
Crea una grafica vuota.
Quando una grafica vuota viene composta con ogni altra grafica, si comporta
da elemento neutro: il risultato è sempre uguale all'altra grafica.
:returns: una grafica vuota (larghezza e altezza 0)
"""
return empty_graphic()
[docs]def ellisse(larghezza: float, altezza: float, colore: Colore) -> Grafica:
"""
Crea un ellisse delle dimensioni indicate, riempito con un colore.
Quando larghezza e altezza coincidono, l'ellisse diventa un cerchio di
diametro pari alla dimensione indicata.
:param larghezza: larghezza dell'ellisse
:param altezza: altezza dell'ellisse
:param colore: colore da usare per riempire l'ellisse
:returns: una grafica con l'ellisse specificato
"""
return ellipse(larghezza, altezza, colore)
[docs]def settore_circolare(raggio: float, angolo: float, colore: Colore) -> Grafica:
"""
Crea un settore circolare appartenente a un cerchio del raggio indicato,
riempito con un colore.
Un settore circolare è una porzione di cerchio racchiusa tra due raggi e un
arco.
Considerando il cerchio come un orologio, il primo raggio "punta" in
direzione delle ore 3. L'`angolo` determina la posizione del secondo
raggio, calcolata a partire dalla posizione del primo in senso antiorario.
Un angolo di 360 gradi corrisponde a un cerchio completo.
La posizione di fissaggio è al centro del cerchio da cui è preso il settore
circolare.
:param raggio: raggio del cerchio da cui è preso il settore circolare
:param angolo: angolo al centro, in gradi
:param colore: colore da usare per riempire il settore circolare
:returns: una grafica con il settore circolare specificato
"""
return circular_sector(raggio, angolo, colore)
[docs]def triangolo(lato1: float, lato2: float, angolo: float, colore: Colore) -> Grafica:
"""
Crea un triangolo specificando due lati e l'angolo tra essi compreso,
riempito con un colore.
Il primo lato si estende orizzontalmente verso destra. L'angolo specifica
di quanto il secondo lato è ruotato, in senso antiorario, rispetto al primo.
Per tutti i triangoli, eccetto quelli ottusi, il punto in basso a sinistra
della grafica risultante coincide con il vertice del triangolo di cui si è
specificato l'angolo.
La posizione di fissaggio è il centroide del triangolo.
:param lato1: lunghezza del primo lato (orizzontale) del triangolo
:param lato2: lunghezza del secondo lato del triangolo
:param angolo: angolo compreso tra i due lati, in gradi
:param colore: colore da usare per riempire il triangolo
:returns: una grafica con il triangolo specificato
"""
return triangle(lato1, lato2, angolo, colore)
[docs]def testo(contenuto: str, font: str, punti: float, colore: Colore) -> Grafica:
"""
Crea una grafica con il testo renderizzato usando font, dimensione e colore
indicati.
Quando il font True-Type indicato non è disponibile nel sistema, al suo
posto viene usato un font estremamente basilare e sempre disponibile. La
grafica risultante ha la dimensione minima in modo da racchiudere l'intero
testo.
La posizione di fissaggio è allineata orizzontalmente a sinistra e
verticalmente sulla linea di base (baseline) del testo.
:param contenuto: il testo di cui fare rendering
:param font: il nome del font (ad esempio "arial" su Windows, "Arial" su
macOS)
:param punti: dimensione in punti tipografici (ad esempio 16)
:param colore: colore da usare per fare il rendering del testo
:returns: una grafica con il testo specificato
"""
return text(contenuto, font, punti, colore)