aboutsummaryrefslogtreecommitdiff
path: root/js/tools/RotateStage3DTool.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/tools/RotateStage3DTool.js')
-rwxr-xr-xjs/tools/RotateStage3DTool.js24
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
7var Montage = require("montage/core/core").Montage, 7var 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
16exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, { 14exports.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});