Originariamente inviata da
fcorsa
Salve Ragazzi,
non riesco a capovolgere il testo in una stampa A4.
non riesco a capire dove sbaglio.
vi sarei grato di un aiuto.
Qui ci sono diverse cose da chiarire.
Innanzitutto la matrice di trasformazione "originale" che c'è nel Graphics ha un fattore di scala "particolare" che serve a descrivere il fatto che 1 unità corrisponde fisicamente a 1/72 di pollice (ovvero, per dirlo in altro modo, se vuoi spostare o disegnare su 1 pollice devi indicare 72).
Se però crei un new AffineTransform() esso ha la trasformazione di "identità" la cui scala è .. 1 e quanto corrisponde a livello fisico .... boh, bisognerebbe verificarlo/calcolarlo. Quindi: NON va bene.
Il getTransform() restituisce una COPIA della matrice, quindi la puoi tenere per il ripristino e intanto puoi benissimo modificare la matrice "corrente". Quindi non c'è bisogno di crearne un'altra.
Altra cosa, quando fai due operazioni in sequenza del tipo:
at.translate(561,-817);
at.rotate(Math.PI);
queste due operazioni si "concatenano", perché sono per così dire "additive", modificano/aggiornano la matrice.
Se invece fai:
at.translate(561,-817);
at.setToRotation(Math.PI);
il setToRotation NON concatena ma imposta tutta la matrice per essere "solo" una rotazione. Quindi il translate "si perde".
Altra (piccola) cosa: se hai già traslato con translate(561,-817) e poi stampi a 55, 800, quest'ultime sono riferite alla nuova origine, quindi il testo è ancora più spostato.
Infine (lo dico solo per completezza), se si vuole solo "ribaltare" in orizzontale/verticale, generalmente basta "giocare" sulla scala, ovvero concatenare una scala negativa per x e/o y.
In sostanza, prova ad esempio questo:
codice:
// qui c'è la matrice nello stato "originale"
AffineTransform orig = grap.getTransform();
grap.translate(55, 800);
grap.drawString("TESTO", 0, -3);
grap.scale(1, -1); // inverte la y
grap.drawString("TESTO CAPOVOLTO ", 0, -3);
grap.setTransform(orig);
(nota: il -3 è solo per distanziare un pochino di circa 1mm)
e vedi cosa esce ...
P.S. prova anche a fare
grap.scale(-1, -1);
che è equivalente al rotate di Math.PI