|
@@ -23,23 +23,23 @@ THREE.DragControls = function( _camera, _objects, _domElement ) {
|
|
|
|
|
|
var me = this;
|
|
var me = this;
|
|
this.on = function( event, handler ) {
|
|
this.on = function( event, handler ) {
|
|
-
|
|
|
|
|
|
+
|
|
if ( ! _listeners[ event ] ) _listeners[ event ] = [];
|
|
if ( ! _listeners[ event ] ) _listeners[ event ] = [];
|
|
|
|
|
|
_listeners[ event ].push( handler );
|
|
_listeners[ event ].push( handler );
|
|
return me;
|
|
return me;
|
|
-
|
|
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
this.off = function( event, handler ) {
|
|
this.off = function( event, handler ) {
|
|
-
|
|
|
|
|
|
+
|
|
var l = _listeners[ event ];
|
|
var l = _listeners[ event ];
|
|
if ( ! l ) return me;
|
|
if ( ! l ) return me;
|
|
|
|
|
|
if ( l.indexOf( handler ) > - 1 ) {
|
|
if ( l.indexOf( handler ) > - 1 ) {
|
|
-
|
|
|
|
|
|
+
|
|
l.splice( handler, 1 );
|
|
l.splice( handler, 1 );
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
return me;
|
|
return me;
|
|
@@ -47,52 +47,52 @@ THREE.DragControls = function( _camera, _objects, _domElement ) {
|
|
};
|
|
};
|
|
|
|
|
|
var notify = function( event, data, member ) {
|
|
var notify = function( event, data, member ) {
|
|
-
|
|
|
|
|
|
+
|
|
var l = _listeners[ event ];
|
|
var l = _listeners[ event ];
|
|
if ( ! l ) return;
|
|
if ( ! l ) return;
|
|
|
|
|
|
if ( ! member ) {
|
|
if ( ! member ) {
|
|
-
|
|
|
|
|
|
+
|
|
for ( var i = 0; i < l.length; i ++ ) {
|
|
for ( var i = 0; i < l.length; i ++ ) {
|
|
-
|
|
|
|
|
|
+
|
|
l[ i ]( data );
|
|
l[ i ]( data );
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
this.setObjects = function( objects ) {
|
|
this.setObjects = function( objects ) {
|
|
-
|
|
|
|
|
|
+
|
|
if ( objects instanceof THREE.Scene ) {
|
|
if ( objects instanceof THREE.Scene ) {
|
|
-
|
|
|
|
|
|
+
|
|
_objects = objects.children;
|
|
_objects = objects.children;
|
|
-
|
|
|
|
|
|
+
|
|
} else {
|
|
} else {
|
|
-
|
|
|
|
|
|
+
|
|
_objects = objects;
|
|
_objects = objects;
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
-
|
|
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
this.setObjects( _objects );
|
|
this.setObjects( _objects );
|
|
|
|
|
|
this.activate = function() {
|
|
this.activate = function() {
|
|
-
|
|
|
|
|
|
+
|
|
_domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );
|
|
_domElement.addEventListener( 'mousemove', onDocumentMouseMove, false );
|
|
_domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );
|
|
_domElement.addEventListener( 'mousedown', onDocumentMouseDown, false );
|
|
_domElement.addEventListener( 'mouseup', onDocumentMouseUp, false );
|
|
_domElement.addEventListener( 'mouseup', onDocumentMouseUp, false );
|
|
-
|
|
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
this.deactivate = function() {
|
|
this.deactivate = function() {
|
|
-
|
|
|
|
|
|
+
|
|
_domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );
|
|
_domElement.removeEventListener( 'mousemove', onDocumentMouseMove, false );
|
|
_domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );
|
|
_domElement.removeEventListener( 'mousedown', onDocumentMouseDown, false );
|
|
_domElement.removeEventListener( 'mouseup', onDocumentMouseUp, false );
|
|
_domElement.removeEventListener( 'mouseup', onDocumentMouseUp, false );
|
|
-
|
|
|
|
|
|
+
|
|
};
|
|
};
|
|
|
|
|
|
this.dispose = function() {
|
|
this.dispose = function() {
|
|
@@ -115,7 +115,7 @@ THREE.DragControls = function( _camera, _objects, _domElement ) {
|
|
|
|
|
|
|
|
|
|
if ( _selected && me.enabled ) {
|
|
if ( _selected && me.enabled ) {
|
|
-
|
|
|
|
|
|
+
|
|
var normal = _selected.normal;
|
|
var normal = _selected.normal;
|
|
|
|
|
|
// I found this article useful about plane-line intersections
|
|
// I found this article useful about plane-line intersections
|
|
@@ -127,7 +127,7 @@ THREE.DragControls = function( _camera, _objects, _domElement ) {
|
|
// bail
|
|
// bail
|
|
console.log( 'no or infinite solutions' );
|
|
console.log( 'no or infinite solutions' );
|
|
return;
|
|
return;
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
var num = normal.dot( p3subp1.copy( _selected.point ).sub( ray.origin ) );
|
|
var num = normal.dot( p3subp1.copy( _selected.point ).sub( ray.origin ) );
|
|
@@ -139,24 +139,24 @@ THREE.DragControls = function( _camera, _objects, _domElement ) {
|
|
var xLock, yLock, zLock = false;
|
|
var xLock, yLock, zLock = false;
|
|
|
|
|
|
var moveX, moveY, moveZ;
|
|
var moveX, moveY, moveZ;
|
|
-
|
|
|
|
|
|
+
|
|
|
|
|
|
if ( xLock ) {
|
|
if ( xLock ) {
|
|
-
|
|
|
|
|
|
+
|
|
moveX = true;
|
|
moveX = true;
|
|
moveY = false;
|
|
moveY = false;
|
|
moveZ = false;
|
|
moveZ = false;
|
|
-
|
|
|
|
|
|
+
|
|
} else if ( yLock ) {
|
|
} else if ( yLock ) {
|
|
-
|
|
|
|
|
|
+
|
|
moveX = false;
|
|
moveX = false;
|
|
moveY = true;
|
|
moveY = true;
|
|
moveZ = false;
|
|
moveZ = false;
|
|
-
|
|
|
|
|
|
+
|
|
} else {
|
|
} else {
|
|
-
|
|
|
|
|
|
+
|
|
moveX = moveY = moveZ = true;
|
|
moveX = moveY = moveZ = true;
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
// Reverse Matrix?
|
|
// Reverse Matrix?
|
|
@@ -180,7 +180,7 @@ THREE.DragControls = function( _camera, _objects, _domElement ) {
|
|
notify( 'hoveron', _hovered );
|
|
notify( 'hoveron', _hovered );
|
|
|
|
|
|
} else {
|
|
} else {
|
|
-
|
|
|
|
|
|
+
|
|
notify( 'hoveroff', _hovered );
|
|
notify( 'hoveroff', _hovered );
|
|
_hovered = null;
|
|
_hovered = null;
|
|
_domElement.style.cursor = 'auto';
|
|
_domElement.style.cursor = 'auto';
|
|
@@ -202,7 +202,7 @@ THREE.DragControls = function( _camera, _objects, _domElement ) {
|
|
|
|
|
|
var normal = ray.direction; // normal ray to the camera position
|
|
var normal = ray.direction; // normal ray to the camera position
|
|
if ( intersects.length > 0 ) {
|
|
if ( intersects.length > 0 ) {
|
|
-
|
|
|
|
|
|
+
|
|
_selected = intersects[ 0 ];
|
|
_selected = intersects[ 0 ];
|
|
_selected.ray = ray;
|
|
_selected.ray = ray;
|
|
_selected.normal = normal ;
|
|
_selected.normal = normal ;
|
|
@@ -225,7 +225,7 @@ THREE.DragControls = function( _camera, _objects, _domElement ) {
|
|
|
|
|
|
notify( 'dragend', _selected );
|
|
notify( 'dragend', _selected );
|
|
_selected = null;
|
|
_selected = null;
|
|
-
|
|
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
_domElement.style.cursor = 'auto';
|
|
_domElement.style.cursor = 'auto';
|