mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-10 05:00:20 +02:00
Merge pull request #10406 from amvmoody/21289
21289 - Edit: Add the ability to duplicate an object with hand controller
This commit is contained in:
commit
6e82343b29
1 changed files with 70 additions and 4 deletions
|
@ -341,6 +341,11 @@ SelectionDisplay = (function() {
|
||||||
green: 120,
|
green: 120,
|
||||||
blue: 120
|
blue: 120
|
||||||
};
|
};
|
||||||
|
var grabberColorCloner = {
|
||||||
|
red: 0,
|
||||||
|
green: 155,
|
||||||
|
blue: 0
|
||||||
|
};
|
||||||
var grabberLineWidth = 0.5;
|
var grabberLineWidth = 0.5;
|
||||||
var grabberSolid = true;
|
var grabberSolid = true;
|
||||||
var grabberMoveUpPosition = {
|
var grabberMoveUpPosition = {
|
||||||
|
@ -406,6 +411,23 @@ SelectionDisplay = (function() {
|
||||||
borderSize: 1.4,
|
borderSize: 1.4,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
var grabberPropertiesCloner = {
|
||||||
|
position: {
|
||||||
|
x: 0,
|
||||||
|
y: 0,
|
||||||
|
z: 0
|
||||||
|
},
|
||||||
|
size: grabberSizeCorner,
|
||||||
|
color: grabberColorCloner,
|
||||||
|
alpha: 1,
|
||||||
|
solid: grabberSolid,
|
||||||
|
visible: false,
|
||||||
|
dashed: false,
|
||||||
|
lineWidth: grabberLineWidth,
|
||||||
|
drawInFront: true,
|
||||||
|
borderSize: 1.4,
|
||||||
|
};
|
||||||
|
|
||||||
var spotLightLineProperties = {
|
var spotLightLineProperties = {
|
||||||
color: lightOverlayColor,
|
color: lightOverlayColor,
|
||||||
lineWidth: 1.5,
|
lineWidth: 1.5,
|
||||||
|
@ -583,6 +605,8 @@ SelectionDisplay = (function() {
|
||||||
var grabberPointLightF = Overlays.addOverlay("cube", grabberPropertiesEdge);
|
var grabberPointLightF = Overlays.addOverlay("cube", grabberPropertiesEdge);
|
||||||
var grabberPointLightN = Overlays.addOverlay("cube", grabberPropertiesEdge);
|
var grabberPointLightN = Overlays.addOverlay("cube", grabberPropertiesEdge);
|
||||||
|
|
||||||
|
var grabberCloner = Overlays.addOverlay("cube", grabberPropertiesCloner);
|
||||||
|
|
||||||
var stretchHandles = [
|
var stretchHandles = [
|
||||||
grabberLBN,
|
grabberLBN,
|
||||||
grabberRBN,
|
grabberRBN,
|
||||||
|
@ -629,6 +653,8 @@ SelectionDisplay = (function() {
|
||||||
grabberPointLightR,
|
grabberPointLightR,
|
||||||
grabberPointLightF,
|
grabberPointLightF,
|
||||||
grabberPointLightN,
|
grabberPointLightN,
|
||||||
|
|
||||||
|
grabberCloner
|
||||||
];
|
];
|
||||||
|
|
||||||
|
|
||||||
|
@ -970,6 +996,7 @@ SelectionDisplay = (function() {
|
||||||
grabberPointLightCircleX,
|
grabberPointLightCircleX,
|
||||||
grabberPointLightCircleY,
|
grabberPointLightCircleY,
|
||||||
grabberPointLightCircleZ,
|
grabberPointLightCircleZ,
|
||||||
|
|
||||||
].concat(stretchHandles);
|
].concat(stretchHandles);
|
||||||
|
|
||||||
overlayNames[highlightBox] = "highlightBox";
|
overlayNames[highlightBox] = "highlightBox";
|
||||||
|
@ -1016,7 +1043,7 @@ SelectionDisplay = (function() {
|
||||||
|
|
||||||
overlayNames[rotateZeroOverlay] = "rotateZeroOverlay";
|
overlayNames[rotateZeroOverlay] = "rotateZeroOverlay";
|
||||||
overlayNames[rotateCurrentOverlay] = "rotateCurrentOverlay";
|
overlayNames[rotateCurrentOverlay] = "rotateCurrentOverlay";
|
||||||
|
overlayNames[grabberCloner] = "grabberCloner";
|
||||||
var activeTool = null;
|
var activeTool = null;
|
||||||
var grabberTools = {};
|
var grabberTools = {};
|
||||||
|
|
||||||
|
@ -2136,6 +2163,12 @@ SelectionDisplay = (function() {
|
||||||
position: FAR
|
position: FAR
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Overlays.editOverlay(grabberCloner, {
|
||||||
|
visible: true,
|
||||||
|
rotation: rotation,
|
||||||
|
position: EdgeTR
|
||||||
|
});
|
||||||
|
|
||||||
var boxPosition = Vec3.multiplyQbyV(rotation, center);
|
var boxPosition = Vec3.multiplyQbyV(rotation, center);
|
||||||
boxPosition = Vec3.sum(position, boxPosition);
|
boxPosition = Vec3.sum(position, boxPosition);
|
||||||
Overlays.editOverlay(selectionBox, {
|
Overlays.editOverlay(selectionBox, {
|
||||||
|
@ -2293,7 +2326,6 @@ SelectionDisplay = (function() {
|
||||||
rotation: Quat.fromPitchYawRollDegrees(90, 0, 0),
|
rotation: Quat.fromPitchYawRollDegrees(90, 0, 0),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.setOverlaysVisible = function(isVisible) {
|
that.setOverlaysVisible = function(isVisible) {
|
||||||
|
@ -2325,7 +2357,7 @@ SelectionDisplay = (function() {
|
||||||
greatestDimension: 0.0,
|
greatestDimension: 0.0,
|
||||||
startingDistance: 0.0,
|
startingDistance: 0.0,
|
||||||
startingElevation: 0.0,
|
startingElevation: 0.0,
|
||||||
onBegin: function(event) {
|
onBegin: function(event,isAltFromGrab) {
|
||||||
SelectionManager.saveProperties();
|
SelectionManager.saveProperties();
|
||||||
startPosition = SelectionManager.worldPosition;
|
startPosition = SelectionManager.worldPosition;
|
||||||
var dimensions = SelectionManager.worldDimensions;
|
var dimensions = SelectionManager.worldDimensions;
|
||||||
|
@ -2340,7 +2372,7 @@ SelectionDisplay = (function() {
|
||||||
// Duplicate entities if alt is pressed. This will make a
|
// Duplicate entities if alt is pressed. This will make a
|
||||||
// copy of the selected entities and move the _original_ entities, not
|
// copy of the selected entities and move the _original_ entities, not
|
||||||
// the new ones.
|
// the new ones.
|
||||||
if (event.isAlt) {
|
if (event.isAlt || isAltFromGrab) {
|
||||||
duplicatedEntityIDs = [];
|
duplicatedEntityIDs = [];
|
||||||
for (var otherEntityID in SelectionManager.savedProperties) {
|
for (var otherEntityID in SelectionManager.savedProperties) {
|
||||||
var properties = SelectionManager.savedProperties[otherEntityID];
|
var properties = SelectionManager.savedProperties[otherEntityID];
|
||||||
|
@ -2581,6 +2613,34 @@ SelectionDisplay = (function() {
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
addGrabberTool(grabberCloner, {
|
||||||
|
mode: "CLONE",
|
||||||
|
onBegin: function(event) {
|
||||||
|
|
||||||
|
var pickRay = generalComputePickRay(event.x, event.y);
|
||||||
|
var result = Overlays.findRayIntersection(pickRay);
|
||||||
|
translateXZTool.pickPlanePosition = result.intersection;
|
||||||
|
translateXZTool.greatestDimension = Math.max(Math.max(SelectionManager.worldDimensions.x, SelectionManager.worldDimensions.y),
|
||||||
|
SelectionManager.worldDimensions.z);
|
||||||
|
|
||||||
|
translateXZTool.onBegin(event,true);
|
||||||
|
},
|
||||||
|
elevation: function (event) {
|
||||||
|
translateXZTool.elevation(event);
|
||||||
|
},
|
||||||
|
|
||||||
|
onEnd: function (event) {
|
||||||
|
translateXZTool.onEnd(event);
|
||||||
|
},
|
||||||
|
|
||||||
|
onMove: function (event) {
|
||||||
|
translateXZTool.onMove(event);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
var vec3Mult = function(v1, v2) {
|
var vec3Mult = function(v1, v2) {
|
||||||
return {
|
return {
|
||||||
x: v1.x * v2.x,
|
x: v1.x * v2.x,
|
||||||
|
@ -4482,6 +4542,12 @@ SelectionDisplay = (function() {
|
||||||
highlightNeeded = true;
|
highlightNeeded = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case grabberCloner:
|
||||||
|
pickedColor = grabberColorCloner;
|
||||||
|
pickedAlpha = grabberAlpha;
|
||||||
|
highlightNeeded = true;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (previousHandle) {
|
if (previousHandle) {
|
||||||
Overlays.editOverlay(previousHandle, {
|
Overlays.editOverlay(previousHandle, {
|
||||||
|
|
Loading…
Reference in a new issue