aboutsummaryrefslogtreecommitdiff
path: root/js/helper-classes/backup-delete/GLAnchorPoint.js
diff options
context:
space:
mode:
authorPushkar Joshi2012-03-06 17:05:05 -0800
committerPushkar Joshi2012-03-06 17:05:05 -0800
commit794abd077a0cd4c797d3f566281deca77b184bfe (patch)
tree3bf4a83ca714def2671fe8cef93db859b0d5553f /js/helper-classes/backup-delete/GLAnchorPoint.js
parentc155cd238b6f9e0b8191e0fc533f7bc974b762c2 (diff)
parent2e3943a8f751ec572066f168b58464c24b9f29e5 (diff)
downloadninja-794abd077a0cd4c797d3f566281deca77b184bfe.tar.gz
Merge branch 'master' into pentool
Diffstat (limited to 'js/helper-classes/backup-delete/GLAnchorPoint.js')
-rwxr-xr-xjs/helper-classes/backup-delete/GLAnchorPoint.js168
1 files changed, 168 insertions, 0 deletions
diff --git a/js/helper-classes/backup-delete/GLAnchorPoint.js b/js/helper-classes/backup-delete/GLAnchorPoint.js
new file mode 100755
index 00000000..c3e95b34
--- /dev/null
+++ b/js/helper-classes/backup-delete/GLAnchorPoint.js
@@ -0,0 +1,168 @@
1/* <copyright>
2This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
3No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
5</copyright> */
6
7/////////////////////////////////////////////
8// Class GLAnchorPoint
9// GL representation of a point clicked
10// and dragged during pen tool
11//
12//
13/////////////////////////////////////////////
14function GLAnchorPoint() {
15 /////////////////////////////////////////
16 // Instance variables
17 /////////////////////////////////////////
18 this._x = 0.0;
19 this._y = 0.0;
20 this._z = 0.0;
21
22 this._prevX = 0.0;
23 this._prevY = 0.0;
24 this._prevZ = 0.0;
25
26 this._nextX = 0.0;
27 this._nextY = 0.0;
28 this._nextZ = 0.0;
29}
30 // *********** setters ************
31GLAnchorPoint.prototype.setPos = function (x, y, z) { this._x = x; this._y = y; this._z = z; }
32GLAnchorPoint.prototype.setPrevPos = function (x, y, z) { this._prevX = x; this._prevY = y; this._prevZ = z; }
33GLAnchorPoint.prototype.setNextPos = function (x, y, z) { this._nextX = x; this._nextY = y; this._nextZ = z; }
34
35GLAnchorPoint.prototype.setPrevFromNext = function () {
36 //set the previous control point by reflecting the next control point
37 var dispX = this._nextX - this._x;
38 var dispY = this._nextY - this._y;
39 var dispZ = this._nextZ - this._z;
40
41 this._prevX = this._x - dispX;
42 this._prevY = this._y - dispY;
43 this._prevZ = this._z - dispZ;
44}
45GLAnchorPoint.prototype.setNextFromPrev = function () {
46 //set the previous control point by reflecting the next control point
47 var dispX = this._prevX - this._x;
48 var dispY = this._prevY - this._y;
49 var dispZ = this._prevZ - this._z;
50
51 this._nextX = this._x - dispX;
52 this._nextY = this._y - dispY;
53 this._nextZ = this._z - dispZ;
54}
55
56//translate the next point from the translation that was applied to the prev. point
57GLAnchorPoint.prototype.translateNextFromPrev = function (tx, ty, tz) {
58 //do nothing if the total translation is zero
59 var totalTransSq = (tx*tx) + (ty*ty) + (tz*tz);
60 if (totalTransSq < 0.0000001)
61 return;
62
63 // *** compute the rotation of the prev vector ***
64 var oldP = Vector.create([this._prevX + tx - this._x, this._prevY + ty - this._y, this._prevZ + tz - this._z]);
65 var newP = Vector.create([this._prevX - this._x, this._prevY - this._y, this._prevZ - this._z]);
66 //compute angle between the two vectors
67 var axis = Vector.create([0, 0, 0]);
68 var angle = MathUtils.getAxisAngleBetween3DVectors(oldP, newP, axis);
69 if (angle === 0)
70 return;
71
72 // *** compute the vector from anchor to next
73 var oldN = Vector.create([this._nextX - this._x, this._nextY - this._y, this._nextZ - this._z]);
74 var rotMat = Matrix.Rotation(-angle, axis);
75 var newN = MathUtils.transformVector(oldN, rotMat);
76
77 //TEMP for some situations the axis angle computation returns NaNs
78 if (isNaN(newN[0]) || isNaN(newN[1]) || isNaN(newN[2])) {
79 console.log("NaN in translateNextFromPrev");
80 return;
81 }
82 //end TEMP
83 this._nextX = this._x + newN[0];
84 this._nextY = this._y + newN[1];
85 this._nextZ = this._z + newN[2];
86}
87//translate the next point from the translation that was applied to the prev. point
88GLAnchorPoint.prototype.translatePrevFromNext = function (tx, ty, tz) {
89 //do nothing if the total translation is zero
90 var totalTransSq = (tx*tx) + (ty*ty) + (tz*tz);
91 if (totalTransSq < 0.0000001)
92 return;
93
94 // *** compute the rotation of the next vector ***
95 var oldN = Vector.create([this._nextX + tx - this._x, this._nextY + ty - this._y, this._nextZ + tz - this._z]);
96 var newN = Vector.create([this._nextX - this._x, this._nextY - this._y, this._nextZ - this._z]);
97 //compute angle between the two vectors
98 var axis = Vector.create([0, 0, 0]);
99 var angle = MathUtils.getAxisAngleBetween3DVectors(oldN, newN, axis);
100 if (angle === 0)
101 return;
102
103 // *** compute the vector from anchor to prev
104 var oldP = Vector.create([this._prevX - this._x, this._prevY - this._y, this._prevZ - this._z]);
105 var rotMat = Matrix.Rotation(-angle, axis);
106 var newP = MathUtils.transformVector(oldP, rotMat);
107
108 //TEMP for some situations the axis angle computation returns NaNs
109 if (isNaN(newP[0]) || isNaN(newP[1]) || isNaN(newP[2])) {
110 return;
111 }
112 //end TEMP
113 this._prevX = this._x + newP[0];
114 this._prevY = this._y + newP[1];
115 this._prevZ = this._z + newP[2];
116}
117
118
119// ******* modifiers *******
120GLAnchorPoint.prototype.translatePrev = function (x, y, z) {
121 this._prevX += x; this._prevY += y; this._prevZ += z;
122}
123GLAnchorPoint.prototype.translateNext = function (x, y, z) {
124 this._nextX += x; this._nextY += y; this._nextZ += z;
125}
126GLAnchorPoint.prototype.translate = function (x, y, z) {
127 this._x += x; this._y += y; this._z += z;
128}
129GLAnchorPoint.prototype.translateAll = function (x, y, z) {
130 this.translate(x, y, z);
131 this.translatePrev(x, y, z);
132 this.translateNext(x, y, z);
133}
134
135
136GLAnchorPoint.prototype.scaleAll = function(sx,sy,sz){
137 this._x *= sx;this._prevX *= sx;this._nextX *= sx;
138 this._y *= sy;this._prevY *= sy;this._nextY *= sy;
139 this._z *= sz;this._prevZ *= sz;this._nextZ *= sz;
140}
141
142
143// ********* getters **********
144GLAnchorPoint.prototype.getPosX = function () { return this._x; }
145GLAnchorPoint.prototype.getPosY = function () { return this._y; }
146GLAnchorPoint.prototype.getPosZ = function () { return this._z; }
147GLAnchorPoint.prototype.getPrevX = function () { return this._prevX; }
148GLAnchorPoint.prototype.getPrevY = function () { return this._prevY; }
149GLAnchorPoint.prototype.getPrevZ = function () { return this._prevZ; }
150GLAnchorPoint.prototype.getNextX = function () { return this._nextX; }
151GLAnchorPoint.prototype.getNextY = function () { return this._nextY; }
152GLAnchorPoint.prototype.getNextZ = function () { return this._nextZ; }
153GLAnchorPoint.prototype.getPos = function() { return Vector.create([this._x, this._y, this._z]);}
154GLAnchorPoint.prototype.getPrev = function() { return Vector.create([this._prevX, this._prevY, this._prevZ]);}
155GLAnchorPoint.prototype.getNext = function() { return Vector.create([this._nextX, this._nextY, this._nextZ]);}
156//return the square of distance from passed in point to the anchor position
157GLAnchorPoint.prototype.getDistanceSq = function (x, y, z) {
158 return (this._x - x) * (this._x - x) + (this._y - y) * (this._y - y) + (this._z - z) * (this._z - z);
159}
160//return sq. of distance to prev.
161GLAnchorPoint.prototype.getPrevDistanceSq = function (x, y, z) {
162 return (this._prevX - x) * (this._prevX - x) + (this._prevY - y) * (this._prevY - y) + (this._prevZ - z) * (this._prevZ - z);
163}
164//return sq. of distance to next
165GLAnchorPoint.prototype.getNextDistanceSq = function (x, y, z) {
166 return (this._nextX - x) * (this._nextX - x) + (this._nextY - y) * (this._nextY - y) + (this._nextZ - z) * (this._nextZ - z);
167}
168