From 82a9429414ffa223f7e5ff6a86bb007b3ce0d511 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 10 Oct 2014 17:10:27 -0700 Subject: [PATCH 1/8] add boundingBox.dimensions to entity properties --- libraries/entities/src/EntityItemProperties.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libraries/entities/src/EntityItemProperties.cpp b/libraries/entities/src/EntityItemProperties.cpp index 2690bcd45b..90f56e36b9 100644 --- a/libraries/entities/src/EntityItemProperties.cpp +++ b/libraries/entities/src/EntityItemProperties.cpp @@ -179,9 +179,11 @@ QScriptValue EntityItemProperties::copyToScriptValue(QScriptEngine* engine) cons QScriptValue bottomRightNear = vec3toScriptValue(engine, aaBox.getCorner()); QScriptValue topFarLeft = vec3toScriptValue(engine, aaBox.calcTopFarLeft()); QScriptValue center = vec3toScriptValue(engine, aaBox.calcCenter()); + QScriptValue boundingBoxDimensions = vec3toScriptValue(engine, aaBox.getDimensions()); boundingBox.setProperty("brn", bottomRightNear); boundingBox.setProperty("tfl", topFarLeft); boundingBox.setProperty("center", center); + boundingBox.setProperty("dimensions", boundingBoxDimensions); COPY_PROPERTY_TO_QSCRIPTVALUE_GETTER(boundingBox, boundingBox); // gettable, but not settable return properties; From cdafba603d21e20e1503e45fb23d87ba6f3075a8 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 10 Oct 2014 17:11:27 -0700 Subject: [PATCH 2/8] use axis aligned bounding box for highlight and selection box instead of non-axis aligned box --- examples/libraries/entitySelectionTool.js | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/examples/libraries/entitySelectionTool.js b/examples/libraries/entitySelectionTool.js index b00876c969..bbcb86eb2a 100644 --- a/examples/libraries/entitySelectionTool.js +++ b/examples/libraries/entitySelectionTool.js @@ -393,14 +393,8 @@ SelectionDisplay = (function () { that.highlightSelectable = function(entityID) { var properties = Entities.getEntityProperties(entityID); - var center = { x: properties.position.x, y: properties.position.y, z: properties.position.z }; - Overlays.editOverlay(highlightBox, - { - visible: true, - position: center, - dimensions: properties.dimensions, - rotation: properties.rotation, - }); + Overlays.editOverlay(highlightBox, { visible: true, position: properties.boundingBox.center, + dimensions: properties.boundingBox.dimensions }); }; that.unhighlightSelectable = function(entityID) { @@ -642,8 +636,8 @@ SelectionDisplay = (function () { Overlays.editOverlay(highlightBox, { visible: false }); - Overlays.editOverlay(selectionBox, { visible: selectionBoxVisible, position: objectCenter, dimensions: properties.dimensions, - rotation: properties.rotation,}); + Overlays.editOverlay(selectionBox, { visible: selectionBoxVisible, position: properties.boundingBox.center, + dimensions: properties.boundingBox.dimensions }); Overlays.editOverlay(grabberMoveUp, { visible: translateHandlesVisible, position: { x: boundsCenter.x, y: top + grabberMoveUpOffset, z: boundsCenter.z } }); From dfff16d9e8e1c15ef59b797a4184de5a0754a68a Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 10 Oct 2014 21:12:28 -0700 Subject: [PATCH 3/8] make sure to not select other entities when clicking on a grab handle of a selected entity --- examples/libraries/entitySelectionTool.js | 6 +++++- examples/newEditEntities.js | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/libraries/entitySelectionTool.js b/examples/libraries/entitySelectionTool.js index bbcb86eb2a..7c18b791a1 100644 --- a/examples/libraries/entitySelectionTool.js +++ b/examples/libraries/entitySelectionTool.js @@ -1749,6 +1749,7 @@ SelectionDisplay = (function () { }; that.mousePressEvent = function(event) { + var somethingClicked = false; var pickRay = Camera.computePickRay(event.x, event.y); @@ -2049,6 +2050,8 @@ SelectionDisplay = (function () { Overlays.editOverlay(yawHandle, { ignoreRayIntersection: false }); Overlays.editOverlay(pitchHandle, { ignoreRayIntersection: false }); Overlays.editOverlay(rollHandle, { ignoreRayIntersection: false }); + + return somethingClicked; }; that.mouseMoveEvent = function(event) { @@ -2150,7 +2153,8 @@ SelectionDisplay = (function () { }; - Controller.mousePressEvent.connect(that.mousePressEvent); + // NOTE: mousePressEvent from the main script should call us., so we don't + // hook the Controller.mousePressEvent.connect(that.mousePressEvent); ourselves. Controller.mouseMoveEvent.connect(that.mouseMoveEvent); Controller.mouseReleaseEvent.connect(that.mouseReleaseEvent); diff --git a/examples/newEditEntities.js b/examples/newEditEntities.js index b753537631..1fb21caacc 100644 --- a/examples/newEditEntities.js +++ b/examples/newEditEntities.js @@ -341,7 +341,7 @@ function mousePressEvent(event) { entitySelected = false; var clickedOverlay = Overlays.getOverlayAtPoint({ x: event.x, y: event.y }); - if (toolBar.mousePressEvent(event) || progressDialog.mousePressEvent(event)) { + if (toolBar.mousePressEvent(event) || progressDialog.mousePressEvent(event) || selectionDisplay.mousePressEvent(event)) { // Event handled; do nothing. return; } else { From f21ff76a38f1d15adacb3b898b2f13ad495a1b7a Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 10 Oct 2014 21:23:56 -0700 Subject: [PATCH 4/8] dont allow stretching below a minimum dimension --- examples/libraries/entitySelectionTool.js | 136 ++++++++++++++++++++++ 1 file changed, 136 insertions(+) diff --git a/examples/libraries/entitySelectionTool.js b/examples/libraries/entitySelectionTool.js index 7c18b791a1..43c7849ab3 100644 --- a/examples/libraries/entitySelectionTool.js +++ b/examples/libraries/entitySelectionTool.js @@ -16,6 +16,8 @@ Script.include("libraries/globals.js"); SelectionDisplay = (function () { var that = {}; + var MINIMUM_DIMENSION = 0.001; + var mode = "UNKNOWN"; var overlayNames = new Array(); var lastAvatarPosition = MyAvatar.position; @@ -883,6 +885,11 @@ SelectionDisplay = (function () { // dimensions changes by: (oldNEAR - newNEAR) var changeInDimensions = { x: 0, y: 0, z: (oldNEAR - newNEAR) }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.z < MINIMUM_DIMENSION) { + newDimensions.z = MINIMUM_DIMENSION; + } + var changeInPosition = { x: 0, y: 0, z: (oldNEAR - newNEAR) * -0.5 }; var newPosition = Vec3.sum(selectedEntityPropertiesOriginalPosition, changeInPosition); var wantDebug = false; @@ -928,6 +935,11 @@ SelectionDisplay = (function () { var newFAR = oldFAR + vector.z; var changeInDimensions = { x: 0, y: 0, z: (newFAR - oldFAR) }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.z < MINIMUM_DIMENSION) { + newDimensions.z = MINIMUM_DIMENSION; + } + var changeInPosition = { x: 0, y: 0, z: (newFAR - oldFAR) * 0.5 }; var newPosition = Vec3.sum(selectedEntityPropertiesOriginalPosition, changeInPosition); var wantDebug = false; @@ -973,6 +985,11 @@ SelectionDisplay = (function () { var newTOP = oldTOP + vector.y; var changeInDimensions = { x: 0, y: (newTOP - oldTOP), z: 0 }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.y < MINIMUM_DIMENSION) { + newDimensions.y = MINIMUM_DIMENSION; + } + var changeInPosition = { x: 0, y: (newTOP - oldTOP) * 0.5, z: 0 }; var newPosition = Vec3.sum(selectedEntityPropertiesOriginalPosition, changeInPosition); var wantDebug = false; @@ -1017,6 +1034,11 @@ SelectionDisplay = (function () { var newBOTTOM = oldBOTTOM + vector.y; var changeInDimensions = { x: 0, y: (oldBOTTOM - newBOTTOM), z: 0 }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.y < MINIMUM_DIMENSION) { + newDimensions.y = MINIMUM_DIMENSION; + } + var changeInPosition = { x: 0, y: (oldBOTTOM - newBOTTOM) * -0.5, z: 0 }; var newPosition = Vec3.sum(selectedEntityPropertiesOriginalPosition, changeInPosition); var wantDebug = false; @@ -1061,6 +1083,11 @@ SelectionDisplay = (function () { var newRIGHT = oldRIGHT + vector.x; var changeInDimensions = { x: (newRIGHT - oldRIGHT), y: 0 , z: 0 }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.x < MINIMUM_DIMENSION) { + newDimensions.x = MINIMUM_DIMENSION; + } + var changeInPosition = { x: (newRIGHT - oldRIGHT) * 0.5, y: 0, z: 0 }; var newPosition = Vec3.sum(selectedEntityPropertiesOriginalPosition, changeInPosition); var wantDebug = false; @@ -1105,6 +1132,11 @@ SelectionDisplay = (function () { var newLEFT = oldLEFT + vector.x; var changeInDimensions = { x: (oldLEFT - newLEFT), y: 0, z: 0 }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.x < MINIMUM_DIMENSION) { + newDimensions.x = MINIMUM_DIMENSION; + } + var changeInPosition = { x: (oldLEFT - newLEFT) * -0.5, y: 0, z: 0 }; var newPosition = Vec3.sum(selectedEntityPropertiesOriginalPosition, changeInPosition); var wantDebug = false; @@ -1157,6 +1189,19 @@ SelectionDisplay = (function () { var changeInDimensions = { x: (newRIGHT - oldRIGHT), y: (newBOTTOM - oldBOTTOM) , z: (newNEAR - oldNEAR) }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.x < MINIMUM_DIMENSION) { + newDimensions.x = MINIMUM_DIMENSION; + } + + if (newDimensions.y < MINIMUM_DIMENSION) { + newDimensions.y = MINIMUM_DIMENSION; + } + + if (newDimensions.z < MINIMUM_DIMENSION) { + newDimensions.z = MINIMUM_DIMENSION; + } + var changeInPosition = { x: (newRIGHT - oldRIGHT) * 0.5, y: (newBOTTOM - oldBOTTOM) * -0.5, z: (newNEAR - oldNEAR) * -0.5 }; @@ -1211,6 +1256,19 @@ SelectionDisplay = (function () { var changeInDimensions = { x: (newLEFT - oldLEFT), y: (newBOTTOM - oldBOTTOM) , z: (newNEAR - oldNEAR) }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.x < MINIMUM_DIMENSION) { + newDimensions.x = MINIMUM_DIMENSION; + } + + if (newDimensions.y < MINIMUM_DIMENSION) { + newDimensions.y = MINIMUM_DIMENSION; + } + + if (newDimensions.z < MINIMUM_DIMENSION) { + newDimensions.z = MINIMUM_DIMENSION; + } + var changeInPosition = { x: (newLEFT - oldLEFT) * -0.5, y: (newBOTTOM - oldBOTTOM) * -0.5, z: (newNEAR - oldNEAR) * -0.5 }; @@ -1265,6 +1323,19 @@ SelectionDisplay = (function () { var changeInDimensions = { x: (newRIGHT - oldRIGHT), y: (newTOP - oldTOP) , z: (newNEAR - oldNEAR) }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.x < MINIMUM_DIMENSION) { + newDimensions.x = MINIMUM_DIMENSION; + } + + if (newDimensions.y < MINIMUM_DIMENSION) { + newDimensions.y = MINIMUM_DIMENSION; + } + + if (newDimensions.z < MINIMUM_DIMENSION) { + newDimensions.z = MINIMUM_DIMENSION; + } + var changeInPosition = { x: (newRIGHT - oldRIGHT) * 0.5, y: (newTOP - oldTOP) * 0.5, z: (newNEAR - oldNEAR) * -0.5 }; @@ -1319,6 +1390,19 @@ SelectionDisplay = (function () { var changeInDimensions = { x: (newLEFT - oldLEFT), y: (newTOP - oldTOP) , z: (newNEAR - oldNEAR) }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.x < MINIMUM_DIMENSION) { + newDimensions.x = MINIMUM_DIMENSION; + } + + if (newDimensions.y < MINIMUM_DIMENSION) { + newDimensions.y = MINIMUM_DIMENSION; + } + + if (newDimensions.z < MINIMUM_DIMENSION) { + newDimensions.z = MINIMUM_DIMENSION; + } + var changeInPosition = { x: (newLEFT - oldLEFT) * -0.5, y: (newTOP - oldTOP) * 0.5, z: (newNEAR - oldNEAR) * -0.5 }; @@ -1373,6 +1457,19 @@ SelectionDisplay = (function () { var changeInDimensions = { x: (newRIGHT - oldRIGHT), y: (newBOTTOM - oldBOTTOM) , z: (newFAR - oldFAR) }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.x < MINIMUM_DIMENSION) { + newDimensions.x = MINIMUM_DIMENSION; + } + + if (newDimensions.y < MINIMUM_DIMENSION) { + newDimensions.y = MINIMUM_DIMENSION; + } + + if (newDimensions.z < MINIMUM_DIMENSION) { + newDimensions.z = MINIMUM_DIMENSION; + } + var changeInPosition = { x: (newRIGHT - oldRIGHT) * 0.5, y: (newBOTTOM - oldBOTTOM) * -0.5, z: (newFAR - oldFAR) * 0.5 }; @@ -1427,6 +1524,19 @@ SelectionDisplay = (function () { var changeInDimensions = { x: (newLEFT - oldLEFT), y: (newBOTTOM - oldBOTTOM) , z: (newFAR - oldFAR) }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.x < MINIMUM_DIMENSION) { + newDimensions.x = MINIMUM_DIMENSION; + } + + if (newDimensions.y < MINIMUM_DIMENSION) { + newDimensions.y = MINIMUM_DIMENSION; + } + + if (newDimensions.z < MINIMUM_DIMENSION) { + newDimensions.z = MINIMUM_DIMENSION; + } + var changeInPosition = { x: (newLEFT - oldLEFT) * -0.5, y: (newBOTTOM - oldBOTTOM) * -0.5, z: (newFAR - oldFAR) * 0.5 }; @@ -1481,6 +1591,19 @@ SelectionDisplay = (function () { var changeInDimensions = { x: (newRIGHT - oldRIGHT), y: (newTOP - oldTOP) , z: (newFAR - oldFAR) }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.x < MINIMUM_DIMENSION) { + newDimensions.x = MINIMUM_DIMENSION; + } + + if (newDimensions.y < MINIMUM_DIMENSION) { + newDimensions.y = MINIMUM_DIMENSION; + } + + if (newDimensions.z < MINIMUM_DIMENSION) { + newDimensions.z = MINIMUM_DIMENSION; + } + var changeInPosition = { x: (newRIGHT - oldRIGHT) * 0.5, y: (newTOP - oldTOP) * 0.5, z: (newFAR - oldFAR) * 0.5 }; @@ -1535,6 +1658,19 @@ SelectionDisplay = (function () { var changeInDimensions = { x: (newLEFT - oldLEFT), y: (newTOP - oldTOP) , z: (newFAR - oldFAR) }; var newDimensions = Vec3.sum(selectedEntityPropertiesOriginalDimensions, changeInDimensions); + + if (newDimensions.x < MINIMUM_DIMENSION) { + newDimensions.x = MINIMUM_DIMENSION; + } + + if (newDimensions.y < MINIMUM_DIMENSION) { + newDimensions.y = MINIMUM_DIMENSION; + } + + if (newDimensions.z < MINIMUM_DIMENSION) { + newDimensions.z = MINIMUM_DIMENSION; + } + var changeInPosition = { x: (newLEFT - oldLEFT) * -0.5, y: (newTOP - oldTOP) * 0.5, z: (newFAR - oldFAR) * 0.5 }; From caac5881bf2544f7b2dbb7944db8a5bca7788b56 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 10 Oct 2014 21:39:05 -0700 Subject: [PATCH 5/8] correctly handle unselect and dont show highlight when other tool is active --- examples/libraries/entitySelectionTool.js | 9 ++-- examples/newEditEntities.js | 56 ++++++++++++----------- 2 files changed, 35 insertions(+), 30 deletions(-) diff --git a/examples/libraries/entitySelectionTool.js b/examples/libraries/entitySelectionTool.js index 43c7849ab3..1e39096308 100644 --- a/examples/libraries/entitySelectionTool.js +++ b/examples/libraries/entitySelectionTool.js @@ -2254,8 +2254,9 @@ SelectionDisplay = (function () { break; default: // nothing to do by default - break; + return false; } + return true; }; that.mouseReleaseEvent = function(event) { @@ -2289,9 +2290,9 @@ SelectionDisplay = (function () { }; - // NOTE: mousePressEvent from the main script should call us., so we don't - // hook the Controller.mousePressEvent.connect(that.mousePressEvent); ourselves. - Controller.mouseMoveEvent.connect(that.mouseMoveEvent); + // NOTE: mousePressEvent and mouseMoveEvent from the main script should call us., so we don't hook these: + // Controller.mousePressEvent.connect(that.mousePressEvent); + // Controller.mouseMoveEvent.connect(that.mouseMoveEvent); Controller.mouseReleaseEvent.connect(that.mouseReleaseEvent); return that; diff --git a/examples/newEditEntities.js b/examples/newEditEntities.js index 1fb21caacc..5c50d37048 100644 --- a/examples/newEditEntities.js +++ b/examples/newEditEntities.js @@ -338,13 +338,15 @@ function rayPlaneIntersection(pickRay, point, normal) { function mousePressEvent(event) { mouseLastPosition = { x: event.x, y: event.y }; - entitySelected = false; var clickedOverlay = Overlays.getOverlayAtPoint({ x: event.x, y: event.y }); if (toolBar.mousePressEvent(event) || progressDialog.mousePressEvent(event) || selectionDisplay.mousePressEvent(event)) { // Event handled; do nothing. return; } else { + entitySelected = false; + selectionDisplay.unselectAll(); + // If we aren't active and didn't click on an overlay: quit if (!isActive) { return; @@ -440,34 +442,36 @@ function mouseMoveEvent(event) { if (!isActive) { return; } + + // allow the selectionDisplay to handle the event first, if it doesn't handle it, then do our own thing + if (selectionDisplay.mouseMoveEvent(event)) { + return; + } var pickRay = Camera.computePickRay(event.x, event.y); - if (!entitySelected) { - var entityIntersection = Entities.findRayIntersection(pickRay); - if (entityIntersection.accurate) { - if(highlightedEntityID.isKnownID && highlightedEntityID.id != entityIntersection.entityID.id) { - selectionDisplay.unhighlightSelectable(highlightedEntityID); - highlightedEntityID = { id: -1, isKnownID: false }; - } - - var halfDiagonal = Vec3.length(entityIntersection.properties.dimensions) / 2.0; - - var angularSize = 2 * Math.atan(halfDiagonal / Vec3.distance(Camera.getPosition(), - entityIntersection.properties.position)) * 180 / 3.14; - - var sizeOK = (allowLargeModels || angularSize < MAX_ANGULAR_SIZE) - && (allowSmallModels || angularSize > MIN_ANGULAR_SIZE); - - if (entityIntersection.entityID.isKnownID && sizeOK) { - if (wantEntityGlow) { - Entities.editEntity(entityIntersection.entityID, { glowLevel: 0.25 }); - } - highlightedEntityID = entityIntersection.entityID; - selectionDisplay.highlightSelectable(entityIntersection.entityID); - } - + var entityIntersection = Entities.findRayIntersection(pickRay); + if (entityIntersection.accurate) { + if(highlightedEntityID.isKnownID && highlightedEntityID.id != entityIntersection.entityID.id) { + selectionDisplay.unhighlightSelectable(highlightedEntityID); + highlightedEntityID = { id: -1, isKnownID: false }; } - return; + + var halfDiagonal = Vec3.length(entityIntersection.properties.dimensions) / 2.0; + + var angularSize = 2 * Math.atan(halfDiagonal / Vec3.distance(Camera.getPosition(), + entityIntersection.properties.position)) * 180 / 3.14; + + var sizeOK = (allowLargeModels || angularSize < MAX_ANGULAR_SIZE) + && (allowSmallModels || angularSize > MIN_ANGULAR_SIZE); + + if (entityIntersection.entityID.isKnownID && sizeOK) { + if (wantEntityGlow) { + Entities.editEntity(entityIntersection.entityID, { glowLevel: 0.25 }); + } + highlightedEntityID = entityIntersection.entityID; + selectionDisplay.highlightSelectable(entityIntersection.entityID); + } + } } From e6d7add5dc46edd6f1900ea43d0cd965518f67f3 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 10 Oct 2014 21:57:10 -0700 Subject: [PATCH 6/8] display tickmarks on the current rotation overlay --- examples/libraries/entitySelectionTool.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/examples/libraries/entitySelectionTool.js b/examples/libraries/entitySelectionTool.js index 1e39096308..8a84fa37ce 100644 --- a/examples/libraries/entitySelectionTool.js +++ b/examples/libraries/entitySelectionTool.js @@ -262,6 +262,9 @@ SelectionDisplay = (function () { visible: false, rotation: yawOverlayRotation, ignoreRayIntersection: true, // always ignore this + hasTickMarks: true, + majorTickMarksColor: { red: 0, green: 0, blue: 0 }, + minorTickMarksColor: { red: 0, green: 0, blue: 0 }, }); var yawHandle = Overlays.addOverlay("billboard", { @@ -1750,11 +1753,15 @@ SelectionDisplay = (function () { if (snapToInner) { Overlays.editOverlay(rotateOverlayOuter, { startAt: 0, endAt: 360 }); Overlays.editOverlay(rotateOverlayInner, { startAt: startAtRemainder, endAt: endAtRemainder }); - Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: innerRadius }); + Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: innerRadius, + majorTickMarksAngle: innerSnapAngle, minorTickMarksAngle: 0, + majorTickMarksLength: -0.25, minorTickMarksLength: 0, }); } else { Overlays.editOverlay(rotateOverlayInner, { startAt: 0, endAt: 360 }); Overlays.editOverlay(rotateOverlayOuter, { startAt: startAtRemainder, endAt: endAtRemainder }); - Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: outerRadius }); + Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: outerRadius, + majorTickMarksAngle: 45.0, minorTickMarksAngle: 5, + majorTickMarksLength: 0.25, minorTickMarksLength: 0.1, }); } } From a08ddecc3a3fc1b6f3dc7f692854bfbe562dcbe7 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 10 Oct 2014 22:06:12 -0700 Subject: [PATCH 7/8] fix shifting tickmarks --- interface/src/ui/overlays/Circle3DOverlay.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/interface/src/ui/overlays/Circle3DOverlay.cpp b/interface/src/ui/overlays/Circle3DOverlay.cpp index 62ddee4cf2..d7120a5ff8 100644 --- a/interface/src/ui/overlays/Circle3DOverlay.cpp +++ b/interface/src/ui/overlays/Circle3DOverlay.cpp @@ -168,7 +168,8 @@ void Circle3DOverlay::render() { xColor color = getMajorTickMarksColor(); glColor4f(color.red / MAX_COLOR, color.green / MAX_COLOR, color.blue / MAX_COLOR, alpha); - float angle = startAt; + float tickMarkAngle = getMajorTickMarksAngle(); + float angle = startAt - fmod(startAt, tickMarkAngle) + tickMarkAngle; float angleInRadians = glm::radians(angle); float tickMarkLength = getMajorTickMarksLength(); float startRadius = (tickMarkLength > 0.0f) ? innerRadius : outerRadius; @@ -183,7 +184,7 @@ void Circle3DOverlay::render() { glVertex2f(thisPointA.x, thisPointA.y); glVertex2f(thisPointB.x, thisPointB.y); - angle += getMajorTickMarksAngle(); + angle += tickMarkAngle; } } @@ -193,7 +194,8 @@ void Circle3DOverlay::render() { xColor color = getMinorTickMarksColor(); glColor4f(color.red / MAX_COLOR, color.green / MAX_COLOR, color.blue / MAX_COLOR, alpha); - float angle = startAt; + float tickMarkAngle = getMinorTickMarksAngle(); + float angle = startAt - fmod(startAt, tickMarkAngle) + tickMarkAngle; float angleInRadians = glm::radians(angle); float tickMarkLength = getMinorTickMarksLength(); float startRadius = (tickMarkLength > 0.0f) ? innerRadius : outerRadius; @@ -208,7 +210,7 @@ void Circle3DOverlay::render() { glVertex2f(thisPointA.x, thisPointA.y); glVertex2f(thisPointB.x, thisPointB.y); - angle += getMinorTickMarksAngle(); + angle += tickMarkAngle; } } From 8c85c3261e3d1263b54fe2280cb7a3f56d097211 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 10 Oct 2014 22:11:27 -0700 Subject: [PATCH 8/8] draw tickmarks for current roation correctly for pitch and roll as well --- examples/libraries/entitySelectionTool.js | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/examples/libraries/entitySelectionTool.js b/examples/libraries/entitySelectionTool.js index 8a84fa37ce..1746b59f32 100644 --- a/examples/libraries/entitySelectionTool.js +++ b/examples/libraries/entitySelectionTool.js @@ -1817,11 +1817,15 @@ SelectionDisplay = (function () { if (snapToInner) { Overlays.editOverlay(rotateOverlayOuter, { startAt: 0, endAt: 360 }); Overlays.editOverlay(rotateOverlayInner, { startAt: startAtRemainder, endAt: endAtRemainder }); - Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: innerRadius }); + Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: innerRadius, + majorTickMarksAngle: innerSnapAngle, minorTickMarksAngle: 0, + majorTickMarksLength: -0.25, minorTickMarksLength: 0, }); } else { Overlays.editOverlay(rotateOverlayInner, { startAt: 0, endAt: 360 }); Overlays.editOverlay(rotateOverlayOuter, { startAt: startAtRemainder, endAt: endAtRemainder }); - Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: outerRadius }); + Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: outerRadius, + majorTickMarksAngle: 45.0, minorTickMarksAngle: 5, + majorTickMarksLength: 0.25, minorTickMarksLength: 0.1, }); } } }; @@ -1875,11 +1879,15 @@ SelectionDisplay = (function () { if (snapToInner) { Overlays.editOverlay(rotateOverlayOuter, { startAt: 0, endAt: 360 }); Overlays.editOverlay(rotateOverlayInner, { startAt: startAtRemainder, endAt: endAtRemainder }); - Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: innerRadius }); + Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: innerRadius, + majorTickMarksAngle: innerSnapAngle, minorTickMarksAngle: 0, + majorTickMarksLength: -0.25, minorTickMarksLength: 0, }); } else { Overlays.editOverlay(rotateOverlayInner, { startAt: 0, endAt: 360 }); Overlays.editOverlay(rotateOverlayOuter, { startAt: startAtRemainder, endAt: endAtRemainder }); - Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: outerRadius }); + Overlays.editOverlay(rotateOverlayCurrent, { startAt: startAtCurrent, endAt: endAtCurrent, size: outerRadius, + majorTickMarksAngle: 45.0, minorTickMarksAngle: 5, + majorTickMarksLength: 0.25, minorTickMarksLength: 0.1, }); } } };