/**
   * This is an external all for direct usage.
   *
   * @param tpf
   */
  public void pick(Vector3f direction) {
    results.clear();
    this.direction = direction;
    ray.setOrigin(originObject.getWorldTranslation());
    ray.setDirection(direction);
    scene.collideWith(ray, results);

    if (results.size() > 0) {
      // The closest collision point is what was truly hit:
      for (int i = 0; i < results.size(); i++) {
        CollisionResult col = results.getCollision(i);

        if (collisionTypes != null && !originObject.hasChild(col.getGeometry())) {
          for (int j = 0; j < collisionTypes.length; j++) {
            String typeStr = collisionTypes[j];
            String type = col.getGeometry().getUserData(TYPE);
            if (type != null && type.equals(typeStr)) {
              contactPoint = col.getContactPoint();
              contactObject = col.getGeometry();
              fireSpatialListener(contactPoint, contactObject, true);
            }
          }
        }
      }
    }
  }
 public int collideWith(Collidable other) {
   TempVars tempVars = TempVars.get();
   try {
     CollisionResults tempResults = tempVars.collisionResults;
     tempResults.clear();
     return collideWith(other, tempResults);
   } finally {
     tempVars.release();
   }
 }