aboutsummaryrefslogtreecommitdiff
path: root/js/helper-classes/3D/draw-utils.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/helper-classes/3D/draw-utils.js')
-rwxr-xr-xjs/helper-classes/3D/draw-utils.js244
1 files changed, 106 insertions, 138 deletions
diff --git a/js/helper-classes/3D/draw-utils.js b/js/helper-classes/3D/draw-utils.js
index 59da411f..a5428ea3 100755
--- a/js/helper-classes/3D/draw-utils.js
+++ b/js/helper-classes/3D/draw-utils.js
@@ -109,10 +109,10 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
109 this._gridOrigin = [0,0]; // 2D plane space point 109 this._gridOrigin = [0,0]; // 2D plane space point
110 110
111 this.eventManager.addEventListener("elementAdded", this, false); 111 this.eventManager.addEventListener("elementAdded", this, false);
112 this.eventManager.addEventListener("elementDeleted", this, false); 112 this.eventManager.addEventListener("elementsRemoved", this, false);
113 this.eventManager.addEventListener("deleteSelection", this, false);
114 this.eventManager.addEventListener("elementChange", this, false); 113 this.eventManager.addEventListener("elementChange", this, false);
115 this.eventManager.addEventListener("closeDocument", this, false); 114 this.eventManager.addEventListener("closeDocument", this, false);
115 this.eventManager.addEventListener("elementReplaced", this, false);
116 } 116 }
117 }, 117 },
118 118
@@ -139,46 +139,83 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
139 handleCloseDocument:{ 139 handleCloseDocument:{
140 value: function() { 140 value: function() {
141 if(this.application.ninja.documentController._documents.length === 0){ 141 if(this.application.ninja.documentController._documents.length === 0){
142 this._eltArray = null; 142 this._eltArray.length = 0;
143 this._planesArray = null; 143 this._planesArray.length = 0;
144 } 144 }
145 } 145 }
146 }, 146 },
147 147
148 handleElementAdded: { 148 handleElementAdded: {
149 value: function(event) { 149 value: function(event) {
150 this.addElement(event.detail); 150 var elements = event.detail;
151
152 if(Array.isArray(elements)) {
153 elements.forEach(function(element) {
154 this.addElement(element);
155 }, this);
156 } else {
157 this.addElement(elements);
158 }
159
151 this.drawWorkingPlane(); 160 this.drawWorkingPlane();
152 } 161 }
153 }, 162 },
154 163
155 handleElementDeleted: { 164 handleElementsRemoved: {
156 value: function(event) { 165 value: function(event) {
157 this.removeElement(event.detail); 166 var elements = event.detail;
167
168 if(Array.isArray(elements)) {
169 elements = Array.prototype.slice.call(elements, 0);
170 elements.forEach(function(element) {
171 this.removeElement(element);
172 }, this);
173 } else {
174 this.removeElement(elements);
175 }
176
177 this.drawWorkingPlane();
158 } 178 }
159 }, 179 },
160 180
161 handleDeleteSelection: { 181 handleElementReplaced: {
162 value: function(event) { 182 value: function(event) {
163 this.drawWorkingPlane(); 183 var oldElement = event.detail.data.oldChild;
184 var newElement = event.detail.data.newChild;
185
186 // check if we already know about this object
187 var n = this._eltArray.length,
188 plane;
189 for (var i=0; i<n; i++) {
190 if (oldElement === this._eltArray[i]) {
191 this._eltArray[i] = newElement;
192 plane = this._planesArray[i];
193 break;
194 }
195 }
196
197 if(!plane) {
198 this._eltArray.push( newElement );
199 plane = Object.create(this.ElementPlanes, {});
200 this._planesArray.push( plane );
201 }
202
203 plane.setElement( newElement );
204 plane.init();
205 newElement.elementModel.props3D.elementPlane = plane;
164 } 206 }
165 }, 207 },
166 208
167 _shouldUpdatePlanes: { 209 _shouldUpdatePlanes: {
168 value: function(props) { 210 value: function(props) {
169 if(!props) 211 if(!props) {
170 {
171 return false; 212 return false;
172 } 213 } else if (typeof props === "string") {
173 else if (typeof props === "string")
174 {
175 return (this._updatePlaneProps.indexOf(props) !== -1); 214 return (this._updatePlaneProps.indexOf(props) !== -1);
176 } 215 }
177 216
178 for (var p in props) 217 for (var p in props) {
179 { 218 if(this._updatePlaneProps.indexOf(p) !== -1) {
180 if(this._updatePlaneProps.indexOf(p) !== -1)
181 {
182 return true; 219 return true;
183 } 220 }
184 } 221 }
@@ -199,15 +236,12 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
199 { 236 {
200 var len = els.length, 237 var len = els.length,
201 i = 0, 238 i = 0,
202 item, 239 item;
203 el;
204 240
205 for(i=0; i < len; i++) { 241 for(i=0; i < len; i++) {
206 item = els[i]; 242 if(els[i].elementModel.props3D.elementPlane)
207 el = item._element || item;
208 if(el.elementModel.props3D.elementPlane)
209 { 243 {
210 el.elementModel.props3D.elementPlane.init(); 244 els[i].elementModel.props3D.elementPlane.init();
211 } 245 }
212 } 246 }
213 247
@@ -222,17 +256,12 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
222 // Methods 256 // Methods
223 /////////////////////////////////////////////////////////////////////// 257 ///////////////////////////////////////////////////////////////////////
224 258
225 addElement: 259 addElement: {
226 { 260 value: function( elt ) {
227 value: function( elt )
228 {
229 // check if we already know about this object 261 // check if we already know about this object
230 var n = this._eltArray.length; 262 var n = this._eltArray.length;
231 for (var i=0; i<n; i++) 263 for (var i=0; i<n; i++) {
232 { 264 if (elt == this._eltArray[i]) {
233 if (elt == this._eltArray[i])
234 {
235// console.log( "element already added to stage display: " + elt.id );
236 return; 265 return;
237 } 266 }
238 } 267 }
@@ -248,17 +277,14 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
248 } 277 }
249 }, 278 },
250 279
251 removeElement : { 280 removeElement: {
252 value: function( elt ) { 281 value: function(element) {
253 // check if object exists 282 // check if object exists
254 var n = this._eltArray.length; 283 var _elements = this._eltArray.length;
255 for (var i=0; i<n; i++) 284 for (var i=0; i < _elements; i++) {
256 { 285 if (element === this._eltArray[i]) {
257 if (elt == this._eltArray[i])
258 {
259 // First remove the planes for this element 286 // First remove the planes for this element
260 this._planesArray.splice(i, 1); 287 this._planesArray.splice(i, 1);
261
262 // Then remove the element 288 // Then remove the element
263 this._eltArray.splice(i, 1); 289 this._eltArray.splice(i, 1);
264 290
@@ -721,8 +747,17 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
721 drawSelectionBounds : { 747 drawSelectionBounds : {
722 value: function( eltArray ) { 748 value: function( eltArray ) {
723 this._selectionCtr = null; 749 this._selectionCtr = null;
750 var len = eltArray.length,
751 i,
752 j,
753 bounds,
754 bounds3D,
755 pt,
756 tmpPt,
757 ssMat,
758 elt;
724 759
725 if (eltArray.length == 0) return; 760 if (len === 0) return;
726 var context = this._drawingContext; 761 var context = this._drawingContext;
727 if (!context) return; 762 if (!context) return;
728 763
@@ -731,18 +766,19 @@ var DrawUtils = exports.DrawUtils = Montage.create(Component, {
731 context.lineWidth = 2; 766 context.lineWidth = 2;
732 767
733 // handle the single element case 768 // handle the single element case
734 if (eltArray.length == 1) 769 // TODO - Currently, the stage draws its own selection bounds for single selection case
770 if (len === 1)
735 {