code: static boolean needsCracking(boolean allowCoincident, EditShape shape, double tolerance,
  			NonSimpleResult result, ProgressTracker progress_tracker) {
  		if (!canBeCracked(shape))
  			return false;
  
  		Cracker cracker = new Cracker(progress_tracker);
  		cracker.m_shape = shape;
  		cracker.m_tolerance = tolerance;
  		cracker.m_bAllowCoincident = allowCoincident;
  		if (cracker.needsCrackingImpl_()) {
  			if (result != null)
  				result.Assign(cracker.m_non_simple_result);
  			return true;
  		}
  
  		// Now swap the coordinates to catch horizontal cases.
  		Transformation2D transform = new Transformation2D();
  		transform.setSwapCoordinates();
  		shape.applyTransformation(transform);
  
  		cracker = new Cracker(progress_tracker);
  		cracker.m_shape = shape;
  		cracker.m_tolerance = tolerance;
  		cracker.m_bAllowCoincident = allowCoincident;
  		boolean b_res = cracker.needsCrackingImpl_();
  
  		transform.setSwapCoordinates();
  		shape.applyTransformation(transform);// restore shape
  
  		if (b_res) {
  			if (result != null)
  				result.Assign(cracker.m_non_simple_result);
  			return true;
  		}
  
  		return false;
  	}
docs: Used for IsSimple.