fix scale speed, fix stretch panels, fix scale cube highlight

This commit is contained in:
David Back 2018-01-29 16:53:02 -08:00
parent d03838026f
commit 9ee7153641

View file

@ -246,6 +246,7 @@ SelectionDisplay = (function() {
var SCALE_MINIMUM_DIMENSION = 0.02; var SCALE_MINIMUM_DIMENSION = 0.02;
var STRETCH_MINIMUM_DIMENSION = 0.001; var STRETCH_MINIMUM_DIMENSION = 0.001;
var STRETCH_DIRECTION_ALL_FACTOR = 15;
// These are multipliers for sizing the rotation degrees display while rotating an entity // These are multipliers for sizing the rotation degrees display while rotating an entity
var ROTATION_DISPLAY_DISTANCE_MULTIPLIER = 1.0; var ROTATION_DISPLAY_DISTANCE_MULTIPLIER = 1.0;
@ -266,12 +267,6 @@ SelectionDisplay = (function() {
ALL : 3 ALL : 3
} }
var ROTATE_DIRECTION = {
PITCH : 0,
YAW : 1,
ROLL : 2
}
var SCALE_DIRECTION = { var SCALE_DIRECTION = {
LBN : 0, LBN : 0,
RBN : 1, RBN : 1,
@ -283,6 +278,12 @@ SelectionDisplay = (function() {
RTF : 7 RTF : 7
} }
var ROTATE_DIRECTION = {
PITCH : 0,
YAW : 1,
ROLL : 2
}
var spaceMode = SPACE_LOCAL; var spaceMode = SPACE_LOCAL;
var overlayNames = []; var overlayNames = [];
var lastCameraPosition = Camera.getPosition(); var lastCameraPosition = Camera.getPosition();
@ -706,7 +707,7 @@ SelectionDisplay = (function() {
}; };
}; };
function makeStretchTool(stretchMode, directionEnum, directionVec, pivot, offset) { function makeStretchTool(stretchMode, directionEnum, directionVec, pivot, offset, stretchPanel, scaleGrabber) {
var directionFor3DStretch = directionVec; var directionFor3DStretch = directionVec;
var distanceFor3DStretch = 0; var distanceFor3DStretch = 0;
var DISTANCE_INFLUENCE_THRESHOLD = 1.2; var DISTANCE_INFLUENCE_THRESHOLD = 1.2;
@ -892,16 +893,29 @@ SelectionDisplay = (function() {
that.setGrabberTranslateVisible(false); that.setGrabberTranslateVisible(false);
that.setGrabberRotateVisible(false); that.setGrabberRotateVisible(false);
that.setGrabberScaleVisible(directionEnum === STRETCH_DIRECTION.ALL); that.setGrabberScaleVisible(true);
that.setGrabberStretchXVisible(directionEnum === STRETCH_DIRECTION.X); that.setGrabberStretchXVisible(directionEnum === STRETCH_DIRECTION.X);
that.setGrabberStretchYVisible(directionEnum === STRETCH_DIRECTION.Y); that.setGrabberStretchYVisible(directionEnum === STRETCH_DIRECTION.Y);
that.setGrabberStretchZVisible(directionEnum === STRETCH_DIRECTION.Z); that.setGrabberStretchZVisible(directionEnum === STRETCH_DIRECTION.Z);
that.setGrabberClonerVisible(false); that.setGrabberClonerVisible(false);
if (stretchPanel != null) {
Overlays.editOverlay(stretchPanel, { visible: true });
}
if (scaleGrabber != null) {
Overlays.editOverlay(scaleGrabber, { color: GRABBER_SCALE_CUBE_SELECTED_COLOR });
}
SelectionManager.saveProperties(); SelectionManager.saveProperties();
}; };
var onEnd = function(event, reason) { var onEnd = function(event, reason) {
if (stretchPanel != null) {
Overlays.editOverlay(stretchPanel, { visible: false });
}
if (scaleGrabber != null) {
Overlays.editOverlay(scaleGrabber, { color: GRABBER_SCALE_CUBE_IDLE_COLOR });
}
pushCommandForSelections(); pushCommandForSelections();
}; };
@ -959,6 +973,11 @@ SelectionDisplay = (function() {
vector = grid.snapToSpacing(vector); vector = grid.snapToSpacing(vector);
var changeInDimensions = Vec3.multiply(-1, vec3Mult(localSigns, vector)); var changeInDimensions = Vec3.multiply(-1, vec3Mult(localSigns, vector));
if (directionEnum === STRETCH_DIRECTION.ALL) {
changeInDimensions = Vec3.multiply(changeInDimensions, STRETCH_DIRECTION_ALL_FACTOR);
}
var newDimensions; var newDimensions;
if (proportional) { if (proportional) {
var absX = Math.abs(changeInDimensions.x); var absX = Math.abs(changeInDimensions.x);
@ -1024,60 +1043,53 @@ SelectionDisplay = (function() {
} }
function addGrabberStretchTool(overlay, mode, directionEnum) { function addGrabberStretchTool(overlay, mode, directionEnum) {
var directionVec, pivot, offset; var directionVec, pivot, offset, stretchPanel;
if (directionEnum === STRETCH_DIRECTION.X) { if (directionEnum === STRETCH_DIRECTION.X) {
stretchPanel = grabberStretchXPanel;
directionVec = { x:-1, y:0, z:0 }; directionVec = { x:-1, y:0, z:0 };
pivot = { x:-1, y:0, z:0 };
offset = { x:1, y:0, z:0 };
} else if (directionEnum === STRETCH_DIRECTION.Y) { } else if (directionEnum === STRETCH_DIRECTION.Y) {
stretchPanel = grabberStretchYPanel;
directionVec = { x:0, y:-1, z:0 }; directionVec = { x:0, y:-1, z:0 };
pivot = { x:0, y:-1, z:0 };
offset = { x:0, y:1, z:0 };
} else if (directionEnum === STRETCH_DIRECTION.Z) { } else if (directionEnum === STRETCH_DIRECTION.Z) {
stretchPanel = grabberStretchZPanel
directionVec = { x:0, y:0, z:-1 }; directionVec = { x:0, y:0, z:-1 };
pivot = { x:0, y:0, z:-1 };
offset = { x:0, y:0, z:1 };
} }
var tool = makeStretchTool(mode, directionEnum, directionVec, pivot, offset); pivot = directionVec;
offset = Vec3.multiply(directionVec, -1);
var tool = makeStretchTool(mode, directionEnum, directionVec, pivot, offset, stretchPanel, null);
return addGrabberTool(overlay, tool); return addGrabberTool(overlay, tool);
} }
function addGrabberScaleTool(overlay, mode, directionEnum) { function addGrabberScaleTool(overlay, mode, directionEnum) {
var directionVec, pivot, offset; var directionVec, pivot, offset, selectedGrabber;
if (directionEnum === SCALE_DIRECTION.LBN) { if (directionEnum === SCALE_DIRECTION.LBN) {
directionVec = { x:1, y:1, z:1 }; directionVec = { x:1, y:1, z:1 };
pivot = { x:1, y:1, z:1 }; selectedGrabber = grabberScaleLBNCube;
offset = { x:-1, y:-1, z:-1 };
} else if (directionEnum === SCALE_DIRECTION.RBN) { } else if (directionEnum === SCALE_DIRECTION.RBN) {
directionVec = { x:1, y:1, z:-1 }; directionVec = { x:1, y:1, z:-1 };
pivot = { x:1, y:1, z:-1 }; selectedGrabber = grabberScaleRBNCube;
offset = { x:-1, y:-1, z:1 };
} else if (directionEnum === SCALE_DIRECTION.LBF) { } else if (directionEnum === SCALE_DIRECTION.LBF) {
directionVec = { x:-1, y:1, z:1 }; directionVec = { x:-1, y:1, z:1 };
pivot = { x:-1, y:1, z:1 }; selectedGrabber = grabberScaleLBFCube;
offset = { x:1, y:-1, z:-1 };
} else if (directionEnum === SCALE_DIRECTION.RBF) { } else if (directionEnum === SCALE_DIRECTION.RBF) {
directionVec = { x:-1, y:1, z:-1 }; directionVec = { x:-1, y:1, z:-1 };
pivot = { x:-1, y:1, z:-1 }; selectedGrabber = grabberScaleRBFCube;
offset = { x:1, y:-1, z:1 };
} else if (directionEnum === SCALE_DIRECTION.LTN) { } else if (directionEnum === SCALE_DIRECTION.LTN) {
directionVec = { x:1, y:-1, z:1 }; directionVec = { x:1, y:-1, z:1 };
pivot = { x:1, y:-1, z:1 }; selectedGrabber = grabberScaleLTNCube;
offset = { x:-1, y:1, z:-1 };
} else if (directionEnum === SCALE_DIRECTION.RTN) { } else if (directionEnum === SCALE_DIRECTION.RTN) {
directionVec = { x:1, y:-1, z:-1 }; directionVec = { x:1, y:-1, z:-1 };
pivot = { x:1, y:-1, z:-1 }; selectedGrabber = grabberScaleRTNCube;
offset = { x:-1, y:1, z:1 };
} else if (directionEnum === SCALE_DIRECTION.LTF) { } else if (directionEnum === SCALE_DIRECTION.LTF) {
directionVec = { x:-1, y:-1, z:1 }; directionVec = { x:-1, y:-1, z:1 };
pivot = { x:-1, y:-1, z:1 }; selectedGrabber = grabberScaleLTFCube;
offset = { x:1, y:1, z:-1 };
} else if (directionEnum === SCALE_DIRECTION.RTF) { } else if (directionEnum === SCALE_DIRECTION.RTF) {
directionVec = { x:-1, y:-1, z:-1 }; directionVec = { x:-1, y:-1, z:-1 };
pivot = { x:-1, y:-1, z:-1 }; selectedGrabber = grabberScaleRTFCube;
offset = { x:1, y:1, z:1 };
} }
var tool = makeStretchTool(mode, STRETCH_DIRECTION.ALL, directionVec, pivot, offset); pivot = directionVec;
offset = Vec3.multiply(directionVec, -1);
var tool = makeStretchTool(mode, STRETCH_DIRECTION.ALL, directionVec, pivot, offset, null, selectedGrabber);
return addGrabberTool(overlay, tool); return addGrabberTool(overlay, tool);
} }
@ -1346,6 +1358,7 @@ SelectionDisplay = (function() {
if (SelectionManager.hasSelection()) { if (SelectionManager.hasSelection()) {
var worldPosition = SelectionManager.worldPosition; var worldPosition = SelectionManager.worldPosition;
var worldRotation = SelectionManager.worldRotation; var worldRotation = SelectionManager.worldRotation;
var worldRotationInverse = Quat.inverse(worldRotation);
var worldDimensions = SelectionManager.worldDimensions; var worldDimensions = SelectionManager.worldDimensions;
var worldDimensionsX = worldDimensions.x; var worldDimensionsX = worldDimensions.x;
@ -1478,7 +1491,9 @@ SelectionDisplay = (function() {
position: stretchXPos, position: stretchXPos,
dimensions: stretchSphereDimensions dimensions: stretchSphereDimensions
}); });
var stretchPanelXDimensions = Vec3.subtract(grabberScaleLTFCubePos, grabberScaleRBFCubePos); var grabberScaleLTFCubePosRot = Vec3.multiplyQbyV(worldRotationInverse, grabberScaleLTFCubePos);
var grabberScaleRBFCubePosRot = Vec3.multiplyQbyV(worldRotationInverse, grabberScaleRBFCubePos);
var stretchPanelXDimensions = Vec3.subtract(grabberScaleLTFCubePosRot, grabberScaleRBFCubePosRot);
var tempY = Math.abs(stretchPanelXDimensions.y); var tempY = Math.abs(stretchPanelXDimensions.y);
stretchPanelXDimensions.x = 0.01; stretchPanelXDimensions.x = 0.01;
stretchPanelXDimensions.y = Math.abs(stretchPanelXDimensions.z); stretchPanelXDimensions.y = Math.abs(stretchPanelXDimensions.z);
@ -1493,7 +1508,9 @@ SelectionDisplay = (function() {
position: stretchYPos, position: stretchYPos,
dimensions: stretchSphereDimensions dimensions: stretchSphereDimensions
}); });
var stretchPanelYDimensions = Vec3.subtract(grabberScaleLTFCubePos, grabberScaleRTNCubePos); var grabberScaleLTFCubePosRot = Vec3.multiplyQbyV(worldRotationInverse, grabberScaleLTNCubePos);
var grabberScaleRTNCubePosRot = Vec3.multiplyQbyV(worldRotationInverse, grabberScaleRTFCubePos);
var stretchPanelYDimensions = Vec3.subtract(grabberScaleLTFCubePosRot, grabberScaleRTNCubePosRot);
var tempX = Math.abs(stretchPanelYDimensions.x); var tempX = Math.abs(stretchPanelYDimensions.x);
stretchPanelYDimensions.x = Math.abs(stretchPanelYDimensions.z); stretchPanelYDimensions.x = Math.abs(stretchPanelYDimensions.z);
stretchPanelYDimensions.y = 0.01; stretchPanelYDimensions.y = 0.01;
@ -1508,7 +1525,9 @@ SelectionDisplay = (function() {
position: stretchZPos, position: stretchZPos,
dimensions: stretchSphereDimensions dimensions: stretchSphereDimensions
}); });
var stretchPanelZDimensions = Vec3.subtract(grabberScaleRTFCubePos, grabberScaleRBNCubePos); var grabberScaleRTFCubePosRot = Vec3.multiplyQbyV(worldRotationInverse, grabberScaleRTFCubePos);
var grabberScaleRBNCubePosRot = Vec3.multiplyQbyV(worldRotationInverse, grabberScaleRBNCubePos);
var stretchPanelZDimensions = Vec3.subtract(grabberScaleRTFCubePosRot, grabberScaleRBNCubePosRot);
var tempX = Math.abs(stretchPanelZDimensions.x); var tempX = Math.abs(stretchPanelZDimensions.x);
stretchPanelZDimensions.x = Math.abs(stretchPanelZDimensions.y); stretchPanelZDimensions.x = Math.abs(stretchPanelZDimensions.y);
stretchPanelZDimensions.y = tempX; stretchPanelZDimensions.y = tempX;
@ -1576,7 +1595,8 @@ SelectionDisplay = (function() {
that.setGrabberStretchYVisible(!activeTool || isActiveTool(grabberStretchYSphere)); that.setGrabberStretchYVisible(!activeTool || isActiveTool(grabberStretchYSphere));
that.setGrabberStretchZVisible(!activeTool || isActiveTool(grabberStretchZSphere)); that.setGrabberStretchZVisible(!activeTool || isActiveTool(grabberStretchZSphere));
that.setGrabberScaleVisible(!activeTool || isActiveTool(grabberScaleLBNCube) || isActiveTool(grabberScaleRBNCube) || isActiveTool(grabberScaleLBFCube) || isActiveTool(grabberScaleRBFCube) that.setGrabberScaleVisible(!activeTool || isActiveTool(grabberScaleLBNCube) || isActiveTool(grabberScaleRBNCube) || isActiveTool(grabberScaleLBFCube) || isActiveTool(grabberScaleRBFCube)
|| isActiveTool(grabberScaleLTNCube) || isActiveTool(grabberScaleRTNCube) || isActiveTool(grabberScaleLTFCube) || isActiveTool(grabberScaleRTFCube)); || isActiveTool(grabberScaleLTNCube) || isActiveTool(grabberScaleRTNCube) || isActiveTool(grabberScaleLTFCube) || isActiveTool(grabberScaleRTFCube)
|| isActiveTool(grabberStretchXSphere) || isActiveTool(grabberStretchYSphere) || isActiveTool(grabberStretchZSphere));
that.setGrabberClonerVisible(!activeTool || isActiveTool(grabberCloner)); that.setGrabberClonerVisible(!activeTool || isActiveTool(grabberCloner));
if (wantDebug) { if (wantDebug) {