/** * @author mr.doob / http://mrdoob.com/ */ THREE.Rectangle = function () { var _left, _top, _right, _bottom, _width, _height, _isEmpty = true; function resize() { _width = _right - _left; _height = _bottom - _top; } this.getX = function () { return _left; }; this.getY = function () { return _top; }; this.getWidth = function () { return _width; }; this.getHeight = function () { return _height; }; this.getLeft = function() { return _left; }; this.getTop = function() { return _top; }; this.getRight = function() { return _right; }; this.getBottom = function() { return _bottom; }; this.set = function ( left, top, right, bottom ) { _isEmpty = false; _left = left; _top = top; _right = right; _bottom = bottom; resize(); }; this.addPoint = function ( x, y ) { if ( _isEmpty ) { _isEmpty = false; _left = x; _top = y; _right = x; _bottom = y; resize(); } else { _left = _left < x ? _left : x; // Math.min( _left, x ); _top = _top < y ? _top : y; // Math.min( _top, y ); _right = _right > x ? _right : x; // Math.max( _right, x ); _bottom = _bottom > y ? _bottom : y; // Math.max( _bottom, y ); resize(); } }; this.add3Points = function ( x1, y1, x2, y2, x3, y3 ) { if (_isEmpty) { _isEmpty = false; _left = x1 < x2 ? ( x1 < x3 ? x1 : x3 ) : ( x2 < x3 ? x2 : x3 ); _top = y1 < y2 ? ( y1 < y3 ? y1 : y3 ) : ( y2 < y3 ? y2 : y3 ); _right = x1 > x2 ? ( x1 > x3 ? x1 : x3 ) : ( x2 > x3 ? x2 : x3 ); _bottom = y1 > y2 ? ( y1 > y3 ? y1 : y3 ) : ( y2 > y3 ? y2 : y3 ); resize(); } else { _left = x1 < x2 ? ( x1 < x3 ? ( x1 < _left ? x1 : _left ) : ( x3 < _left ? x3 : _left ) ) : ( x2 < x3 ? ( x2 < _left ? x2 : _left ) : ( x3 < _left ? x3 : _left ) ); _top = y1 < y2 ? ( y1 < y3 ? ( y1 < _top ? y1 : _top ) : ( y3 < _top ? y3 : _top ) ) : ( y2 < y3 ? ( y2 < _top ? y2 : _top ) : ( y3 < _top ? y3 : _top ) ); _right = x1 > x2 ? ( x1 > x3 ? ( x1 > _right ? x1 : _right ) : ( x3 > _right ? x3 : _right ) ) : ( x2 > x3 ? ( x2 > _right ? x2 : _right ) : ( x3 > _right ? x3 : _right ) ); _bottom = y1 > y2 ? ( y1 > y3 ? ( y1 > _bottom ? y1 : _bottom ) : ( y3 > _bottom ? y3 : _bottom ) ) : ( y2 > y3 ? ( y2 > _bottom ? y2 : _bottom ) : ( y3 > _bottom ? y3 : _bottom ) ); resize(); }; }; this.addRectangle = function ( r ) { if ( _isEmpty ) { _isEmpty = false; _left = r.getLeft(); _top = r.getTop(); _right = r.getRight(); _bottom = r.getBottom(); resize(); } else { _left = _left < r.getLeft() ? _left : r.getLeft(); // Math.min(_left, r.getLeft() ); _top = _top < r.getTop() ? _top : r.getTop(); // Math.min(_top, r.getTop() ); _right = _right > r.getRight() ? _right : r.getRight(); // Math.max(_right, r.getRight() ); _bottom = _bottom > r.getBottom() ? _bottom : r.getBottom(); // Math.max(_bottom, r.getBottom() ); resize(); } }; this.inflate = function ( v ) { _left -= v; _top -= v; _right += v; _bottom += v; resize(); }; this.minSelf = function ( r ) { _left = _left > r.getLeft() ? _left : r.getLeft(); // Math.max( _left, r.getLeft() ); _top = _top > r.getTop() ? _top : r.getTop(); // Math.max( _top, r.getTop() ); _right = _right < r.getRight() ? _right : r.getRight(); // Math.min( _right, r.getRight() ); _bottom = _bottom < r.getBottom() ? _bottom : r.getBottom(); // Math.min( _bottom, r.getBottom() ); resize(); }; /* this.contains = function ( x, y ) { return x > _left && x < _right && y > _top && y < _bottom; }; */ this.instersects = function ( r ) { // return this.contains( r.getLeft(), r.getTop() ) || this.contains( r.getRight(), r.getTop() ) || this.contains( r.getLeft(), r.getBottom() ) || this.contains( r.getRight(), r.getBottom() ); return Math.min( _right, r.getRight() ) - Math.max( _left, r.getLeft() ) >= 0 && Math.min( _bottom, r.getBottom() ) - Math.max( _top, r.getTop() ) >= 0; }; this.empty = function () { _isEmpty = true; _left = 0; _top = 0; _right = 0; _bottom = 0; resize(); }; this.isEmpty = function () { return _isEmpty; }; };