On January 27th, this site will be read-only as we migrate to Oracle Forums for an improved community experience. You will not be able to initiate activity until January 30th, when you will be able to use this site as normal.

    Forum Stats

  • 3,889,556 Users
  • 2,269,760 Discussions
  • 7,916,781 Comments

Discussions

GeometryUpdater

843799
843799 Member Posts: 49,999
edited Jun 25, 2001 8:33AM in Java 3D
Having trouble figuring out how to get update with GeometryUpdater to work.
I get the following error:
Exception: GeometryArray: no capability to update geometry data javax.media.j3d.CapabilityNotSetException: GeometryArray: no capability to update geometry data
at javax.media.j3d.GeometryArray.updateData(GeometryArray.java:580)
at mooseanalysis.Track.update(Track.java:61)

Attached is a clip of my code. I have enabled many ALLOW parameters in an attempt to get this to work.

thanks,
mike


public class Track extends Shape3D{
Point3f[] coords = new Point3f[12000];
Point3f lineCoordsLocal= new Point3f();
int coordsLength = 0;
int[] mapSize = new int[1];
Map lineMap = new TreeMap();
// LineStripArray lsa;
LineArray lsa;
int id;
public Track(int elementId) {
super();
super.setCapability(super.ALLOW_GEOMETRY_WRITE);
mapSize[0] = 0;
id = elementId;
}

public void update (double time, Point3f lineCoords) {
lineCoordsLocal = lineCoords;
if (mapSize[0] > 0) {
if (mapSize[0] == 1) {
coords[coordsLength] = lineCoords;
mapSize[0] = ++coordsLength;
System.out.println(mapSize[0]);
lsa = new LineArray(mapSize[0],
LineArray.COORDINATES |
LineArray.BY_REFERENCE);
lsa.setCapability(lsa.ALLOW_REF_DATA_WRITE |
lsa.ALLOW_REF_DATA_READ |
lsa.ALLOW_COUNT_WRITE |
lsa.ALLOW_COUNT_READ |
lsa.ALLOW_COORDINATE_WRITE |
lsa.ALLOW_COORDINATE_READ |
lsa.ALLOW_FORMAT_READ
);
lsa.setCoordRef3f(coords );
super.setGeometry(lsa);
}
else {
lsa.updateData(new GeometryUpdater() {
public void updateData(Geometry geometry) {
coords[coordsLength] = coords[coordsLength-1];
coords[++coordsLength] = lineCoordsLocal;
mapSize[0] = ++coordsLength;
}
});
}
}
else {
coords[coordsLength] = lineCoords;
mapSize[0] = ++coordsLength;
}

//This works but is very slow so I don't want to
//do it this way, just left it here for reference
/* coords[coordsLength++] = lineCoords;
mapSize[0] = coordsLength;
if (mapSize[0] > 1) {
lsa = new LineStripArray(mapSize[0],
GeometryArray.COORDINATES |
GeometryArray.BY_REFERENCE, mapSize);
lsa.setCapability(GeometryArray.ALLOW_REF_DATA_WRITE | GeometryArray.ALLOW_COUNT_WRITE);
lsa.setCoordRef3f(coords );
super.setGeometry(lsa);
}
*/
}

Comments

This discussion has been closed.