aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNivesh Rajbhandari2012-03-12 17:06:05 -0700
committerNivesh Rajbhandari2012-03-12 17:06:05 -0700
commit9d885aae7a17b4fc731a41f6b1ac8840092b83ac (patch)
tree4e2fd901492df729cac529ca5fa924d90582fd4e
parent5fb358d9e80a364d5f300d60b7a9fe0f773741e7 (diff)
downloadninja-9d885aae7a17b4fc731a41f6b1ac8840092b83ac.tar.gz
Fixing snapping bugs in Selection, translate and rotate tools.
We should show snap marker on mouse move for selection tool prior to mousing down as well. We should create drag plane parallel to the view and where the user moused down. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com>
-rwxr-xr-xjs/helper-classes/3D/snap-manager.js12
-rwxr-xr-xjs/tools/SelectionTool.js23
-rwxr-xr-xjs/tools/Translate3DToolBase.js1
-rwxr-xr-xjs/tools/TranslateObject3DTool.js2
-rwxr-xr-xjs/tools/modifier-tool-base.js12
5 files changed, 30 insertions, 20 deletions
diff --git a/js/helper-classes/3D/snap-manager.js b/js/helper-classes/3D/snap-manager.js
index cf8a91db..1caacd00 100755
--- a/js/helper-classes/3D/snap-manager.js
+++ b/js/helper-classes/3D/snap-manager.js
@@ -1978,12 +1978,20 @@ var SnapManager = exports.SnapManager = Montage.create(Component, {
1978 }, 1978 },
1979 1979
1980 setupDragPlanes : { 1980 setupDragPlanes : {
1981 value: function( hitRec ) { 1981 value: function( hitRec, inGlobalMode ) {
1982 // get the location of the point in stage world space 1982 // get the location of the point in stage world space
1983 var elt = hitRec.getElt(); 1983 var elt = hitRec.getElt();
1984 var localPt = hitRec.getLocalPoint(); 1984 var localPt = hitRec.getLocalPoint();
1985 var planeMat = hitRec.getPlaneMatrix(); 1985 var planeMat = hitRec.getPlaneMatrix();
1986 var stageWorldPt = viewUtils.postViewToStageWorld( MathUtils.transformPoint(localPt,planeMat), elt ); 1986 var stageWorldPt;
1987 if(inGlobalMode)
1988 {
1989 stageWorldPt = MathUtils.transformPoint(localPt,planeMat);
1990 }
1991 else
1992 {
1993 stageWorldPt = viewUtils.postViewToStageWorld( MathUtils.transformPoint(localPt,planeMat), elt );
1994 }
1987 1995
1988 /* 1996 /*
1989 // get a working plane parallel to the current working plane through the stage world point 1997 // get a working plane parallel to the current working plane through the stage world point
diff --git a/js/tools/SelectionTool.js b/js/tools/SelectionTool.js
index 6d8ff175..13a04944 100755
--- a/js/tools/SelectionTool.js
+++ b/js/tools/SelectionTool.js
@@ -16,6 +16,7 @@ var Montage = require("montage/core/core").Montage,
16var SelectionTool = exports.SelectionTool = Montage.create(ModifierToolBase, { 16var SelectionTool = exports.SelectionTool = Montage.create(ModifierToolBase, {
17 drawingFeedback: { value: { mode: "Draw2D", type: "" } }, 17 drawingFeedback: { value: { mode: "Draw2D", type: "" } },
18 18
19 _inLocalMode: { value: false}, // This tool should always use global mode for translations
19 _canOperateOnStage: { value: true}, 20 _canOperateOnStage: { value: true},
20 _isSelecting: {value: false, writable:true}, 21 _isSelecting: {value: false, writable:true},
21 _shiftMove: { value: 10}, 22 _shiftMove: { value: 10},
@@ -34,14 +35,12 @@ var SelectionTool = exports.SelectionTool = Montage.create(ModifierToolBase, {
34 value: function () { 35 value: function () {
35 if(this._targets && this._targets.length) 36 if(this._targets && this._targets.length)
36 { 37 {
37 // TODO - drawUtils's elementPlanes check in drawSelectionBounds doesn't seem to work,
38 // so temporary workaround to simply check if all elements have identity matrix
39 // TODO - Eventually, this should instead check if all the selected items are on the view plane
40 var len = this._targets.length; 38 var len = this._targets.length;
39 var plane = this.application.ninja.stage.stageDeps.snapManager.getDragPlane();
41 for(var i = 0; i < len; i++) 40 for(var i = 0; i < len; i++)
42 { 41 {
43 var mat = this._targets[i].mat; 42 var elt = this._targets[i].elt;
44 if(!MathUtils.isIdentityMatrix(mat)) 43 if(!this.application.ninja.stage.stageDeps.snapManager.elementIsOnPlane(elt, plane))
45 { 44 {
46 return false; 45 return false;
47 } 46 }
@@ -123,14 +122,14 @@ var SelectionTool = exports.SelectionTool = Montage.create(ModifierToolBase, {
123 this.doDraw(event); 122 this.doDraw(event);
124 } else { 123 } else {
125 this._showFeedbackOnMouseMove(event); 124 this._showFeedbackOnMouseMove(event);
126 // if(this._canSnap) 125 if(this._canSnap)
127 // { 126 {
128 // this.doSnap(event); 127 this.doSnap(event);
129 // } 128 }
130 } 129 }
131 130
132 this.DrawHandles(this._delta); 131 this.DrawHandles(this._delta);
133 if(this._canSnap && this._isDrawing) 132 if(this._canSnap)
134 { 133 {
135 this.application.ninja.stage.stageDeps.snapManager.drawLastHit(); 134 this.application.ninja.stage.stageDeps.snapManager.drawLastHit();
136 } 135 }
@@ -704,6 +703,10 @@ var SelectionTool = exports.SelectionTool = Montage.create(ModifierToolBase, {
704 */ 703 */
705 _showFeedbackOnMouseMove : { 704 _showFeedbackOnMouseMove : {
706 value: function (event) { 705 value: function (event) {
706 if(!this._showTransformHandles)
707 {
708 return;
709 }
707 if(this._target && this._handles) 710 if(this._target && this._handles)
708 { 711 {
709 var len = this._handles.length; 712 var len = this._handles.length;
diff --git a/js/tools/Translate3DToolBase.js b/js/tools/Translate3DToolBase.js
index 3d9191da..24a68ad1 100755
--- a/js/tools/Translate3DToolBase.js
+++ b/js/tools/Translate3DToolBase.js
@@ -10,7 +10,6 @@ Subclass TranslateObject3DTool will translate the object that was clicked.
10var Montage = require("montage/core/core").Montage, 10var Montage = require("montage/core/core").Montage,
11 ModifierToolBase = require("js/tools/modifier-tool-base").ModifierToolBase, 11 ModifierToolBase = require("js/tools/modifier-tool-base").ModifierToolBase,
12 toolHandleModule = require("js/stage/tool-handle"), 12 toolHandleModule = require("js/stage/tool-handle"),
13 snapManager = require("js/helper-classes/3D/snap-manager").SnapManager,
14 viewUtils = require("js/helper-classes/3D/view-utils").ViewUtils, 13 viewUtils = require("js/helper-classes/3D/view-utils").ViewUtils,
15 vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils, 14 vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils,
16 drawUtils = require("js/helper-classes/3D/draw-utils").DrawUtils, 15 drawUtils = require("js/helper-classes/3D/draw-utils").DrawUtils,
diff --git a/js/tools/TranslateObject3DTool.js b/js/tools/TranslateObject3DTool.js
index 5157e39c..92b9b2f7 100755
--- a/js/tools/TranslateObject3DTool.js
+++ b/js/tools/TranslateObject3DTool.js
@@ -103,7 +103,7 @@ exports.TranslateObject3DTool = Object.create(Translate3DToolBase, {
103 } 103 }
104 else 104 else
105 { 105 {
106 this._dragPlane = snapManager.setupDragPlanes( hitRec ); 106 this._dragPlane = snapManager.setupDragPlanes( hitRec, true );
107 } 107 }
108 108
109 } 109 }
diff --git a/js/tools/modifier-tool-base.js b/js/tools/modifier-tool-base.js
index 7892d015..80f7d758 100755
--- a/js/tools/modifier-tool-base.js
+++ b/js/tools/modifier-tool-base.js
@@ -171,7 +171,7 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
171// } 171// }
172// else 172// else
173// { 173// {
174 this._dragPlane = snapManager.setupDragPlanes( hitRec ); 174 this._dragPlane = snapManager.setupDragPlanes( hitRec, true );
175// } 175// }
176 } 176 }
177 177
@@ -828,14 +828,14 @@ exports.ModifierToolBase = Montage.create(DrawingTool, {
828 this.doDraw(event); 828 this.doDraw(event);
829 } else { 829 } else {
830 this._showFeedbackOnMouseMove(event); 830 this._showFeedbackOnMouseMove(event);
831// if(this._canSnap) 831 if(this._canSnap)
832// { 832 {
833// this.doSnap(event); 833 this.doSnap(event);
834// } 834 }
835 } 835 }
836 836
837 this.DrawHandles(this._delta); 837 this.DrawHandles(this._delta);
838 if(this._canSnap && this._isDrawing) 838 if(this._canSnap)
839 { 839 {
840 snapManager.drawLastHit(); 840 snapManager.drawLastHit();
841 } 841 }