aboutsummaryrefslogtreecommitdiff
path: root/js/tools/RotateStage3DTool.js
diff options
context:
space:
mode:
authorPierre Frisch2011-12-22 07:25:50 -0800
committerValerio Virgillito2012-01-27 11:18:17 -0800
commitb89a7ee8b956c96a1dcee995ea840feddc5d4b27 (patch)
tree0f3136ab0ecdbbbed6a83576581af0a53124d6f1 /js/tools/RotateStage3DTool.js
parent2401f05d1f4b94d45e4568b81fc73e67b969d980 (diff)
downloadninja-b89a7ee8b956c96a1dcee995ea840feddc5d4b27.tar.gz
First commit of Ninja to ninja-internal
Signed-off-by: Valerio Virgillito <rmwh84@motorola.com>
Diffstat (limited to 'js/tools/RotateStage3DTool.js')
-rw-r--r--js/tools/RotateStage3DTool.js148
1 files changed, 148 insertions, 0 deletions
diff --git a/js/tools/RotateStage3DTool.js b/js/tools/RotateStage3DTool.js
new file mode 100644
index 00000000..6f07adae
--- /dev/null
+++ b/js/tools/RotateStage3DTool.js
@@ -0,0 +1,148 @@
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
7var Montage = require("montage/core/core").Montage,
8 Rotate3DToolBase = require("js/tools/Rotate3DToolBase").Rotate3DToolBase,
9 toolHandleModule = require("js/stage/tool-handle"),
10 snapManager = require("js/helper-classes/3D/snap-manager").SnapManager,
11 viewUtils = require("js/helper-classes/3D/view-utils").ViewUtils,
12 vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils,
13 drawUtils = require("js/helper-classes/3D/draw-utils").DrawUtils,
14 ElementsMediator = require("js/mediators/element-mediator").ElementMediator;
15
16exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, {
17 _toolID: { value: "rotateStage3DTool" },
18 _imageID: { value: "rotateStage3DToolImg" },
19 _toolImageClass: { value: "rotateStage3DToolUp" },
20 _selectedToolImageClass: { value: "rotateStage3DToolDown" },
21 _toolTipText : { value : "3D Rotate Stage Tool" },
22 _canOperateOnStage:{value:false,writable:true},
23
24 _initializeToolHandles: {
25 value: function() {
26 if(!this._handles)
27 {
28 this._handles = [];
29
30 // TODO - Using dummy cursors for now
31
32 // rotateX
33 var rX = toolHandleModule.RotateHandle.create();
34 rX.init("url('images/cursors/Translate_X.png') 0 0, default", 'rgba(255,0,0,1)', "x");
35 this._handles.push(rX);
36
37 // rotateY
38 var rY = toolHandleModule.RotateHandle.create();
39 rY.init("url('images/cursors/Translate_Y.png') 0 0, default", 'rgba(0,255,0,1)', "y");
40 this._handles.push(rY);
41
42 // rotateZ
43 var rZ = toolHandleModule.RotateHandle.create();
44 rZ.init("url('images/cursors/Translate_Z.png') 0 0, default", 'rgba(0,0,255,1)', "z");
45 this._handles.push(rZ);
46 }
47
48 var len = this._handles.length;
49 var i = 0,
50 toolHandle;
51 for (i=0; i<len; i++)
52 {
53 toolHandle = this._handles[i];
54 toolHandle._lineWidth = 3;
55 toolHandle._radius = 100;
56 toolHandle._nTriangles = 60;
57 var angle = 2.0*Math.PI/Number(toolHandle._nTriangles);
58 toolHandle._rotMat = Matrix.RotationZ( angle );
59 }
60 }
61 },
62
63 _updateTargets: {
64 value: function(addToUndoStack) {
65 this._targets = [];
66 var elt = this._target;
67
68 var curMat = viewUtils.getMatrixFromElement(elt);
69 var curMatInv = glmat4.inverse(curMat, []);
70
71 viewUtils.pushViewportObj( elt );
72 var eltCtr = viewUtils.getCenterOfProjection();
73 viewUtils.popViewportObj();
74
75 eltCtr = viewUtils.localToGlobal(eltCtr, elt);
76
77 this._targets.push({elt:elt, mat:curMat, matInv:curMatInv, ctr:eltCtr});
78
79 viewUtils.setMatrixForElement( elt, curMat, false );
80 }
81 },
82
83 captureSelectionDrawn: {
84 value: function(event){
85 this._origin = null;
86 this._targets = null;
87 this._startOriginArray = null;
88
89 var stage = this.application.ninja.currentDocument.documentRoot;
90 this.target = stage;
91
92 viewUtils.pushViewportObj( stage );
93 var eltCtr = viewUtils.getCenterOfProjection();
94 viewUtils.popViewportObj();
95
96 this._targets = [];
97
98 var curMat = viewUtils.getMatrixFromElement(stage);
99 var curMatInv = glmat4.inverse(curMat, []);
100
101 this._targets.push({elt:stage, mat:curMat, matInv:curMatInv, ctr:eltCtr});
102
103 var ctrOffset = stage.elementModel.props3D.m_transformCtr;
104 if(ctrOffset)
105 {
106 eltCtr[2] = 0;
107 eltCtr = vecUtils.vecAdd(3, eltCtr, ctrOffset);
108 }
109
110 this._origin = viewUtils.localToGlobal(eltCtr, stage);
111
112 this._setTransformOrigin(false);
113
114 this.DrawHandles();
115 }
116 },
117
118 captureElementChange: {
119 value: function(event) {
120 if(event._event.item === this.application.ninja.currentDocument.documentRoot)
121 {
122 this.captureSelectionDrawn(null);
123 }
124 }
125 },
126
127 Reset : {
128 value : function()
129 {
130 // Reset stage to identity matrix
131 var iMat = Matrix.I(4);
132
133 ElementsMediator.setMatrix(this.application.ninja.currentDocument.documentRoot, iMat, false);
134
135 this.application.ninja.currentDocument.documentRoot.elementModel.props3D.m_transformCtr = null;
136
137 // TODO - Any updates to the stage should redraw stage's children. Move this to mediator?
138 this.application.ninja.stage.updatedStage = true;
139
140 this.isDrawing = false;
141 this.endDraw(event);
142
143// this.UpdateSelection(true);
144 this.Configure(true);
145 }
146 }
147
148});