diff options
Diffstat (limited to 'js/helper-classes/3D')
-rwxr-xr-x | js/helper-classes/3D/draw-utils.js | 34 | ||||
-rwxr-xr-x | js/helper-classes/3D/snap-manager.js | 16 | ||||
-rwxr-xr-x | js/helper-classes/3D/view-utils.js | 80 |
3 files changed, 109 insertions, 21 deletions
diff --git a/js/helper-classes/3D/draw-utils.js b/js/helper-classes/3D/draw-utils.js index 81a740e0..88830964 100755 --- a/js/helper-classes/3D/draw-utils.js +++ b/js/helper-classes/3D/draw-utils.js | |||
@@ -651,6 +651,21 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, { | |||
651 | this._lineColor = saveColor; | 651 | this._lineColor = saveColor; |
652 | this._drawingContext.lineWidth = saveLineWidth; | 652 | this._drawingContext.lineWidth = saveLineWidth; |
653 | 653 | ||
654 | if(this.application.ninja.currentDocument.documentRoot.id !== "UserContent") { | ||
655 | // draw an outline around the body | ||
656 | var stagePt = MathUtils.getPointOnPlane([0,0,1,0]); | ||
657 | var stageMat = this.getPlaneToWorldMatrix([0,0,1], stagePt); | ||
658 | // glmat4.multiply( tMat, stageMat, stageMat); | ||
659 | pt0 = [0, 0, 0]; | ||
660 | pt1 = [0, height, 0]; | ||
661 | delta = [width, 0, 0]; | ||
662 | this.drawGridLines(pt0, pt1, delta, stageMat, 2); | ||
663 | pt0 = [0, 0, 0]; | ||
664 | pt1 = [width, 0, 0]; | ||
665 | delta = [0, height, 0]; | ||
666 | this.drawGridLines(pt0, pt1, delta, stageMat, 2); | ||
667 | } | ||
668 | |||
654 | // draw the lines | 669 | // draw the lines |
655 | this.redrawGridLines(); | 670 | this.redrawGridLines(); |
656 | 671 | ||
@@ -752,12 +767,27 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, { | |||
752 | this._drawingContext.lineWidth = 0.25; | 767 | this._drawingContext.lineWidth = 0.25; |
753 | 768 | ||
754 | // draw the lines | 769 | // draw the lines |
755 | var nLines = this._gridLineArray.length; | 770 | var line, |
771 | nLines = this._gridLineArray.length; | ||
772 | if(this.application.ninja.currentDocument.documentRoot.id !== "UserContent") { | ||
773 | nLines = this._gridLineArray.length-4; | ||
774 | } | ||
775 | |||
756 | for (var i = 0; i < nLines; i++) { | 776 | for (var i = 0; i < nLines; i++) { |
757 | var line = this._gridLineArray[i]; | 777 | line = this._gridLineArray[i]; |
758 | this.drawIntersectedLine(line, this._drawingContext); | 778 | this.drawIntersectedLine(line, this._drawingContext); |
759 | } | 779 | } |
760 | 780 | ||
781 | if(this.application.ninja.currentDocument.documentRoot.id !== "UserContent") { | ||
782 | this._lineColor = "red"; | ||
783 | i = nLines; | ||
784 | nLines += 4; | ||
785 | for (; i < nLines; i++) { | ||
786 | line = this._gridLineArray[i]; | ||
787 | this.drawIntersectedLine(line, this._drawingContext); | ||
788 | } | ||
789 | } | ||
790 | |||
761 | this.popState(); | 791 | this.popState(); |
762 | } | 792 | } |
763 | }, | 793 | }, |
diff --git a/js/helper-classes/3D/snap-manager.js b/js/helper-classes/3D/snap-manager.js index 7fc492a5..6766ac7f 100755 --- a/js/helper-classes/3D/snap-manager.js +++ b/js/helper-classes/3D/snap-manager.js | |||
@@ -1617,7 +1617,11 @@ var SnapManager = exports.SnapManager = Montage.create(Component, { | |||
1617 | if (x > y) { | 1617 | if (x > y) { |
1618 | if (x > z) { | 1618 | if (x > z) { |
1619 | plane[0] = 1; | 1619 | plane[0] = 1; |
1620 | plane[3] = this.getStageWidth() / 2.0; | 1620 | if(this.application.ninja.currentDocument.documentRoot.id !== "UserContent") { |
1621 | plane[3] = stage.scrollWidth / 2.0; | ||
1622 | } else { | ||
1623 | plane[3] = this.getStageWidth() / 2.0; | ||
1624 | } | ||
1621 | if (dir[0] > 0) plane[3] = -plane[3]; | 1625 | if (dir[0] > 0) plane[3] = -plane[3]; |
1622 | change = !drawUtils.drawYZ; | 1626 | change = !drawUtils.drawYZ; |
1623 | drawUtils.drawXY = drawUtils.drawXZ = false; | 1627 | drawUtils.drawXY = drawUtils.drawXZ = false; |
@@ -1635,7 +1639,11 @@ var SnapManager = exports.SnapManager = Montage.create(Component, { | |||
1635 | else { | 1639 | else { |
1636 | if (y > z) { | 1640 | if (y > z) { |
1637 | plane[1] = 1; | 1641 | plane[1] = 1; |
1638 | plane[3] = this.getStageHeight() / 2.0; | 1642 | if(this.application.ninja.currentDocument.documentRoot.id !== "UserContent") { |
1643 | plane[3] = stage.scrollHeight / 2.0; | ||
1644 | } else { | ||
1645 | plane[3] = this.getStageHeight() / 2.0; | ||
1646 | } | ||
1639 | if (dir[1] > 0) plane[3] = -plane[3]; | 1647 | if (dir[1] > 0) plane[3] = -plane[3]; |
1640 | change = !drawUtils.drawXZ; | 1648 | change = !drawUtils.drawXZ; |
1641 | drawUtils.drawXY = drawUtils.drawYZ = false; | 1649 | drawUtils.drawXY = drawUtils.drawYZ = false; |
@@ -1949,6 +1957,8 @@ var SnapManager = exports.SnapManager = Montage.create(Component, { | |||
1949 | var localPt = hitRec.getLocalPoint(); | 1957 | var localPt = hitRec.getLocalPoint(); |
1950 | var planeMat = hitRec.getPlaneMatrix(); | 1958 | var planeMat = hitRec.getPlaneMatrix(); |
1951 | var stageWorldPt; | 1959 | var stageWorldPt; |
1960 | |||
1961 | /* | ||
1952 | if(inGlobalMode) | 1962 | if(inGlobalMode) |
1953 | { | 1963 | { |
1954 | stageWorldPt = MathUtils.transformPoint(localPt,planeMat); | 1964 | stageWorldPt = MathUtils.transformPoint(localPt,planeMat); |
@@ -1957,6 +1967,8 @@ var SnapManager = exports.SnapManager = Montage.create(Component, { | |||
1957 | { | 1967 | { |
1958 | stageWorldPt = viewUtils.postViewToStageWorld( MathUtils.transformPoint(localPt,planeMat), elt ); | 1968 | stageWorldPt = viewUtils.postViewToStageWorld( MathUtils.transformPoint(localPt,planeMat), elt ); |
1959 | } | 1969 | } |
1970 | */ | ||
1971 | stageWorldPt = viewUtils.postViewToStageWorld( MathUtils.transformPoint(localPt,planeMat), elt ); | ||
1960 | 1972 | ||
1961 | /* | 1973 | /* |
1962 | // get a working plane parallel to the current working plane through the stage world point | 1974 | // get a working plane parallel to the current working plane through the stage world point |
diff --git a/js/helper-classes/3D/view-utils.js b/js/helper-classes/3D/view-utils.js index 40a19b90..919f7c50 100755 --- a/js/helper-classes/3D/view-utils.js +++ b/js/helper-classes/3D/view-utils.js | |||
@@ -124,35 +124,81 @@ exports.ViewUtils = Montage.create(Component, { | |||
124 | } | 124 | } |
125 | }, | 125 | }, |
126 | 126 | ||
127 | getNormalToUnprojectedElementPlane: { | 127 | /* |
128 | value: function( elt ) { | 128 | * This method will return a normal to a plane containing the Z axis and either the |
129 | var mat = this.getMatrixFromElement(elt); | 129 | * x or y axis of the element. |
130 | */ | ||
131 | getNormalToUnprojectedElementPlane: | ||
132 | { | ||
133 | value: function( elt, axis, localMode ) | ||
134 | { | ||
135 | var objMat = this.getMatrixFromElement(elt); | ||
136 | var objMatInv = glmat4.inverse( objMat, [] ); | ||
130 | 137 | ||
131 | var xVec = [mat[0], mat[1], mat[2], mat[3]]; | 138 | var xVec = [1,0,0]; |
132 | var yVec = [mat[4], mat[5], mat[6], mat[7]]; | 139 | var yVec = [0,1,0]; |
140 | var zVec = [0,0,1]; | ||
133 | 141 | ||
134 | var stage = this.application.ninja.currentDocument.documentRoot; | 142 | var stage = this.application.ninja.currentDocument.documentRoot; |
135 | var stageMat = this.getMatrixFromElement(stage); | 143 | var stageMat = this.getMatrixFromElement(stage); |
136 | var stagePlane = [stageMat[8], stageMat[9], stageMat[10], stageMat[11]]; | ||
137 | 144 | ||
145 | var mat = glmat4.multiply( stageMat, objMat, [] ); | ||
146 | |||
147 | var viewDir; | ||
148 | if (localMode) | ||
149 | { | ||
150 | var matInv = glmat4.inverse( mat, [] ); | ||
151 | viewDir = MathUtils.transformVector( [0,0,1], matInv ); | ||
152 | } | ||
153 | else | ||
154 | { | ||
155 | var stageInv = glmat4.inverse( stageMat, [] ); | ||
156 | viewDir = MathUtils.transformVector( [0,0,1], stageInv ); | ||
157 | } | ||
158 | |||
159 | /* | ||
138 | if (elt === stage) | 160 | if (elt === stage) |
139 | { | 161 | { |
140 | xVec = [1,0,0]; | 162 | xVec = [1,0,0]; |
141 | yVec = [0,1,0]; | 163 | yVec = [0,1,0]; |
142 | } | 164 | } |
165 | */ | ||
143 | 166 | ||
144 | var xDot = Math.abs(vecUtils.vecDot(3, xVec, stagePlane)); | 167 | var plane; |
145 | var yDot = Math.abs(vecUtils.vecDot(3, yVec, stagePlane)); | 168 | var xDot, yDot, zDot; |
169 | switch (axis) | ||
170 | { | ||
171 | case 0: | ||
172 | yDot = Math.abs(vecUtils.vecDot(3, yVec, viewDir)); | ||
173 | zDot = Math.abs(vecUtils.vecDot(3, zVec, viewDir)); | ||
174 | if(yDot > zDot) | ||
175 | plane = vecUtils.vecCross( 3, zVec, xVec ); | ||
176 | else | ||
177 | plane = vecUtils.vecCross( 3, yVec, xVec ); | ||
178 | break; | ||
179 | |||
180 | case 1: | ||
181 | xDot = Math.abs(vecUtils.vecDot(3, yVec, viewDir)); | ||
182 | zDot = Math.abs(vecUtils.vecDot(3, zVec, viewDir)); | ||
183 | if(xDot > zDot) | ||
184 | plane = vecUtils.vecCross( 3, zVec, yVec ); | ||
185 | else | ||
186 | plane = vecUtils.vecCross( 3, xVec, yVec ); | ||
187 | break; | ||
188 | break; | ||
189 | |||
190 | case 2: | ||
191 | xDot = Math.abs(vecUtils.vecDot(3, xVec, viewDir)); | ||
192 | yDot = Math.abs(vecUtils.vecDot(3, yVec, viewDir)); | ||
193 | |||
194 | if(xDot > yDot) | ||
195 | plane = vecUtils.vecCross( 3, yVec, zVec ); | ||
196 | else | ||
197 | plane = vecUtils.vecCross( 3, xVec, zVec ); | ||
198 | break; | ||
199 | } | ||
146 | 200 | ||
147 | var plane; | 201 | if (localMode) plane = MathUtils.transformVector( plane, objMat ); |
148 | if(xDot > yDot) | ||
149 | { | ||
150 | plane = xVec; | ||
151 | } | ||