diff options
Diffstat (limited to 'js/tools/Translate3DToolBase.js')
-rwxr-xr-x | js/tools/Translate3DToolBase.js | 453 |
1 files changed, 227 insertions, 226 deletions
diff --git a/js/tools/Translate3DToolBase.js b/js/tools/Translate3DToolBase.js index 00408b6e..57a379e4 100755 --- a/js/tools/Translate3DToolBase.js +++ b/js/tools/Translate3DToolBase.js | |||
@@ -1,24 +1,25 @@ | |||
1 | /* <copyright> | 1 | /* <copyright> |
2 | Copyright (c) 2012, Motorola Mobility, Inc | 2 | Copyright (c) 2012, Motorola Mobility LLC. |
3 | All Rights Reserved. | 3 | All Rights Reserved. |
4 | BSD License. | ||
5 | 4 | ||
6 | Redistribution and use in source and binary forms, with or without | 5 | Redistribution and use in source and binary forms, with or without |
7 | modification, are permitted provided that the following conditions are met: | 6 | modification, are permitted provided that the following conditions are met: |
8 | 7 | ||
9 | - Redistributions of source code must retain the above copyright notice, | 8 | * Redistributions of source code must retain the above copyright notice, |
10 | this list of conditions and the following disclaimer. | 9 | this list of conditions and the following disclaimer. |
11 | - Redistributions in binary form must reproduce the above copyright | 10 | |
12 | notice, this list of conditions and the following disclaimer in the | 11 | * Redistributions in binary form must reproduce the above copyright notice, |
13 | documentation and/or other materials provided with the distribution. | 12 | this list of conditions and the following disclaimer in the documentation |
14 | - Neither the name of Motorola Mobility nor the names of its contributors | 13 | and/or other materials provided with the distribution. |
15 | may be used to endorse or promote products derived from this software | 14 | |
16 | without specific prior written permission. | 15 | * Neither the name of Motorola Mobility LLC nor the names of its |
16 | contributors may be used to endorse or promote products derived from this | ||
17 | software without specific prior written permission. | ||
17 | 18 | ||
18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" | 19 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" |
19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE | 20 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE | 21 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
21 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE | 22 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE |
22 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR | 23 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR |
23 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF | 24 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
24 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | 25 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
@@ -41,16 +42,16 @@ var Montage = require("montage/core/core").Montage, | |||
41 | 42 | ||
42 | exports.Translate3DToolBase = Montage.create(ModifierToolBase, | 43 | exports.Translate3DToolBase = Montage.create(ModifierToolBase, |
43 | { | 44 | { |
44 | _inLocalMode: { value: true, enumerable: true }, | 45 | _inLocalMode: { value: true, enumerable: true }, |
45 | _clickedOnStage: { value: false }, | 46 | _clickedOnStage: { value: false }, |
46 | 47 | ||
47 | HandleDoubleClick : { | 48 | HandleDoubleClick : { |
48 | value : function() { | 49 | value : function() { |
49 | } | 50 | } |
50 | }, | 51 | }, |
51 | 52 | ||
52 | modifyElements : { | 53 | modifyElements : { |
53 | value : function(data, event) | 54 | value : function(data, event) |
54 | { | 55 | { |
55 | //console.log( "modifyElements, data: " + data.pt0 + " => " + data.pt1 ); | 56 | //console.log( "modifyElements, data: " + data.pt0 + " => " + data.pt1 ); |
56 | 57 | ||
@@ -94,7 +95,7 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, | |||
94 | this._delta = delta.slice(0); | 95 | this._delta = delta.slice(0); |
95 | } | 96 | } |
96 | 97 | ||
97 | //console.log( "modifyElements delta: " + delta ); | 98 | //console.log( "modifyElements delta: " + delta ); |
98 | var transMat = Matrix.Translation( delta ); | 99 | var transMat = Matrix.Translation( delta ); |
99 | 100 | ||
100 | //console.log( "Translate: " + delta ); | 101 | //console.log( "Translate: " + delta ); |
@@ -107,11 +108,11 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, | |||
107 | this._translateGlobally(transMat); | 108 | this._translateGlobally(transMat); |
108 | } | 109 | } |
109 | } | 110 | } |
110 | }, | 111 | }, |
111 | 112 | ||
112 | 113 | ||
113 | Reset: { | 114 | Reset: { |
114 | value: function() { | 115 | value: function() { |
115 | var mat, iMat, dist, mod3dObject = [], self = this; | 116 | var mat, iMat, dist, mod3dObject = [], self = this; |
116 | 117 | ||
117 | this.application.ninja.selectedElements.forEach(function(element) { | 118 | this.application.ninja.selectedElements.forEach(function(element) { |
@@ -133,60 +134,60 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, | |||
133 | 134 | ||
134 | ElementsMediator.set3DProperties(mod3dObject, "Change", "rotateTool"); | 135 | ElementsMediator.set3DProperties(mod3dObject, "Change", "rotateTool"); |
135 | 136 | ||
136 | this.isDrawing = false; | 137 | this.isDrawing = false; |
137 | this.endDraw(event); | 138 | this.endDraw(event); |
138 | 139 | ||
139 | // Need to force stage to draw immediately so the new selection center is calculated | 140 | // Need to force stage to draw immediately so the new selection center is calculated |
140 | this.application.ninja.stage.draw(); | 141 | this.application.ninja.stage.draw(); |
141 | // And captureSelectionDrawn to draw the transform handles | 142 | // And captureSelectionDrawn to draw the transform handles |
142 | this.captureSelectionDrawn(null); | 143 | this.captureSelectionDrawn(null); |
143 | } | 144 | } |
144 | }, | 145 | }, |
145 | 146 | ||
146 | // We will only translate single elements locally | 147 | // We will only translate single elements locally |
147 | _translateLocally: { | 148 | _translateLocally: { |
148 | value: function (transMat) { | 149 | value: function (transMat) { |
149 | //console.log( "_translateLocally, startMat: " + this._startMat ); | 150 | //console.log( "_translateLocally, startMat: " + this._startMat ); |
150 | //console.log( "_translateLocally, transMat: " + transMat ); | 151 | //console.log( "_translateLocally, transMat: " + transMat ); |
151 | //console.log( "_translateLocally, startMat: " + this._startMat + ", transMat: " + transMat ); | 152 | //console.log( "_translateLocally, startMat: " + this._startMat + ", transMat: " + transMat ); |
152 | var mat = glmat4.multiply(this._startMat, transMat, []); | 153 | var mat = glmat4.multiply(this._startMat, transMat, []); |
153 | viewUtils.setMatrixForElement( this._target, mat, true ); | 154 | viewUtils.setMatrixForElement( this._target, mat, true ); |
154 | if(this._mode !== 1) | 155 | if(this._mode !== 1) |
155 | { | 156 | { |
156 | this._startMat = mat; | 157 | this._startMat = mat; |
157 | } | 158 | } |
158 | } | 159 | } |
159 | }, | 160 | }, |
160 | 161 | ||
161 | _translateGlobally: { | 162 | _translateGlobally: { |
162 | value: function (transMat) { | 163 | value: function (transMat) { |
163 | //console.log( "_translateGlobally, transMat: " + transMat ); | 164 | //console.log( "_translateGlobally, transMat: " + transMat ); |
164 | var selectedElements = this.application.ninja.selectedElements; | 165 | var selectedElements = this.application.ninja.selectedElements; |
165 | 166 | ||
166 | var len = selectedElements.length, | 167 | var len = selectedElements.length, |
167 | self = this, | 168 | self = this, |
168 | target = selectedElements[0], | 169 | target = selectedElements[0], |
169 | curMat = viewUtils.getMatrixFromElement( target ), | 170 | curMat = viewUtils.getMatrixFromElement( target ), |
170 | matInv = glmat4.inverse(this._startMat, []), | 171 | matInv = glmat4.inverse(this._startMat, []), |
171 | nMat = glmat4.multiply(transMat, this._startMat, [] ); | 172 | nMat = glmat4.multiply(transMat, this._startMat, [] ); |
172 | // qMat = glmat4.multiply(matInv, nMat, []); | 173 | // qMat = glmat4.multiply(matInv, nMat, []); |
173 | 174 | ||
174 | if(this._mode === 1) { | 175 | if(this._mode === 1) { |
175 | if (len > 1) curMat = target.elementModel.getProperty("mat").slice(); | 176 | if (len > 1) curMat = target.elementModel.getProperty("mat").slice(); |
176 | var curInv = glmat4.inverse( curMat, [] ); | 177 | var curInv = glmat4.inverse( curMat, [] ); |
177 | transMat = glmat4.multiply( nMat, curInv, [] ); | 178 | transMat = glmat4.multiply( nMat, curInv, [] ); |
178 | } | 179 | } |
179 | 180 | ||
180 | var shouldUpdateStartMat = true; | 181 | var shouldUpdateStartMat = true; |
181 | 182 | ||
182 | if(this._clickedOnStage || ((this._handleMode === 2) && (len > 1))) | 183 | if(this._clickedOnStage || ((this._handleMode === 2) && (len > 1))) |
183 | { | 184 | { |
184 | shouldUpdateStartMat = false; | 185 | shouldUpdateStartMat = false; |
185 | } | 186 | } |
186 | else if(this._mode !== 1) | 187 | else if(this._mode !== 1) |
187 | { | 188 | { |
188 | this._startMat = nMat; | 189 | this._startMat = nMat; |
189 | } | 190 | } |
190 | 191 | ||
191 | selectedElements.forEach(function(element) { | 192 | selectedElements.forEach(function(element) { |
192 | curMat = element.elementModel.getProperty("mat").slice(0); | 193 | curMat = element.elementModel.getProperty("mat").slice(0); |
@@ -205,11 +206,11 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, | |||
205 | } | 206 | } |
206 | 207 | ||
207 | }); | 208 | }); |
208 | } | 209 | } |
209 | }, | 210 | }, |
210 | 211 | ||
211 | _updateTargets: { | 212 | _updateTargets: { |
212 | value: function(addToUndo) { | 213 | value: function(addToUndo) { |
213 | var mod3dObject = [], self = this; | 214 | var mod3dObject = [], self = this; |
214 | 215 | ||
215 | this.application.ninja.selectedElements.forEach(function(element) { | 216 | this.application.ninja.selectedElements.forEach(function(element) { |
@@ -223,7 +224,7 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, | |||
223 | } | 224 | } |
224 | }); | 225 | }); |
225 | 226 | ||
226 | if(addToUndo) { | 227 | if(addToUndo) { |
227 | ElementsMediator.set3DProperties(mod3dObject, "Change", "translateTool"); | 228 | ElementsMediator.set3DProperties(mod3dObject, "Change", "translateTool"); |
228 | 229 | ||
229 | if(this._origin && this._delta) { | 230 | if(this._origin && this._delta) { |
@@ -243,54 +244,54 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, | |||
243 | element.elementModel.setProperty("dist", viewUtils.getPerspectiveDistFromElement(element)); | 244 | element.elementModel.setProperty("dist", viewUtils.getPerspectiveDistFromElement(element)); |
244 | }); | 245 | }); |
245 | 246 | ||
246 | } | 247 | } |
247 | }, | 248 | }, |
248 | 249 | ||
249 | HandleAltKeyDown: { | 250 | HandleAltKeyDown: { |
250 | value: function(event) { | 251 |