aboutsummaryrefslogtreecommitdiff
path: root/js/tools/Translate3DToolBase.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/tools/Translate3DToolBase.js')
-rwxr-xr-xjs/tools/Translate3DToolBase.js180
1 files changed, 74 insertions, 106 deletions
diff --git a/js/tools/Translate3DToolBase.js b/js/tools/Translate3DToolBase.js
index 4dca6313..04359567 100755
--- a/js/tools/Translate3DToolBase.js
+++ b/js/tools/Translate3DToolBase.js
@@ -21,14 +21,15 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase,
21 _clickedOnStage: { value: false }, 21 _clickedOnStage: { value: false },
22 22
23 HandleDoubleClick : { 23 HandleDoubleClick : {
24 value : function() 24 value : function() {
25 {
26 } 25 }
27 }, 26 },
28 27
29 modifyElements : { 28 modifyElements : {
30 value : function(data, event) 29 value : function(data, event)
31 { 30 {
31 //console.log( "modifyElements, data: " + data.pt0 + " => " + data.pt1 );
32
32 // form the translation vector and post translate the matrix by it. 33 // form the translation vector and post translate the matrix by it.
33 var delta = vecUtils.vecSubtract( 3, data.pt1, data.pt0 ); 34 var delta = vecUtils.vecSubtract( 3, data.pt1, data.pt0 );
34 if(this._handleMode !== null) 35 if(this._handleMode !== null)
@@ -66,16 +67,13 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase,
66 delta[0] = 0; 67 delta[0] = 0;
67 delta[1] = 0; 68 delta[1] = 0;
68 } 69 }
69 else
70 {
71 delta[2] = 0;
72 }
73 this._delta = delta.slice(0); 70 this._delta = delta.slice(0);
74 } 71 }
75 72
76 var transMat = Matrix.Translation( delta ); 73 var transMat = Matrix.Translation( delta );
77 74
78 if(this._inLocalMode && (this._targets.length === 1) ) 75 //console.log( "Translate: " + delta );
76 if(this._inLocalMode && (this.application.ninja.selectedElements.length === 1) )
79 { 77 {
80 this._translateLocally(transMat); 78 this._translateLocally(transMat);
81 } 79 }
@@ -87,53 +85,45 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase,
87 }, 85 },
88 86
89 87
90 Reset : { 88 Reset: {
91 value : function() 89 value: function() {
92 { 90 var mat, iMat, dist, mod3dObject = [], self = this;
93 var item, 91
94 elt, 92 this.application.ninja.selectedElements.forEach(function(element) {
95 mat, 93 // Reset to the identity matrix
96 dist, 94 //item = this.application.ninja.selectedElements[i];
97 newStyles = [], 95 iMat = Matrix.I(4);
98 previousStyles = [], 96 mat = ElementsMediator.getMatrix(element);
99 len = this._targets.length;
100 for(var i = 0; i < len; i++)
101 {
102 // Reset to the identity matrix but retain the rotation values
103 item = this._targets[i];
104 mat = item.mat.slice(0);
105 mat[12] = 0; 97 mat[12] = 0;
106 mat[13] = 0; 98 mat[13] = 0;
107 mat[14] = 0; 99 mat[14] = 0;
108 100
109 dist = this._undoArray[i].dist; 101 dist = ElementsMediator.getPerspectiveDist(element);
110
111 var previousStyleStr = {dist:dist, mat:item.mat};
112 102
113 var newStyleStr = {dist:dist, mat:mat}; 103 var previousStyleStr = {dist:dist, mat:element.elementModel.getProperty("mat")};
104 var newStyleStr = {dist:dist, mat:iMat};
114 105
115 previousStyles.push(previousStyleStr); 106 mod3dObject.push({element:element, properties:newStyleStr, previousProperties: previousStyleStr});
116 newStyles.push(newStyleStr); 107 });
117 }
118 108
119 ElementsMediator.set3DProperties(this.application.ninja.selectedElements, 109 ElementsMediator.set3DProperties(mod3dObject, "Change", "rotateTool");
120 newStyles,
121 "Change",
122 "translateTool",
123 previousStyles
124 );
125 110
126 this.isDrawing = false; 111 this.isDrawing = false;
127 this.endDraw(event); 112 this.endDraw(event);
128 113
129// this.UpdateSelection(true); 114 // Need to force stage to draw immediately so the new selection center is calculated
130 this.Configure(true); 115 this.application.ninja.stage.draw();
116 // And captureSelectionDrawn to draw the transform handles
117 this.captureSelectionDrawn(null);
131 } 118 }
132 }, 119 },
133 120
134 // We will only translate single elements locally 121 // We will only translate single elements locally
135 _translateLocally: { 122 _translateLocally: {
136 value: function (transMat) { 123 value: function (transMat) {
124 //console.log( "_translateLocally, startMat: " + this._startMat );
125 //console.log( "_translateLocally, transMat: " + transMat );
126 //console.log( "_translateLocally, startMat: " + this._startMat + ", transMat: " + transMat );
137 var mat = glmat4.multiply(this._startMat, transMat, []); 127 var mat = glmat4.multiply(this._startMat, transMat, []);
138 viewUtils.setMatrixForElement( this._target, mat, true ); 128 viewUtils.setMatrixForElement( this._target, mat, true );
139 if(this._mode !== 1) 129 if(this._mode !== 1)
@@ -145,103 +135,81 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase,
145 135
146 _translateGlobally: { 136 _translateGlobally: {
147 value: function (transMat) { 137 value: function (transMat) {
148 var len = this._targets.length, 138 //console.log( "_translateGlobally, startMat: " + this._startMat + ", transMat: " + transMat );
149 i = 0, 139 //console.log( "_translateGlobally, transMat: " + transMat );
150 item, 140 var self = this,
151 elt, 141 curMat = viewUtils.getMatrixFromElement( this._target ),
152 curMat,
153 matInv = glmat4.inverse(this._startMat, []), 142 matInv = glmat4.inverse(this._startMat, []),
154 nMat = glmat4.multiply(transMat, this._startMat, [] ), 143 nMat = glmat4.multiply(transMat, this._startMat, [] );
155 qMat = glmat4.multiply(matInv, nMat, []); 144// qMat = glmat4.multiply(matInv, nMat, []);
145
146 if(this._mode === 1) {
147 var curInv = glmat4.inverse( curMat, [] );
148 transMat = glmat4.multiply( nMat, curInv, [] );
149 }
156 150
157 var shouldUpdateStartMat = true; 151 var shouldUpdateStartMat = true;
158 152
159 if(this._clickedOnStage) 153 if(this._clickedOnStage) {
160 {
161 shouldUpdateStartMat = false; 154 shouldUpdateStartMat = false;
162 } 155 } else if(this._mode !== 1) {
163 else if(this._mode !== 1)
164 {
165 this._startMat = nMat; 156 this._startMat = nMat;
166 } 157 }
167 158
168 for(i = 0; i < len; i++) 159 this.application.ninja.selectedElements.forEach(function(element) {
169 { 160 curMat = element.elementModel.getProperty("mat").slice(0);
170 item = this._targets[i];
171 elt = item.elt;
172 curMat = item.mat.slice(0);
173 161
174// glmat4.multiply(curMat, qMat, curMat); 162// glmat4.multiply(curMat, qMat, curMat);
175// 163// viewUtils.setMatrixForElement( elt, curMat, true);
176// viewUtils.setMatrixForElement( elt, curMat, true);
177 curMat[12] += transMat[12]; 164 curMat[12] += transMat[12];
178 curMat[13] += transMat[13]; 165 curMat[13] += transMat[13];
179 curMat[14] += transMat[14]; 166 curMat[14] += transMat[14];
180 viewUtils.setMatrixForElement( elt, curMat, true);
181 167
182 if(shouldUpdateStartMat) 168 viewUtils.setMatrixForElement(element, curMat, true);
183 { 169
184 this._targets[i].mat = curMat; 170 if(shouldUpdateStartMat) {
185 } 171 //console.log( "\t\tshouldUpdateStartMat" );
186 } 172 element.elementModel.setProperty("mat", curMat);
173 }
174
175 });
187 } 176 }
188 }, 177 },
189 178
190 _updateTargets: { 179 _updateTargets: {
191 value: function(addToUndoStack) { 180 value: function(addToUndo) {
192 var newStyles = [], 181 var mod3dObject = [], self = this;
193 previousStyles = [],
194 len = this.application.ninja.selectedElements.length;
195 this._targets = [];
196 for(var i = 0; i < len; i++)
197 {
198 var elt = this.application.ninja.selectedElements[i];
199 182
200 var curMat = viewUtils.getMatrixFromElement(elt); 183 this.application.ninja.selectedElements.forEach(function(element) {
201 var curMatInv = glmat4.inverse(curMat, []); 184 if(addToUndo) {
185 var previousMat = element.elementModel.getProperty("mat").slice(0);
186 var previousStyleStr = {dist:element.elementModel.getProperty("dist"), mat:MathUtils.scientificToDecimal(previousMat, 5)};
187 var newStyleStr = {dist:viewUtils.getPerspectiveDistFromElement(element), mat:MathUtils.scientificToDecimal(viewUtils.getMatrixFromElement(element), 5)};
202 188
203 this._targets.push({elt:elt, mat:curMat, matInv:curMatInv}); 189 mod3dObject.push({element:element, properties:newStyleStr, previousProperties: previousStyleStr});
204 if(addToUndoStack)
205 {
206 var previousStyleStr = {dist:this._undoArray[i].dist, mat:MathUtils.scientificToDecimal(this._undoArray[i].mat.slice(0), 5)};
207 190
208 var newStyleStr = {dist:viewUtils.getPerspectiveDistFromElement(elt), mat:MathUtils.scientificToDecimal(curMat, 5)};
209
210 previousStyles.push(previousStyleStr);
211 newStyles.push(newStyleStr);
212