TriangleArray

Hallo,

ich habe ein Problem: ich lese ein TriangleArray aus:

Java:
			int triangleArrayLength = triangleArray.getValidVertexCount(); // sagt 12 im SysOut
		    double[] coordinatesArray = new double[triangleArrayLength];

		    for (int i = 0; i < triangleArrayLength; i++) {
		    	System.out.println(i); // HIER BRICHT ER MIT 0 AB
		    	triangleArray.getCoordinate(i, coordinatesArray);
		    	log.info("COORDINATE " + i + " IS: " + coordinatesArray[i]);
		    }

Hat jemand eine Lösung parat?

Danke und Grüße
 

Landei

Top Contributor
Eine Variable ändert nicht einfach ihren Wert von Geisterhand. Ich vermute, dass in Zeile 6 eine Exception fliegt, die du aber irgendwie ignorierst (kannst du ja einfach testen, in dem du zwischen Zeile 7 und 8 irgendwas ausgibst.
 

Marco13

Top Contributor
Java:
            int triangleArrayLength = 12;
            for (int i = 0; i < triangleArrayLength; i++) {
                System.out.println(i); // HIER BRICHT ER MIT 0 AB
            }
Wenn er dort immernoch abbricht, ist dein Computer kaputt. Wenn nicht, hast du nicht genug Code gepostet.
 
Ohne

Java:
triangleArray.getCoordinate(i, coordinatesArray);

läuft es durch. Die Synthax stimmt allerdings und es fliegt keine Exception. Bin ratlos

hier nochmal etwas mehr Code:

Java:
Shape3D shape = shapeList.get(0); //einfach zum Test erstes Listenelement

		Geometry geometry = (Geometry) shape.getAllGeometries().nextElement();

		if (geometry instanceof TriangleArray) {
		
			TriangleArray triangleArray = (TriangleArray) geometry;
			int triangleArrayLength = triangleArray.getValidVertexCount();
		    double[] coordinatesArray = new double[triangleArrayLength];
		    
		    for (int i = 0; i < triangleArrayLength; i++) {
		    	System.out.println(i);
		    	triangleArray.getCoordinate(i, coordinatesArray);
		    	log.info("COORDINATE " + i + " IS: " + coordinatesArray[i]);
		    }

Um genau zu sein:

Java:
		    for (int i = 0; i < triangleArrayLength; i++) {
		    	System.out.println(i); // Hier der letzte SysOut i = 0; danach passiert nichts mehr
		    	triangleArray.getCoordinate(i, coordinatesArray);
		    	log.info("COORDINATE " + i + " IS: " + coordinatesArray[i]);
		    }
 
Zuletzt bearbeitet:

Landei

Top Contributor
Es muss irgend eine Exception fliegen. Kann es sein, dass [c]coordinatesArray[/c] zu kurz ist? Ist nicht eventuell die doppelte oder dreifache Länge von [c]triangleArray[/c] notwendig?
 
Die Länge des Arrays passt, mit vertexcount kann man ja die benötigte Größe berechnen. Angenommen es gibt eine Exception, warum wird diese weder in Eclipse noch in der Shell (bei Ausführen der Jar) angezeigt?

Edit: liegt wohl am Swingworker, werde dem auf den Grund gehen und Bericht erstatten :)
 
Zuletzt bearbeitet:

Marco13

Top Contributor
Ja, der SwingWorker verschluckt leicht mal Exceptions, wenn man nicht aufpasst. Im Web gibt's einige Infos, wie man das vermeiden kann.
 
hier haben wir den Übeltäter:

Code:
java.lang.IllegalStateException: GeometryArray: cannot directly access data in BY_REFERENCE

lag tatsächlich am SwingWorker. Kennt jemand die Exception?
 

Landei

Top Contributor
Nö, die ist frameworkspezifisch (*), da müsstest du mal im entsprechenden Forum oder so nachfragen. Ist das ganze Open Source, kannst du natürlich auch selber suchen.

(*) Also nicht IllegalStateException als solche, aber der Messagetext deutet darauf hin, dass sie nicht einfach so geflogen ist, sondern dass sie jemand bewußt ausgelöst hat.
 
ok, man kann die geometry nicht by-REFERENCE auslesen sondern muss sie in eine GeometryInfo konvertieren. Das funktioniert soweit einwandfrei. Das lustige ist aber, dass jetzt die Coordinates beim Auslesen nicht mehr mit den Coordinates im Array übereinstimmen:

Java:
			for (int i = 0; i < triangleArrayLength; i++) {
				triangleArray.getCoordinate(i, coordinatesArray);
                                System.out.println("COORDINATE " + i + " IS: " + coordinatesArray[i]);
			}

Ausgabe:

Java:
COORDINATE 0 IS: 59.16001510620117
COORDINATE 1 IS: 71.57959747314453
COORDINATE 2 IS: 487.2047119140625 (**)
COORDINATE 3 IS: 0.0
COORDINATE 4 IS: 0.0
COORDINATE 5 IS: 0.0
COORDINATE 6 IS: 0.0
COORDINATE 7 IS: 0.0
COORDINATE 8 IS: 0.0
COORDINATE 9 IS: 0.0
COORDINATE 10 IS: 0.0
COORDINATE 11 IS: 0.0

und

Java:
			for(int j = 0; j < coordinatesArray.length; j++){
				double coordinateDouble = coordinatesArray[j];		
				String coordinateString = Double.toString(coordinateDouble);
				System.out.println("string " + coordinateString);
			}

Ausgabe:

Java:
64.96063232421875 
64.96063232421875 
487.2047119140625 (**)
0.0 
0.0 
0.0 
0.0 
0.0 
0.0 
0.0 
0.0 
0.0

Noch verwunderlicher ist allerdings dass die Coordinate (**) passt :bahnhof:

Edit: ich werde es direkt in der 1. for-Schleife zum String appenden. Aber komisch ist das schon...
 
Zuletzt bearbeitet:

Neue Themen


Oben