Linie zeichnen und drehen

  • Themenstarter Themenstarter Krossec
  • Beginndatum Beginndatum
K

Krossec

mit einer Pait-Methode zeichne ist zuerst eine linie, die von oben links nach unten rechts geht , und möchte nun dass
diese linie so gedreht wird, dass die linie von unten links noch oben rechts geht.

Wie kann ich das machen?

Mein Code bisher:
Java:
...
public void paint(Graphics gc)
{
	//super.paint(gc);
	
	Graphics2D g2 = (Graphics2D) gc;
	Insets insets = getInsets();	
	
        g2.drawLine(insets.left, insets.top, getSize().width - insets.right,              //diese linie soll gedrecht werden
			                             getSize().height - insets.bottom);
	
        g2.drawString("das ist eine Formel", 200,200);
}
...
 
Mehr als eine Booleanvariable, welche dann in einer if-Bedingung abgefragt wird, fällt mir dazu jetzt leider auch nicht ein, d.h. du hättest dann 2 mögliche drawLine()-Aufrufe.
 
die rotate-methode von Graphics2D bezieht sich soweit ich weis auf ein Graphics-objekt ... und damit auf genau das objekt auf das diese linie drauf gezeichnet wurde ...
das heißt du würdest nicht nur die linie drehen sondern das gesamte darunterliegen Graphics-objekt ...
wenn ich mich irre einfach mal bescheid sagen =)
 
Die Methode "Graphics2D.rotate(double theta)" hilft dabei. Die Methode bildet eine entsprechende Transformationsmatrix und multipliziert diese mit der aktuellen Transformationsmatrix - das ist einfache lineare Algebra und die Basis für affine Transformationen.

Java2D kann damit sehr gut umgehen und bietet viele grundlegende Features, um so ziemlich alles (2D) zu zeichnen, was man will.

Wenn Du nun nicht möchtest, dass nachfolgende Zeichenoperationen auch gedreht werden, musst Du eben nach dem Linienzeichnen wieder "Graphics2D.rotate(double theta)" wieder aufrufen, um die Drehung rückgängig zu machen (mit entsprechendem negativen Wert).

Eine Alternative ist, eine Kopie des Graphics Objektes vor dem Zeichnen zu machen, z.B. mit "Graphics2D g2d = (Graphics2D)gc.create();", dann kannst Du das "rotate" darauf anwenden, aber nachfolgende, nicht auf der Kopie des Graphics-Objektes basierende Operationen, werden davon nicht beeinflusst (jedes Graphics-Objekt hat seine eigene Transformationsmatrix intern).
 
Zurück