Malzzeit,
ich habe - wie sollte es anders sein - ein für mich völlig unklares Problem. Eins vorweg: ich hasse das Versenden riesiger Codehaufen, aber in diesem komplexen Bsp. komm ich leider kaum drumherum, weil doch mittlerweile einige Klassen involviert sind;(. Ich versuche, mich kurz zu fassen:
In meiner Anwendung gibt es das Interface Geometry, welches u.a. die Methode
anbietet. Hier wird ein neues Punkt-Objekt mit den um AT veränderten Koordinaten erstellt und von der Methode zurückgegeben. Punkt ist eine Realisierung dieses Interfaces. Anschließend wird in einer Klasse GeoGraphics (erweitert Graphics2D um die Eigenschaft AffineTransformation af sowie einige weitere Methoden) dieser Punkt in eine Signatur umgewandelt (ein stinknormales Rectangle2D.Double).
Nun folgt der hierfür verantwortliche Code:
Der ganze Spaß wird verwendet, um ein reales Objekt der Welt (in metrischen Koordinaten) auf den Bildschirm zu zeichnen (darum die Verwendung von Shape).
Nun habe ich jedoch in sporadischen Abtänden das Problem, dass meine übergebene Geometrie manchmal transformiert wird (das Objekt wird gezeichnet) und mal nicht. Paradoxerweise wird - wenn ich mein Programm debugge - IMMER das Gewünschte gezeichnet
. Führe ich das Programm normal aus, geschieht das Zeichnen mal so und mal nicht.
Die eigentliche Tranformation geschieht hier:
Die Ausgabe bestätigt mir, dass die gewünschte Transformation manchmal schlichtweg nicht gemacht wird (die Koordinaten verändern sich nicht), aber - wie gesagt - NUR im nicht-Debug-Modus. ???:L
Ich weiß, das artet in Kristallkugelphilosophie aus, aber anders helfen kann ich mir in dem Fall nicht...
EDIT: um Eines gleichmal klarzustellen: die Transformation af ist immer die selbe, an der liegt es nicht...
Wenn ihr wollt, kann ich mal ein paar Beispielzahlen senden (einige Punkte inkl. der benötigten Tranformation).
ich habe - wie sollte es anders sein - ein für mich völlig unklares Problem. Eins vorweg: ich hasse das Versenden riesiger Codehaufen, aber in diesem komplexen Bsp. komm ich leider kaum drumherum, weil doch mittlerweile einige Klassen involviert sind;(. Ich versuche, mich kurz zu fassen:
In meiner Anwendung gibt es das Interface Geometry, welches u.a. die Methode
Code:
transform(AffineTransformation)
Nun folgt der hierfür verantwortliche Code:
Java:
/**
* Adds this geometry into the shapeList that belongs to this layer.<br>
* NOTE: Only geometries inside this list are drawable.
*/
public void addGeometry(Geometry geometry, String layerName) {
Shape shape = null;
if (geometry.getClass() == Point.class) {
Point point = (Point) geometry.transform(af); // geoPoint
Point2D p = new Point2D.Double(point.getX(), point.getY()); // drawingPoint
shape = new Rectangle2D.Double(p.getX() - 3, p.getY() - 3, 7, 7); // rectangular signature
}
}
Nun habe ich jedoch in sporadischen Abtänden das Problem, dass meine übergebene Geometrie manchmal transformiert wird (das Objekt wird gezeichnet) und mal nicht. Paradoxerweise wird - wenn ich mein Programm debugge - IMMER das Gewünschte gezeichnet
Die eigentliche Tranformation geschieht hier:
Java:
@Override
public Point transform(AffineTransform af) {
Point2D p = new Point2D.Double(this.X, this.Y);
af.transform(p, p);
if (DEBUG) System.out.println(
"Point (" + this.X + "; " + this.Y +
")\t-->\ttransformed into Point(" + p.getX() + "; " + p.getY() + ")");
return new Point(p.getX(), p.getY());
}
Ich weiß, das artet in Kristallkugelphilosophie aus, aber anders helfen kann ich mir in dem Fall nicht...
EDIT: um Eines gleichmal klarzustellen: die Transformation af ist immer die selbe, an der liegt es nicht...
Wenn ihr wollt, kann ich mal ein paar Beispielzahlen senden (einige Punkte inkl. der benötigten Tranformation).
Zuletzt bearbeitet: