From 92854b266936f844370688da3b15d035a041e8c2 Mon Sep 17 00:00:00 2001 From: Nivesh Rajbhandari Date: Thu, 22 Mar 2012 11:10:29 -0700 Subject: Translation handles do not redraw at correct location when double-clicking to reset. Signed-off-by: Nivesh Rajbhandari --- js/tools/Translate3DToolBase.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'js/tools/Translate3DToolBase.js') diff --git a/js/tools/Translate3DToolBase.js b/js/tools/Translate3DToolBase.js index 07b6d04d..b7bce2be 100755 --- a/js/tools/Translate3DToolBase.js +++ b/js/tools/Translate3DToolBase.js @@ -126,8 +126,11 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, this.isDrawing = false; this.endDraw(event); -// this.UpdateSelection(true); - this.Configure(true); + + // Need to force stage to draw immediately so the new selection center is calculated + this.application.ninja.stage.draw(); + // And captureSelectionDrawn to draw the transform handles + this.captureSelectionDrawn(null); } }, -- cgit v1.2.3 From dc9650af5760b1f93d6e93a383eabceacfdc0ad8 Mon Sep 17 00:00:00 2001 From: hwc487 Date: Mon, 2 Apr 2012 15:40:25 -0700 Subject: Snapping fixes. --- js/tools/Translate3DToolBase.js | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) (limited to 'js/tools/Translate3DToolBase.js') diff --git a/js/tools/Translate3DToolBase.js b/js/tools/Translate3DToolBase.js index 07b6d04d..18e2b610 100755 --- a/js/tools/Translate3DToolBase.js +++ b/js/tools/Translate3DToolBase.js @@ -29,6 +29,8 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, modifyElements : { value : function(data, event) { + //console.log( "modifyElements, data: " + data.pt0 + " => " + data.pt1 ); + // form the translation vector and post translate the matrix by it. var delta = vecUtils.vecSubtract( 3, data.pt1, data.pt0 ); if(this._handleMode !== null) @@ -66,15 +68,12 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, delta[0] = 0; delta[1] = 0; } - else - { - delta[2] = 0; - } this._delta = delta.slice(0); } var transMat = Matrix.Translation( delta ); + //console.log( "Translate: " + delta ); if(this._inLocalMode && (this._targets.length === 1) ) { this._translateLocally(transMat); @@ -134,6 +133,9 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, // We will only translate single elements locally _translateLocally: { value: function (transMat) { + //console.log( "_translateLocally, startMat: " + this._startMat ); + //console.log( "_translateLocally, transMat: " + transMat ); + //console.log( "_translateLocally, startMat: " + this._startMat + ", transMat: " + transMat ); var mat = glmat4.multiply(this._startMat, transMat, []); viewUtils.setMatrixForElement( this._target, mat, true ); if(this._mode !== 1) @@ -145,14 +147,22 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, _translateGlobally: { value: function (transMat) { + //console.log( "_translateGlobally, startMat: " + this._startMat + ", transMat: " + transMat ); + //console.log( "_translateGlobally, transMat: " + transMat ); var len = this._targets.length, i = 0, item, elt, - curMat, + curMat = viewUtils.getMatrixFromElement( this._target ), matInv = glmat4.inverse(this._startMat, []), nMat = glmat4.multiply(transMat, this._startMat, [] ), qMat = glmat4.multiply(matInv, nMat, []); + + if (this._mode === 1) + { + var curInv = glmat4.inverse( curMat, [] ); + transMat = glmat4.multiply( nMat, curInv, [] ); + } var shouldUpdateStartMat = true; @@ -181,6 +191,7 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, if(shouldUpdateStartMat) { + //console.log( "\t\tshouldUpdateStartMat" ); this._targets[i].mat = curMat; } } @@ -188,7 +199,9 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, }, _updateTargets: { - value: function(addToUndoStack) { + value: function(addToUndoStack) + { + console.log( "_updateTargets" ); var newStyles = [], previousStyles = [], len = this.application.ninja.selectedElements.length; -- cgit v1.2.3 From a11ef2eed7049835c8bdfa50a2b893632c46eaa0 Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Wed, 4 Apr 2012 11:11:58 -0700 Subject: Squashed commit of Preparing for the montage undo-manager: Architecture changes Reworked the add and remove elements into 1 function which can take 1 or more elements. Removed the _element from the selection array Many other changes related to those 2 changes Undo/Redo shortcuts are now using montage undo/redo manager. Signed-off-by: Valerio Virgillito --- js/tools/Translate3DToolBase.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'js/tools/Translate3DToolBase.js') diff --git a/js/tools/Translate3DToolBase.js b/js/tools/Translate3DToolBase.js index 07b6d04d..4dca6313 100755 --- a/js/tools/Translate3DToolBase.js +++ b/js/tools/Translate3DToolBase.js @@ -195,7 +195,7 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, this._targets = []; for(var i = 0; i < len; i++) { - var elt = this.application.ninja.selectedElements[i]._element; + var elt = this.application.ninja.selectedElements[i]; var curMat = viewUtils.getMatrixFromElement(elt); var curMatInv = glmat4.inverse(curMat, []); -- cgit v1.2.3 From 65e91e6b6544a34e1831c975a24b63eeba372b7b Mon Sep 17 00:00:00 2001 From: Nivesh Rajbhandari Date: Thu, 5 Apr 2012 10:30:26 -0700 Subject: Commenting out console logs. Signed-off-by: Nivesh Rajbhandari --- js/tools/Translate3DToolBase.js | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'js/tools/Translate3DToolBase.js') diff --git a/js/tools/Translate3DToolBase.js b/js/tools/Translate3DToolBase.js index 3976c5b9..948383a3 100755 --- a/js/tools/Translate3DToolBase.js +++ b/js/tools/Translate3DToolBase.js @@ -202,9 +202,8 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, }, _updateTargets: { - value: function(addToUndoStack) - { - console.log( "_updateTargets" ); + value: function(addToUndoStack) { +// console.log( "_updateTargets" ); var newStyles = [], previousStyles = [], len = this.application.ninja.selectedElements.length; -- cgit v1.2.3 From 1e2e0a8d04e55c0ecfb0b1b674792b69fb091415 Mon Sep 17 00:00:00 2001 From: Nivesh Rajbhandari Date: Thu, 5 Apr 2012 12:01:38 -0700 Subject: Fixing 3d tool reset to redraw handles. Signed-off-by: Nivesh Rajbhandari --- js/tools/Translate3DToolBase.js | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'js/tools/Translate3DToolBase.js') diff --git a/js/tools/Translate3DToolBase.js b/js/tools/Translate3DToolBase.js index 948383a3..e4f1fb99 100755 --- a/js/tools/Translate3DToolBase.js +++ b/js/tools/Translate3DToolBase.js @@ -90,22 +90,21 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, value : function() { var item, - elt, mat, dist, newStyles = [], previousStyles = [], - len = this._targets.length; + len = this.application.ninja.selectedElements.length; for(var i = 0; i < len; i++) { // Reset to the identity matrix but retain the rotation values - item = this._targets[i]; - mat = item.mat.slice(0); + item = this.application.ninja.selectedElements[i]; + mat = ElementsMediator.getMatrix(item); mat[12] = 0; mat[13] = 0; mat[14] = 0; - dist = this._undoArray[i].dist; + dist = ElementsMediator.getPerspectiveDist(item); var previousStyleStr = {dist:dist, mat:item.mat}; -- cgit v1.2.3 From f91e64235eb03c889ff4f5577c3e3480cd0d787f Mon Sep 17 00:00:00 2001 From: Valerio Virgillito Date: Fri, 13 Apr 2012 00:30:19 -0700 Subject: removing _undo array and _targets array and use object instead of matching arrays to set properties Signed-off-by: Valerio Virgillito --- js/tools/Translate3DToolBase.js | 158 ++++++++++++++-------------------------- 1 file changed, 56 insertions(+), 102 deletions(-) (limited to 'js/tools/Translate3DToolBase.js') diff --git a/js/tools/Translate3DToolBase.js b/js/tools/Translate3DToolBase.js index e4f1fb99..04359567 100755 --- a/js/tools/Translate3DToolBase.js +++ b/js/tools/Translate3DToolBase.js @@ -21,8 +21,7 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, _clickedOnStage: { value: false }, HandleDoubleClick : { - value : function() - { + value : function() { } }, @@ -74,7 +73,7 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, var transMat = Matrix.Translation( delta ); //console.log( "Translate: " + delta ); - if(this._inLocalMode && (this._targets.length === 1) ) + if(this._inLocalMode && (this.application.ninja.selectedElements.length === 1) ) { this._translateLocally(transMat); } @@ -86,45 +85,32 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, }, - Reset : { - value : function() - { - var item, - mat, - dist, - newStyles = [], - previousStyles = [], - len = this.application.ninja.selectedElements.length; - for(var i = 0; i < len; i++) - { - // Reset to the identity matrix but retain the rotation values - item = this.application.ninja.selectedElements[i]; - mat = ElementsMediator.getMatrix(item); + Reset: { + value: function() { + var mat, iMat, dist, mod3dObject = [], self = this; + + this.application.ninja.selectedElements.forEach(function(element) { + // Reset to the identity matrix + //item = this.application.ninja.selectedElements[i]; + iMat = Matrix.I(4); + mat = ElementsMediator.getMatrix(element); mat[12] = 0; mat[13] = 0; mat[14] = 0; - dist = ElementsMediator.getPerspectiveDist(item); + dist = ElementsMediator.getPerspectiveDist(element); - var previousStyleStr = {dist:dist, mat:item.mat}; + var previousStyleStr = {dist:dist, mat:element.elementModel.getProperty("mat")}; + var newStyleStr = {dist:dist, mat:iMat}; - var newStyleStr = {dist:dist, mat:mat}; - - previousStyles.push(previousStyleStr); - newStyles.push(newStyleStr); - } + mod3dObject.push({element:element, properties:newStyleStr, previousProperties: previousStyleStr}); + }); - ElementsMediator.set3DProperties(this.application.ninja.selectedElements, - newStyles, - "Change", - "translateTool", - previousStyles - ); + ElementsMediator.set3DProperties(mod3dObject, "Change", "rotateTool"); this.isDrawing = false; this.endDraw(event); - // Need to force stage to draw immediately so the new selection center is calculated this.application.ninja.stage.draw(); // And captureSelectionDrawn to draw the transform handles @@ -151,111 +137,79 @@ exports.Translate3DToolBase = Montage.create(ModifierToolBase, value: function (transMat) { //console.log( "_translateGlobally, startMat: " + this._startMat + ", transMat: " + transMat ); //console.log( "_translateGlobally, transMat: " + transMat ); - var len = this._targets.length, - i = 0, - item, - elt, + var self = this, curMat = viewUtils.getMatrixFromElement( this._target ), matInv = glmat4.inverse(this._startMat, []), - nMat = glmat4.multiply(transMat, this._startMat, [] ), - qMat = glmat4.multiply(matInv, nMat, []); + nMat = glmat4.multiply(transMat, this._startMat, [] ); +// qMat = glmat4.multiply(matInv, nMat, []); - if (this._mode === 1) - { + if(this._mode === 1) { var curInv = glmat4.inverse( curMat, [] ); transMat = glmat4.multiply( nMat, curInv, [] ); } var shouldUpdateStartMat = true; - if(this._clickedOnStage) - { + if(this._clickedOnStage) { shouldUpdateStartMat = false; - } - else if(this._mode !== 1) - { + } else if(this._mode !== 1) { this._startMat = nMat; } - for(i = 0; i < len; i++) - { - item = this._targets[i]; - elt = item.elt; - curMat = item.mat.slice(0); + this.application.ninja.selectedElements.forEach(function(element) { + curMat = element.elementModel.getProperty("mat").slice(0); -// glmat4.multiply(curMat, qMat, curMat); -// -// viewUtils.setMatrixForElement( elt, curMat, true); +// glmat4.multiply(curMat, qMat, curMat); +// viewUtils.setMatrixForElement( elt, curMat, true); curMat[12] += transMat[12]; curMat[13] += transMat[13]; curMat[14] += transMat[14]; - viewUtils.setMatrixForElement( elt, curMat, true); - if(shouldUpdateStartMat) - { + viewUtils.setMatrixForElement(element, curMat, true); + + if(shouldUpdateStartMat) { //console.log( "\t\tshouldUpdateStartMat" ); - this._targets[i].mat = curMat; - } - } + element.elementModel.setProperty("mat", curMat); + } + + }); } }, _updateTargets: { - value: function(addToUndoStack) { -// console.log( "_updateTargets" ); - var newStyles = [], - previousStyles = [], - len = this.application.ninja.selectedElements.length; - this._targets = []; - for(var i = 0; i < len; i++) - { - var elt = this.application.ninja.selectedElements[i]; + value: function(addToUndo) { + var mod3dObject = [], self = this; - var curMat = viewUtils.getMatrixFromElement(elt); - var curMatInv = glmat4.inverse(curMat, []); + this.application.ninja.selectedElements.forEach(function(element) { + if(addToUndo) { + var previousMat = element.elementModel.getProperty("mat").slice(0); + var previousStyleStr = {dist:element.elementModel.getProperty("dist"), mat:MathUtils.scientificToDecimal(previousMat, 5)}; + var newStyleStr = {dist:viewUtils.getPerspectiveDistFromElement(element), mat:MathUtils.scientificToDecimal(viewUtils.getMatrixFromElement(element), 5)}; - this._targets.push({elt:elt, mat:curMat, matInv:curMatInv}); - if(addToUndoStack) - { - var previousStyleStr = {dist:this._undoArray[i].dist, mat:MathUtils.scientificToDecimal(this._undoArray[i].mat.slice(0), 5)}; - - var newStyleStr = {dist:viewUtils.getPerspectiveDistFromElement(elt), mat:MathUtils.scientificToDecimal(curMat, 5)}; + mod3dObject.push({element:element, properties:newStyleStr, previousProperties: previousStyleStr}); - previousStyles.push(previousStyleStr); - newStyles.push(newStyleStr); } - } - if(addToUndoStack) - { - ElementsMediator.set3DProperties(this.application.ninja.selectedElements, - newStyles, - "Change", - "translateTool", - previousStyles - ); - if(this._origin && this._delta) - { - if(this._handleMode !== null) - { + }); + + if(addToUndo) { + ElementsMediator.set3DProperties(mod3dObject, "Change", "translateTool"); + + if(this._origin && this._delta) { + if(this._handleMode !== null) { this._origin[this._handleMode] += this._delta; - } - else - { + } else { this._origin[0] += this._delta[0]; this._origin[1] += this._delta[1]; } } + this._delta = null; } - // Save previous value for undo/redo - this._undoArray = []; - for(i = 0, len = this._targets.length; i < len; i++) - { - var elt = this._targets[i].elt; - var _mat = viewUtils.getMatrixFromElement(elt); - var _dist = viewUtils.getPerspectiveDistFromElement(elt); - this._undoArray.push({mat:_mat, dist:_dist}); - } + + this.application.ninja.selectedElements.forEach(function(element) { + element.elementModel.setProperty("mat", viewUtils.getMatrixFromElement(element)); + element.elementModel.setProperty("dist", viewUtils.getPerspectiveDistFromElement(element)); + }); } }, -- cgit v1.2.3