diff options
Diffstat (limited to 'js/helper-classes/3D')
-rwxr-xr-x | js/helper-classes/3D/hit-record.js | 46 | ||||
-rwxr-xr-x | js/helper-classes/3D/snap-manager.js | 1 | ||||
-rwxr-xr-x | js/helper-classes/3D/view-utils.js | 45 |
3 files changed, 69 insertions, 23 deletions
diff --git a/js/helper-classes/3D/hit-record.js b/js/helper-classes/3D/hit-record.js index 2c60adc6..96f87c24 100755 --- a/js/helper-classes/3D/hit-record.js +++ b/js/helper-classes/3D/hit-record.js | |||
@@ -284,6 +284,50 @@ var HitRecord = exports.HitRecord = Object.create(Object.prototype, | |||
284 | 284 | ||
285 | return str; | 285 | return str; |
286 | } | 286 | } |
287 | } | 287 | }, |
288 | |||
289 | test: | ||
290 | { | ||
291 | value: function() | ||
292 | { | ||
293 | var elt = this.getElement(); | ||
294 | var stage = viewUtils.getStage(); | ||
295 | if (elt === stage) return; | ||
296 | |||
297 | var localPt = this.calculateElementPreTransformScreenPoint(); | ||
298 | var stageWorldPt = this.calculateStageWorldPoint(); | ||
299 | var globalPt = this.getScreenPoint(); | ||
300 | var err = false; | ||
301 | |||
302 | var test1 = viewUtils.localToGlobal( localPt, elt ); | ||
303 | var dist = vecUtils.vecDist(3, test1, globalPt); | ||
304 | if (MathUtils.fpSign(dist) != 0) | ||
305 | { | ||
306 | err = true; | ||
307 | console.log( "**** transform error 1 ***** " + dist + ", localPt: " + localPt ); | ||
308 | } | ||
309 | |||
310 | var stageWorldToGlobal = viewUtils.getStageWorldToGlobalMatrix(); | ||
311 | var test2 = MathUtils.transformAndDivideHomogeneousPoint( stageWorldPt, stageWorldToGlobal ); | ||
312 | dist = vecUtils.vecDist(3, test2, globalPt); | ||
313 | if (MathUtils.fpSign(dist) != 0) | ||
314 | { | ||
315 | err = true; | ||
316 | console.log( "**** transform error 2 ***** " + dist + ", localPt: " + localPt ); | ||
317 | } | ||
318 | |||
319 | var localToGlobal = viewUtils.getLocalToGlobalMatrix( elt ); | ||
320 | var globalToLocal = glmat4.inverse( localToGlobal, [] ); | ||
321 | var test3 = MathUtils.transformAndDivideHomogeneousPoint( globalPt, globalToLocal ); | ||
322 | dist = vecUtils.vecDist(3, test3, localPt); | ||
323 | if (MathUtils.fpSign( vecUtils.vecDist(3, test3, localPt)) != 0) | ||
324 | { | ||
325 | err = true; | ||
326 | console.log( "**** transform error 3 ***** " + dist + ", localPt: " + localPt ); | ||
327 | } | ||
328 | |||
329 | if (!err) console.log( "no hitRecord error" ); | ||
330 | } | ||
331 | } | ||
288 | }); | 332 | }); |
289 | 333 | ||
diff --git a/js/helper-classes/3D/snap-manager.js b/js/helper-classes/3D/snap-manager.js index 9f6b9ed1..8eafa7e9 100755 --- a/js/helper-classes/3D/snap-manager.js +++ b/js/helper-classes/3D/snap-manager.js | |||
@@ -300,6 +300,7 @@ var SnapManager = exports.SnapManager = Montage.create(Component, { | |||
300 | this.deactivateDragPlane(); | 300 | this.deactivateDragPlane(); |
301 | 301 | ||
302 | this.setLastHit( rtnHit ); | 302 | this.setLastHit( rtnHit ); |
303 | //rtnHit.test(); // DEBUG CODE. REMOVE THIS | ||
303 | return rtnHit; | 304 | return rtnHit; |
304 | } | 305 | } |
305 | }, | 306 | }, |
diff --git a/js/helper-classes/3D/view-utils.js b/js/helper-classes/3D/view-utils.js index a72b7906..392de0be 100755 --- a/js/helper-classes/3D/view-utils.js +++ b/js/helper-classes/3D/view-utils.js | |||
@@ -112,6 +112,13 @@ exports.ViewUtils = Montage.create(Component, { | |||
112 | var mat = this.getMatrixFromElement(elt); | 112 | var mat = this.getMatrixFromElement(elt); |
113 | var plane = [mat[8], mat[9], mat[10], mat[11]]; | 113 | var plane = [mat[8], mat[9], mat[10], mat[11]]; |
114 | 114 | ||
115 | var stage = this.application.ninja.currentDocument.documentRoot; | ||
116 | if (elt === stage) | ||
117 | { | ||
118 | xVec = [1,0,0]; | ||
119 | yVec = [0,1,0]; | ||
120 | } | ||
121 | |||
115 | // The translation value is a point on the plane | 122 | // The translation value is a point on the plane |
116 | this.pushViewportObj( elt ); | 123 | this.pushViewportObj( elt ); |
117 | var ptOnPlane = this.getCenterOfProjection(); | 124 | var ptOnPlane = this.getCenterOfProjection(); |
@@ -137,6 +144,12 @@ exports.ViewUtils = Montage.create(Component, { | |||
137 | var stageMat = this.getMatrixFromElement(stage); | 144 | var stageMat = this.getMatrixFromElement(stage); |
138 | var stagePlane = [stageMat[8], stageMat[9], stageMat[10], stageMat[11]]; | 145 | var stagePlane = [stageMat[8], stageMat[9], stageMat[10], stageMat[11]]; |
139 | 146 | ||
147 | if (elt === stage) | ||
148 | { | ||
149 | xVec = [1,0,0]; | ||
150 | yVec = [0,1,0]; | ||
151 | } | ||
152 | |||
140 | var xDot = Math.abs(vecUtils.vecDot(3, xVec, stagePlane)); | 153 | var xDot = Math.abs(vecUtils.vecDot(3, xVec, stagePlane)); |
141 | var yDot = Math.abs(vecUtils.vecDot(3, yVec, stagePlane)); | 154 | var yDot = Math.abs(vecUtils.vecDot(3, yVec, stagePlane)); |
142 | 155 | ||
@@ -788,35 +801,23 @@ exports.ViewUtils = Montage.create(Component, { | |||
788 | } | 801 | } |
789 | }, | 802 | }, |
790 | 803 | ||
791 | getStageWorldToGlobalMatrix: { | 804 | getStageWorldToGlobalMatrix: |
792 | value: function() { | 805 | { |
806 | value: function() | ||
807 | { | ||
793 | var stage = this.application.ninja.currentDocument.documentRoot; | 808 | var stage = this.application.ninja.currentDocument.documentRoot; |
794 | this.pushViewportObj( stage ); | 809 | this.pushViewportObj( stage ); |
795 | 810 | ||
796 | // get the matrix to the parent | 811 | // put the point into screen space of the stage - requires |
797 | var mat = Matrix.I(4); | 812 | // a translation to the top/left only |
798 | //var projMat = Matrix.I(4).multiply( this.getPerspectiveDistFromElement(stage) ); | ||
799 | var p = this.getPerspectiveDistFromElement(stage); | ||
800 | var projMat = glmat4.scale( Matrix.I(4), [p,p,p], [] ); | ||
801 | projMat[11] = -1; | ||
802 | var cop = this.getCenterOfProjection(); | 813 | var cop = this.getCenterOfProjection(); |
803 | var v2s = Matrix.Translation([cop[0], cop[1], 0]); | 814 | var v2s = Matrix.Translation([cop[0], cop[1], 0]); |
804 | 815 | ||
805 | //mat = v2s.multiply( projMat ); | ||
806 | mat = glmat4.multiply( v2s, projMat, [] ); | ||
807 | |||
808 | // offset to the parent | ||
809 | var offset = this.getElementOffset( stage ); | ||
810 | var offMat = Matrix.Translation([offset[0], offset[1], 0]); | ||
811 | //mat = offMat.multiply( mat ); | ||
812 | glmat4.multiply( offMat, mat, mat ); | ||
813 | |||
814 | this.popViewportObj(); | 816 | this.popViewportObj(); |
815 | 817 | ||
816 | // var mat2 = this.getLocalToGlobalMatrix( stage.parentElement ); | 818 | // append the localToGlobal matrix of the stage. |
817 | var mat2 = this.getLocalToGlobalMatrix( this._rootElement ); | 819 | var mat = this.getLocalToGlobalMatrix( stage ); |
818 | //var mat = mat2.multiply( mat ); | 820 | glmat4.multiply( mat, v2s ); |
819 | glmat4.multiply( mat2, mat, mat ); | ||
820 | 821 | ||
821 | return mat; | 822 | return mat; |
822 | } | 823 | } |