clipLine method
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;
}