da
theking0 » 17 ago 2024, 21:15
DarwinNE ha scritto:...
Per il testo, quando ho riflettuto al problema avevo piuttosto in testa di creare una collezione di rettangoli. Ogni volta che un testo presenta un esponente o un indice, si aggiunge un rettangolo alla collezione che finisce per rappresentare la bounding box di tutto il testo, rettangolo dopo rettangolo. Dopodiché si tratta ogni rettangolo separatamente.
Da quello che ho visto il problema risiede nella "getDistanceToPoint", in pratica la "getStringWidth" che viene usata per calcolare la lunghezza del testo non tiene conto che i caratteri di controllo "_", "^", e il backslash presenti nella stringa che gli viene passata non vengono efferatamente disegnati, di conseguenza la bounding box risulta più lunga del testo.
L'idea sarebbe:
implemento la "getCharWidth" nelle varie interfacce e classi per ricavare la larghezza effettiva di un singolo carattere;
scrivo una funzione parser per ricavarmi quanti caratteri di controllo ci sono nella stringa e per ogni carattere di controllo trovato aggiungo a una variabile la su larghezza (widthOfTotalCtrlChar).
alla fine creo la bounding box tenendo conto che: getStringWidth - widthOfTotalCtrlChar.
Cosa ne pensi ?
Poi vorrei mettere delle limitazione a monte che controlli:
I testi inseriti non possono avere spazi iniziali o finali (trimmiamo le stringhe inserite)
I caratteri di controllo non posso essere ripetuti consecutivamente, ad esempio "________" o "^^^^^^^^^^^^", non hanno senso.