diff options
Diffstat (limited to 'js/panels/Materials/materials-popup.reel')
-rwxr-xr-x | js/panels/Materials/materials-popup.reel/materials-popup.js | 181 |
1 files changed, 155 insertions, 26 deletions
diff --git a/js/panels/Materials/materials-popup.reel/materials-popup.js b/js/panels/Materials/materials-popup.reel/materials-popup.js index 0a32447e..40f07509 100755 --- a/js/panels/Materials/materials-popup.reel/materials-popup.js +++ b/js/panels/Materials/materials-popup.reel/materials-popup.js | |||
@@ -33,12 +33,17 @@ exports.MaterialsPopup = Montage.create(Component, { | |||
33 | value: "" | 33 | value: "" |
34 | }, | 34 | }, |
35 | 35 | ||
36 | _useSelection: { value: false, enumerable: true }, | ||
37 | _whichMaterial: { value: "fill", enumerable: true }, | ||
38 | _originalValues: {value: null, enumerable: true }, | ||
39 | |||
36 | captureAction: { | 40 | captureAction: { |
37 | value:function(event) { | 41 | value:function(event) { |
38 | switch(event._currentTarget.label) | 42 | switch(event._currentTarget.label) |
39 | { | 43 | { |
40 | case "Cancel": | 44 | case "Cancel": |
41 | console.log("Cancel material edit"); | 45 | console.log("Cancel material edit"); |
46 | this.revertToOriginalValues(); | ||
42 | break; | 47 | break; |
43 | case "OK": | 48 | case "OK": |
44 | console.log("Committing material with the following values:"); | 49 | console.log("Committing material with the following values:"); |
@@ -67,6 +72,46 @@ exports.MaterialsPopup = Montage.create(Component, { | |||
67 | } | 72 | } |
68 | }, | 73 | }, |
69 | 74 | ||
75 | revertToOriginalValues: | ||
76 | { | ||
77 | value: function() | ||
78 | { | ||
79 | if (this._originalValues) | ||
80 | { | ||
81 | this._material.importJSON( this._originalValues ); | ||
82 | |||
83 | if (this._useSelection) | ||
84 | { | ||
85 | var selection = this.application.ninja.selectedElements; | ||
86 | if (selection && (selection.length > 0)) | ||
87 | { | ||
88 | var nObjs = selection.length; | ||
89 | for (var iObj=0; iObj<nObjs; iObj++) | ||
90 | { | ||
91 | var canvas = selection[iObj]; | ||
92 | var obj; | ||
93 | if (canvas.elementModel && canvas.elementModel.shapeModel) obj = canvas.elementModel.shapeModel.GLGeomObj; | ||
94 | if (obj) | ||
95 | { | ||
96 | var matArray = obj._materialArray; | ||
97 | var matTypeArray = obj._materialTypeArray; | ||
98 | var nMats = matArray.length; | ||
99 | for (var iMat=0; iMat<nMats; iMat++) | ||
100 | { | ||
101 | if (matTypeArray[iMat] === this._whichMaterial) | ||
102 | matArray[iMat].importJSON( this._originalValues ); | ||
103 | } | ||
104 | var world = obj.getWorld(); | ||
105 | if (world) | ||
106 | world.restartRenderLoop(); | ||
107 | } | ||
108 | } | ||
109 | } | ||
110 | } | ||
111 | } | ||
112 | } | ||
113 | }, | ||
114 | |||
70 | updatePreview: | 115 | updatePreview: |
71 | { | 116 | { |
72 | value: function(event) | 117 | value: function(event) |
@@ -103,8 +148,9 @@ exports.MaterialsPopup = Montage.create(Component, { | |||
103 | 148 | ||
104 | _handlePropertyChange: | 149 | _handlePropertyChange: |
105 | { | 150 | { |
106 | value: function(event) | 151 | value: function(theEvent) |
107 | { | 152 | { |
153 | var event = theEvent._event; | ||
108 | if(typeof event.propertyValue === "object") | 154 | if(typeof event.propertyValue === "object") |
109 | { | 155 | { |
110 | console.log(event.propertyLabel + " changed to "); | 156 | console.log(event.propertyLabel + " changed to "); |
@@ -148,6 +194,37 @@ exports.MaterialsPopup = Montage.create(Component, { | |||
148 | var value = this.decodeValue( this._propTypes[index], propValue ); | 194 | var value = this.decodeValue( this._propTypes[index], propValue ); |
149 | this._material.setProperty( this._propNames[index], value ); | 195 | this._material.setProperty( this._propNames[index], value ); |
150 | } | 196 | } |
197 | |||
198 | if (this._useSelection) | ||
199 | { | ||
200 | console.log( "apply to selection" ); | ||
201 | |||
202 | var selection = this.application.ninja.selectedElements; | ||
203 | if (selection && (selection.length > 0)) | ||
204 | { | ||
205 | var nObjs = selection.length; | ||
206 | for (var iObj=0; iObj<nObjs; iObj++) | ||
207 | { | ||
208 | var canvas = selection[iObj]; | ||
209 | var obj; | ||
210 | if (canvas.elementModel && canvas.elementModel.shapeModel) obj = canvas.elementModel.shapeModel.GLGeomObj; | ||
211 | if (obj) | ||
212 | { | ||
213 | var matArray = obj._materialArray; | ||
214 | var matTypeArray = obj._materialTypeArray; | ||
215 | var nMats = matArray.length; | ||
216 | for (var iMat=0; iMat<nMats; iMat++) | ||
217 | { | ||
218 | if (matTypeArray[iMat] === this._whichMaterial) | ||
219 | matArray[iMat].setProperty( this._propNames[index], value ); | ||
220 | } | ||
221 | var world = obj.getWorld(); | ||
222 | if (world) | ||
223 | world.restartRenderLoop(); | ||
224 | } | ||
225 | } | ||
226 | } | ||
227 | } | ||
151 | } | 228 | } |
152 | } | 229 | } |
153 | }, | 230 | }, |
@@ -173,14 +250,20 @@ exports.MaterialsPopup = Montage.create(Component, { | |||
173 | rtnValue = value; | 250 | rtnValue = value; |
174 | break; | 251 | break; |
175 | 252 | ||
253 | case "angle": | ||
254 | rtnValue = value*3.14159/180.0; | ||
255 | break; | ||
256 | |||
176 | case "file": | 257 | case "file": |
177 | if (value && (value.length > 0)) | 258 | if (value && (value.length > 0)) |
178 | { | 259 | { |
179 | var index = value.lastIndexOf( "/" ); | 260 | var index = value.lastIndexOf( "/" ); |
180 | if (index < 0) index = value.lastIndexOf( "\\" ); | 261 | if (index < 0) index = value.lastIndexOf( "\\" ); |
181 | if (index >= 0) | 262 | if (index >= 0) |
263 | { | ||
182 | value = value.substr( index+1 ); | 264 | value = value.substr( index+1 ); |
183 | value = "assets\\images\\" + value; | 265 | value = "assets/images/" + value; |
266 | } | ||
184 | rtnValue = value.slice(0); | 267 | rtnValue = value.slice(0); |
185 | } | 268 | } |
186 | break; | 269 | break; |
@@ -227,32 +310,74 @@ exports.MaterialsPopup = Montage.create(Component, { | |||
227 | loadMaterials: | 310 | loadMaterials: |
228 | { | 311 | { |
229 | enumerable: true, | 312 | enumerable: true, |
230 | value: function(materialID) | 313 | value: function(materialID, useSelection, whichMaterial) |
231 | { | 314 | { |
232 | //TODO - Hack to force repetition to draw. Setting .length = 0 did not work. | 315 | //TODO - Hack to force repetition to draw. Setting .length = 0 did not work. |
233 | this.materialsData = []; | 316 | this.materialsData = []; |
234 | 317 | ||
235 | this._materialName = materialID; | 318 | var material; |
236 | if( | 319 | this._materialName = materialID; |
237 | (materialID === "UberMaterial") || | 320 | if (useSelection) |
238 | (materialID === "FlatMaterial") || | ||
239 | (materialID === "BumpMetalMaterial") || | ||
240 | (materialID === "LinearGradientMaterial") || | ||
241 | (materialID === "RadialGradientMaterial") | ||
242 | ) | ||
243 | { | 321 | { |
244 | var material = MaterialsModel.getMaterial( materialID ); | 322 | this._useSelection = true; |
245 | if (material) | 323 | var selection = this.application.ninja.selectedElements; |
324 | if (selection && (selection.length > 0)) | ||
246 | { | 325 | { |
247 | this._material = material; | 326 | var canvas = selection[0]; |
248 | this.materialsData = this.getMaterialData( material ); | 327 | var obj; |
328 | this._whichMaterial = whichMaterial; | ||
329 | if (canvas.elementModel && canvas.elementModel.shapeModel) obj = canvas.elementModel.shapeModel.GLGeomObj; | ||
330 | if (obj) | ||
331 | material = (whichMaterial === 'stroke') ? obj.getStrokeMaterial() : obj.getFillMaterial(); | ||
249 | } | 332 | } |