diff options
Diffstat (limited to 'js/tools/RotateStage3DTool.js')
-rwxr-xr-x | js/tools/RotateStage3DTool.js | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/js/tools/RotateStage3DTool.js b/js/tools/RotateStage3DTool.js index f5cc4040..d1701304 100755 --- a/js/tools/RotateStage3DTool.js +++ b/js/tools/RotateStage3DTool.js | |||
@@ -7,10 +7,8 @@ No rights, expressed or implied, whatsoever to this software are provided by Mot | |||
7 | var Montage = require("montage/core/core").Montage, | 7 | var Montage = require("montage/core/core").Montage, |
8 | Rotate3DToolBase = require("js/tools/Rotate3DToolBase").Rotate3DToolBase, | 8 | Rotate3DToolBase = require("js/tools/Rotate3DToolBase").Rotate3DToolBase, |
9 | toolHandleModule = require("js/stage/tool-handle"), | 9 | toolHandleModule = require("js/stage/tool-handle"), |
10 | snapManager = require("js/helper-classes/3D/snap-manager").SnapManager, | ||
11 | viewUtils = require("js/helper-classes/3D/view-utils").ViewUtils, | 10 | viewUtils = require("js/helper-classes/3D/view-utils").ViewUtils, |
12 | vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils, | 11 | vecUtils = require("js/helper-classes/3D/vec-utils").VecUtils, |
13 | drawUtils = require("js/helper-classes/3D/draw-utils").DrawUtils, | ||
14 | ElementsMediator = require("js/mediators/element-mediator").ElementMediator; | 12 | ElementsMediator = require("js/mediators/element-mediator").ElementMediator; |
15 | 13 | ||
16 | exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, { | 14 | exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, { |
@@ -23,6 +21,7 @@ exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, { | |||
23 | 21 | ||
24 | _initializeToolHandles: { | 22 | _initializeToolHandles: { |
25 | value: function() { | 23 | value: function() { |
24 | this.rotateStage = true; | ||
26 | if(!this._handles) | 25 | if(!this._handles) |
27 | { | 26 | { |
28 | this._handles = []; | 27 | this._handles = []; |
@@ -62,7 +61,6 @@ exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, { | |||
62 | 61 | ||
63 | _updateTargets: { | 62 | _updateTargets: { |
64 | value: function(addToUndoStack) { | 63 | value: function(addToUndoStack) { |
65 | this._targets = []; | ||
66 | var elt = this._target; | 64 | var elt = this._target; |
67 | 65 | ||
68 | var curMat = viewUtils.getMatrixFromElement(elt); | 66 | var curMat = viewUtils.getMatrixFromElement(elt); |
@@ -72,9 +70,16 @@ exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, { | |||
72 | var eltCtr = viewUtils.getCenterOfProjection(); | 70 | var eltCtr = viewUtils.getCenterOfProjection(); |
73 | viewUtils.popViewportObj(); | 71 | viewUtils.popViewportObj(); |
74 | 72 | ||
75 | eltCtr = viewUtils.localToGlobal(eltCtr, elt); | 73 | // cache the local to global and global to local matrices |
74 | var l2gMat = viewUtils.getLocalToGlobalMatrix( elt ); | ||
75 | var g2lMat = glmat4.inverse( l2gMat, [] ); | ||
76 | eltCtr = MathUtils.transformAndDivideHomogeneousPoint( eltCtr, l2gMat ); | ||
76 | 77 | ||
77 | this._targets.push({elt:elt, mat:curMat, matInv:curMatInv, ctr:eltCtr}); | 78 | elt.elementModel.setProperty("mat", curMat); |
79 | elt.elementModel.setProperty("matInv", curMatInv); | ||
80 | elt.elementModel.setProperty("ctr", eltCtr); | ||
81 | elt.elementModel.setProperty("l2g", l2gMat); | ||
82 | elt.elementModel.setProperty("g2l", g2lMat); | ||
78 | 83 | ||
79 | ElementsMediator.setMatrix(elt, curMat, false, "rotateStage3DTool"); | 84 | ElementsMediator.setMatrix(elt, curMat, false, "rotateStage3DTool"); |
80 | } | 85 | } |
@@ -83,7 +88,6 @@ exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, { | |||
83 | captureSelectionDrawn: { | 88 | captureSelectionDrawn: { |
84 | value: function(event){ | 89 | value: function(event){ |
85 | this._origin = null; | 90 | this._origin = null; |
86 | this._targets = []; | ||
87 | this._startOriginArray = null; | 91 | this._startOriginArray = null; |
88 | 92 | ||
89 | var stage = this.application.ninja.currentDocument.documentRoot; | 93 | var stage = this.application.ninja.currentDocument.documentRoot; |
@@ -93,12 +97,12 @@ exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, { | |||
93 | var eltCtr = viewUtils.getCenterOfProjection(); | 97 | var eltCtr = viewUtils.getCenterOfProjection(); |
94 | viewUtils.popViewportObj(); | 98 | viewUtils.popViewportObj(); |
95 | 99 | ||
96 | this._targets = []; | ||
97 | |||
98 | var curMat = viewUtils.getMatrixFromElement(stage); | 100 | var curMat = viewUtils.getMatrixFromElement(stage); |
99 | var curMatInv = glmat4.inverse(curMat, []); | 101 | var curMatInv = glmat4.inverse(curMat, []); |
100 | 102 | ||
101 | this._targets.push({elt:stage, mat:curMat, matInv:curMatInv, ctr:eltCtr}); | 103 | stage.elementModel.setProperty("mat", curMat); |
104 | stage.elementModel.setProperty("matInv", curMatInv); | ||
105 | stage.elementModel.setProperty("ctr", eltCtr); | ||
102 | 106 | ||
103 | var ctrOffset = stage.elementModel.props3D.m_transformCtr; | 107 | var ctrOffset = stage.elementModel.props3D.m_transformCtr; |
104 | if(ctrOffset) | 108 | if(ctrOffset) |
@@ -149,6 +153,6 @@ exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, { | |||
149 | // this.UpdateSelection(true); | 153 | // this.UpdateSelection(true); |
150 | this.Configure(true); | 154 | this.Configure(true); |
151 | } | 155 | } |
152 | } | 156 | } |
153 | 157 | ||
154 | }); | 158 | }); |