private boolean insideObject(int eX, int eY, int level, Shape shape) {
	    AffineTransform inv = null;
	    Point2D p;
	    double x = 0;
	    double y = 0;
	    if(level == 4 || level == 5){
//	    	System.out.println("angleSpoon: " + angleSpoon + " angleSoonCont: " + angleSpoonCont);
	    	Point2D p2 = new Point2D.Double(0,0);
	    	try {
	    		if(invert){
	    			inv = _C.notch;
	    		}
	    		else{
		    		inv = _C.notch.createInverse();
	    		}
	    	} catch (NoninvertibleTransformException e) {
	    		return false;
	    	}
	    	p2 = inv.transform(p2, null);
	    	double tempangleC;
	    	if(invert){
	    		tempangleC = angleC*-1;
	    	}else{
	    		tempangleC = angleC;
	    	}
	    	y = p2.getX()*Math.sin(tempangleC);
	    	x = p2.getX()*Math.cos(tempangleC);
//	    	System.out.println("x " + x + " y: " + y);
	    }
	    p = new Point2D.Double(eX + x, eY + y);

	    try {
		  inv = objectTransform.createInverse();
		} catch (NoninvertibleTransformException e) {
		  return false;
		}
	    Point2D pInv = inv.transform(p, null);

	    for(int i=1; i<=level; i++){
		    try {
			      inv = transform.get(i).createInverse();
			    } catch (NoninvertibleTransformException e) {
			      return false;
			    }
			    pInv = inv.transform(pInv, null);
	    }
	    if(level == 3){
	    	return _C.rect.contains(pInv);
	    }
	    point = pInv;
	    return shape.contains(pInv);
	  }