diff options
Diffstat (limited to 'js/helper-classes/3D/draw-utils.js')
-rwxr-xr-x | js/helper-classes/3D/draw-utils.js | 244 |
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 | { |