⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 shape3dcompileretained.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
		}		break;	    case GeometryArrayRetained.GEO_TYPE_INDEXED_POINT_SET:		if (mergedList[i] != null) {		    cgeo = new IndexedPointArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_INDEXED_LINE_SET:		if (mergedList[i] != null) {		    cgeo = new IndexedLineArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_INDEXED_TRI_STRIP_SET:		if (mergedList[i] != null) {		    cgeo = new IndexedTriangleStripArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_INDEXED_TRI_FAN_SET:		if (mergedList[i] != null) {		    cgeo = new IndexedTriangleFanArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    case GeometryArrayRetained.GEO_TYPE_INDEXED_LINE_STRIP_SET:		if (mergedList[i] != null) {		    cgeo = new IndexedLineStripArrayRetained();		    curList = (ArrayList)mergedList[i];		    cgeo.setCompiled(curList);		    geometryList.add(cgeo);		    cgeo.setSource(((SceneGraphObjectRetained)curList.get(0)).source);		}		if (separateList[i] != null) {		    ArrayList glist = (ArrayList)separateList[i];		    for (int k = 0; k < glist.size(); k++) {			geometryList.add(glist.get(k));		    }		}		break;	    }	}		    }    Bounds getCollisionBounds(int childIndex) {	return collisionBound;    }        int numGeometries(int childIndex) {	ArrayList geo = (ArrayList) geometryInfo.get(childIndex);	return geo.size();    }    Geometry getGeometry(int i, int childIndex) {	ArrayList geoInfo = (ArrayList) geometryInfo.get(childIndex);	return (Geometry)geoInfo.get(i);	    }    Enumeration getAllGeometries(int childIndex) {	ArrayList geoInfo = (ArrayList) geometryInfo.get(childIndex);	Vector geomList = new Vector();		for(int i=0; i<geoInfo.size(); i++) {	    geomList.add(geoInfo.get(i));	}		return geomList.elements();    }    Bounds getBounds(int childIndex) {        if(boundsAutoCompute) {	    ArrayList glist = (ArrayList) geometryInfo.get(childIndex);	    if(glist != null) {		BoundingBox bbox = new BoundingBox((Bounds) null);		for(int i=0; i<glist.size(); i++) {		    Geometry g = (Geometry) glist.get(i);		    if (g != null) {			GeometryRetained geometry = (GeometryRetained)g.retained;			if (geometry.geoType != GeometryRetained.GEO_TYPE_NONE) {			    geometry.computeBoundingBox();			    synchronized(geometry.geoBounds) {				bbox.combine(geometry.geoBounds);			    }			}		    }		}		return (Bounds) bbox;			    } else {		return null;            }	            } else {            return super.getBounds();        }    }    /**     * Check if the geometry component of this shape node under path     * intersects with the pickRay.     * @return true if intersected else false. If return is true, dist     *  contains the closest     * distance of intersection.     * @exception IllegalArgumentException if <code>path</code> is     * invalid.     */    boolean intersect(SceneGraphPath path,            PickShape pickShape, double[] dist) {                int flags;        PickInfo pickInfo = new PickInfo();                Transform3D localToVworld = path.getTransform();        if (localToVworld == null) {	    throw new IllegalArgumentException(J3dI18N.getString("Shape3DRetained3"));   	}        pickInfo.setLocalToVWorldRef( localToVworld);                Shape3D shape  = (Shape3D) path.getObject();	// Get the geometries for this shape only, since the compiled	// geomtryList contains several shapes	ArrayList glist =  (ArrayList) geometryInfo.get(shape.id);	                        // System.err.println("Shape3DCompileRetained.intersect() : ");        if (dist == null) {            // System.err.println("      no dist request ....");            return intersect(pickInfo, pickShape, 0, glist);        }                flags = PickInfo.CLOSEST_DISTANCE;        if (intersect(pickInfo, pickShape, flags, glist)) {            dist[0] = pickInfo.getClosestDistance();            return true;        }                return false;                }          boolean intersect(PickInfo pickInfo, PickShape pickShape, int flags,              ArrayList geometryList) {                  Transform3D localToVworld = pickInfo.getLocalToVWorldRef();                 	Transform3D t3d = new Transform3D();	t3d.invert(localToVworld);	PickShape newPS = pickShape.transform(t3d);     	int geomListSize = geometryList.size();	GeometryRetained geometry;        if (((flags & PickInfo.CLOSEST_INTERSECTION_POINT) == 0) &&            ((flags & PickInfo.CLOSEST_DISTANCE) == 0) &&            ((flags & PickInfo.CLOSEST_GEOM_INFO) == 0) &&            ((flags & PickInfo.ALL_GEOM_INFO) == 0)) {            	    for (int i=0; i < geomListSize; i++) {		geometry =  (GeometryRetained) geometryList.get(i);	     		if (geometry != null) {		    if (geometry.mirrorGeometry != null) {			geometry = geometry.mirrorGeometry;		    }                    // Need to modify this method		    // if (geometry.intersect(newPS, null, null)) {                    if (geometry.intersect(newPS, null, 0, null, null, 0)) {			return true;		    }		}	    }	}        else {            double distance;	    double minDist = Double.POSITIVE_INFINITY;            Point3d closestIPnt = new Point3d();            Point3d iPnt = new Point3d();                        Point3d iPntVW = new Point3d();                        	    for (int i=0; i < geomListSize; i++) {		geometry =  (GeometryRetained) geometryList.get(i);		if (geometry != null) {		    if (geometry.mirrorGeometry != null) {			geometry = geometry.mirrorGeometry;		    }                    if (geometry.intersect(newPS, pickInfo, flags, iPnt, geometry, i)) {                          iPntVW.set(iPnt);                        localToVworld.transform(iPntVW);			distance = pickShape.distance(iPntVW);                       			if (minDist > distance) {			    minDist = distance;                             closestIPnt.set(iPnt);                        }                        }		}	    }            	    if (minDist < Double.POSITIVE_INFINITY) {                                 if ((flags & PickInfo.CLOSEST_DISTANCE) != 0) {                    pickInfo.setClosestDistance(minDist);                }                if((flags & PickInfo.CLOSEST_INTERSECTION_POINT) != 0) {                    pickInfo.setClosestIntersectionPoint(closestIPnt);                }		return true;	    }		}        	return false;           }            }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -