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

📄 linestriparrayretained.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	    PickCone pickCone= (PickCone) pickShape;	    while (i < stripVertexCounts.length) {  		j = stripStartVertexIndices[i];		end = j + stripVertexCounts[i++];                vtxIndexArr[0] = j;		getVertexData(j++, pnts[0]);		while (j < end) {                    vtxIndexArr[1] = j;		    getVertexData(j++, pnts[1]);		    if (intersectCone(pnts, pickCone, sdist, iPnt)) {			if (flags == 0) {			    return true;			}			if (sdist[0] < minDist) {			    minDist = sdist[0];                            x = iPnt.x;                            y = iPnt.y;                            z = iPnt.z;                            if((flags & PickInfo.CLOSEST_GEOM_INFO) != 0) {                                storeInterestData(pickInfo, flags, geom, geomIndex,                                                   vtxIndexArr, iPnt, sdist[0]);                            }                        }                        if((flags & PickInfo.ALL_GEOM_INFO) != 0) {                            storeInterestData(pickInfo, flags, geom, geomIndex,                                               vtxIndexArr, iPnt, sdist[0]);                             		        }		    }		    pnts[0].set(pnts[1]);			                       vtxIndexArr[0] = vtxIndexArr[1];		}	    }	    break;	case PickShape.PICKPOINT:	    // Should not happen since API already check for this	    throw new IllegalArgumentException(J3dI18N.getString("LineStripArrayRetained0"));	default:	    throw new RuntimeException ("PickShape not supported for intersection"); 	} 	if (minDist < Double.MAX_VALUE) {	    iPnt.x = x;	    iPnt.y = y;	    iPnt.z = z;	    return true;	}	return false;      }      boolean intersect(Point3d[] pnts) {	int j, end;	Point3d[] points = new Point3d[2];	double dist[] = new double[1];	Vector3d dir;	int i = 0;	points[0] = new Point3d();	points[1] = new Point3d();	switch (pnts.length) {	case 3:	case 4: // Triangle, Quad	    while (i < stripVertexCounts.length) {		j = stripStartVertexIndices[i];		end = j + stripVertexCounts[i++];		getVertexData(j++, points[0]);				while (j < end) {		    getVertexData(j++, points[1]);				    if (intersectSegment(pnts, points[0], points[1],					 dist, null)) {			return true;		    }		    points[0].set(points[1]);		}	    }	    break;	case 2: // Line	    dir = new Vector3d();	    while (i < stripVertexCounts.length) {		j = stripStartVertexIndices[i];		end = j + stripVertexCounts[i++];		getVertexData(j++, points[0]);				while (j < end) {		    getVertexData(j++, points[1]);				    dir.x = points[1].x - points[0].x;		    dir.y = points[1].y - points[0].y;		    dir.z = points[1].z - points[0].z;		    if (intersectLineAndRay(pnts[0], pnts[1],					   points[0], dir, dist, null) &&			(dist[0] <= 1.0)) {			return true;		    }		    points[0].set(points[1]);		}			    }	    break;	case 1: // Point	    dir = new Vector3d();	    while (i < stripVertexCounts.length) {		j = stripStartVertexIndices[i];		end = j + stripVertexCounts[i++];		getVertexData(j++, points[0]);				while (j < end) {		    getVertexData(j++, points[1]);				    dir.x = points[1].x - points[0].x;		    dir.y = points[1].y - points[0].y;		    dir.z = points[1].z - points[0].z;		    if (intersectPntAndRay(pnts[0], points[0], dir,					   dist) &&			(dist[0] <= 1.0)) {			return true;		    }		    points[0].set(points[1]); 		}	    }	    break;	}	return false;    }    boolean intersect(Transform3D thisToOtherVworld,		      GeometryRetained geom) {	int i = 0;	int j, end;	Point3d[] pnts = new Point3d[2];	pnts[0] = new Point3d();	pnts[1] = new Point3d();	while (i < stripVertexCounts.length) {	    j = stripStartVertexIndices[i];	    end = j + stripVertexCounts[i++];	    getVertexData(j++, pnts[0]);			    thisToOtherVworld.transform(pnts[0]);	    while (j < end) {		getVertexData(j++, pnts[1]);				thisToOtherVworld.transform(pnts[1]);		if (geom.intersect(pnts)) {		    return true;		}		pnts[0].set(pnts[1]);	    }	}	return false;    }    // the bounds argument is already transformed    boolean intersect(Bounds targetBound) {	int i = 0;	int j, offset, end;	Point3d[] pnts = new Point3d[2];	pnts[0] = new Point3d();	pnts[1] = new Point3d();	switch(targetBound.getPickType()) {	case PickShape.PICKBOUNDINGBOX:	    BoundingBox box = (BoundingBox) targetBound;	    while (i < stripVertexCounts.length) {		j = stripStartVertexIndices[i];		end = j + stripVertexCounts[i++];		getVertexData(j++, pnts[0]);				while ( j < end) {		    getVertexData(j++, pnts[1]);				    if (intersectBoundingBox(pnts, box, null, null)) {			return true;		    }		    pnts[0].set(pnts[1]);		}	    }	    break;	case PickShape.PICKBOUNDINGSPHERE:	    BoundingSphere bsphere = (BoundingSphere) targetBound;	    while (i < stripVertexCounts.length) {		j = stripStartVertexIndices[i];		end = j + stripVertexCounts[i++];		getVertexData(j++, pnts[0]);				while ( j < end) {		    getVertexData(j++, pnts[1]);				    if (intersectBoundingSphere(pnts, bsphere, null,						null)) {			return true;		    }		    pnts[0].set(pnts[1]);		}	    }	    break;	case PickShape.PICKBOUNDINGPOLYTOPE:	    BoundingPolytope bpolytope = (BoundingPolytope) targetBound;	    while (i < stripVertexCounts.length) {		j = stripStartVertexIndices[i];		end = j + stripVertexCounts[i++];		getVertexData(j++, pnts[0]);				while ( j < end) {		    getVertexData(j++, pnts[1]);				    if (intersectBoundingPolytope(pnts, bpolytope,						  null, null)) {			return true;		    }		    pnts[0].set(pnts[1]);		}	    }	    break;	default:	    throw new RuntimeException("Bounds not supported for intersection "				       + targetBound); 	}	return false;    }    // From Graphics Gems IV (pg5) and Graphics Gems II, Pg170    void computeCentroid() {	int i = 0;	int j;	double length;	double totallength = 0;	int start, end;	boolean replaceVertex1;	Point3d pnt0 = new Point3d();	Point3d pnt1 = new Point3d();	centroid.x = 0;	centroid.y = 0;	centroid.z = 0;	while (i < stripVertexCounts.length) {  	    j = stripStartVertexIndices[i];	    end = j + stripVertexCounts[i++];	    getVertexData(j++, pnt0);	    replaceVertex1 = true;	    while (j < end) {		if (replaceVertex1) {		    getVertexData(j++, pnt1);		    replaceVertex1 = false;		} else {		    getVertexData(j++, pnt0);		    replaceVertex1 = true;		}		length = pnt0.distance(pnt1);		centroid.x += (pnt0.x + pnt1.x) * length;		centroid.y += (pnt0.y + pnt1.y) * length;		centroid.z += (pnt0.z + pnt1.z) * length;		totallength += length;	    }	}	if (totallength != 0.0) {	    length = 1.0/(2.0 * totallength);	    centroid.x *= length;	    centroid.y *= length;	    centroid.z *= length;	}    }    int getClassType() {	return LINE_TYPE;    }}

⌨️ 快捷键说明

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