aboutsummaryrefslogtreecommitdiff
path: root/js/models/materials-model.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/models/materials-model.js')
-rwxr-xr-xjs/models/materials-model.js53
1 files changed, 30 insertions, 23 deletions
diff --git a/js/models/materials-model.js b/js/models/materials-model.js
index 9c692f45..291f7567 100755
--- a/js/models/materials-model.js
+++ b/js/models/materials-model.js
@@ -174,36 +174,47 @@ exports.MaterialsModel = Montage.create(Component, {
174 }, 174 },
175 175
176 exportMaterials: { 176 exportMaterials: {
177 value: function() { 177 value: function()
178 178 {
179 var exportStr = "MaterialLibrary: \n"; 179 var matArray = [];
180
181 var nMats = this._materials.length; 180 var nMats = this._materials.length;
182
183 for (var i=0; i<nMats; i++) { 181 for (var i=0; i<nMats; i++) {
184 var material = this._materials[i]; 182 var material = this._materials[i];
185 exportStr += material.export(); 183 var matObj = material.exportJSON();
184 matArray.push( matObj );
186 } 185 }
187 186
188 exportStr += "endMatLib\n"; 187 var jObj =
189 return exportStr; 188 {
189 'materialLibrary': 1.0,
190 'materials': matArray
191 };
192
193 // prepend an identifiable string to aid parsing when the
194 // material model is loaded.
195 var jStr = "materialLibrary;" + JSON.stringify( jObj );
196
197 return jStr;
190 } 198 }
191 }, 199 },
192 200
193 importMaterials: { 201 importMaterials: {
194 value: function( importStr ) { 202 value: function( jObj )
203 {
204 // make sure we have some materials to import before doing anything
205 var matArray = jObj.materials;
206 if (!matArray) return;
207
195 // we replace allmaterials, so remove anything 208 // we replace allmaterials, so remove anything
196 // that is currently there. 209 // that is currently there.
197 this.clearAllMaterials(); 210 this.clearAllMaterials();
198 211
199 var pu = new MaterialParser( importStr ); 212 var nMats = matArray.length;
200 213 for (var i=0; i<nMats; i++)
201 var type = pu.nextValue( "material: ", "\n", false ); 214 {
202 215 var mat = null;
203 while (type) { 216 var jMatObj = matArray[i];
204 217 var type = jMatObj.material;
205 var mat = null;
206
207 switch (type) 218 switch (type)
208 { 219 {
209 case "flat": mat = new FlatMaterial(); break; 220 case "flat": mat = new FlatMaterial(); break;
@@ -233,20 +244,16 @@ exports.MaterialsModel = Montage.create(Component, {
233 244
234 default: 245 default:
235 throw new Error( "Unrecognized material type: " + type ); 246 throw new Error( "Unrecognized material type: " + type );
236 pu.advancePastToken( "endMaterial\n" );
237 break; 247 break;
238 } 248 }
239 249
240 if (mat) { 250 if (mat) {
241 importStr = mat.import( importStr ); 251 importStr = mat.importJSON( jMatObj );
242 pu._strBuffer = importStr;
243 this.addMaterial( mat ); 252 this.addMaterial( mat );
244 } 253 }
245
246 type = pu.nextValue( "material: ", "\n", false );
247 } 254 }
248 255
249 return pu._strBuffer; 256 return;
250 } 257 }
251 } 258 }
252 259