From eb6ff725c48eeb15d1b5715763a66fecfb494667 Mon Sep 17 00:00:00 2001 From: Zach Pomerantz Date: Wed, 10 Feb 2016 20:10:37 -0800 Subject: [PATCH] Fix circle3d FindRayIntersection to scale by radius --- interface/src/ui/overlays/Circle3DOverlay.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/interface/src/ui/overlays/Circle3DOverlay.cpp b/interface/src/ui/overlays/Circle3DOverlay.cpp index 252aacef43..7fb1e5629c 100644 --- a/interface/src/ui/overlays/Circle3DOverlay.cpp +++ b/interface/src/ui/overlays/Circle3DOverlay.cpp @@ -10,6 +10,7 @@ #include "Circle3DOverlay.h" +#include #include #include @@ -400,18 +401,18 @@ QScriptValue Circle3DOverlay::getProperty(const QString& property) { bool Circle3DOverlay::findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance, BoxFace& face, glm::vec3& surfaceNormal) { - bool intersects = Planar3DOverlay::findRayIntersection(origin, direction, distance, face, surfaceNormal); + // Scale the dimensions by the diameter + glm::vec2 dimensions = getOuterRadius() * 2.0f * getDimensions(); + bool intersects = findRayRectangleIntersection(origin, direction, getRotation(), getPosition(), dimensions, distance); if (intersects) { glm::vec3 hitPosition = origin + (distance * direction); glm::vec3 localHitPosition = glm::inverse(getRotation()) * (hitPosition - getPosition()); - localHitPosition.y = localHitPosition.y * getDimensions().x / getDimensions().y; // Scale to make circular - + localHitPosition.x /= getDimensions().x; + localHitPosition.y /= getDimensions().y; float distanceToHit = glm::length(localHitPosition); - float innerRadius = getDimensions().x / 2.0f * _innerRadius; - float outerRadius = getDimensions().x / 2.0f * _outerRadius; - intersects = innerRadius <= distanceToHit && distanceToHit <= outerRadius; + intersects = getInnerRadius() <= distanceToHit && distanceToHit <= getOuterRadius(); } return intersects;