diff options
author | Nivesh Rajbhandari | 2012-03-12 17:06:05 -0700 |
---|---|---|
committer | Nivesh Rajbhandari | 2012-03-12 17:06:05 -0700 |
commit | 9d885aae7a17b4fc731a41f6b1ac8840092b83ac (patch) | |
tree | 4e2fd901492df729cac529ca5fa924d90582fd4e /js | |
parent | 5fb358d9e80a364d5f300d60b7a9fe0f773741e7 (diff) | |
download | ninja-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>
Diffstat (limited to 'js')
-rwxr-xr-x | js/helper-classes/3D/snap-manager.js | 12 | ||||
-rwxr-xr-x | js/tools/SelectionTool.js | 23 | ||||
-rwxr-xr-x | js/tools/Translate3DToolBase.js | 1 | ||||
-rwxr-xr-x | js/tools/TranslateObject3DTool.js | 2 | ||||
-rwxr-xr-x | js/tools/modifier-tool-base.js | 12 |
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, | |||
16 | var SelectionTool = exports.SelectionTool = Montage.create(ModifierToolBase, { | 16 | var 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. | |||
10 | var Montage = require("montage/core/core").Montage, | 10 | var 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 | } |