aboutsummaryrefslogtreecommitdiff
path: root/js/helper-classes/3D/draw-utils.js
diff options
context:
space:
mode:
authorNivesh Rajbhandari2012-07-19 10:55:22 -0700
committerNivesh Rajbhandari2012-07-19 10:55:22 -0700
commitfc13ef1e806116bb7ece5bb06604fa4f5714a6ed (patch)
tree8e8d87b31fffb7163aff0634ba4128f08be66343 /js/helper-classes/3D/draw-utils.js
parent16d06bac95ce8334f8c5586750e98360dbc9cbd9 (diff)
downloadninja-fc13ef1e806116bb7ece5bb06604fa4f5714a6ed.tar.gz
Squashed commit of the following:
commit 0285afe3d4bd458a51f11241f13ea6ffdb0283ed Merge: 2f9f5e3 16d06ba Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Thu Jul 19 10:54:25 2012 -0700 Merge branch 'refs/heads/ninja-mqg734-master' into StageToolDrawingOptimizations commit 2f9f5e369eb96f6c81b5e4bcbe09b418825e2864 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Wed Jul 18 17:15:19 2012 -0700 Fixed selection bounds not drawing in nested tags. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit b0a3507f9d27579ad511c69314a09136d7f7c6a0 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Wed Jul 18 11:07:44 2012 -0700 Layout info needs to redraw if stage is updated. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 63c5e0bf52c33706ba597cb69f7794e287bd0f06 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Tue Jul 17 15:40:54 2012 -0700 Per feedback from QE, we are still going to draw tool feedback on each mouse move so the selection bounds are not out of sync with the elements. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 0599a742092b985c4002977e501e3b457173f1d9 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Tue Jul 17 15:28:25 2012 -0700 Fixed grid not drawing correctly when switching documents and when adding/removing elements. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit fd9410606ee6358910d65b2cb5f71812fd44a7c4 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Tue Jul 17 11:36:09 2012 -0700 Updated drawing feedback to handle matrix 2d values entered via CSS Panel. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 559c16c7ac8c9f40b94a011a6f932d4f97df66a7 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Mon Jul 16 17:14:28 2012 -0700 IKNinja-751 - Selection boundary doesn't follow the transform applied in the CSS Panel. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit e2da5340159db5cd6f75bf6c9b7eb9cbf959e5cd Merge: 7cc5de3 5146f22 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Mon Jul 16 15:36:28 2012 -0700 Merge branch 'refs/heads/ninja-mqg734-master' into StageToolDrawingOptimizations commit 7cc5de39e41b4220f53c91b15b0cf0ed53e0b0f6 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Mon Jul 16 14:52:06 2012 -0700 Check if ownerDocument.defaultValue is null. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 5ae97995a28a4b06fb7f8703eb8090ea16d88acd Merge: d17974d 0ede302 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Mon Jul 16 09:27:22 2012 -0700 Merge branch 'refs/heads/ninja-mqg734-master' into StageToolDrawingOptimizations commit d17974d77273bb635311cb6466f4427cf4d9e5d4 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Mon Jul 16 08:45:05 2012 -0700 Pass in selectedElements array directly to drawUtils when drawing selection bounds instead of creating a duplicate array. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 0b1ea3144cb3e2c1d272f60da32423d0604ace3b Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Fri Jul 13 14:03:40 2012 -0700 Fixed line tool not drawing the width and height info. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit b9c70e8d9ae324aa21fa5490edc71d8503bcefbc Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Fri Jul 13 12:42:25 2012 -0700 Used cached offsetWidth and offsetHeight. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 9e17ac7124745ba745014efe149b31dee4fe658f Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Thu Jul 12 16:25:41 2012 -0700 Converting tabs to spaces … again! Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 351726c951bb73c28f0e15ea1ab32e85cc735688 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Thu Jul 12 16:14:31 2012 -0700 Tabs should be 4 spaces. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 250c419aa2dbcb10f012817ee7039aca77cb2518 Merge: 3f8d61a 2880e1d Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Thu Jul 12 16:08:31 2012 -0700 Merge branch 'refs/heads/ninja-mqg734-master' into StageToolDrawingOptimizations commit 3f8d61a676da3992947ed9a2ed0e449780fcfbe0 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Thu Jul 12 15:53:44 2012 -0700 Rotate tool was not working immediately after switching selection and selection bounds were not drawing after resizing canvases. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit e2e1f81e3b6917e1032e1b99b79c266937f3bb25 Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Thu Jul 12 12:15:59 2012 -0700 Single draw cycle for stage updates and tool drawings. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 95a90b4c95ee3163c97bea317144366674e49ade Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Mon Jun 18 11:46:38 2012 -0700 Single draw cycle for the stage and layout. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 21966b1515d80d2161a14e5a19bc66f3f49a92ce Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Fri Jun 15 13:33:14 2012 -0700 Cache element offsets, including offsetParent. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> commit 80c563c8ba06149691c6c1e754dd9a5e43bc7d4b Author: Nivesh Rajbhandari <mqg734@motorola.com> Date: Mon Jul 9 17:30:00 2012 -0700 Open materials editor popup next to PI button. Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com> Signed-off-by: Nivesh Rajbhandari <mqg734@motorola.com>
Diffstat (limited to 'js/helper-classes/3D/draw-utils.js')
-rwxr-xr-xjs/helper-classes/3D/draw-utils.js658
1 files changed, 353 insertions, 305 deletions
diff --git a/js/helper-classes/3D/draw-utils.js b/js/helper-classes/3D/draw-utils.js
index 869de213..b59bbf39 100755
--- a/js/helper-classes/3D/draw-utils.js
+++ b/js/helper-classes/3D/draw-utils.js
@@ -42,7 +42,6 @@ var StageLine = require("js/helper-classes/3D/StageLine").StageLine;
42 42
43 43
44var DrawUtils = exports.DrawUtils = Montage.create(Component, { 44var DrawUtils = exports.DrawUtils = Montage.create(Component, {
45
46 /////////////////////////////////////////////////////////////////////// 45 ///////////////////////////////////////////////////////////////////////
47 // Instance variables 46 // Instance variables
48 /////////////////////////////////////////////////////////////////////// 47 ///////////////////////////////////////////////////////////////////////
@@ -97,7 +96,7 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
97 _selectionCtr : {value: null, writable: true }, 96 _selectionCtr : {value: null, writable: true },
98 97
99 // Properties that require element planes to be updated 98 // Properties that require element planes to be updated
100 _updatePlaneProps : {value: ["matrix", "left", "top", "width", "height"], writable: false }, 99 _updatePlaneProps : {value: ["matrix", "left", "top", "width", "height", "border", "border-width", "border-style", "-webkit-transform"], writable: false },
101 _recalculateScrollOffsets : { value: false }, 100 _recalculateScrollOffsets : { value: false },
102 101
103 /////////////////////////////////////////////////////////////////////// 102 ///////////////////////////////////////////////////////////////////////
@@ -106,33 +105,33 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
106 setDrawingSurfaceElement : { value: function( s ) { this._drawingSurfaceElt = s; if (s) this._drawingContext = s.getContext("2d"); }}, 105 setDrawingSurfaceElement : { value: function( s ) { this._drawingSurfaceElt = s; if (s) this._drawingContext = s.getContext("2d"); }},
107 getDrawingSurfaceElement : { value: function() { return this._drawingSurfaceElt; }}, 106 getDrawingSurfaceElement : { value: function() { return this._drawingSurfaceElt; }},
108 107
109 getDrawingContext : { value: function() { return this._drawingContext; }}, 108 getDrawingContext : { value: function() { return this._drawingContext; }},
110 109
111 setSourceSpaceElement : { value: function(ss) { this._sourceSpaceElt = ss; }}, 110 setSourceSpaceElement : { value: function(ss) { this._sourceSpaceElt = ss; }},
112 getSourceSpaceElement : { value: function() { return this._sourceSpaceElt; }}, 111 getSourceSpaceElement : { value: function() { return this._sourceSpaceElt; }},
113 112
114 getWorkingPlane : { value: function() { return this._workingPlane; }}, 113 getWorkingPlane : { value: function() { return this._workingPlane; }},
115 setWorkingPlane : { value: function (wp) { this._workingPlane = wp; }}, 114 setWorkingPlane : { value: function (wp) { this._workingPlane = wp; }},
116 115
117 getGridHorizontalSpacing : { value: function() { return this._gridHorizontalSpacing; }}, 116 getGridHorizontalSpacing : { value: function() { return this._gridHorizontalSpacing; }},
118 getGridVerticalSpacing : { value: function() { return this._gridVerticalSpacing; }}, 117 getGridVerticalSpacing : { value: function() { return this._gridVerticalSpacing; }},
119 getGridHorizontalLineCount : { value: function() { return this._gridHorizontalLineCount; }}, 118 getGridHorizontalLineCount : { value: function() { return this._gridHorizontalLineCount; }},
120 getGridVerticalLineCount : { value: function() { return this._gridVerticalLineCount; }}, 119 getGridVerticalLineCount : { value: function() { return this._gridVerticalLineCount; }},
121 getGridOrigin : { value: function() { return this._gridOrigin.slice(0); }}, 120 getGridOrigin : { value: function() { return this._gridOrigin.slice(0); }},
122 121
123 isDrawingGrid : { value: function() { return this.drawXY || this.drawYZ || this.drawXZ; }}, 122 isDrawingGrid : { value: function() { return this.drawXY || this.drawYZ || this.drawXZ; }},
124 isDrawingElementNormal : { value: function() { return this.drawElementN }}, 123 isDrawingElementNormal : { value: function() { return this.drawElementN }},
125 124
126 getLineColor : { value: function() { return this._lineColor; }}, 125 getLineColor : { value: function() { return this._lineColor; }},
127 setLineColor : { value: function( color ) { this._lineColor = color; }}, 126 setLineColor : { value: function( color ) { this._lineColor = color; }},
128 127
129 getLineWidth : { value: function() { return this._drawingContext.lineWidth; }}, 128 getLineWidth : { value: function() { return this._drawingContext.lineWidth; }},
130 setLineWidth : { value: function( w ) { this._drawingContext.lineWidth = w; }}, 129 setLineWidth : { value: function( w ) { this._drawingContext.lineWidth = w; }},
131 130
132 131
133 initialize: { 132 initialize: {
134 value: function() { 133 value: function() {
135 this._gridOrigin = [0,0]; // 2D plane space point 134 this._gridOrigin = [0,0]; // 2D plane space point
136 135
137 this.eventManager.addEventListener("elementAdded", this, false); 136 this.eventManager.addEventListener("elementAdded", this, false);
138 this.eventManager.addEventListener("elementsRemoved", this, false); 137 this.eventManager.addEventListener("elementsRemoved", this, false);
@@ -212,7 +211,12 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
212 this.addElement(elements); 211 this.addElement(elements);
213 } 212 }
214 213
215 this.drawWorkingPlane(); 214 // Redraw stage only once after all addition is completed
215 var stage = this.application.ninja.stage;
216 stage.drawLayout = true;
217 stage.updatePlanes = true;
218 stage.draw3DInfo = true;
219 stage.needsDrawSelection = true;
216 } 220 }
217 }, 221 },
218 222
@@ -229,7 +233,12 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
229 this.removeElement(elements); 233 this.removeElement(elements);
230 } 234 }
231 235
232 this.drawWorkingPlane(); 236 // Redraw stage only once after all deletion is completed
237 var stage = this.application.ninja.stage;
238 stage.drawLayout = true;
239 stage.updatePlanes = true;
240 stage.draw3DInfo = true;
241 stage.needsDrawSelection = true;
233 } 242 }
234 }, 243 },
235 244
@@ -310,9 +319,20 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
310 plane, 319 plane,
311 changed = false, 320 changed = false,
312 elt, 321 elt,
322 eltModel,
313 adjustStagePadding = !isChanging || (event.detail.data.prop !== "matrix"); 323 adjustStagePadding = !isChanging || (event.detail.data.prop !== "matrix");
314 for(var i=0; i < len; i++) { 324 for(var i=0; i < len; i++) {
315 elt = els[i]; 325 elt = els[i];
326 eltModel = elt.elementModel;
327 eltModel.setProperty("offsetCache", false);
328
329 if(eltModel.selection !== "body") {
330 if(isChanging) {
331 eltModel.props3D.matrix3d = null;
332 } else {
333 eltModel.props3D.init(elt, false);
334 }
335 }
316 plane = elt.elementModel.props3D.elementPlane; 336 plane = elt.elementModel.props3D.elementPlane;
317 if(plane) { 337 if(plane) {
318 plane.init(); 338 plane.init();
@@ -353,8 +373,10 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
353 } 373 }
354 374
355 if(!changed) { 375 if(!changed) {
356 this.drawWorkingPlane(); 376 // If we didn't already set userPaddingTop or userPaddingLeft, force stage to redraw
357 this.draw3DCompass(); 377 //this.snapManager._isCacheInvalid = true;
378// stage.draw3DInfo = true;
379 stage.needsDraw = true;
358 } 380 }
359 381
360 // TODO - Remove this once all stage drawing is consolidated into a single draw cycle 382 // TODO - Remove this once all stage drawing is consolidated into a single draw cycle
@@ -680,81 +702,82 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
680 { 702 {
681 this.application.ninja.stage.clearGridCanvas(); 703 this.application.ninja.stage.clearGridCanvas();
682 this.drawStageOutline(); 704 this.drawStageOutline();
683 if (!this.isDrawingGrid()) return; 705 if (this.isDrawingGrid()) {
684 706 var saveContext = this.getDrawingSurfaceElement();
685 var saveContext = this.getDrawingSurfaceElement(); 707 this.setDrawingSurfaceElement(this.application.ninja.stage.gridCanvas);
686 this.setDrawingSurfaceElement(this.application.ninja.stage.gridCanvas);
687 708
688 // 3 coordinate axes for the plane 709 // 3 coordinate axes for the plane
689 var zAxis = [this._workingPlane[0], this._workingPlane[1], this._workingPlane[2]]; 710 var zAxis = [this._workingPlane[0], this._workingPlane[1], this._workingPlane[2]];
690 711
691 // get a point that lies on the plane 712 // get a point that lies on the plane
692 var ptOnPlane = MathUtils.getPointOnPlane(this._workingPlane); 713 var ptOnPlane = MathUtils.getPointOnPlane(this._workingPlane);
693 714
694 // define the grid parameters 715 // define the grid parameters
695 var width = this.snapManager.getStageWidth(), 716 var width = this.snapManager.getStageWidth(),
696 height = this.snapManager.getStageHeight(), 717 height = this.snapManager.getStageHeight(),
697 nLines = 10; 718 nLines = 10;
698 719
699 // get a matrix from working plane space to the world 720 // get a matrix from working plane space to the world
700 var mat = this.getPlaneToWorldMatrix(zAxis, ptOnPlane); 721 var mat = this.getPlaneToWorldMatrix(zAxis, ptOnPlane);
701 var tMat = Matrix.Translation( [0.5*width, 0.5*height, 0] ); 722 var tMat = Matrix.Translation( [0.5*width, 0.5*height, 0] );
702 //mat = tMat.multiply(mat); 723 //mat = tMat.multiply(mat);
703 glmat4.multiply( tMat, mat, mat); 724 glmat4.multiply( tMat, mat, mat);
704 725
705 // the positioning of the grid may depend on the view direction. 726 // the positioning of the grid may depend on the view direction.
706 var stage = this.snapManager.getStage(); 727 var stage = this.snapManager.getStage();
707 var viewMat = this.viewUtils.getMatrixFromElement(stage); 728 var