diff options
author | Pierre Frisch | 2011-12-22 07:25:50 -0800 |
---|---|---|
committer | Valerio Virgillito | 2012-01-27 11:18:17 -0800 |
commit | b89a7ee8b956c96a1dcee995ea840feddc5d4b27 (patch) | |
tree | 0f3136ab0ecdbbbed6a83576581af0a53124d6f1 /js/tools/Translate3DToolBase.js | |
parent | 2401f05d1f4b94d45e4568b81fc73e67b969d980 (diff) | |
download | ninja-b89a7ee8b956c96a1dcee995ea840feddc5d4b27.tar.gz |
First commit of Ninja to ninja-internal
Signed-off-by: Valerio Virgillito <rmwh84@motorola.com>
Diffstat (limited to 'js/tools/Translate3DToolBase.js')
-rw-r--r-- | js/tools/Translate3DToolBase.js | 357 |
1 files changed, 357 insertions, 0 deletions
diff --git a/js/tools/Translate3DToolBase.js b/js/tools/Translate3DToolBase.js new file mode 100644 index 00000000..cbf76830 --- /dev/null +++ b/js/tools/Translate3DToolBase.js | |||
@@ -0,0 +1,357 @@ | |||
1 | /* <copyright> | ||
2 | This file contains proprietary software owned by Motorola Mobility, Inc.<br/> | ||
3 | No 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 | /* Base class for the 3D translate tools | ||
8 | Subclass TranslateObject3DTool will translate the object that was clicked. | ||
9 | */ | ||
10 | var Montage = require("montage/core/core").Montage, | ||
11 | ModifierToolBase = require("js/tools/modifier-tool-base").ModifierToolBase, | ||
12 | toolHandleModule = require("js/stage/tool-handle"), | ||
13 | snapManager = require("js/helper-classes/3D/snap-manager").SnapManager, | ||
14 | viewUtils = require("js/helper-classes/3D/view-utils").ViewUtils, | ||
15 | vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils, | ||
16 | drawUtils = require("js/helper-classes/3D/draw-utils").DrawUtils, | ||
17 | ElementsMediator = require("js/mediators/element-mediator").ElementMediator; | ||
18 | |||
19 | exports.Translate3DToolBase = Montage.create(ModifierToolBase, | ||
20 | { | ||
21 | _inLocalMode: { value: true, enumerable: true }, | ||
22 | |||
23 | HandleDoubleClick : { | ||
24 | value : function() | ||
25 | { | ||
26 | } | ||
27 | }, | ||
28 | |||
29 | modifyElements : { | ||
30 | value : function(data, event) | ||
31 | { | ||
32 | // form the translation vector and post translate the matrix by it. | ||
33 | var delta = vecUtils.vecSubtract( 3, data.pt1, data.pt0 ); | ||
34 | if(this._handleMode !== null) | ||
35 | { | ||
36 | switch(this._handleMode) | ||
37 | { | ||
38 | case 0: | ||
39 | delta[1] = 0; | ||
40 | delta[2] = 0; | ||
41 | break; | ||
42 | case 1: | ||
43 | delta[0] = 0; | ||
44 | delta[2] = 0; | ||
45 | break; | ||
46 | case 2: | ||
47 | delta[0] = 0; | ||
48 | delta[1] = 0; | ||
49 | break; | ||
50 | } | ||
51 | |||
52 | this._updateDelta(delta, this._handleMode); | ||
53 | } | ||
54 | else if(this._mode === 1) | ||
55 | { | ||
56 | delta[2] = delta[1]; | ||
57 | delta[0] = 0; | ||
58 | delta[1] = 0; | ||
59 | } | ||
60 | |||
61 | var transMat = Matrix.Translation( delta ); | ||
62 | if(this._inLocalMode && (this._targets.length === 1) ) | ||
63 | { | ||
64 | this._translateLocally(transMat); | ||
65 | } | ||
66 | else | ||
67 | { | ||
68 | this._translateGlobally(transMat); | ||
69 | } | ||
70 | } | ||
71 | }, | ||
72 | |||
73 | |||
74 | Reset : { | ||
75 | value : function() | ||
76 | { | ||
77 | var item, | ||
78 | elt, | ||
79 | mat, | ||
80 | dist, | ||
81 | newStyles = [], | ||
82 | previousStyles = [], | ||
83 | len = this._targets.length; | ||
84 | for(var i = 0; i < len; i++) | ||
85 | { | ||
86 | // Reset to the identity matrix but retain the rotation values | ||
87 | item = this._targets[i]; | ||
88 | elt = item.elt; | ||
89 | mat = item.mat.slice(0); | ||
90 | mat[12] = 0; | ||
91 | mat[13] = 0; | ||
92 | mat[14] = 0; | ||
93 | |||
94 | dist = this._undoArray[i].dist; | ||
95 | |||
96 | var previousStyleStr = {dist:dist, mat:item.mat}; | ||
97 | |||
98 | var newStyleStr = {dist:dist, mat:mat}; | ||
99 | |||
100 | previousStyles.push(previousStyleStr); | ||
101 | newStyles.push(newStyleStr); | ||
102 | } | ||
103 | |||
104 | ElementsMediator.set3DProperties(this.application.ninja.selectedElements, | ||
105 | newStyles, | ||
106 | "Change", | ||
107 | "translateTool", | ||
108 | previousStyles | ||
109 | ); | ||
110 | |||
111 | this.isDrawing = false; | ||
112 | this.endDraw(event); | ||
113 | |||
114 | // this.UpdateSelection(true); | ||
115 | this.Configure(true); | ||
116 | } | ||
117 | }, | ||
118 | |||
119 | // We will only translate single elements locally | ||
120 | _translateLocally: { | ||
121 | value: function (transMat) { | ||
122 | var mat = glmat4.multiply(this._startMat, transMat, []); | ||
123 | viewUtils.setMatrixForElement( this._target, mat, true ); | ||
124 | if(this._mode !== 1) | ||
125 | { | ||
126 | this._startMat = mat; | ||
127 | } | ||
128 | } | ||
129 | }, | ||
130 | |||
131 | _translateGlobally: { | ||
132 | value: function (transMat) { | ||
133 | var len = this._targets.length, | ||
134 | i = 0, | ||
135 | item, | ||
136 | elt, | ||
137 | curMat, | ||
138 | matInv = glmat4.inverse(this._startMat, []), | ||
139 | nMat = glmat4.multiply(transMat, this._startMat, [] ), | ||
140 | qMat = glmat4.multiply(matInv, nMat, []); | ||
141 | |||
142 | var shouldUpdateStartMat = true; | ||
143 | |||
144 | if(this._clickedObject === this.application.ninja.currentDocument.documentRoot) | ||
145 | { | ||
146 | shouldUpdateStartMat = false; | ||
147 | } | ||
148 | else if(this._mode !== 1) | ||
149 | { | ||
150 | this._startMat = nMat; | ||
151 | } | ||
152 | |||
153 | for(i = 0; i < len; i++) | ||
154 | { | ||
155 | item = this._targets[i]; | ||
156 | elt = item.elt; | ||
157 | curMat = item.mat; | ||
158 | |||
159 | glmat4.multiply(curMat, qMat, curMat); | ||
160 | |||
161 | viewUtils.setMatrixForElement( elt, curMat, true); | ||
162 | |||
163 | if(shouldUpdateStartMat) | ||
164 | { | ||
165 | this._targets[i].mat = curMat; | ||
166 | } | ||
167 | } | ||
168 | } | ||
169 | }, | ||
170 | |||
171 | _updateTargets: { | ||
172 | value: function(addToUndoStack) { | ||
173 | var newStyles = [], | ||
174 | previousStyles = [], | ||
175 | len = this.application.ninja.selectedElements.length; | ||
176 | this._targets = []; | ||
177 | for(var i = 0; i < len; i++) | ||
178 | { | ||
179 | var elt = this.application.ninja.selectedElements[i]._element; | ||
180 | |||
181 | var curMat = viewUtils.getMatrixFromElement(elt); | ||
182 | var curMatInv = glmat4.inverse(curMat, []); | ||
183 | |||
184 | this._targets.push({elt:elt, mat:curMat, matInv:curMatInv}); | ||
185 | if(addToUndoStack) | ||
186 | { | ||
187 | var previousStyleStr = {dist:this._undoArray[i].dist, mat:MathUtils.scientificToDecimal(this._undoArray[i].mat.slice(0), 5)}; | ||
188 | |||
189 | var newStyleStr = {dist:viewUtils.getPerspectiveDistFromElement(elt), mat:MathUtils.scientificToDecimal(curMat, 5)}; | ||
190 | |||
191 | previousStyles.push(previousStyleStr); | ||
192 | newStyles.push(newStyleStr); | ||
193 | } | ||
194 | } | ||
195 | if(addToUndoStack) | ||
196 | { | ||
197 | ElementsMediator.set3DProperties(this.application.ninja.selectedElements, | ||
198 | newStyles, | ||
199 | "Change", | ||
200 | "translateTool", | ||
201 | previousStyles | ||
202 | ); | ||
203 | } | ||
204 | // Save previous value for undo/redo | ||
205 | this._undoArray = []; | ||
206 | for(i = 0, len = this._targets.length; i < len; i++) | ||
207 | { | ||
208 | var elt = this._targets[i].elt; | ||
209 | var _mat = viewUtils.getMatrixFromElement(elt); | ||
210 | var _dist = viewUtils.getPerspectiveDistFromElement(elt); | ||
211 | this._undoArray.push({mat:_mat, dist:_dist}); | ||
212 | } | ||
213 | |||
214 | } | ||
215 | }, | ||
216 | |||
217 | HandleAltKeyDown: { | ||
218 | value: function(event) { | ||
219 | this._inLocalMode = !this._inLocalMode; | ||
220 | this.DrawHandles(); | ||
221 | } | ||
222 | }, | ||
223 | |||
224 | HandleAltKeyUp: { | ||
225 | value: function(event) { | ||
226 | this._inLocalMode = !this._inLocalMode; | ||
227 | this.DrawHandles(); | ||
228 | } | ||
229 | }, | ||
230 | |||
231 | handleScroll: { | ||
< |