Browse Source

Editor: added handling of removal of lights from the scene.

alteredq 12 years ago
parent
commit
8ec67c89c4
1 changed files with 59 additions and 3 deletions
  1. 59 3
      editor/js/ui/Viewport.js

+ 59 - 3
editor/js/ui/Viewport.js

@@ -394,16 +394,28 @@ var Viewport = function ( signals ) {
 
 
 		}
 		}
 
 
-		// remove from picking list
+		// remove proxies from picking list
 
 
 		var toRemove = {};
 		var toRemove = {};
 
 
-		selected.traverse( function ( child ) {
+		var proxyObject = selected.properties.pickingProxy ? selected.properties.pickingProxy : selected;
+
+		proxyObject.traverse( function ( child ) {
 
 
 			toRemove[ child.id ] = true;
 			toRemove[ child.id ] = true;
 
 
 		} );
 		} );
 
 
+		// remove eventual pure Object3D target proxies from picking list
+
+		if ( selected.target && !selected.target.geometry ) {
+
+			toRemove[ selected.target.properties.pickingProxy.id ] = true;
+
+		}
+
+		//
+
 		var newObjects = [];
 		var newObjects = [];
 
 
 		for ( var i = 0; i < objects.length; i ++ ) {
 		for ( var i = 0; i < objects.length; i ++ ) {
@@ -420,17 +432,61 @@ var Viewport = function ( signals ) {
 
 
 		objects = newObjects;
 		objects = newObjects;
 
 
-		//
+		// clean selection highlight
 
 
 		selectionBox.visible = false;
 		selectionBox.visible = false;
 		selectionAxis.visible = false;
 		selectionAxis.visible = false;
 
 
+		// remove selected object from the scene
+
 		scene.traverse( function( node ) {
 		scene.traverse( function( node ) {
 
 
 			node.remove( selected );
 			node.remove( selected );
 
 
 		} );
 		} );
 
 
+		// remove eventual pure Object3D targets from the scene
+
+		if ( selected.target && !selected.target.geometry ) {
+
+			scene.traverse( function( node ) {
+
+				node.remove( selected.target );
+
+			} );
+
+		}
+
+		// remove eventual helpers for the object from helpers scene
+
+		var helpersToRemove = [];
+
+		if ( selected.properties.helper ) {
+
+			helpersToRemove.push( selected.properties.helper );
+
+			if ( selected.properties.helper.targetLine ) helpersToRemove.push( selected.properties.helper.targetLine );
+			if ( selected.target && !selected.target.geometry ) helpersToRemove.push( selected.properties.helper.targetSphere );
+
+
+		}
+
+		sceneHelpers.traverse( function( node ) {
+
+			for ( var i = 0; i < helpersToRemove.length; i ++ ) {
+
+				node.remove( helpersToRemove[ i ] );
+
+			}
+
+		} );
+
+		if ( selected instanceof THREE.Light && !selected instanceof THREE.AmbientLight )  {
+
+			updateMaterials( scene );
+
+		}
+
 		render();
 		render();
 
 
 		signals.sceneChanged.dispatch( scene );
 		signals.sceneChanged.dispatch( scene );