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") { if (property == "scriptURL") {
return _scriptURL; return _scriptURL;
} }
if (property == "resolution") {
return vec2toVariant(_resolution);
}
if (property == "dpi") { if (property == "dpi") {
return _dpi; return _dpi;
} }

View file

@ -140,6 +140,10 @@ var ONE_VEC = {
var NULL_UUID = "{00000000-0000-0000-0000-000000000000}"; 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 // these control how long an abandoned pointer line or action will hang around
var ACTION_TTL = 15; // seconds var ACTION_TTL = 15; // seconds
var ACTION_TTL_REFRESH = 5; var ACTION_TTL_REFRESH = 5;
@ -301,12 +305,20 @@ function projectOntoEntityXYPlane(entityID, worldPos) {
function projectOntoOverlayXYPlane(overlayID, worldPos) { function projectOntoOverlayXYPlane(overlayID, worldPos) {
var position = Overlays.getProperty(overlayID, "position"); var position = Overlays.getProperty(overlayID, "position");
var rotation = Overlays.getProperty(overlayID, "rotation"); var rotation = Overlays.getProperty(overlayID, "rotation");
var dimensions = Overlays.getProperty(overlayID, "dimensions"); var dimensions;
if (!dimensions.z) {
dimensions.z = 0; 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) { function handLaserIntersectItem(position, rotation, start) {
@ -2506,9 +2518,6 @@ function MyController(hand) {
isPrimaryHeld: true 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); Overlays.sendMousePressOnOverlay(this.grabbedOverlay, pointerEvent);