Affine Transformation

  • Themenstarter Gelöschtes Mitglied 72742
  • Beginndatum
G

Gelöschtes Mitglied 72742

Gast
Ich habe nach Verschieben einer Zeichnung über affine Transform. das Problem, daß beim Hinzuzeichnen auch sofort verschoben wird. Das gibt ein Problem beim Positionieren. Kann man vermeiden, daß die neuen Element verschoben gezeichnet werden? Danke.
Java:
        x0 = this.getWidth() / 2;
         y0 = this.getHeight() / 2;
 
     
        double hix=(scalefactor);
        double hiy=(scalefactor);
 
        t.setToIdentity();
        t.translate(x0,y0);
        t.scale(hix, hiy);
        t.translate(-x0,-y0);
       
        t.translate(dx);
 

httpdigest

Top Contributor
Wenn du die AffineTransform auf einem Graphics2D Objekt setzt/veränderst, dann beeinflusst dass alle Zeichenoperationen, die danach gemacht werden, ja.
Wenn du das nicht willst, dann muss du halt die AffineTransform wieder zurücksetzen, bevor du weitere Zeichenoperationen durchführst, die von der anderen AffineTransform nicht beeinflusst werden sollen.
Ist ja auch logisch: Woher soll das Graphics2D Objekt nach dem Setzen der AffineTransform wissen, auf welche Zeichenoperationen du die Transformation anwenden willst und auf welche nicht? Es wendet die AffineTransform eben auf alle anschließenden Zeichenoperationen an.
 
G

Gelöschtes Mitglied 72742

Gast
Wie setzt man die affine Transf. zurück?
Habe ein g2.draw(transformiere(shape)); in paintComponent().

Bedeutet das, daß ich dann die Verschiebung zurücksetze so daß ich das ursprüngliche Bild sehe, dann meine Zeichnung ergänze? Das wären ja drei manuelle Schritte?
 

httpdigest

Top Contributor
Downvote. Close mit Grund "Needs debugging details". Was ist transformiere(shape)? Kannst du spezifischer sagen, was das erwartet Verhalten ist, was das aktuelle Verhalten ist und wie dein Code komplett aussieht, so dass man das Problem nachvollziehen kann?
 
G

Gelöschtes Mitglied 72742

Gast
Posten kann ich es nicht, da zu lange und das sieht sich keiner an.
Momentan skaliert und transformiert die affine Transformation dynamisch, ich setzte über ein Textfeld z. B. meine Verschiebung. Dann zeichne ich und die Linien werden woanders platziert. Also wenn das Objekt verschoben ist, soll die Zeichnung dort wo sie ist ergänzt werden können. Meine Erwartung ist, genau wie Du unter #2 beschrieben hast mit "nachfolgende Zeichenoperationen sollen nicht beeinflußt werden". Ist unpraktisch, wenn eine neue Linie beim Zeichnen um einen Faktor verschoben erscheint.
 

httpdigest

Top Contributor
Du brauchst auch nicht den gesamten Code posten. Strippe den Code soweit runter, bis er klein genug ist, um noch das Problem zu reproduzieren. Auch "MCVE" genannt: Minimal Complete and Verifiable Example. Also: Das kleinstmögliche Programm, welches noch das unerwünschte Verhalten reproduziert.
 

Oben