-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathpicking.js
More file actions
108 lines (73 loc) · 3.28 KB
/
picking.js
File metadata and controls
108 lines (73 loc) · 3.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
EPSILON = 0.01;
module("Picking Tests", {
setup : function() {
stop();
var that = this;
this.cb = function(e) {
ok(true, "Scene loaded");
that.doc = document.getElementById("xml3dframe").contentDocument;
that.xml3dEl = that.doc.getElementById("xml3DElem");
start();
};
loadDocument("scenes/picking.html" + window.location.search, this.cb);
},
teardown : function() {
var v = document.getElementById("xml3dframe");
v.removeEventListener("load", this.cb, true);
}
});
test("xml3d.getElementByPoint(): nothing picked", function() {
var m = this.xml3dEl.getElementByPoint(260, 211);
strictEqual(m, null, "Nothing picked here");
});
test("xml3d.getElementByPoint(): simple pick 'm1'", function() {
var m = this.xml3dEl.getElementByPoint(211, 211);
ok(m, "Pick is not null");
equal(m && m.id, "m1");
});
test("xml3d.getElementByPoint(): do not pick invisible object", function() {
var m = this.xml3dEl.getElementByPoint(211, 211);
ok(m, "Pick is not null");
equal(m && m.id, "m1");
m.style.display = "none";
m = this.xml3dEl.getElementByPoint(211, 211);
strictEqual(m, null, "Not picked anymore");
});
test("xml3d.getElementByPoint(): picked mesh 'm1'", function() {
var hitP = new XML3D.Vec3();
var hitN = new XML3D.Vec3();
var m = this.xml3dEl.getElementByPoint(212, 214, hitP, hitN);
ok(m, "Pick is not null");
equal(m && m.id, "m1");
var expectHitP = XML3D.math.vec3.fromValues(-0.0015956875868141651, -0.1450980305671692, 2.0039210319519043);
var expectHitN = XML3D.math.vec3.fromValues(1, 0, 0);
QUnit.closeVector(hitP, expectHitP, EPSILON, "hit point");
QUnit.closeVector(hitN, expectHitN, EPSILON, "hit normal");
});
test("xml3d.getElementByPoint(): picked mesh 'm2'", function() {
var hitP = new XML3D.Vec3();
var hitN = new XML3D.Vec3();
var m = this.xml3dEl.getElementByPoint(305, 211, hitP, hitN);
ok(m, "Pick is not null");
equal(m && m.id, "m2");
var expectHitP = XML3D.math.vec3.fromValues(-0.016113698482513428, -0.020995676517486572, -1.8549758195877075);
var expectHitN = XML3D.math.vec3.fromValues(0.7648419737815857, -0.6442176699638367, 0.0006090305396355689);
QUnit.closeVector(hitP, expectHitP, EPSILON, "hit point");
QUnit.closeVector(hitN, expectHitN, EPSILON, "hit normal");
});
test("xml3d.generateRay(): point to mesh 'm1'", function() {
var ray = this.xml3dEl.generateRay(193, 191);
ok(ray, "ray is not null");
var expectOrig = XML3D.math.vec3.fromValues(10, 0, 0);
var expectDir = XML3D.math.vec3.fromValues(-0.96001172, 0.0755365341, 0.2695769667);
QUnit.closeVector(ray.origin, expectOrig, EPSILON, "ray's origin");
QUnit.closeVector(ray.direction, expectDir, EPSILON, "ray's direction");
});
test("xml3d.generateRay(): point to mesh 'm2'", function() {
var ray = this.xml3dEl.generateRay(324, 221);
ok(ray, "ray is not null");
var expectOrig = XML3D.math.vec3.fromValues(10, 0, 0);
var expectDir = XML3D.math.vec3.fromValues(-0.9664570689, -0.04404431, -0.2530234456);
QUnit.closeVector(ray.origin, expectOrig, EPSILON, "ray's origin");
QUnit.closeVector(ray.direction, expectDir, EPSILON, "ray's direction");
});