private boolean intersects(Line2D line) {
		for (int i = 0; i < nAtom; i++) {
			if (line.intersects(atom[i].getBounds2D()))
				return true;
		}
		RectangularObstacle r2d;
		if (obstacles != null && obstacles.size() > 0) {
			synchronized (obstacles.getSynchronizationLock()) {
				for (Iterator it = obstacles.iterator(); it.hasNext();) {
					r2d = (RectangularObstacle) it.next();
					if (line.intersects(r2d))
						return true;
				}
			}
		}
		if (!molecules.isEmpty()) {
			Object obj = null;
			synchronized (molecules.getSynchronizationLock()) {
				for (Iterator it = molecules.iterator(); it.hasNext();) {
					obj = it.next();
					if (obj instanceof CurvedSurface) {
						if (((CurvedSurface) obj).intersects(line.getBounds()))
							return true;
					}
				}
			}
		}
		return false;
	}