// the bounds argument is already transformed @Override 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; }
// the bounds argument is already transformed @Override boolean intersect(Bounds targetBound) { Point3d[] points = new Point3d[4]; int i = ((vertexFormat & GeometryArray.BY_REFERENCE) == 0 ? initialVertexIndex : initialCoordIndex); points[0] = new Point3d(); points[1] = new Point3d(); points[2] = new Point3d(); points[3] = new Point3d(); switch (targetBound.getPickType()) { case PickShape.PICKBOUNDINGBOX: BoundingBox box = (BoundingBox) targetBound; while (i < validVertexCount) { getVertexData(i++, points[0]); getVertexData(i++, points[1]); getVertexData(i++, points[2]); getVertexData(i++, points[3]); if (intersectBoundingBox(points, box, null, null)) { return true; } } break; case PickShape.PICKBOUNDINGSPHERE: BoundingSphere bsphere = (BoundingSphere) targetBound; while (i < validVertexCount) { getVertexData(i++, points[0]); getVertexData(i++, points[1]); getVertexData(i++, points[2]); getVertexData(i++, points[3]); if (intersectBoundingSphere(points, bsphere, null, null)) { return true; } } break; case PickShape.PICKBOUNDINGPOLYTOPE: BoundingPolytope bpolytope = (BoundingPolytope) targetBound; while (i < validVertexCount) { getVertexData(i++, points[0]); getVertexData(i++, points[1]); getVertexData(i++, points[2]); getVertexData(i++, points[3]); if (intersectBoundingPolytope(points, bpolytope, null, null)) { return true; } } break; default: throw new RuntimeException("Bounds not supported for intersection " + targetBound); } return false; }
// the bounds argument is already transformed @Override boolean intersect(Bounds targetBound) { Point3d[] pnts = new Point3d[3]; // NVaidya // Bug 447: correction for loop indices int i = initialIndexIndex; int loopStopIndex = initialIndexIndex + validIndexCount; pnts[0] = new Point3d(); pnts[1] = new Point3d(); pnts[2] = new Point3d(); switch (targetBound.getPickType()) { case PickShape.PICKBOUNDINGBOX: BoundingBox box = (BoundingBox) targetBound; while (i < loopStopIndex) { getVertexData(indexCoord[i++], pnts[0]); getVertexData(indexCoord[i++], pnts[1]); getVertexData(indexCoord[i++], pnts[2]); if (intersectBoundingBox(pnts, box, null, null)) { return true; } } break; case PickShape.PICKBOUNDINGSPHERE: BoundingSphere bsphere = (BoundingSphere) targetBound; while (i < loopStopIndex) { getVertexData(indexCoord[i++], pnts[0]); getVertexData(indexCoord[i++], pnts[1]); getVertexData(indexCoord[i++], pnts[1]); if (intersectBoundingSphere(pnts, bsphere, null, null)) { return true; } } break; case PickShape.PICKBOUNDINGPOLYTOPE: BoundingPolytope bpolytope = (BoundingPolytope) targetBound; while (i < loopStopIndex) { getVertexData(indexCoord[i++], pnts[0]); getVertexData(indexCoord[i++], pnts[1]); getVertexData(indexCoord[i++], pnts[2]); if (intersectBoundingPolytope(pnts, bpolytope, null, null)) { return true; } } break; default: throw new RuntimeException("Bounds not supported for intersection " + targetBound); } return false; }