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

📄 indexedlinestriparrayretained.java

📁 JAVA3D矩陈的相关类
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			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.PICKCONE:	    PickCone pickCone= (PickCone) pickShape;	    while (i < stripIndexCounts.length) {                  vtxIndexArr[0] = indexCoord[count];		getVertexData(indexCoord[count++], pnts[0]);		scount =  stripIndexCounts[i++];		for (j=1; j < scount; j++) {                    vtxIndexArr[1] = indexCoord[count];		    getVertexData(indexCoord[count++], 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("IndexedLineStripArrayRetained0"));	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;    }          // intersect pnts[] with every triangle in this object    boolean intersect(Point3d[] pnts) {	int i = 0;	int j, count=0;	int scount;	Point3d[] points = new Point3d[2];	double dist[] = new double[1];	Vector3d dir;		points[0] = new Point3d();	points[1] = new Point3d();		switch (pnts.length) {	case 3:	case 4: // Triangle, Quad	   while (i < stripIndexCounts.length) {		getVertexData(indexCoord[count++], points[0]);		scount = stripIndexCounts[i++];		for (j=1; j < scount; j++) {		    getVertexData(indexCoord[count++], 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 < stripIndexCounts.length) {		getVertexData(indexCoord[count++], points[0]);		scount = stripIndexCounts[i++];		for (j=1; j < scount; j++) {		    getVertexData(indexCoord[count++], 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 < stripIndexCounts.length) {		getVertexData(indexCoord[count++], points[0]);		scount = stripIndexCounts[i++];		for (j=1; j < scount; j++) {		    getVertexData(indexCoord[count++], 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, count=0;	Point3d[] pnts = new Point3d[2];	int scount;	pnts[0] = new Point3d();	pnts[1] = new Point3d();	while (i < stripIndexCounts.length) {	    getVertexData(indexCoord[count++], pnts[0]);	    thisToOtherVworld.transform(pnts[0]);	    scount = stripIndexCounts[i++];	    for (j = 1; j < scount; j++) {		getVertexData(indexCoord[count++], 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, count=0;	Point3d[] pnts = new Point3d[2];	int scount;	pnts[0] = new Point3d();	pnts[1] = new Point3d();	switch(targetBound.getPickType()) {	case PickShape.PICKBOUNDINGBOX:	    BoundingBox box = (BoundingBox) targetBound;	    while (i < stripIndexCounts.length) {		getVertexData(indexCoord[count++], pnts[0]);		scount = stripIndexCounts[i++];		for (j=1; j < scount; j++) {		    getVertexData(indexCoord[count++], 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 < stripIndexCounts.length) {		getVertexData(indexCoord[count++], pnts[0]);		scount = stripIndexCounts[i++];		for (j=1; j < scount; j++) {		    getVertexData(indexCoord[count++], 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 < stripIndexCounts.length) {		getVertexData(indexCoord[count++], pnts[0]);		scount = stripIndexCounts[i++];		for (j=1; j < scount; j++) {		    getVertexData(indexCoord[count++], 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;    }    int getClassType() { 	return LINE_TYPE;     }}

⌨️ 快捷键说明

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