aboutsummaryrefslogtreecommitdiff
path: root/js/helper-classes/3D
diff options
context:
space:
mode:
Diffstat (limited to 'js/helper-classes/3D')
-rwxr-xr-xjs/helper-classes/3D/draw-utils.js34
-rwxr-xr-xjs/helper-classes/3D/snap-manager.js16
-rwxr-xr-xjs/helper-classes/3D/view-utils.js80
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 }