Browse Source

Editor: a bit more intuitive behavior for uniform scaling.

Still not fully there.
alteredq 13 years ago
parent
commit
aa7fe4b919
1 changed files with 25 additions and 5 deletions
  1. 25 5
      editor/js/ui/Sidebar.Properties.Object3D.js

+ 25 - 5
editor/js/ui/Sidebar.Properties.Object3D.js

@@ -68,7 +68,7 @@ Sidebar.Properties.Object3D = function ( signals ) {
 	// uniform scale lock
 
 	var objectScaleLockRow = new UI.Panel();
-	var objectScaleLock = new UI.Checkbox( 'absolute' ).setLeft( '100px' ).onChange( update );
+	var objectScaleLock = new UI.Checkbox( 'absolute' ).setLeft( '100px' ).onChange( updateScaleLock );
 
 	objectScaleLockRow.add( new UI.Text().setValue( 'Uniform scale' ).setColor( '#666' ) );
 	objectScaleLockRow.add( objectScaleLock );
@@ -122,6 +122,26 @@ Sidebar.Properties.Object3D = function ( signals ) {
 
 	var uniformScale = 1;
 
+	var scaleRatioX = 1;
+	var scaleRatioY = 1;
+	var scaleRatioZ = 1;
+
+	var scaleLock = false;
+
+	function updateScaleLock() {
+
+		scaleLock = objectScaleLock.getValue();
+
+		if ( scaleLock ) {
+
+			scaleRatioX = objectScaleX.getValue() / uniformScale;
+			scaleRatioY = objectScaleY.getValue() / uniformScale;
+			scaleRatioZ = objectScaleZ.getValue() / uniformScale;
+
+		}
+
+	}
+
 	function updateScaleX() {
 
 		uniformScale = objectScaleX.getValue();
@@ -157,11 +177,11 @@ Sidebar.Properties.Object3D = function ( signals ) {
 			selected.rotation.y = objectRotationY.getValue();
 			selected.rotation.z = objectRotationZ.getValue();
 
-			if ( objectScaleLock.getValue() ) {
+			if ( scaleLock ) {
 
-				objectScaleX.setValue( uniformScale );
-				objectScaleY.setValue( uniformScale );
-				objectScaleZ.setValue( uniformScale );
+				objectScaleX.setValue( uniformScale * scaleRatioX );
+				objectScaleY.setValue( uniformScale * scaleRatioY );
+				objectScaleZ.setValue( uniformScale * scaleRatioZ );
 
 			}