clipLine method

int clipLine(
  1. ParamInteger x1,
  2. ParamInteger y1,
  3. ParamInteger x2,
  4. ParamInteger y2,
)

Implementation

int clipLine( ParamInteger x1, ParamInteger y1, ParamInteger x2, ParamInteger y2 ){
	int ret;

	if(
		(x1.val() >= 0) && (x1.val() <= _width ) &&
		(y1.val() >= 0) && (y1.val() <= _height) &&
		(x2.val() >= 0) && (x2.val() <= _width ) &&
		(y2.val() >= 0) && (y2.val() <= _height)
	){
		return 1;
	} else {
		if(
			(x1.val() >= 0) && (x1.val() <= _width ) &&
			(y1.val() >= 0) && (y1.val() <= _height)
		){
			// (x2,y2)を修正
			_clipLine( x1.val(), y1.val(), x2.val(), y2.val(), x2, y2 );
			ret = 1;
		} else if(
			(x2.val() >= 0) && (x2.val() <= _width ) &&
			(y2.val() >= 0) && (y2.val() <= _height)
		){
			// (x1,y1)を修正
			_clipLine( x1.val(), y1.val(), x2.val(), y2.val(), x1, y1 );
			ret = 1;
		} else {
			// (x1,y1),(x2,y2)を修正
			_clipLine( x1.val(), y1.val(), x2.val(), y2.val(), x1, y1 );
			_clipLine( x1.val(), y1.val(), x2.val(), y2.val(), x2, y2 );
			ret = 2;
		}
		if(
			((x1.val() <  0      ) && (x2.val() <  0      )) ||
			((y1.val() <  0      ) && (y2.val() <  0      )) ||
			((x1.val() >= _width ) && (x2.val() >= _width )) ||
			((y1.val() >= _height) && (y2.val() >= _height))
		){
			return 0;
		}
	}
	return ret;
}