|
@@ -4,18 +4,16 @@
|
|
|
|
|
|
THREE.Box3 = function ( min, max ) {
|
|
|
|
|
|
- if( min == undefined && max === undefined ) {
|
|
|
-
|
|
|
+ if( ! min && ! max ) {
|
|
|
this.min = new THREE.Vector3();
|
|
|
this.max = new THREE.Vector3();
|
|
|
this.min.x = this.min.y = this.min.z = Infinity;
|
|
|
this.max.x = this.max.y = this.max.z = -Infinity;
|
|
|
console.log( this );
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
+ }
|
|
|
+ else {
|
|
|
this.min = min || new THREE.Vector3();
|
|
|
- this.max = max || new THREE.Vector3().copy( this.min ); // This is done on purpose so you can make a box using a single point and then expand it.
|
|
|
+ this.max = max || new THREE.Vector3().copy( this.min ); // This is done on purpose so you can make a box using a single point and then expand it.
|
|
|
}
|
|
|
};
|
|
|
|
|
@@ -29,58 +27,44 @@ THREE.Box3.prototype = {
|
|
|
this.max = max;
|
|
|
|
|
|
return this;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
setFromPoints: function ( points ) {
|
|
|
|
|
|
- if ( points.length > 0 ) {
|
|
|
-
|
|
|
- var p = points[ 0 ];
|
|
|
+ if( points.length > 0 ) {
|
|
|
|
|
|
+ var p = points[0];
|
|
|
this.min.copy( p );
|
|
|
this.max.copy( p );
|
|
|
|
|
|
- for ( var i = 1, il = points.length; i < il; i ++ ) {
|
|
|
+ for( var i = 1, numPoints = points.length; i < numPoints; i ++ ) {
|
|
|
|
|
|
- p = points[ i ];
|
|
|
+ p = points[ v ];
|
|
|
|
|
|
if ( p.x < this.min.x ) {
|
|
|
-
|
|
|
this.min.x = p.x;
|
|
|
-
|
|
|
- } else if ( p.x > this.max.x ) {
|
|
|
-
|
|
|
+ }
|
|
|
+ else if ( p.x > this.max.x ) {
|
|
|
this.max.x = p.x;
|
|
|
-
|
|
|
}
|
|
|
|
|
|
if ( p.y < this.min.y ) {
|
|
|
-
|
|
|
this.min.y = p.y;
|
|
|
-
|
|
|
- } else if ( p.y > this.max.y ) {
|
|
|
-
|
|
|
+ }
|
|
|
+ else if ( p.y > this.max.y ) {
|
|
|
this.max.y = p.y;
|
|
|
-
|
|
|
}
|
|
|
|
|
|
if ( p.z < this.min.z ) {
|
|
|
-
|
|
|
this.min.z = p.z;
|
|
|
-
|
|
|
- } else if ( p.z > this.max.z ) {
|
|
|
-
|
|
|
+ }
|
|
|
+ else if ( p.z > this.max.z ) {
|
|
|
this.max.z = p.z;
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
- } else {
|
|
|
-
|
|
|
+ }
|
|
|
+ else {
|
|
|
this.makeEmpty();
|
|
|
-
|
|
|
}
|
|
|
|
|
|
return this;
|
|
@@ -89,12 +73,10 @@ THREE.Box3.prototype = {
|
|
|
setFromCenterAndSize: function ( center, size ) {
|
|
|
|
|
|
var halfSize = THREE.Box3.__v1.copy( size ).multiplyScalar( 0.5 );
|
|
|
-
|
|
|
this.min.copy( center ).subSelf( halfSize );
|
|
|
this.max.copy( center ).addSelf( halfSize );
|
|
|
|
|
|
- return this;
|
|
|
-
|
|
|
+ return box;
|
|
|
},
|
|
|
|
|
|
copy: function ( box ) {
|
|
@@ -103,7 +85,6 @@ THREE.Box3.prototype = {
|
|
|
this.max.copy( box.max );
|
|
|
|
|
|
return this;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
makeEmpty: function () {
|
|
@@ -112,41 +93,41 @@ THREE.Box3.prototype = {
|
|
|
this.max.x = this.max.y = this.max.z = -Infinity;
|
|
|
|
|
|
return this;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
empty: function () {
|
|
|
|
|
|
// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes
|
|
|
- return ( this.max.x < this.min.x ) || ( this.max.y < this.min.y ) || ( this.max.z < this.min.z );
|
|
|
-
|
|
|
+ return
|
|
|
+ ( this.max.x < this.min.x ) ||
|
|
|
+ ( this.max.y < this.min.y ) ||
|
|
|
+ ( this.max.z < this.min.z );
|
|
|
},
|
|
|
|
|
|
volume: function () {
|
|
|
|
|
|
- return ( this.max.x - this.min.x ) * ( this.max.y - this.min.y ) * ( this.max.z - this.min.z );
|
|
|
-
|
|
|
+ return
|
|
|
+ ( this.max.x - this.min.x ) *
|
|
|
+ ( this.max.y - this.min.y ) *
|
|
|
+ ( this.max.z - this.min.z );
|
|
|
},
|
|
|
|
|
|
center: function () {
|
|
|
|
|
|
return new THREE.Vector3().add( this.min, this.max ).multiplyScalar( 0.5 );
|
|
|
-
|
|
|
},
|
|
|
|
|
|
size: function () {
|
|
|
|
|
|
return new THREE.Vector3().sub( this.max, this.min );
|
|
|
-
|
|
|
},
|
|
|
|
|
|
expandByPoint: function ( point ) {
|
|
|
|
|
|
- this.min.minSelf( point );
|
|
|
+ this.min.minSelf( point );
|
|
|
this.max.maxSelf( point );
|
|
|
|
|
|
return this;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
expandByVector: function ( vector ) {
|
|
@@ -155,93 +136,76 @@ THREE.Box3.prototype = {
|
|
|
this.max.addSelf( vector );
|
|
|
|
|
|
return this;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
expandByScalar: function ( scalar ) {
|
|
|
|
|
|
this.min.addScalar( -scalar );
|
|
|
this.max.addScalar( scalar );
|
|
|
-
|
|
|
+
|
|
|
return this;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
containsPoint: function ( point ) {
|
|
|
-
|
|
|
- if ( ( this.min.x <= point.x ) && ( point.x <= this.max.x ) &&
|
|
|
+ if(
|
|
|
+ ( this.min.x <= point.x ) && ( point.x <= this.max.x ) &&
|
|
|
( this.min.y <= point.y ) && ( point.y <= this.max.y ) &&
|
|
|
- ( this.min.z <= point.z ) && ( point.z <= this.max.z ) ) {
|
|
|
-
|
|
|
+ ( this.min.z <= point.z ) && ( point.z <= this.max.z )
|
|
|
+ ) {
|
|
|
return true;
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
return false;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
containsBox: function ( box ) {
|
|
|
-
|
|
|
- if ( ( this.min.x <= box.min.x ) && ( box.max.x <= this.max.x ) &&
|
|
|
+ if(
|
|
|
+ ( this.min.x <= box.min.x ) && ( box.max.x <= this.max.x ) &&
|
|
|
( this.min.y <= box.min.y ) && ( box.max.y <= this.max.y ) &&
|
|
|
- ( this.min.z <= box.min.z ) && ( box.max.z <= this.max.z ) ) {
|
|
|
-
|
|
|
+ ( this.min.z <= box.min.z ) && ( box.max.z <= this.max.z )
|
|
|
+ ) {
|
|
|
return true;
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
return false;
|
|
|
-
|
|
|
- },
|
|
|
-
|
|
|
- isIntersection: function ( box ) {
|
|
|
-
|
|
|
- // using 6 splitting planes to rule out intersections.
|
|
|
-
|
|
|
- if ( ( this.max.x < box.min.x ) || ( box.min.x > this.max.x ) ||
|
|
|
- ( this.max.y < box.min.y ) || ( box.min.y > this.max.y ) ||
|
|
|
- ( this.max.z < box.min.z ) || ( box.min.z > this.max.z ) ) {
|
|
|
-
|
|
|
- return false;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- return true;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
getParameter: function ( point ) {
|
|
|
-
|
|
|
// This can potentially have a divide by zero if the box
|
|
|
// has a size dimension of 0.
|
|
|
return new THREE.Vector3(
|
|
|
( point.x - this.min.x ) / ( this.max.x - this.min.x ),
|
|
|
( point.y - this.min.y ) / ( this.max.y - this.min.y ),
|
|
|
( point.z - this.min.z ) / ( this.max.z - this.min.z )
|
|
|
- );
|
|
|
-
|
|
|
+ );
|
|
|
},
|
|
|
|
|
|
clampPoint: function ( point ) {
|
|
|
|
|
|
return new THREE.Vector3().copy( point ).clampSelf( this.min, this.max );
|
|
|
-
|
|
|
},
|
|
|
|
|
|
distanceToPoint: function ( point ) {
|
|
|
|
|
|
return this.clampPoint( point ).subSelf( point ).length();
|
|
|
+ },
|
|
|
|
|
|
+ isIntersection: function ( box ) {
|
|
|
+ // using 6 splitting planes to rule out intersections.
|
|
|
+ if(
|
|
|
+ ( this.max.x < box.min.x ) || ( box.min.x > this.max.x ) ||
|
|
|
+ ( this.max.y < box.min.y ) || ( box.min.y > this.max.y ) ||
|
|
|
+ ( this.max.z < box.min.z ) || ( box.min.z > this.max.z )
|
|
|
+ ) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ return true;
|
|
|
},
|
|
|
|
|
|
intersect: function ( box ) {
|
|
|
|
|
|
this.min.maxSelf( box.min );
|
|
|
this.max.minSelf( box.max );
|
|
|
-
|
|
|
+
|
|
|
return this;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
union: function ( box ) {
|
|
@@ -250,7 +214,6 @@ THREE.Box3.prototype = {
|
|
|
this.max.maxSelf( box.max );
|
|
|
|
|
|
return this;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
translate: function ( offset ) {
|
|
@@ -259,7 +222,6 @@ THREE.Box3.prototype = {
|
|
|
this.max.addSelf( offset );
|
|
|
|
|
|
return this;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
scale: function ( factor ) {
|
|
@@ -268,7 +230,6 @@ THREE.Box3.prototype = {
|
|
|
this.expandByVector( sizeDeltaHalf );
|
|
|
|
|
|
return this;
|
|
|
-
|
|
|
},
|
|
|
|
|
|
equals: function ( box ) {
|
|
@@ -282,7 +243,7 @@ THREE.Box3.prototype = {
|
|
|
return new THREE.Box3().copy( this );
|
|
|
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
};
|
|
|
|
|
|
-THREE.Box3.__v1 = new THREE.Vector3();
|
|
|
+THREE.Box3.__v1 = new THREE.Vector3();
|