CR changes, fix colors, add minimum overlay dimensions for HMD

This commit is contained in:
David Back 2018-02-06 16:07:46 -08:00
parent 22c0ca86ed
commit 51b55aedcf
2 changed files with 132 additions and 126 deletions

View file

@ -147,7 +147,7 @@ static void debugMessageCallback(GLenum source, GLenum type, GLuint id, GLenum s
} }
// FIXME For high severity errors, force a sync to the log, since we might crash // FIXME For high severity errors, force a sync to the log, since we might crash
// before the log file was flushed otherwise. Performance hit here // before the log file was flushed otherwise. Performance hit here
qCDebug(glLogging) << "OpenGL: " << message; //qCDebug(glLogging) << "OpenGL: " << message;
} }
static void setupPixelFormatSimple(HDC hdc) { static void setupPixelFormatSimple(HDC hdc) {

View file

@ -222,7 +222,7 @@ SelectionManager = (function() {
return that; return that;
})(); })();
// Normalize degrees to be in the range (-180, 180] // Normalize degrees to be in the range (-180, 180)
function normalizeDegrees(degrees) { function normalizeDegrees(degrees) {
degrees = ((degrees + 180) % 360) - 180; degrees = ((degrees + 180) % 360) - 180;
if (degrees <= -180) { if (degrees <= -180) {
@ -236,9 +236,11 @@ function normalizeDegrees(degrees) {
SelectionDisplay = (function() { SelectionDisplay = (function() {
var that = {}; var that = {};
var COLOR_GREEN = { red:44, green:142, blue:14 }; var NEGATE_VECTOR = -1;
var COLOR_GREEN = { red:31, green:198, blue:166 };
var COLOR_BLUE = { red:0, green:147, blue:197 }; var COLOR_BLUE = { red:0, green:147, blue:197 };
var COLOR_RED = { red:183, green:10, blue:55 }; var COLOR_RED = { red:226, green:51, blue:77 };
var COLOR_HOVER = { red:227, green:227, blue:227 }; var COLOR_HOVER = { red:227, green:227, blue:227 };
var COLOR_ROTATE_CURRENT_RING = { red: 255, green: 99, blue: 9 }; var COLOR_ROTATE_CURRENT_RING = { red: 255, green: 99, blue: 9 };
var COLOR_SCALE_EDGE = { red:87, green:87, blue:87 }; var COLOR_SCALE_EDGE = { red:87, green:87, blue:87 };
@ -259,8 +261,8 @@ SelectionDisplay = (function() {
var ROTATE_RING_SELECTED_INNER_RADIUS = 0.9; var ROTATE_RING_SELECTED_INNER_RADIUS = 0.9;
// 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 ROTATE_DISPLAY_DISTANCE_MULTIPLIER = 1.75; var ROTATE_DISPLAY_DISTANCE_MULTIPLIER = 2;
var ROTATE_DISPLAY_SIZE_X_MULTIPLIER = 0.3; var ROTATE_DISPLAY_SIZE_X_MULTIPLIER = 0.2;
var ROTATE_DISPLAY_SIZE_Y_MULTIPLIER = 0.09; var ROTATE_DISPLAY_SIZE_Y_MULTIPLIER = 0.09;
var ROTATE_DISPLAY_LINE_HEIGHT_MULTIPLIER = 0.07; var ROTATE_DISPLAY_LINE_HEIGHT_MULTIPLIER = 0.07;
@ -268,12 +270,15 @@ SelectionDisplay = (function() {
var STRETCH_SPHERE_CAMERA_DISTANCE_MULTIPLE = 0.01; var STRETCH_SPHERE_CAMERA_DISTANCE_MULTIPLE = 0.01;
var STRETCH_MINIMUM_DIMENSION = 0.001; var STRETCH_MINIMUM_DIMENSION = 0.001;
var STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE = 2; var STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE = 2;
var STRETCH_PANEL_WIDTH = 0.01;
var SCALE_CUBE_OFFSET = 0.5; var SCALE_CUBE_OFFSET = 0.5;
var SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE = 0.015; var SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE = 0.015;
var SCALE_MINIMUM_DIMENSION = 0.02; var SCALE_MINIMUM_DIMENSION = 0.02;
var CLONER_OFFSET = { x:0.9, y:-0.9, z:0.9 }; var CLONER_OFFSET = { x:0.9, y:-0.9, z:0.9 };
var CTRL_KEY_CODE = 16777249;
var TRANSLATE_DIRECTION = { var TRANSLATE_DIRECTION = {
X : 0, X : 0,
@ -862,7 +867,7 @@ SelectionDisplay = (function() {
// Control key remains active only while key is held down // Control key remains active only while key is held down
that.keyReleaseEvent = function(key) { that.keyReleaseEvent = function(key) {
if (key.key === 16777249) { if (key.key === CTRL_KEY_CODE) {
ctrlPressed = false; ctrlPressed = false;
that.updateActiveRotateRing(); that.updateActiveRotateRing();
} }
@ -870,7 +875,7 @@ SelectionDisplay = (function() {
// Triggers notification on specific key driven events // Triggers notification on specific key driven events
that.keyPressEvent = function(key) { that.keyPressEvent = function(key) {
if (key.key === 16777249) { if (key.key === CTRL_KEY_CODE) {
ctrlPressed = true; ctrlPressed = true;
that.updateActiveRotateRing(); that.updateActiveRotateRing();
} }
@ -1030,61 +1035,15 @@ SelectionDisplay = (function() {
rotationZ = Quat.multiply(rotation, localRotationZ); rotationZ = Quat.multiply(rotation, localRotationZ);
worldRotationZ = rotationZ; worldRotationZ = rotationZ;
// UPDATE TRANSLATION ARROWS // in HMD we clamp the overlays to the bounding box for now so lasers can hit them
var arrowCylinderDimension = toCameraDistance * TRANSLATE_ARROW_CYLINDER_CAMERA_DISTANCE_MULTIPLE; var maxHandleDimension = 0;
var arrowCylinderDimensions = { if (HMD.active) {
x:arrowCylinderDimension, maxHandleDimension = Math.max(dimensions.x, dimensions.y, dimensions.z);
y:arrowCylinderDimension * TRANSLATE_ARROW_CYLINDER_Y_MULTIPLE, }
z:arrowCylinderDimension
};
var arrowConeDimension = toCameraDistance * TRANSLATE_ARROW_CONE_CAMERA_DISTANCE_MULTIPLE;
var arrowConeDimensions = { x:arrowConeDimension, y:arrowConeDimension, z:arrowConeDimension };
var arrowConeOffset = arrowCylinderDimensions.y * TRANSLATE_ARROW_CONE_OFFSET_CYLINDER_DIMENSION_MULTIPLE;
var cylinderXPosition = { x:TRANSLATE_ARROW_CYLINDER_OFFSET * toCameraDistance, y:0, z:0 };
cylinderXPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, cylinderXPosition));
Overlays.editOverlay(handleTranslateXCylinder, {
position: cylinderXPosition,
rotation: rotationX,
dimensions: arrowCylinderDimensions
});
var cylinderXDiff = Vec3.subtract(cylinderXPosition, position);
var coneXPosition = Vec3.sum(cylinderXPosition, Vec3.multiply(Vec3.normalize(cylinderXDiff), arrowConeOffset));
Overlays.editOverlay(handleTranslateXCone, {
position: coneXPosition,
rotation: rotationX,
dimensions: arrowConeDimensions
});
var cylinderYPosition = { x:0, y:TRANSLATE_ARROW_CYLINDER_OFFSET * toCameraDistance, z:0 };
cylinderYPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, cylinderYPosition));
Overlays.editOverlay(handleTranslateYCylinder, {
position: cylinderYPosition,
rotation: rotationY,
dimensions: arrowCylinderDimensions
});
var cylinderYDiff = Vec3.subtract(cylinderYPosition, position);
var coneYPosition = Vec3.sum(cylinderYPosition, Vec3.multiply(Vec3.normalize(cylinderYDiff), arrowConeOffset));
Overlays.editOverlay(handleTranslateYCone, {
position: coneYPosition,
rotation: rotationY,
dimensions: arrowConeDimensions
});
var cylinderZPosition = { x:0, y:0, z:TRANSLATE_ARROW_CYLINDER_OFFSET * toCameraDistance };
cylinderZPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, cylinderZPosition));
Overlays.editOverlay(handleTranslateZCylinder, {
position: cylinderZPosition,
rotation: rotationZ,
dimensions: arrowCylinderDimensions
});
var cylinderZDiff = Vec3.subtract(cylinderZPosition, position);
var coneZPosition = Vec3.sum(cylinderZPosition, Vec3.multiply(Vec3.normalize(cylinderZDiff), arrowConeOffset));
Overlays.editOverlay(handleTranslateZCone, {
position: coneZPosition,
rotation: rotationZ,
dimensions: arrowConeDimensions
});
// UPDATE ROTATION RINGS // UPDATE ROTATION RINGS
var rotateDimension = toCameraDistance * ROTATE_RING_CAMERA_DISTANCE_MULTIPLE; // rotateDimension is used as the base dimension for all overlays
var rotateDimension = Math.max(maxHandleDimension, toCameraDistance * ROTATE_RING_CAMERA_DISTANCE_MULTIPLE);
var rotateDimensions = { x:rotateDimension, y:rotateDimension, z:rotateDimension }; var rotateDimensions = { x:rotateDimension, y:rotateDimension, z:rotateDimension };
if (!isActiveTool(handleRotatePitchRing)) { if (!isActiveTool(handleRotatePitchRing)) {
Overlays.editOverlay(handleRotatePitchRing, { Overlays.editOverlay(handleRotatePitchRing, {
@ -1113,11 +1072,68 @@ SelectionDisplay = (function() {
Overlays.editOverlay(handleRotateCurrentRing, { dimensions: rotateDimensions }); Overlays.editOverlay(handleRotateCurrentRing, { dimensions: rotateDimensions });
that.updateActiveRotateRing(); that.updateActiveRotateRing();
// UPDATE TRANSLATION ARROWS
var arrowCylinderDimension = rotateDimension * TRANSLATE_ARROW_CYLINDER_CAMERA_DISTANCE_MULTIPLE /
ROTATE_RING_CAMERA_DISTANCE_MULTIPLE;
var arrowCylinderDimensions = {
x:arrowCylinderDimension,
y:arrowCylinderDimension * TRANSLATE_ARROW_CYLINDER_Y_MULTIPLE,
z:arrowCylinderDimension
};
var arrowConeDimension = rotateDimension * TRANSLATE_ARROW_CONE_CAMERA_DISTANCE_MULTIPLE /
ROTATE_RING_CAMERA_DISTANCE_MULTIPLE;
var arrowConeDimensions = { x:arrowConeDimension, y:arrowConeDimension, z:arrowConeDimension };
var arrowCylinderOffset = rotateDimension * TRANSLATE_ARROW_CYLINDER_OFFSET / ROTATE_RING_CAMERA_DISTANCE_MULTIPLE;
var arrowConeOffset = arrowCylinderDimensions.y * TRANSLATE_ARROW_CONE_OFFSET_CYLINDER_DIMENSION_MULTIPLE;
var cylinderXPosition = { x:arrowCylinderOffset, y:0, z:0 };
cylinderXPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, cylinderXPosition));
Overlays.editOverlay(handleTranslateXCylinder, {
position: cylinderXPosition,
rotation: rotationX,
dimensions: arrowCylinderDimensions
});
var cylinderXOffset = Vec3.subtract(cylinderXPosition, position);
var coneXPosition = Vec3.sum(cylinderXPosition, Vec3.multiply(Vec3.normalize(cylinderXOffset), arrowConeOffset));
Overlays.editOverlay(handleTranslateXCone, {
position: coneXPosition,
rotation: rotationX,
dimensions: arrowConeDimensions
});
var cylinderYPosition = { x:0, y:arrowCylinderOffset, z:0 };
cylinderYPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, cylinderYPosition));
Overlays.editOverlay(handleTranslateYCylinder, {
position: cylinderYPosition,
rotation: rotationY,
dimensions: arrowCylinderDimensions
});
var cylinderYOffset = Vec3.subtract(cylinderYPosition, position);
var coneYPosition = Vec3.sum(cylinderYPosition, Vec3.multiply(Vec3.normalize(cylinderYOffset), arrowConeOffset));
Overlays.editOverlay(handleTranslateYCone, {
position: coneYPosition,
rotation: rotationY,
dimensions: arrowConeDimensions
});
var cylinderZPosition = { x:0, y:0, z:arrowCylinderOffset };
cylinderZPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, cylinderZPosition));
Overlays.editOverlay(handleTranslateZCylinder, {
position: cylinderZPosition,
rotation: rotationZ,
dimensions: arrowCylinderDimensions
});
var cylinderZOffset = Vec3.subtract(cylinderZPosition, position);
var coneZPosition = Vec3.sum(cylinderZPosition, Vec3.multiply(Vec3.normalize(cylinderZOffset), arrowConeOffset));
Overlays.editOverlay(handleTranslateZCone, {
position: coneZPosition,
rotation: rotationZ,
dimensions: arrowConeDimensions
});
// UPDATE SCALE CUBES // UPDATE SCALE CUBES
var scaleCubeOffsetX = SCALE_CUBE_OFFSET * dimensions.x; var scaleCubeOffsetX = SCALE_CUBE_OFFSET * dimensions.x;
var scaleCubeOffsetY = SCALE_CUBE_OFFSET * dimensions.y; var scaleCubeOffsetY = SCALE_CUBE_OFFSET * dimensions.y;
var scaleCubeOffsetZ = SCALE_CUBE_OFFSET * dimensions.z; var scaleCubeOffsetZ = SCALE_CUBE_OFFSET * dimensions.z;
var scaleCubeDimension = toCameraDistance * SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE; var scaleCubeDimension = rotateDimension * SCALE_CUBE_CAMERA_DISTANCE_MULTIPLE /
ROTATE_RING_CAMERA_DISTANCE_MULTIPLE;
var scaleCubeDimensions = { x:scaleCubeDimension, y:scaleCubeDimension, z:scaleCubeDimension }; var scaleCubeDimensions = { x:scaleCubeDimension, y:scaleCubeDimension, z:scaleCubeDimension };
var scaleCubeRotation = spaceMode === SPACE_LOCAL ? rotation : Quat.IDENTITY; var scaleCubeRotation = spaceMode === SPACE_LOCAL ? rotation : Quat.IDENTITY;
var scaleLBNCubePosition = { x:-scaleCubeOffsetX, y:-scaleCubeOffsetY, z:-scaleCubeOffsetZ }; var scaleLBNCubePosition = { x:-scaleCubeOffsetX, y:-scaleCubeOffsetY, z:-scaleCubeOffsetZ };
@ -1192,21 +1208,23 @@ SelectionDisplay = (function() {
Overlays.editOverlay(handleScaleFLEdge, { start: scaleLTFCubePosition, end: scaleLBFCubePosition }); Overlays.editOverlay(handleScaleFLEdge, { start: scaleLTFCubePosition, end: scaleLBFCubePosition });
// UPDATE STRETCH SPHERES // UPDATE STRETCH SPHERES
var stretchSphereDimension = toCameraDistance * STRETCH_SPHERE_CAMERA_DISTANCE_MULTIPLE; var stretchSphereDimension = rotateDimension * STRETCH_SPHERE_CAMERA_DISTANCE_MULTIPLE /
ROTATE_RING_CAMERA_DISTANCE_MULTIPLE;
var stretchSphereDimensions = { x:stretchSphereDimension, y:stretchSphereDimension, z:stretchSphereDimension }; var stretchSphereDimensions = { x:stretchSphereDimension, y:stretchSphereDimension, z:stretchSphereDimension };
var stretchXPosition = { x:STRETCH_SPHERE_OFFSET * toCameraDistance, y:0, z:0 }; var stretchSphereOffset = rotateDimension * STRETCH_SPHERE_OFFSET / ROTATE_RING_CAMERA_DISTANCE_MULTIPLE;
var stretchXPosition = { x:stretchSphereOffset, y:0, z:0 };
stretchXPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchXPosition)); stretchXPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchXPosition));
Overlays.editOverlay(handleStretchXSphere, { Overlays.editOverlay(handleStretchXSphere, {
position: stretchXPosition, position: stretchXPosition,
dimensions: stretchSphereDimensions dimensions: stretchSphereDimensions
}); });
var stretchYPosition = { x:0, y:STRETCH_SPHERE_OFFSET * toCameraDistance, z:0 }; var stretchYPosition = { x:0, y:stretchSphereOffset, z:0 };
stretchYPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchYPosition)); stretchYPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchYPosition));
Overlays.editOverlay(handleStretchYSphere, { Overlays.editOverlay(handleStretchYSphere, {
position: stretchYPosition, position: stretchYPosition,
dimensions: stretchSphereDimensions dimensions: stretchSphereDimensions
}); });
var stretchZPosition = { x:0, y:0, z:STRETCH_SPHERE_OFFSET * toCameraDistance }; var stretchZPosition = { x:0, y:0, z:stretchSphereOffset };
stretchZPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchZPosition)); stretchZPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, stretchZPosition));
Overlays.editOverlay(handleStretchZSphere, { Overlays.editOverlay(handleStretchZSphere, {
position: stretchZPosition, position: stretchZPosition,
@ -1218,7 +1236,7 @@ SelectionDisplay = (function() {
var scaleRBFCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRBFCubePosition); var scaleRBFCubePositionRotated = Vec3.multiplyQbyV(rotationInverse, scaleRBFCubePosition);
var stretchPanelXDimensions = Vec3.subtract(scaleLTFCubePositionRotated, scaleRBFCubePositionRotated); var stretchPanelXDimensions = Vec3.subtract(scaleLTFCubePositionRotated, scaleRBFCubePositionRotated);
var tempY = Math.abs(stretchPanelXDimensions.y); var tempY = Math.abs(stretchPanelXDimensions.y);
stretchPanelXDimensions.x = 0.01; stretchPanelXDimensions.x = STRETCH_PANEL_WIDTH;
stretchPanelXDimensions.y = Math.abs(stretchPanelXDimensions.z); stretchPanelXDimensions.y = Math.abs(stretchPanelXDimensions.z);
stretchPanelXDimensions.z = tempY; stretchPanelXDimensions.z = tempY;
var stretchPanelXPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, { x:dimensions.x / 2, y:0, z:0 })); var stretchPanelXPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, { x:dimensions.x / 2, y:0, z:0 }));
@ -1232,7 +1250,7 @@ SelectionDisplay = (function() {
var stretchPanelYDimensions = Vec3.subtract(scaleLTNCubePositionRotated, scaleRTFCubePositionRotated); var stretchPanelYDimensions = Vec3.subtract(scaleLTNCubePositionRotated, scaleRTFCubePositionRotated);
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 = STRETCH_PANEL_WIDTH;
stretchPanelYDimensions.z = tempX; stretchPanelYDimensions.z = tempX;
var stretchPanelYPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, { x:0, y:dimensions.y / 2, z:0 })); var stretchPanelYPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, { x:0, y:dimensions.y / 2, z:0 }));
Overlays.editOverlay(handleStretchYPanel, { Overlays.editOverlay(handleStretchYPanel, {
@ -1246,7 +1264,7 @@ SelectionDisplay = (function() {
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;
stretchPanelZDimensions.z = 0.01; stretchPanelZDimensions.z = STRETCH_PANEL_WIDTH;
var stretchPanelZPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, { x:0, y:0, z:dimensions.z / 2 })); var stretchPanelZPosition = Vec3.sum(position, Vec3.multiplyQbyV(rotation, { x:0, y:0, z:dimensions.z / 2 }));
Overlays.editOverlay(handleStretchZPanel, { Overlays.editOverlay(handleStretchZPanel, {
position: stretchPanelZPosition, position: stretchPanelZPosition,
@ -1302,7 +1320,8 @@ SelectionDisplay = (function() {
that.setHandleScaleEdgeVisible(!isActiveTool(handleRotatePitchRing) && !isActiveTool(handleRotateYawRing) && that.setHandleScaleEdgeVisible(!isActiveTool(handleRotatePitchRing) && !isActiveTool(handleRotateYawRing) &&
!isActiveTool(handleRotateRollRing)); !isActiveTool(handleRotateRollRing));
//keep cloner always hidden for now since you can hold Alt to clone while dragging to translate - we may bring cloner back for HMD only later //keep cloner always hidden for now since you can hold Alt to clone while
//translating an entity - we may bring cloner back for HMD only later
//that.setHandleClonerVisible(!activeTool || isActiveTool(handleCloner)); //that.setHandleClonerVisible(!activeTool || isActiveTool(handleCloner));
if (wantDebug) { if (wantDebug) {
@ -1584,7 +1603,6 @@ SelectionDisplay = (function() {
grid.snapToGrid(Vec3.sum(cornerPosition, vector), constrainMajorOnly), grid.snapToGrid(Vec3.sum(cornerPosition, vector), constrainMajorOnly),
cornerPosition); cornerPosition);
for (var i = 0; i < SelectionManager.selections.length; i++) { for (var i = 0; i < SelectionManager.selections.length; i++) {
var properties = SelectionManager.savedProperties[SelectionManager.selections[i]]; var properties = SelectionManager.savedProperties[SelectionManager.selections[i]];
if (!properties) { if (!properties) {
@ -1693,7 +1711,6 @@ SelectionDisplay = (function() {
print(" event.y:" + event.y); print(" event.y:" + event.y);
Vec3.print(" newIntersection:", newIntersection); Vec3.print(" newIntersection:", newIntersection);
Vec3.print(" vector:", vector); Vec3.print(" vector:", vector);
// Vec3.print(" newPosition:", newPosition);
} }
for (var i = 0; i < SelectionManager.selections.length; i++) { for (var i = 0; i < SelectionManager.selections.length; i++) {
@ -1947,7 +1964,6 @@ SelectionDisplay = (function() {
var localDeltaPivot = deltaPivot; var localDeltaPivot = deltaPivot;
var localSigns = signs; var localSigns = signs;
var pickRay = generalComputePickRay(event.x, event.y); var pickRay = generalComputePickRay(event.x, event.y);
// Are we using handControllers or Mouse - only relevant for 3D tools // Are we using handControllers or Mouse - only relevant for 3D tools
@ -1956,35 +1972,24 @@ SelectionDisplay = (function() {
if (HMD.isHMDAvailable() && HMD.isHandControllerAvailable() && if (HMD.isHMDAvailable() && HMD.isHandControllerAvailable() &&
controllerPose.valid && that.triggered && directionFor3DStretch) { controllerPose.valid && that.triggered && directionFor3DStretch) {
localDeltaPivot = deltaPivot3D; localDeltaPivot = deltaPivot3D;
newPick = pickRay.origin; newPick = pickRay.origin;
vector = Vec3.subtract(newPick, lastPick3D); vector = Vec3.subtract(newPick, lastPick3D);
vector = Vec3.multiplyQbyV(Quat.inverse(rotation), vector); vector = Vec3.multiplyQbyV(Quat.inverse(rotation), vector);
if (distanceFor3DStretch > DISTANCE_INFLUENCE_THRESHOLD) { if (distanceFor3DStretch > DISTANCE_INFLUENCE_THRESHOLD) {
// Range of Motion // Range of Motion
vector = Vec3.multiply(distanceFor3DStretch , vector); vector = Vec3.multiply(distanceFor3DStretch , vector);
} }
localSigns = directionFor3DStretch; localSigns = directionFor3DStretch;
} else { } else {
newPick = rayPlaneIntersection(pickRay, newPick = rayPlaneIntersection(pickRay, pickRayPosition, planeNormal);
pickRayPosition,
planeNormal);
vector = Vec3.subtract(newPick, lastPick); vector = Vec3.subtract(newPick, lastPick);
vector = Vec3.multiplyQbyV(Quat.inverse(rotation), vector); vector = Vec3.multiplyQbyV(Quat.inverse(rotation), vector);
vector = vec3Mult(mask, vector); vector = vec3Mult(mask, vector);
} }
vector = grid.snapToSpacing(vector); vector = grid.snapToSpacing(vector);
var changeInDimensions = Vec3.multiply(-1, vec3Mult(localSigns, vector)); var changeInDimensions = Vec3.multiply(NEGATE_VECTOR, vec3Mult(localSigns, vector));
if (directionEnum === STRETCH_DIRECTION.ALL) { if (directionEnum === STRETCH_DIRECTION.ALL) {
var toCameraDistance = getDistanceToCamera(position); var toCameraDistance = getDistanceToCamera(position);
var dimensionsMultiple = toCameraDistance * STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE; var dimensionsMultiple = toCameraDistance * STRETCH_DIRECTION_ALL_CAMERA_DISTANCE_MULTIPLE;
@ -1993,22 +1998,22 @@ SelectionDisplay = (function() {
var newDimensions; var newDimensions;
if (proportional) { if (proportional) {
var absX = Math.abs(changeInDimensions.x); var absoluteX = Math.abs(changeInDimensions.x);
var absY = Math.abs(changeInDimensions.y); var absoluteY = Math.abs(changeInDimensions.y);
var absZ = Math.abs(changeInDimensions.z); var absoluteZ = Math.abs(changeInDimensions.z);
var pctChange = 0; var percentChange = 0;
if (absX > absY && absX > absZ) { if (absoluteX > absoluteY && absoluteX > absoluteZ) {
pctChange = changeInDimensions.x / initialProperties.dimensions.x; percentChange = changeInDimensions.x / initialProperties.dimensions.x;
pctChange = changeInDimensions.x / initialDimensions.x; percentChange = changeInDimensions.x / initialDimensions.x;
} else if (absY > absZ) { } else if (absoluteY > absoluteZ) {
pctChange = changeInDimensions.y / initialProperties.dimensions.y; percentChange = changeInDimensions.y / initialProperties.dimensions.y;
pctChange = changeInDimensions.y / initialDimensions.y; percentChange = changeInDimensions.y / initialDimensions.y;
} else { } else {
pctChange = changeInDimensions.z / initialProperties.dimensions.z; percentChange = changeInDimensions.z / initialProperties.dimensions.z;
pctChange = changeInDimensions.z / initialDimensions.z; percentChange = changeInDimensions.z / initialDimensions.z;
} }
pctChange += 1.0; percentChange += 1.0;
newDimensions = Vec3.multiply(pctChange, initialDimensions); newDimensions = Vec3.multiply(percentChange, initialDimensions);
} else { } else {
newDimensions = Vec3.sum(initialDimensions, changeInDimensions); newDimensions = Vec3.sum(initialDimensions, changeInDimensions);
} }
@ -2033,13 +2038,9 @@ SelectionDisplay = (function() {
var wantDebug = false; var wantDebug = false;
if (wantDebug) { if (wantDebug) {
print(stretchMode); print(stretchMode);
// Vec3.print(" newIntersection:", newIntersection);
Vec3.print(" vector:", vector); Vec3.print(" vector:", vector);
// Vec3.print(" oldPOS:", oldPOS);
// Vec3.print(" newPOS:", newPOS);
Vec3.print(" changeInDimensions:", changeInDimensions); Vec3.print(" changeInDimensions:", changeInDimensions);
Vec3.print(" newDimensions:", newDimensions); Vec3.print(" newDimensions:", newDimensions);
Vec3.print(" changeInPosition:", changeInPosition); Vec3.print(" changeInPosition:", changeInPosition);
Vec3.print(" newPosition:", newPosition); Vec3.print(" newPosition:", newPosition);
} }
@ -2056,52 +2057,53 @@ SelectionDisplay = (function() {
} }
function addHandleStretchTool(overlay, mode, directionEnum) { function addHandleStretchTool(overlay, mode, directionEnum) {
var directionVec, offset, stretchPanel; var directionVector, offset, stretchPanel;
if (directionEnum === STRETCH_DIRECTION.X) { if (directionEnum === STRETCH_DIRECTION.X) {
stretchPanel = handleStretchXPanel; stretchPanel = handleStretchXPanel;
directionVec = { x:-1, y:0, z:0 }; directionVector = { x:-1, y:0, z:0 };
} else if (directionEnum === STRETCH_DIRECTION.Y) { } else if (directionEnum === STRETCH_DIRECTION.Y) {
stretchPanel = handleStretchYPanel; stretchPanel = handleStretchYPanel;
directionVec = { x:0, y:-1, z:0 }; directionVector = { x:0, y:-1, z:0 };
} else if (directionEnum === STRETCH_DIRECTION.Z) { } else if (directionEnum === STRETCH_DIRECTION.Z) {
stretchPanel = handleStretchZPanel stretchPanel = handleStretchZPanel
directionVec = { x:0, y:0, z:-1 }; directionVector = { x:0, y:0, z:-1 };
} }
offset = Vec3.multiply(directionVec, -1); offset = Vec3.multiply(directionVector, NEGATE_VECTOR);
var tool = makeStretchTool(mode, directionEnum, directionVec, directionVec, offset, stretchPanel, null); var tool = makeStretchTool(mode, directionEnum, directionVector, directionVector, offset, stretchPanel, null);
return addHandleTool(overlay, tool); return addHandleTool(overlay, tool);
} }
// TOOL DEFINITION: HANDLE SCALE TOOL // TOOL DEFINITION: HANDLE SCALE TOOL
function addHandleScaleTool(overlay, mode, directionEnum) { function addHandleScaleTool(overlay, mode, directionEnum) {
var directionVec, offset, selectedHandle; var directionVector, offset, selectedHandle;
if (directionEnum === SCALE_DIRECTION.LBN) { if (directionEnum === SCALE_DIRECTION.LBN) {
directionVec = { x:1, y:1, z:1 }; directionVector = { x:1, y:1, z:1 };
selectedHandle = handleScaleLBNCube; selectedHandle = handleScaleLBNCube;
} else if (directionEnum === SCALE_DIRECTION.RBN) { } else if (directionEnum === SCALE_DIRECTION.RBN) {
directionVec = { x:1, y:1, z:-1 }; directionVector = { x:1, y:1, z:-1 };
selectedHandle = handleScaleRBNCube; selectedHandle = handleScaleRBNCube;
} else if (directionEnum === SCALE_DIRECTION.LBF) { } else if (directionEnum === SCALE_DIRECTION.LBF) {
directionVec = { x:-1, y:1, z:1 }; directionVector = { x:-1, y:1, z:1 };
selectedHandle = handleScaleLBFCube; selectedHandle = handleScaleLBFCube;
} else if (directionEnum === SCALE_DIRECTION.RBF) { } else if (directionEnum === SCALE_DIRECTION.RBF) {
directionVec = { x:-1, y:1, z:-1 }; directionVector = { x:-1, y:1, z:-1 };
selectedHandle = handleScaleRBFCube; selectedHandle = handleScaleRBFCube;
} else if (directionEnum === SCALE_DIRECTION.LTN) { } else if (directionEnum === SCALE_DIRECTION.LTN) {
directionVec = { x:1, y:-1, z:1 }; directionVector = { x:1, y:-1, z:1 };
selectedHandle = handleScaleLTNCube; selectedHandle = handleScaleLTNCube;
} else if (directionEnum === SCALE_DIRECTION.RTN) { } else if (directionEnum === SCALE_DIRECTION.RTN) {
directionVec = { x:1, y:-1, z:-1 }; directionVector = { x:1, y:-1, z:-1 };
selectedHandle = handleScaleRTNCube; selectedHandle = handleScaleRTNCube;
} else if (directionEnum === SCALE_DIRECTION.LTF) { } else if (directionEnum === SCALE_DIRECTION.LTF) {
directionVec = { x:-1, y:-1, z:1 }; directionVector = { x:-1, y:-1, z:1 };
selectedHandle = handleScaleLTFCube; selectedHandle = handleScaleLTFCube;
} else if (directionEnum === SCALE_DIRECTION.RTF) { } else if (directionEnum === SCALE_DIRECTION.RTF) {
directionVec = { x:-1, y:-1, z:-1 }; directionVector = { x:-1, y:-1, z:-1 };
selectedHandle = handleScaleRTFCube; selectedHandle = handleScaleRTFCube;
} }
offset = Vec3.multiply(directionVec, -1); offset = Vec3.multiply(directionVector, NEGATE_VECTOR);
var tool = makeStretchTool(mode, STRETCH_DIRECTION.ALL, directionVec, directionVec, offset, null, selectedHandle); var tool = makeStretchTool(mode, STRETCH_DIRECTION.ALL, directionVector,
directionVector, offset, null, selectedHandle);
return addHandleTool(overlay, tool); return addHandleTool(overlay, tool);
} }
@ -2158,6 +2160,7 @@ SelectionDisplay = (function() {
var selectedHandle = null; var selectedHandle = null;
var worldRotation = null; var worldRotation = null;
var rotationCenter = null; var rotationCenter = null;
var initialRotation = null;
addHandleTool(overlay, { addHandleTool(overlay, {
mode: mode, mode: mode,
onBegin: function(event, pickRay, pickResult) { onBegin: function(event, pickRay, pickResult) {
@ -2197,8 +2200,8 @@ SelectionDisplay = (function() {
innerRadius: ROTATE_RING_SELECTED_INNER_RADIUS innerRadius: ROTATE_RING_SELECTED_INNER_RADIUS
}); });
var rotation = spaceMode === SPACE_LOCAL ? SelectionManager.localRotation : SelectionManager.worldRotation; initialRotation = spaceMode === SPACE_LOCAL ? SelectionManager.localRotation : SelectionManager.worldRotation;
rotationNormal = Vec3.multiplyQbyV(rotation, rotationNormal); rotationNormal = Vec3.multiplyQbyV(initialRotation, rotationNormal);
rotationCenter = SelectionManager.worldPosition; rotationCenter = SelectionManager.worldPosition;
@ -2247,7 +2250,8 @@ SelectionDisplay = (function() {
}, },
onMove: function(event) { onMove: function(event) {
if (!rotationZero) { if (!rotationZero) {
print("ERROR: entitySelectionTool.addHandleRotateTool.onMove - Invalid RotationZero Specified (missed rotation target plane?)"); print("ERROR: entitySelectionTool.addHandleRotateTool.onMove - " +
"Invalid RotationZero Specified (missed rotation target plane?)");
// EARLY EXIT // EARLY EXIT
return; return;
@ -2299,7 +2303,9 @@ SelectionDisplay = (function() {
if (spaceMode === SPACE_LOCAL) { if (spaceMode === SPACE_LOCAL) {
Overlays.editOverlay(handleRotateCurrentRing, { rotation: worldRotationZ }); Overlays.editOverlay(handleRotateCurrentRing, { rotation: worldRotationZ });
} else { } else {
Overlays.editOverlay(handleRotateCurrentRing, { rotation: Quat.fromPitchYawRollDegrees(-90, 0, 0) }); Overlays.editOverlay(handleRotateCurrentRing, {
rotation: Quat.fromPitchYawRollDegrees(-90, 0, 0)
});
} }
} }
} }