I do the following: Running trough all children in all levels, i.e.
through BranchGroups, TransformGroups etc. all the way to the button
where I look for Shape3Ds. When you have a Shape3D you still dont
know exactly what kind of geometry you've got. You have to test that !
I have included a piece of code you maybe would like to modify !
The following is the call of the method:
Enumeration enum = brGrp.getAllChildren();
MinMaxVal minmax = new MinMaxVal();
getMinMaxVal(enum,minmax);
Run trough to find Shape3Ds and extract geometry:
public void getMinMaxVal(Enumeration enum, MinMaxVal minMax){
while (enum.hasMoreElements()) {
Object tmpObject = enum.nextElement();
if (tmpObject instanceof Shape3D) {
System.out.println("getMinMaxVal: a shape3D");
Geometry geom = ((Shape3D)tmpObject).getGeometry();
if (geom instanceof GeometryArray) {
System.out.println("getMinMaxVal: Yes it is a
GeometryArray !");
if (geom instanceof GeometryStripArray) {
System.out.println("getMinMaxVal: instance
GeometryStripArray");
} else if (geom instanceof IndexedGeometryArray) {
System.out.println("getMinMaxVal: instance
IndexedGeometryArray");
} else if (geom instanceof QuadArray) {
System.out.println("getMinMaxVal: instance
QuadArray");
} else if (geom instanceof TriangleArray) {
System.out.println("getMinMaxVal: instance
TriangleArray");
} else {
System.out.println("getMinMaxVal: instance NOT
KNOWN");
}
int format = ((TriangleArray)geom).getVertexFormat();
System.out.println("getMinMaxVal: format = "+format);
System.out.println("getMinMaxVal: format of coordinates
= "+TriangleArray.COORDINATES);
if (((TriangleArray)geom).getVertexFormat() ==
TriangleArray.COORDINATES) {
System.out.println("getMinMaxVal: format is
COORDINATES");
} else if (((TriangleArray)geom).getVertexFormat() ==
TriangleArray.COLOR_3) {
System.out.println("getMinMaxVal: format is
COLOR_3");
} else if (((TriangleArray)geom).getVertexFormat() ==
TriangleArray.COLOR_4) {
System.out.println("getMinMaxVal: format is
COLOR_4");
} else if (((TriangleArray)geom).getVertexFormat() ==
TriangleArray.NORMALS) {
System.out.println("getMinMaxVal: format is
NORMALS");
} else if (((TriangleArray)geom).getVertexFormat() ==
TriangleArray.TEXTURE_COORDINATE_2) {
System.out.println("getMinMaxVal: format is
TEXTURE_COORDINATE_2");
} else if (((TriangleArray)geom).getVertexFormat() ==
TriangleArray.TEXTURE_COORDINATE_3) {
System.out.println("getMinMaxVal: format is
TEXTURE_COORDINATE_3");
} else {
System.out.println("getMinMaxVal: format not
known");
}
int count = ((TriangleArray)geom).getVertexCount();
System.out.println("getMinMaxVal: count = "+count);
double coordinates[] = new double[count*3];
((TriangleArray)geom).getCoordinates(0, coordinates);
for (int i=0; i<count; i++) {
if (coordinates[i*3] > minMax.max[0]) minMax.max[0]
= (float)coordinates[i*3];
if (coordinates[i*3] < minMax.min[0]) minMax.min[0]
= (float)coordinates[i*3];
if (coordinates[i*3+1] > minMax.max[1])
minMax.max[1] = (float)coordinates[i*3+1];
if (coordinates[i*3+1] < minMax.min[1])
minMax.min[1] = (float)coordinates[i*3+1];
if (coordinates[i*3+2] > minMax.max[2])
minMax.max[2] = (float)coordinates[i*3+2];
if (coordinates[i*3+2] < minMax.min[2])
minMax.min[2] = (float)coordinates[i*3+2];
System.out.println(" " + coordinates[i*3] + " " +
coordinates[i*3+1] + " " + coordinates[i*3+2]);
}
} else if (geom instanceof CompressedGeometry) {
System.out.println("getMinMaxVal: It is a
CompressedGeometry !");
}
} else if (tmpObject instanceof TransformGroup) {
System.out.println("scaleOnLowestLevel: a transformgroup");
TransformGroup tmptransformGroup =
(TransformGroup)tmpObject;
Enumeration nextenum = tmptransformGroup.getAllChildren();
getMinMaxVal(nextenum,minMax);
} else if(tmpObject instanceof Group){
System.out.println("getMinMaxVal: a group");
Group tmpGroup = (Group)tmpObject;
Enumeration groupenum = tmpGroup.getAllChildren();
getMinMaxVal(groupenum,minMax);
} else {
System.out.println("getMinMaxVal: What is this thing?");
}
}
}
-----Original Message-----
From: Shaun Shepherd [mailto:[EMAIL PROTECTED]]
Sent: 8. januar 2001 16:00
To: [EMAIL PROTECTED]
Subject: [JAVA3D] Extacting Shape3D's from the FltLoader
Morning all,
I'm working with the fullsail fltloader and am trying to get the
gemoetries of the shapes in a scene. The problem is, everytime I try to get
a shape3D from a scene it throws a classCastException. I tried to use the
method of getNamedObjects and the resulting hashtable's get method to obtain
the shape3D(casted btw). I based this off of an obj. loader example I saw,
is the fltloader different or is there a better way? Thanks.
Shaun
/** Here's a snippet of my code ***/
Hashtable h = s.getNamedObjects();
System.out.println(h.toString());
System.out.println(h.keys().nextElement());
Enumeration en = h.keys();
while (en.hasMoreElements()) {
String str = (String)en.nextElement();
Node temp = (Node)h.get(str);
System.out.println("Temp: " + temp.toString());
if (temp instanceof Shape3D) {
Shape3D shape = (Shape3D) temp;
GeometryArray g = (GeometryArray)shape.getGeometry();
System.out.println("Vertex Count: " + g.getVertexCount());
}
}
/*** Error given ***/
java.lang.ClassCastException: com.fullsail.j3d.loaders.flt.FLTgroup
at TriangleTest.createSceneGraph(TriangleTest.java:71)
at TriangleTest.<init>(TriangleTest.java:27)
at TriangleTest.main(TriangleTest.java:32)
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".
===========================================================================
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff JAVA3D-INTEREST". For general help, send email to
[EMAIL PROTECTED] and include in the body of the message "help".