aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xjs/controllers/elements/element-controller.js10
-rwxr-xr-xjs/controllers/elements/stage-controller.js20
-rwxr-xr-xjs/controllers/styles-controller.js35
-rwxr-xr-xjs/helper-classes/3D/hit-record.js10
-rwxr-xr-xjs/helper-classes/3D/snap-manager.js12
-rwxr-xr-xjs/helper-classes/3D/view-utils.js163
-rwxr-xr-xjs/models/properties-3d.js6
-rwxr-xr-xjs/tools/ShapeTool.js2
-rwxr-xr-xjs/tools/TagTool.js2
-rwxr-xr-xjs/tools/drawing-tool-base.js9
10 files changed, 188 insertions, 81 deletions
diff --git a/js/controllers/elements/element-controller.js b/js/controllers/elements/element-controller.js
index fda3a3c5..7ab6664f 100755
--- a/js/controllers/elements/element-controller.js
+++ b/js/controllers/elements/element-controller.js
@@ -249,10 +249,6 @@ exports.ElementController = Montage.create(Component, {
249 else 249 else
250 { 250 {
251 var dist = this.application.ninja.stylesController.getPerspectiveDistFromElement(el, false); 251 var dist = this.application.ninja.stylesController.getPerspectiveDistFromElement(el, false);
252 if(dist == null) {
253 dist = 1400;
254 }
255
256 el.elementModel.props3D.perspectiveDist = dist; 252 el.elementModel.props3D.perspectiveDist = dist;
257 return dist; 253 return dist;
258 } 254 }
@@ -266,9 +262,13 @@ exports.ElementController = Montage.create(Component, {
266 mat = props[index]["mat"]; 262 mat = props[index]["mat"];
267 this.application.ninja.stylesController.setElementStyle(el, 263 this.application.ninja.stylesController.setElementStyle(el,
268 "-webkit-transform", 264 "-webkit-transform",
269 "perspective(" + dist + ") " +
270 "matrix3d(" + MathUtils.scientificToDecimal(mat, 5) + ")"); 265 "matrix3d(" + MathUtils.scientificToDecimal(mat, 5) + ")");
271 266
267 // TODO - We don't support perspective on individual elements yet
268// this.application.ninja.stylesController.setElementStyle(el,
269// "-webkit-perspective",
270// dist);
271
272 el.elementModel.props3D.matrix3d = mat; 272 el.elementModel.props3D.matrix3d = mat;
273 el.elementModel.props3D.perspectiveDist = dist; 273 el.elementModel.props3D.perspectiveDist = dist;
274 274
diff --git a/js/controllers/elements/stage-controller.js b/js/controllers/elements/stage-controller.js
index dc916b1a..f376e40f 100755
--- a/js/controllers/elements/stage-controller.js
+++ b/js/controllers/elements/stage-controller.js
@@ -90,7 +90,7 @@ exports.StageController = Montage.create(ElementController, {
90 return el.elementModel.stageView.style.getProperty(p); 90 return el.elementModel.stageView.style.getProperty(p);
91 } 91 }
92 default: 92 default:
93 return ElementController.getProperty(el, p, false, true); 93 return ElementController.getProperty(el, p, true, true);
94 //console.log("Undefined Stage property ", p); 94 //console.log("Undefined Stage property ", p);
95 } 95 }
96 } 96 }
@@ -119,6 +119,7 @@ exports.StageController = Montage.create(ElementController, {
119 break; 119 break;
120 case "-webkit-transform-style": 120 case "-webkit-transform-style":
121 el.elementModel.stageView.style.setProperty(p, value); 121 el.elementModel.stageView.style.setProperty(p, value);
122 this.application.ninja.stage.updatedStage = true;
122 break; 123 break;
123 default: 124 default:
124 console.log("Undefined property ", p, "for the Stage Controller"); 125 console.log("Undefined property ", p, "for the Stage Controller");
@@ -178,5 +179,20 @@ exports.StageController = Montage.create(ElementController, {
178 return mat; 179 return mat;
179 } 180 }
180 } 181 }
181 } 182 },
183
184 getPerspectiveDist: {
185 value: function(el) {
186 if(el.elementModel && el.elementModel.props3D && el.elementModel.props3D.perspectiveDist)
187 {
188 return el.elementModel.props3D.perspectiveDist;
189 }
190 else
191 {
192 var dist = this.application.ninja.stylesController.getPerspectiveDistFromElement(el, true);
193 el.elementModel.props3D.perspectiveDist = dist;
194 return dist;
195 }
196 }
197 },
182}); 198});
diff --git a/js/controllers/styles-controller.js b/js/controllers/styles-controller.js
index 3e56f25c..f7c98023 100755
--- a/js/controllers/styles-controller.js
+++ b/js/controllers/styles-controller.js
@@ -1138,7 +1138,7 @@ var stylesController = exports.StylesController = Montage.create(Component, {
1138 1138
1139 getMatrixFromElement : { 1139 getMatrixFromElement : {
1140 value: function(element, isStage) { 1140 value: function(element, isStage) {
1141 var xformStr = this.getElementStyle(element, "-webkit-transform", false, isStage), 1141 var xformStr = this.getElementStyle(element, "-webkit-transform", true, isStage),
1142 mat; 1142 mat;
1143 1143
1144 if (xformStr) { 1144 if (xformStr) {
@@ -1171,26 +1171,29 @@ var stylesController = exports.StylesController = Montage.create(Component, {
1171 1171
1172 getPerspectiveDistFromElement : { 1172 getPerspectiveDistFromElement : {
1173 value: function(element, isStage) { 1173 value: function(element, isStage) {
1174 var xformStr = this.getElementStyle(element, "-webkit-transform", false, isStage), 1174 var xformStr = this.getElementStyle(element, "-webkit-perspective", false, isStage),
1175 dist; 1175 dist;
1176 1176
1177 if (xformStr) { 1177 if(xformStr) {
1178 var index1 = xformStr.indexOf( "perspective("); 1178 dist = parseInt(xformStr);
1179 if (index1 >= 0) { 1179 } else {
1180 index1 += 12; // do not include 'perspective(' 1180 xformStr = this.getElementStyle(element, "-webkit-transform", true, isStage);
1181 var index2 = xformStr.indexOf( ")", index1 ); 1181 if (xformStr) {
1182 if (index2 >= 0) { 1182 var index1 = xformStr.indexOf( "perspective(");
1183 var substr = xformStr.substr( index1, (index2-index1)); 1183 if (index1 >= 0) {
1184 if (substr && (substr.length > 0)) { 1184 index1 += 12; // do not include 'perspective('
1185 dist = parseInt( substr ); 1185 var index2 = xformStr.indexOf( ")", index1 );
1186 if (index2 >= 0) {
1187 var substr = xformStr.substr( index1, (index2-index1));
1188 if (substr && (substr.length > 0)) {
1189 dist = parseInt( substr );
1190 }
1186 } 1191 }
1187 } 1192 }
1188 } 1193 }
1189 } else { 1194 }
1190 xformStr = this.getElementStyle(element, "-webkit-perspective", false, isStage); 1195 if(isNaN(dist)) {
1191 if(xformStr) { 1196 dist = null;
1192 dist = parseInt(xformStr);
1193 }
1194 } 1197 }
1195 return dist; 1198 return dist;
1196 } 1199 }
diff --git a/js/helper-classes/3D/hit-record.js b/js/helper-classes/3D/hit-record.js
index 2c60adc6..265bf2a4 100755
--- a/js/helper-classes/3D/hit-record.js
+++ b/js/helper-classes/3D/hit-record.js
@@ -232,7 +232,15 @@ var HitRecord = exports.HitRecord = Object.create(Object.prototype,
232 var elt = this.getElt(); 232 var elt = this.getElt();
233 viewUtils.pushViewportObj( elt ); 233 viewUtils.pushViewportObj( elt );
234 var viewPt = viewUtils.screenToView( scrPt[0], scrPt[1], scrPt[2] ); 234 var viewPt = viewUtils.screenToView( scrPt[0], scrPt[1], scrPt[2] );
235 var eyePt = viewUtils.getEyePoint(); 235 var eyePt;
236 if(viewUtils.getPerspectiveDistFromElement(elt))
237 {
238 eyePt = viewUtils.getEyePoint();
239 }
240 else
241 {
242 eyePt = [viewPt[0], viewPt[1], 1400];
243 }
236 var projPt = MathUtils.vecIntersectPlane( eyePt, MathUtils.vecSubtract(viewPt,eyePt), plane ); 244 var projPt = MathUtils.vecIntersectPlane( eyePt, MathUtils.vecSubtract(viewPt,eyePt), plane );
237 245
238 return projPt; 246 return projPt;
diff --git a/js/helper-classes/3D/snap-manager.js b/js/helper-classes/3D/snap-manager.js
index a401c363..61f5bc97 100755
--- a/js/helper-classes/3D/snap-manager.js
+++ b/js/helper-classes/3D/snap-manager.js
@@ -229,7 +229,9 @@ var SnapManager = exports.SnapManager = Montage.create(Component, {
229 parentPt = [quadPt[0], quadPt[1], 0.0]; 229 parentPt = [quadPt[0], quadPt[1], 0.0];
230 else 230 else
231 parentPt = [xScreen, yScreen, 0.0]; 231 parentPt = [xScreen, yScreen, 0.0];
232 var vec = viewUtils.parentToChildVec(parentPt, stage); 232
233 var eyePt = [];
234 var vec = viewUtils.parentToChildVec(parentPt, stage, eyePt);
233 if (vec) 235 if (vec)
234 { 236 {
235 // activate the drag working plane 237 // activate the drag working plane
@@ -241,7 +243,6 @@ var SnapManager = exports.SnapManager = Montage.create(Component, {
241 var wp = currentWorkingPlane.slice(0); 243 var wp = currentWorkingPlane.slice(0);
242 var mat = viewUtils.getMatrixFromElement(stage); 244 var mat = viewUtils.getMatrixFromElement(stage);
243 wp = MathUtils.transformPlane(wp, mat); 245 wp = MathUtils.transformPlane(wp, mat);
244 var eyePt = viewUtils.getEyePoint();
245 var projPt = MathUtils.vecIntersectPlane(eyePt, vec, wp); 246 var projPt = MathUtils.vecIntersectPlane(eyePt, vec, wp);
246 if (projPt) 247 if (projPt)
247 { 248 {
@@ -709,8 +710,8 @@ var SnapManager = exports.SnapManager = Montage.create(Component, {
709 var wp = currentWorkingPlane.slice(0); 710 var wp = currentWorkingPlane.slice(0);
710 var mat = viewUtils.getMatrixFromElement(stage); 711 var mat = viewUtils.getMatrixFromElement(stage);
711 wp = MathUtils.transformPlane(wp, mat); 712 wp = MathUtils.transformPlane(wp, mat);
712 var eyePt = viewUtils.getEyePoint(); 713 var eyePt = [];
713 var vec = viewUtils.parentToChildVec(gPt, stage); 714 var vec = viewUtils.parentToChildVec(gPt, stage, eyePt);
714 var projPt = MathUtils.vecIntersectPlane(eyePt, vec, wp); 715 var projPt = MathUtils.vecIntersectPlane(eyePt, vec, wp);
715 var wpMat = drawUtils.getPlaneToWorldMatrix(currentWorkingPlane, MathUtils.getPointOnPlane(currentWorkingPlane)); 716 var wpMat = drawUtils.getPlaneToWorldMatrix(currentWorkingPlane, MathUtils.getPointOnPlane(currentWorkingPlane));
716 projPt[3] = 1.0; 717 projPt[3] = 1.0;
@@ -1067,8 +1068,9 @@ var SnapManager = exports.SnapManager = Montage.create(Component, {
1067 // Snapping is done in screen space, so convert the bounds from 1068 // Snapping is done in screen space, so convert the bounds from
1068 // local element space to global screen space 1069 // local element space to global screen space
1069 var bounds3D = new Array();</