aboutsummaryrefslogtreecommitdiff
path: root/js/tools/Translate3DToolBase.js
diff options
context:
space:
mode:
authorhwc4872012-04-16 10:34:14 -0700
committerhwc4872012-04-16 10:34:14 -0700
commita62cfc5976b03a9b6c7ee2f308312319b6b0e142 (patch)
treec7a44dac7a46c13ed73758a323afe5b0229362ce /js/tools/Translate3DToolBase.js
parent642d7b45446894a2f3038dcc07a867b260968256 (diff)
downloadninja-a62cfc5976b03a9b6c7ee2f308312319b6b0e142.tar.gz
3D translation fixes
Diffstat (limited to 'js/tools/Translate3DToolBase.js')
-rwxr-xr-xjs/tools/Translate3DToolBase.js115
1 files changed, 93 insertions, 22 deletions
diff --git a/js/tools/Translate3DToolBase.js b/js/tools/Translate3DToolBase.js
index a39dafad..41dbb3ae 100755
--- a/js/tools/Translate3DToolBase.js
+++ b/js/tools/Translate3DToolBase.js
@@ -296,42 +296,113 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase,
296 viewUtils.popViewportObj(); 296 viewUtils.popViewportObj();
297 ctr[2] = 0; 297 ctr[2] = 0;
298 298
299// var ctrOffset = item.elementModel.props3D.m_transformCtr;
300// if(ctrOffset)
301// {
302// ctr = vecUtils.vecAdd(3, ctr, ctrOffset);
303// }
304
305 this._origin = viewUtils.localToGlobal(ctr, item); 299 this._origin = viewUtils.localToGlobal(ctr, item);
306 } 300 }
307 else 301 else
308 { 302 {
309 if(this._origin) 303 this._origin = undefined;
304 this._origin = this.calculateMultiSelOrigin();
305 }
306 }
307 }
308 },
309
310 captureSelectionDrawn: {
311 value: function(event){
312 this._origin = null;
313 this._targets = [];
314 this._startOriginArray = null;
315
316 var len = this.application.ninja.selectedElements.length;
317 if(len)
318 {
319 if(len === 1)
320 {
321 this.target = this.application.ninja.selectedElements[0];
322 drawUtils.addElement(this.target);
323
324 viewUtils.pushViewportObj( this.target );
325 var eltCtr = viewUtils.getCenterOfProjection();
326 eltCtr[2] = 0;
327 viewUtils.popViewportObj();
328
329 var ctrOffset = this.target.elementModel.props3D.m_transformCtr;
330 if(ctrOffset)
331 {
332 eltCtr[2] = 0;
333 eltCtr = vecUtils.vecAdd(3, eltCtr, ctrOffset);
334 }
335
336 this._origin = viewUtils.localToGlobal(eltCtr, this.target);
337 console.log( "Rotate3DToolBase.captureSelectionDrawn _origin: " + this._origin );
338 this._updateTargets();
339 //this._setTransformOrigin(false);
340 }
341 else
342 {
343 this.target = this.application.ninja.currentDocument.documentRoot;
344 //this._origin = drawUtils._selectionCtr.slice(0);
345 //this._origin[0] += this.application.ninja.stage.userContentLeft;
346 //this._origin[1] += this.application.ninja.stage.userContentTop;
347 this._updateTargets();
348 this._origin = this.calculateMultiSelOrigin();
349 //this._setTransformOrigin(true);
350 }
351 }
352 else
353 {
354 this.target = null;
355 }
356 this.DrawHandles();
357
358 if(event)
359 {
360 this.eventManager.removeEventListener("selectionDrawn", this, true);
361 }
362 }
363 },
364
365 calculateMultiSelOrigin:
366 {
367 value: function()
368 {
369 var minPt, maxPt, i,j;
370 this._startOriginArray = [];
371 var len = this.application.ninja.selectedElements.length;
372 for (i = 0; i < len; i++)
373 {
374 // get the next element and localToGlobal matrix
375 elt = this._targets[i].elt;
376 var l2g = this._targets[i].l2g;
377
378 // get the element bounds in 'plane' space
379 bounds = viewUtils.getElementViewBounds3D( elt );
380 for (j=0; j<4; j++)
381 {
382 var localPt = bounds[j];
383 //var pt = MathUtils.transformAndDivideHomogeneousPoint( localPt, l2g );
384 var pt = viewUtils.localToStageWorld( localPt, elt );
385 if (!minPt)
310 { 386 {
311 if(this._delta) 387 minPt = pt.slice();
312 { 388 maxPt = pt.slice();
313 if(this._handleMode !== null)
314 {
315// this._origin[this._handleMode] = this._delta;
316 }
317 else
318 {
319 this._origin[0] += this._delta[0];
320 this._origin[1] += this._delta[1];
321 }
322 }
323 } 389 }
324 else 390 else
325 { 391 {
326 this._origin = drawUtils._selectionCtr.slice(0); 392 minPt[0] = Math.min(minPt[0],pt[0]); minPt[1] = Math.min(minPt[1],pt[1]); minPt[2] = Math.min(minPt[2],pt[2]);
327 this._origin[0] += this.application.ninja.stage.userContentLeft; 393 maxPt[0] = Math.max(maxPt[0],pt[0]); maxPt[1] = Math.max(maxPt[1],pt[1]); maxPt[2] = Math.max(maxPt[2],pt[2]);
328 this._origin[1] += this.application.ninja.stage.userContentTop;
329 } 394 }
330 } 395 }
331 } 396 }
397 var stageWorldCtr = [ 0.5*(minPt[0] + maxPt[0]), 0.5*(minPt[1] + maxPt[1]), 0.5*(minPt[2] + maxPt[2]) ];
398 var globalCtr = MathUtils.transformAndDivideHomogeneousPoint( stageWorldCtr, viewUtils.getStageWorldToGlobalMatrix() );
399 console.log( "resetting _origin to: " + this._origin );
400
401 return globalCtr;
332 } 402 }
333 }, 403 },
334 404
405
335 DrawHandles: { 406 DrawHandles: {
336 value: function (delta) { 407 value: function (delta) {
337 this.application.ninja.stage.clearDrawingCanvas(); 408 this.application.ninja.stage.clearDrawingCanvas();