Fix Web overlay x, y coordinate calcs

This commit is contained in:
David Rowe 2016-12-09 17:00:00 +13:00 committed by Seth Alves
parent 17831e3b6a
commit 0accdddc8f
2 changed files with 20 additions and 8 deletions

View file

@ -312,6 +312,9 @@ QVariant Web3DOverlay::getProperty(const QString& property) {
if (property == "scriptURL") {
return _scriptURL;
}
if (property == "resolution") {
return vec2toVariant(_resolution);
}
if (property == "dpi") {
return _dpi;
}

View file

@ -140,6 +140,10 @@ var ONE_VEC = {
var NULL_UUID = "{00000000-0000-0000-0000-000000000000}";
var DEFAULT_REGISTRATION_POINT = { x: 0.5, y: 0.5, z: 0.5 };
var INCHES_TO_METERS = 1.0 / 39.3701;
// these control how long an abandoned pointer line or action will hang around
var ACTION_TTL = 15; // seconds
var ACTION_TTL_REFRESH = 5;
@ -301,12 +305,20 @@ function projectOntoEntityXYPlane(entityID, worldPos) {
function projectOntoOverlayXYPlane(overlayID, worldPos) {
var position = Overlays.getProperty(overlayID, "position");
var rotation = Overlays.getProperty(overlayID, "rotation");
var dimensions = Overlays.getProperty(overlayID, "dimensions");
if (!dimensions.z) {
dimensions.z = 0;
var dimensions;
var dpi = Overlays.getProperty(overlayID, "dpi");
if (dpi) {
// Calculate physical dimensions for web3d overlay; "dimensions" property is used as a scale.
var resolution = Overlays.getProperty(overlayID, "resolution");
resolution.z = 1; // Circumvent divide-by-zero.
var scale = Overlays.getProperty(overlayID, "dimensions");
dimensions = Vec3.multiplyVbyV(Vec3.multiply(resolution, INCHES_TO_METERS / dpi), scale);
} else {
dimensions = Overlays.getProperty(overlayID, "dimensions");
}
var registrationPoint = { x: 0.5, y: 0.5, z: 0.5 };
return projectOntoXYPlane(worldPos, position, rotation, dimensions, registrationPoint);
return projectOntoXYPlane(worldPos, position, rotation, dimensions, DEFAULT_REGISTRATION_POINT);
}
function handLaserIntersectItem(position, rotation, start) {
@ -2506,9 +2518,6 @@ function MyController(hand) {
isPrimaryHeld: true
};
// TODO: post2D isn't calculated correctly; use dummy values to prevent crash.
pointerEvent.pos2D.x = 50;
pointerEvent.pos2D.y = 50;
Overlays.sendMousePressOnOverlay(this.grabbedOverlay, pointerEvent);