mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 23:17:02 +02:00
ctrl 22.5 snapping
This commit is contained in:
parent
9ee7153641
commit
2f0d92c3cd
1 changed files with 51 additions and 11 deletions
|
@ -254,6 +254,10 @@ SelectionDisplay = (function() {
|
||||||
var ROTATION_DISPLAY_SIZE_Y_MULTIPLIER = 0.18;
|
var ROTATION_DISPLAY_SIZE_Y_MULTIPLIER = 0.18;
|
||||||
var ROTATION_DISPLAY_LINE_HEIGHT_MULTIPLIER = 0.14;
|
var ROTATION_DISPLAY_LINE_HEIGHT_MULTIPLIER = 0.14;
|
||||||
|
|
||||||
|
var ROTATION_CTRL_SNAP_ANGLE = 22.5;
|
||||||
|
var ROTATION_DEFAULT_SNAP_ANGLE = 1;
|
||||||
|
var ROTATION_DEFAULT_TICK_MARKS_ANGLE = 5;
|
||||||
|
|
||||||
var TRANSLATE_DIRECTION = {
|
var TRANSLATE_DIRECTION = {
|
||||||
X : 0,
|
X : 0,
|
||||||
Y : 1,
|
Y : 1,
|
||||||
|
@ -300,6 +304,8 @@ SelectionDisplay = (function() {
|
||||||
var worldRotationY;
|
var worldRotationY;
|
||||||
var worldRotationZ;
|
var worldRotationZ;
|
||||||
|
|
||||||
|
var ctrlPressed = false;
|
||||||
|
|
||||||
var activeTool = null;
|
var activeTool = null;
|
||||||
var grabberTools = {};
|
var grabberTools = {};
|
||||||
|
|
||||||
|
@ -335,7 +341,7 @@ SelectionDisplay = (function() {
|
||||||
innerRadius: 0.9,
|
innerRadius: 0.9,
|
||||||
startAt: 0,
|
startAt: 0,
|
||||||
endAt: 360,
|
endAt: 360,
|
||||||
majorTickMarksAngle: 5,
|
majorTickMarksAngle: ROTATION_DEFAULT_TICK_MARKS_ANGLE,
|
||||||
majorTickMarksLength: 0.1,
|
majorTickMarksLength: 0.1,
|
||||||
visible: false,
|
visible: false,
|
||||||
ignoreRayIntersection: false,
|
ignoreRayIntersection: false,
|
||||||
|
@ -584,6 +590,25 @@ SelectionDisplay = (function() {
|
||||||
that.triggerMapping.from(Controller.Standard.RT).peek().to(makeTriggerHandler(Controller.Standard.RightHand));
|
that.triggerMapping.from(Controller.Standard.RT).peek().to(makeTriggerHandler(Controller.Standard.RightHand));
|
||||||
that.triggerMapping.from(Controller.Standard.LT).peek().to(makeTriggerHandler(Controller.Standard.LeftHand));
|
that.triggerMapping.from(Controller.Standard.LT).peek().to(makeTriggerHandler(Controller.Standard.LeftHand));
|
||||||
|
|
||||||
|
// Control key remains active only while key is held down
|
||||||
|
function keyReleaseEvent(key) {
|
||||||
|
if (key.key === 16777249) {
|
||||||
|
ctrlPressed = false;
|
||||||
|
that.updateActiveRotateRing();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Triggers notification on specific key driven events
|
||||||
|
function keyPressEvent(key) {
|
||||||
|
if (key.key === 16777249) {
|
||||||
|
ctrlPressed = true;
|
||||||
|
that.updateActiveRotateRing();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Controller.keyPressEvent.connect(keyPressEvent);
|
||||||
|
Controller.keyReleaseEvent.connect(keyReleaseEvent);
|
||||||
|
|
||||||
function controllerComputePickRay() {
|
function controllerComputePickRay() {
|
||||||
var controllerPose = getControllerWorldLocation(activeHand, true);
|
var controllerPose = getControllerWorldLocation(activeHand, true);
|
||||||
if (controllerPose.valid && that.triggered) {
|
if (controllerPose.valid && that.triggered) {
|
||||||
|
@ -1227,7 +1252,9 @@ SelectionDisplay = (function() {
|
||||||
var centerToIntersect = Vec3.subtract(result, rotCenter);
|
var centerToIntersect = Vec3.subtract(result, rotCenter);
|
||||||
// Note: orientedAngle which wants normalized centerToZero and centerToIntersect
|
// Note: orientedAngle which wants normalized centerToZero and centerToIntersect
|
||||||
// handles that internally, so it's to pass unnormalized vectors here.
|
// handles that internally, so it's to pass unnormalized vectors here.
|
||||||
var angleFromZero = Math.floor((Vec3.orientedAngle(centerToZero, centerToIntersect, rotationNormal)));
|
var angleFromZero = Vec3.orientedAngle(centerToZero, centerToIntersect, rotationNormal);
|
||||||
|
var snapAngle = ctrlPressed ? ROTATION_CTRL_SNAP_ANGLE : ROTATION_DEFAULT_SNAP_ANGLE;
|
||||||
|
angleFromZero = Math.floor(angleFromZero / snapAngle) * snapAngle;
|
||||||
var rotChange = Quat.angleAxis(angleFromZero, rotationNormal);
|
var rotChange = Quat.angleAxis(angleFromZero, rotationNormal);
|
||||||
updateSelectionsRotation(rotChange);
|
updateSelectionsRotation(rotChange);
|
||||||
updateRotationDegreesOverlay(-angleFromZero, direction, rotCenter);
|
updateRotationDegreesOverlay(-angleFromZero, direction, rotCenter);
|
||||||
|
@ -1310,12 +1337,6 @@ SelectionDisplay = (function() {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
Overlays.editOverlay(highlightBox, {
|
|
||||||
visible: false
|
|
||||||
});
|
|
||||||
*/
|
|
||||||
|
|
||||||
that.updateGrabbers();
|
that.updateGrabbers();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1544,24 +1565,28 @@ SelectionDisplay = (function() {
|
||||||
Overlays.editOverlay(grabberRotatePitchRing, {
|
Overlays.editOverlay(grabberRotatePitchRing, {
|
||||||
position: SelectionManager.worldPosition,
|
position: SelectionManager.worldPosition,
|
||||||
rotation: worldRotationY,
|
rotation: worldRotationY,
|
||||||
dimensions: rotateDimensions
|
dimensions: rotateDimensions,
|
||||||
|
majorTickMarksAngle: ROTATION_DEFAULT_TICK_MARKS_ANGLE
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (!isActiveTool(grabberRotateYawRing)) {
|
if (!isActiveTool(grabberRotateYawRing)) {
|
||||||
Overlays.editOverlay(grabberRotateYawRing, {
|
Overlays.editOverlay(grabberRotateYawRing, {
|
||||||
position: SelectionManager.worldPosition,
|
position: SelectionManager.worldPosition,
|
||||||
rotation: worldRotationZ,
|
rotation: worldRotationZ,
|
||||||
dimensions: rotateDimensions
|
dimensions: rotateDimensions,
|
||||||
|
majorTickMarksAngle: ROTATION_DEFAULT_TICK_MARKS_ANGLE
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
if (!isActiveTool(grabberRotateRollRing)) {
|
if (!isActiveTool(grabberRotateRollRing)) {
|
||||||
Overlays.editOverlay(grabberRotateRollRing, {
|
Overlays.editOverlay(grabberRotateRollRing, {
|
||||||
position: SelectionManager.worldPosition,
|
position: SelectionManager.worldPosition,
|
||||||
rotation: worldRotationX,
|
rotation: worldRotationX,
|
||||||
dimensions: rotateDimensions
|
dimensions: rotateDimensions,
|
||||||
|
majorTickMarksAngle: ROTATION_DEFAULT_TICK_MARKS_ANGLE
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
Overlays.editOverlay(grabberRotateCurrentRing, { dimensions: rotateDimensions });
|
Overlays.editOverlay(grabberRotateCurrentRing, { dimensions: rotateDimensions });
|
||||||
|
that.updateActiveRotateRing();
|
||||||
|
|
||||||
var inModeRotate = isActiveTool(grabberRotatePitchRing) || isActiveTool(grabberRotateYawRing) || isActiveTool(grabberRotateRollRing);
|
var inModeRotate = isActiveTool(grabberRotatePitchRing) || isActiveTool(grabberRotateYawRing) || isActiveTool(grabberRotateRollRing);
|
||||||
var inModeTranslate = isActiveTool(grabberTranslateXCone) || isActiveTool(grabberTranslateXCylinder) ||
|
var inModeTranslate = isActiveTool(grabberTranslateXCone) || isActiveTool(grabberTranslateXCylinder) ||
|
||||||
|
@ -1604,6 +1629,21 @@ SelectionDisplay = (function() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
that.updateActiveRotateRing = function() {
|
||||||
|
var activeRotateRing = null;
|
||||||
|
if (isActiveTool(grabberRotatePitchRing)) {
|
||||||
|
activeRotateRing = grabberRotatePitchRing;
|
||||||
|
} else if (isActiveTool(grabberRotateYawRing)) {
|
||||||
|
activeRotateRing = grabberRotateYawRing;
|
||||||
|
} else if (isActiveTool(grabberRotateRollRing)) {
|
||||||
|
activeRotateRing = grabberRotateRollRing;
|
||||||
|
}
|
||||||
|
if (activeRotateRing != null) {
|
||||||
|
var tickMarksAngle = ctrlPressed ? ROTATION_CTRL_SNAP_ANGLE : ROTATION_DEFAULT_TICK_MARKS_ANGLE;
|
||||||
|
Overlays.editOverlay(activeRotateRing, { majorTickMarksAngle: tickMarksAngle });
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
// FUNCTION: SET OVERLAYS VISIBLE
|
// FUNCTION: SET OVERLAYS VISIBLE
|
||||||
that.setOverlaysVisible = function(isVisible) {
|
that.setOverlaysVisible = function(isVisible) {
|
||||||
for (var i = 0; i < allOverlays.length; i++) {
|
for (var i = 0; i < allOverlays.length; i++) {
|
||||||
|
|
Loading…
Reference in a new issue