if (geo.intersect(newPS, iInfo, flags, iPnt)) {
if (geo.intersect(newPS, pickInfo, flags, iPnt, geom,  geomIndex)) {
    boolean intersect(PickShape pickShape, PickInfo.IntersectionInfo iInfo,  int flags, Point3d iPnt) {	Transform3D tempT3D = new Transform3D();	GeometryArrayRetained geo = null;	int sIndex = -1;	PickShape newPS;	double minDist = Double.MAX_VALUE;        double distance =0.0;        Point3d closestIPnt = new Point3d();        	for (int i=0; i < numChars; i++) {	    geo= geometryList[i];	    if (geo != null) {		tempT3D.invert(charTransforms[i]);		newPS = pickShape.transform(tempT3D);		if (geo.intersect(newPS, iInfo, flags, iPnt)) {		    if (flags == 0) {			return true;		    }                    distance = newPS.distance(iPnt);		    if (distance < minDist) {			sIndex = i;			minDist = distance;                        closestIPnt.set(iPnt);		    }    		}	    }	}		if (sIndex >= 0) {	    // We need to transform iPnt to the vworld to compute the actual distance.	    // In this method we'll transform iPnt by its char. offset. Shape3D will	    // do the localToVworld transform.	    iPnt.set(closestIPnt);	    charTransforms[sIndex].transform(iPnt);	    return true;	} 	return false;        }