From c534f70e9af920d252d0d94151c9d6f884283b81 Mon Sep 17 00:00:00 2001 From: Nivesh Rajbhandari Date: Tue, 1 May 2012 07:01:44 -0700 Subject: Get working plane grid to draw for new stage web template workflow. Signed-off-by: Nivesh Rajbhandari --- js/controllers/elements/body-controller.js | 40 ++++++++++++++++++++++++++++++ js/helper-classes/3D/draw-utils.js | 26 +++++++++++++------ js/tools/RotateStage3DTool.js | 16 ++++++++++-- 3 files changed, 72 insertions(+), 10 deletions(-) (limited to 'js') diff --git a/js/controllers/elements/body-controller.js b/js/controllers/elements/body-controller.js index 839d0787..14aeae24 100755 --- a/js/controllers/elements/body-controller.js +++ b/js/controllers/elements/body-controller.js @@ -51,5 +51,45 @@ exports.BodyController = Montage.create(ElementController, { return dist; } } + }, + + getMatrix: { + value: function(el) { + if(el.elementModel && el.elementModel.props3D && el.elementModel.props3D.matrix3d) + { + return el.elementModel.props3D.matrix3d.slice(0); + } + else + { + var mat; + + if (el) + { + mat = this.application.ninja.stylesController.getMatrixFromElement(el, true); + if (!mat) { + mat = Matrix.I(4); + } + + var zoom = this.application.ninja.elementMediator.getProperty(el, "zoom"); + if (zoom) + { + zoom = Number(zoom); + if (zoom != 1) + { + var zoomMat = Matrix.create( [ + [ zoom, 0, 0, 0], + [ 0, zoom, 0, 0], + [ 0, 0, zoom, 0], + [ 0, 0, 0, 1] + ] ); + glmat4.multiply( zoomMat, mat, mat ); + } + } + } + + el.elementModel.props3D.matrix3d = mat; + return mat; + } + } } }); diff --git a/js/helper-classes/3D/draw-utils.js b/js/helper-classes/3D/draw-utils.js index 7bd77c3a..f7b02485 100755 --- a/js/helper-classes/3D/draw-utils.js +++ b/js/helper-classes/3D/draw-utils.js @@ -583,17 +583,24 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, { // get a point that lies on the plane var ptOnPlane = MathUtils.getPointOnPlane(this._workingPlane); + // define the grid parameters + var width, + height, + nLines = 10; + + if(this.application.ninja.documentController.webTemplate) { + width = this.application.ninja.currentDocument.documentRoot.scrollWidth; + height = this.application.ninja.currentDocument.documentRoot.scrollHeight; + } else { + width = this.snapManager.getStageWidth(); + height = this.snapManager.getStageHeight(); + } // get a matrix from working plane space to the world var mat = this.getPlaneToWorldMatrix(zAxis, ptOnPlane); - var tMat = Matrix.Translation( [0.5*this.snapManager.getStageWidth(), 0.5*this.snapManager.getStageHeight(),0] ); + var tMat = Matrix.Translation( [0.5*width, 0.5*height, 0] ); //mat = tMat.multiply(mat); glmat4.multiply( tMat, mat, mat); - // define the grid parameters - var width = this.snapManager.getStageWidth(), - height = this.snapManager.getStageHeight(); - var nLines = 10; - // the positioning of the grid may depend on the view direction. var stage = this.snapManager.getStage(); var viewMat = this.viewUtils.getMatrixFromElement(stage); @@ -662,6 +669,7 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, { var offset = this.viewUtils.getElementOffset(this._sourceSpaceElt); offset[2] = 0; this.viewUtils.setViewportObj(this._sourceSpaceElt); + var sourceSpaceMat = this.viewUtils.getLocalToGlobalMatrix( this._sourceSpaceElt ); for (var i = 0; i < nLines; i++) { // transform the points from working plane space to world space //var t0 = mat.multiply(p0), @@ -671,8 +679,10 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, { // transform from world space to global screen space if (this._sourceSpaceElt) { - t0 = this.viewUtils.localToGlobal(t0, this._sourceSpaceElt); - t1 = this.viewUtils.localToGlobal(t1, this._sourceSpaceElt); +// t0 = this.viewUtils.localToGlobal(t0, this._sourceSpaceElt); +// t1 = this.viewUtils.localToGlobal(t1, this._sourceSpaceElt); + t0 = this.viewUtils.localToGlobal2(t0, sourceSpaceMat); + t1 = this.viewUtils.localToGlobal2(t1, sourceSpaceMat); } // create a line from the endpoints diff --git a/js/tools/RotateStage3DTool.js b/js/tools/RotateStage3DTool.js index d1701304..0210289f 100755 --- a/js/tools/RotateStage3DTool.js +++ b/js/tools/RotateStage3DTool.js @@ -96,6 +96,11 @@ exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, { viewUtils.pushViewportObj( stage ); var eltCtr = viewUtils.getCenterOfProjection(); viewUtils.popViewportObj(); + if(this.application.ninja.documentController.webTemplate) + { + eltCtr[0] = stage.scrollWidth/2; + eltCtr[1] = stage.scrollHeight/2; + } var curMat = viewUtils.getMatrixFromElement(stage); var curMatInv = glmat4.inverse(curMat, []); @@ -113,8 +118,15 @@ exports.RotateStage3DTool = Montage.create(Rotate3DToolBase, { this._origin = viewUtils.localToGlobal(eltCtr, stage); - this._setTransformOrigin(false); - + if(this.application.ninja.documentController.webTemplate) + { + this._startOriginArray = []; + this._startOriginArray.push(this._origin.slice()); + } + else + { + this._setTransformOrigin(false); + } this.DrawHandles(); } }, -- cgit v1.2.3