private void passiveMotionMethod(AWTGLAutoDrawable window, int x, int y) { WindowInfo info = (WindowInfo) windowToInfoMap.get(window); // Compute ray in 3D Vec3f rayStart = new Vec3f(); Vec3f rayDirection = new Vec3f(); computeRay(info.params, x, y, rayStart, rayDirection); // Compute all hits List hits = new ArrayList(); for (Iterator iter = info.manips.iterator(); iter.hasNext(); ) { ((Manip) iter.next()).intersectRay(rayStart, rayDirection, hits); } // Find closest one HitPoint hp = null; for (Iterator iter = hits.iterator(); iter.hasNext(); ) { HitPoint cur = (HitPoint) iter.next(); if ((hp == null) || (cur.intPt.getT() < hp.intPt.getT())) { hp = cur; } } if (info.curHighlightedManip != null && (hp == null || hp.manipulator != info.curHighlightedManip || hp.manipPart != info.curHighlightedManipPart)) { info.curHighlightedManip.clearHighlight(); fireUpdate(info.curHighlightedManip); } if (hp != null) { if (hp.manipulator != info.curHighlightedManip || hp.manipPart != info.curHighlightedManipPart) { // Highlight manip info.curHighlightedManip = hp.manipulator; info.curHighlightedManipPart = hp.manipPart; info.curHighlightedManip.highlight(hp); fireUpdate(info.curHighlightedManip); } } else { info.curHighlightedManip = null; } }