aboutsummaryrefslogtreecommitdiff
path: root/js/helper-classes/3D/view-utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/helper-classes/3D/view-utils.js')
-rwxr-xr-xjs/helper-classes/3D/view-utils.js101
1 files changed, 36 insertions, 65 deletions
diff --git a/js/helper-classes/3D/view-utils.js b/js/helper-classes/3D/view-utils.js
index 919f7c50..a3d09404 100755
--- a/js/helper-classes/3D/view-utils.js
+++ b/js/helper-classes/3D/view-utils.js
@@ -18,18 +18,11 @@ exports.ViewUtils = Montage.create(Component, {
18 // Instance variables 18 // Instance variables
19 /////////////////////////////////////////////////////////////////////// 19 ///////////////////////////////////////////////////////////////////////
20 20
21 m_viewportObj : { value: null, writable: true}, 21 m_viewportObj : { value: null},
22 _perspectiveDist: { value: null, writable: true}, 22 _perspectiveDist: { value: null},
23 23
24 // keep a stack of viewport objects 24 // keep a stack of viewport objects
25 _viewportObjStack: { value: [], writable: true }, 25 _viewportObjStack: { value: []},
26
27 _currentDocument: { value: null , writable: true},
28 _userContentLeft: { value: null , writable: true},
29 _userContentTop: { value: null , writable: true},
30
31 _rootElement: { value: null, writable: true},
32 _stageElement: { value: null, writable: true},
33 26
34 /////////////////////////////////////////////////////////////////////// 27 ///////////////////////////////////////////////////////////////////////
35 // Property accessors 28 // Property accessors
@@ -43,18 +36,6 @@ exports.ViewUtils = Montage.create(Component, {
43 }, 36 },
44 getViewportObj: { value: function() { return this.m_viewportObj; } }, 37 getViewportObj: { value: function() { return this.m_viewportObj; } },
45 38
46 setRootElement: { value: function( elt ) { this._rootElement = elt; } },
47 getRootElement: { value: function () { return this._rootElement; } },
48
49 setStageElement: { value: function( elt ) { this._stageElement = elt; } },
50 getStageElement: { value: function () { return this._stageElement; } },
51
52 setCurrentDocument: { value: function(value) { this._currentDocument = value; }},
53
54 setUserContentLeft: { value: function(value) { this._userContentLeft = value; }},
55 setUserContentTop: { value: function(value) { this._userContentTop = value; }},
56
57
58 getPerspectiveDistance: { value: function () { return this._perspectiveDist; } }, 39 getPerspectiveDistance: { value: function () { return this._perspectiveDist; } },
59 40
60 /////////////////////////////////////////////////////////////////////// 41 ///////////////////////////////////////////////////////////////////////
@@ -139,7 +120,7 @@ exports.ViewUtils = Montage.create(Component, {
139 var yVec = [0,1,0]; 120 var yVec = [0,1,0];
140 var zVec = [0,0,1]; 121 var zVec = [0,0,1];
141 122
142 var stage = this.application.ninja.currentDocument.documentRoot; 123 var stage = this.application.ninja.currentDocument.model.documentRoot;
143 var stageMat = this.getMatrixFromElement(stage); 124 var stageMat = this.getMatrixFromElement(stage);
144 125
145 var mat = glmat4.multiply( stageMat, objMat, [] ); 126 var mat = glmat4.multiply( stageMat, objMat, [] );
@@ -156,14 +137,6 @@ exports.ViewUtils = Montage.create(Component, {
156 viewDir = MathUtils.transformVector( [0,0,1], stageInv ); 137 viewDir = MathUtils.transformVector( [0,0,1], stageInv );
157 } 138 }
158 139
159 /*
160 if (elt === stage)
161 {
162 xVec = [1,0,0];
163 yVec = [0,1,0];
164 }
165 */
166
167 var plane; 140 var plane;
168 var xDot, yDot, zDot; 141 var xDot, yDot, zDot;
169 switch (axis) 142 switch (axis)
@@ -288,6 +261,11 @@ exports.ViewUtils = Montage.create(Component, {
288 value: function( localPt, elt ) { 261 value: function( localPt, elt ) {
289 this.pushViewportObj( elt ); 262 this.pushViewportObj( elt );
290 var viewPt = this.screenToView( localPt[0], localPt[1], localPt[2] ); 263 var viewPt = this.screenToView( localPt[0], localPt[1], localPt[2] );
264 if ((elt == null) || (elt === this._stageElement))
265 {
266 this.popViewportObj();
267 return viewPt;
268 }
291 var mat = this.getMatrixFromElement( elt ); 269 var mat = this.getMatrixFromElement( elt );
292 var worldPt = MathUtils.transformPoint( viewPt, mat ); 270 var worldPt = MathUtils.transformPoint( viewPt, mat );
293 var stageWorldPt = this.postViewToStageWorld( worldPt, elt ); 271 var stageWorldPt = this.postViewToStageWorld( worldPt, elt );
@@ -302,7 +280,7 @@ exports.ViewUtils = Montage.create(Component, {
302 // into stage world space. 280 // into stage world space.
303 postViewToStageWorld: { 281 postViewToStageWorld: {
304 value: function( localPt, elt ) { 282 value: function( localPt, elt ) {
305 if ((elt == null) || (elt === this._stageElement)) return localPt; 283 if ((elt == null) || (elt === this.application.ninja.currentDocument.model.documentRoot)) return localPt;
306 284
307 // get the 3D transformation and 2D offset from the element 285 // get the 3D transformation and 2D offset from the element
308 var pt = localPt.slice(0); 286 var pt = localPt.slice(0);
@@ -329,7 +307,7 @@ exports.ViewUtils = Montage.create(Component, {
329 this.popViewportObj(); 307 this.popViewportObj();
330 308
331 // check if we are done 309 // check if we are done
332 if (parent === this._stageElement) break; 310 if (parent === this.application.ninja.currentDocument.model.documentRoot) break;
333 311
334 if (this.elementHas3D( parent )) 312 if (this.elementHas3D( parent ))
335 { 313 {
@@ -354,15 +332,17 @@ exports.ViewUtils = Montage.create(Component, {
354 332
355 // transform the bounds up the tree 333 // transform the bounds up the tree
356 var child = elt; 334 var child = elt;
357 var parent = elt.offsetParent; 335 while ( child )
358 while ( parent )
359 { 336 {
360 pt = this.childToParent( pt, child ); 337 pt = this.childToParent( pt, child );
361 338
362 if (parent === this._rootElement) break; 339// if (child === this.application.ninja.currentDocument.model.documentRoot) break;
340// child = child.offsetParent;
363 341
364 child = parent; 342 if (child === this.application.ninja.currentDocument.model.documentRoot) break;
365 parent = parent.offsetParent; 343 if (child === this.application.ninja.currentDocument.model.documentRoot.parentNode) break;
344 child = child.offsetParent;
345 if (child === this.application.ninja.currentDocument.model.documentRoot.parentNode) break;
366 } 346 }
367 347
368 ///////////////////////////////////////////////////////// 348 /////////////////////////////////////////////////////////
@@ -398,7 +378,8 @@ exports.ViewUtils = Montage.create(Component, {
398 378
399 // transform the bounds up the tree 379 // transform the bounds up the tree
400 var parent = child.offsetParent; 380 var parent = child.offsetParent;
401 if ( parent ) 381 // TODO - Should have a different way to check for new template mode
382 if ( parent || (child === this.application.ninja.currentDocument.model.documentRoot) )
402 { 383 {
403 this.setViewportObj( child ); 384 this.setViewportObj( child );
404 385
@@ -411,7 +392,7 @@ exports.ViewUtils = Montage.create(Component, {
411 { 392 {
412 // TODO - Commenting out flatten support until new perspective workflow is fully working 393 // TODO - Commenting out flatten support until new perspective workflow is fully working
413 // if (flatten) pt[2] = 0; 394 // if (flatten) pt[2] = 0;
414// var flatten = (parent !== this._rootElement) && (ElementsMediator.getProperty(parent, "-webkit-transform-style") !== "preserve-3d"); 395// var flatten = (parent !== this.application.ninja.currentDocument.model.documentRoot.parentNode) && (ElementsMediator.getProperty(parent, "-webkit-transform-style") !== "preserve-3d");
415// if(flatten) 396// if(flatten)
416// { 397// {
417// pt[2] = 0; 398// pt[2] = 0;
@@ -471,7 +452,7 @@ exports.ViewUtils = Montage.create(Component, {
471 // get the four corners of the element in global space 452 // get the four corners of the element in global space
472 var bounds = this.getElementViewBounds3D( elt ); 453 var bounds = this.getElementViewBounds3D( elt );
473 var bounds3D = new Array(); 454 var bounds3D = new Array();
474 var stage = this.application.ninja.currentDocument.documentRoot; 455 var stage = this.application.ninja.currentDocument.model.documentRoot;
475 for (var i=0; i<3; i++) 456 for (var i=0; i<3; i++)
476 { 457 {
477 var gPt = this.localToGlobal( bounds[i], elt ); 458 var gPt = this.localToGlobal( bounds[i], elt );
@@ -696,7 +677,7 @@ exports.ViewUtils = Montage.create(Component, {
696 // if (elt.__ninjaXOff) xOff = elt.__ninjaXOff; 677 // if (elt.__ninjaXOff) xOff = elt.__ninjaXOff;
697 // if (elt.__ninjaYOff) yOff = elt.__ninjaYOff; 678 // if (elt.__ninjaYOff) yOff = elt.__ninjaYOff;
698 var offset = [xOff, yOff]; 679 var offset = [xOff, yOff];
699 if(elt.offsetParent && (elt.offsetParent !== this._stageElement)) 680 if(elt.offsetParent && (elt.offsetParent !== this.application.ninja.currentDocument.model.documentRoot))
700 { 681 {
701 var pS = elt.ownerDocument.defaultView.getComputedStyle(elt.offsetParent); 682 var pS = elt.ownerDocument.defaultView.getComputedStyle(elt.offsetParent);
702 683
@@ -712,12 +693,12 @@ exports.ViewUtils = Montage.create(Component, {
712 } 693 }
713 } 694 }
714 695
715 if(elt === this._stageElement) 696 if(elt === this.application.ninja.currentDocument.model.documentRoot)
716 { 697 {
717 // TODO - Call a routine from the user document controller to get the offsets/margins 698 // TODO - Call a routine from the user document controller to get the offsets/margins
718 // Once we expose the document controller to ViewUtils 699 // Once we expose the document controller to ViewUtils
719 offset[0] += this._userContentLeft; 700 offset[0] += this.application.ninja.stage._userContentLeft;
720 offset[1] += this._userContentTop; 701 offset[1] += this.application.ninja.stage._userContentTop;
721 } 702 }
722 703
723 return offset; 704 return offset;
@@ -889,7 +870,7 @@ exports.ViewUtils = Montage.create(Component, {
889 { 870 {
890 value: function() 871 value: function()
891 { 872 {
892 var stage = this.application.ninja.currentDocument.documentRoot; 873 var stage = this.application.ninja.currentDocument.model.documentRoot;
893 874
894 this.pushViewportObj( stage ); 875 this.pushViewportObj( stage );
895 // put the point into screen space of the stage - requires 876 // put the point into screen space of the stage - requires
@@ -1003,7 +984,7 @@ exports.ViewUtils = Montage.create(Component, {
1003 glmat4.multiply( v2s, mat, mat ); 984 glmat4.multiply( v2s, mat, mat );
1004 985
1005