aboutsummaryrefslogtreecommitdiff
path: root/js/panels/properties.reel/sections/three-d-view.reel/three-d-view.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/panels/properties.reel/sections/three-d-view.reel/three-d-view.js')
-rwxr-xr-xjs/panels/properties.reel/sections/three-d-view.reel/three-d-view.js121
1 files changed, 113 insertions, 8 deletions
diff --git a/js/panels/properties.reel/sections/three-d-view.reel/three-d-view.js b/js/panels/properties.reel/sections/three-d-view.reel/three-d-view.js
index 104d474d..5839ac64 100755
--- a/js/panels/properties.reel/sections/three-d-view.reel/three-d-view.js
+++ b/js/panels/properties.reel/sections/three-d-view.reel/three-d-view.js
@@ -4,8 +4,8 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot
4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved. 4(c) Copyright 2011 Motorola Mobility, Inc. All Rights Reserved.
5</copyright> */ 5</copyright> */
6 6
7var Montage = require("montage/core/core").Montage; 7var Montage = require("montage/core/core").Montage,
8var Component = require("montage/ui/component").Component; 8 Component = require("montage/ui/component").Component;
9 9
10exports.ThreeD = Montage.create(Component, { 10exports.ThreeD = Montage.create(Component, {
11 11
@@ -51,6 +51,61 @@ exports.ThreeD = Montage.create(Component, {
51 } 51 }
52 }, 52 },
53 53
54 x3DControl: {
55 value: null,
56 serializable: true
57 },
58
59 y3DControl: {
60 value: null,
61 serializable: true
62 },
63
64 z3DControl: {
65 value: null,
66 serializable: true
67 },
68
69 x3DLabel: {
70 value: null,
71 serializable: true
72 },
73
74 y3DLabel: {
75 value: null,
76 serializable: true
77 },
78
79 z3DLabel: {
80 value: null,
81 serializable: true
82 },
83
84 xAngleControl: {
85 value: null,
86 serializable: true
87 },
88
89 yAngleControl: {
90 value: null,
91 serializable: true
92 },
93
94 zAngleControl: {
95 value: null,
96 serializable: true
97 },
98
99 axisModeGroupControl: {
100 value: null,
101 serializable: true
102 },
103
104 flattenControl: {
105 value: null,
106 serializable: true
107 },
108
54 x3D: { 109 x3D: {
55 value: 0 110 value: 0
56 }, 111 },
@@ -107,6 +162,10 @@ exports.ThreeD = Montage.create(Component, {
107 value: null 162 value: null
108 }, 163 },
109 164
165 _transformCtr: {
166 value: null
167 },
168
110 handleAction: { 169 handleAction: {
111 value: function(event) { 170 value: function(event) {
112 if(event.currentTarget.identifier === "flatten") { 171 if(event.currentTarget.identifier === "flatten") {
@@ -143,10 +202,20 @@ exports.ThreeD = Montage.create(Component, {
143 value : function(prop, value, item, inGlobalMode, isChanging){ 202 value : function(prop, value, item, inGlobalMode, isChanging){
144 if(!this._curMat) { 203 if(!this._curMat) {
145 this._curMat = this.application.ninja.elementMediator.getMatrix(item); 204 this._curMat = this.application.ninja.elementMediator.getMatrix(item);
205// this._transformCtr = item.elementModel.props3D.m_transformCtr || [0,0,0];
206 // TODO - Always use the center for now until we support multiple selections
207 this._transformCtr = [0,0,0];
208 if(inGlobalMode) {
209 this._transformCtr = MathUtils.transformPoint(this._transformCtr, this._curMat);
210 }
146 } 211 }
147 212
148 var curMat = this._curMat; 213 var curMat = this._curMat,
149 var delta = value.value; 214 delta = value.value,
215 isRotating = false,
216 xFormMat = Matrix.I(4),
217 tMat = Matrix.I(4),
218 mat = [];
150 if(inGlobalMode) { 219 if(inGlobalMode) {
151 220
152 if(!this._curProp) { 221 if(!this._curProp) {
@@ -156,17 +225,19 @@ exports.ThreeD = Montage.create(Component, {
156 delta -= this._curProp; 225 delta -= this._curProp;
157 } 226 }
158 227
159 var xFormMat = Matrix.I(4);
160 switch (prop) 228 switch (prop)
161 { 229 {
162 case "xAngle": 230 case "xAngle":
163 xFormMat = Matrix.RotationX(MathUtils.DEG_TO_RAD * delta); 231 xFormMat = Matrix.RotationX(MathUtils.DEG_TO_RAD * delta);
232 isRotating = true;
164 break; 233 break;
165 case "yAngle": 234 case "yAngle":
166 xFormMat = Matrix.RotationY(MathUtils.DEG_TO_RAD * delta); 235 xFormMat = Matrix.RotationY(MathUtils.DEG_TO_RAD * delta);
236 isRotating = true;
167 break; 237 break;
168 case "zAngle": 238 case "zAngle":
169 xFormMat = Matrix.RotationZ(MathUtils.DEG_TO_RAD * delta); 239 xFormMat = Matrix.RotationZ(MathUtils.DEG_TO_RAD * delta);
240 isRotating = true;
170 break; 241 break;
171 case "x3D": 242 case "x3D":
172 xFormMat[12] = delta; 243 xFormMat[12] = delta;
@@ -179,11 +250,45 @@ exports.ThreeD = Montage.create(Component, {
179 break; 250 break;
180 } 251 }
181 252
182 var mat = [];
183 if(inGlobalMode) { 253 if(inGlobalMode) {
184 glmat4.multiply(xFormMat, curMat, mat); 254
255 if(isRotating) {
256
257 // pre-translate by the transformation center
258 tMat[12] = this._transformCtr[0];
259 tMat[13] = this._transformCtr[1];
260 tMat[14] = this._transformCtr[2];
261
262 glmat4.multiply(tMat, xFormMat, mat);
263
264 // translate back
265 tMat[12] = -this._transformCtr[0];
266 tMat[13] = -this._transformCtr[1];
267 tMat[14] = -this._transformCtr[2];
268
269 glmat4.multiply(mat, tMat, mat);
270 glmat4.multiply(mat, curMat, mat);
271 } else {
272 glmat4.multiply(xFormMat, curMat, mat);
273 }
185 } else { 274 } else {
186 glmat4.multiply(curMat, xFormMat, mat); 275 if(isRotating) {
276 tMat[12] = this._transformCtr[0];
277 tMat[13] = this._transformCtr[1];
278 tMat[14] = this._transformCtr[2];
279
280 glmat4.multiply(curMat, tMat, mat);
281
282 // translate back
283 tMat[12] = -this._transformCtr[0];
284 tMat[13] = -this._transformCtr[1];
285 tMat[14] = -this._transformCtr[2];
286
287 glmat4.multiply(mat, xFormMat, mat);
288 glmat4.multiply(mat, tMat, mat);
289 } else {
290 glmat4.multiply(curMat, xFormMat, mat);
291 }
187 } 292 }
188 293
189 if(isChanging) { 294 if(isChanging) {