API Docs for:
Show:

File: workspace\templates\uploadScript.js

;


if( typeof(startupScripts) == 'undefined'){

	var startupScripts = {
		"0":function(){},
		"1":function(){},
		"2":function(){},
		"3":function(){},
		"4":function(){},
		"5":function(){},
		"6":function(){},
		"7":function(){}
	};

}


/**
*
* Accepts a fileinput event, presumably from a file upload event listener, and assigns
* functions to each file reader listed in the event to be called upon the full loading
* of that given reader's files
*
* @method readMultipleFiles
* @for renderGlobal
* @param {Event} evt A fileinput event, to be given by a fileinput event listener
* @return {Void}
*
*/
function readMultipleFiles(evt) {
	//Retrieve all the files from the FileList object
	var files = evt.target.files;
	if (files) {
		for (var i=0, f; f=files[i]; i++) {

			var r = new FileReader();
			var extension=grabExtension(f.name)[0];
			//console.log(f.name);

			if(extension===undefined){
				continue;
			}
			if(extension.toLowerCase()==="stl"){
				r.onload = (function(f) {
					return function(e) {
						loadParts();
					};
				})(f);
				r.readAsArrayBuffer(f);
				fileReaders.push({Reader: r, Name: f.name});
			}
		}
		//`console.log(fileReaders);
	}
	else {
		  alert("Failed to load files");
	}
}





/**
*
* Called internally upon every recieved fileload event. Checks if every file reader in the
* array "fileReaders" has fully read each of their files. If so, then the function converts
* all recieved stl files into threeJS models and executes "renderParts".
*
* @method loadParts
* @for renderGlobal
* @return {Void}
*
*/
function loadParts (){


		// Looks for unloaded files
		var pos=0;
		var lim=fileReaders.length;
		while(pos<lim){
			if(!(fileReaders[pos].Reader.readyState===2)){
				//console.log(pos);
				//console.log(fileReaders[pos].Name);
				break;
			}
			pos++;
		}


	// Executes if all files are loaded
	if(pos===lim){
		spinOff(handleModels);
	}

}

function handleModels(){

	console.log("Processing model data...");
	//parts.length=0;
	var pos=0;
	var lim=fileReaders.length;
	var partGeom=null;
	var partMesh;
	var theCenter;
	var ext;
	var theReader;

	while(pos<lim){
		theReader = fileReaders[pos];
		ext=grabExtension(theReader.Name)[0];
		if(ext.toLowerCase()==="stl"){
			modelNum++;
		}
		pos++;
	}

	console.log("Found "+modelNum+" models");

	pos = 0;
	while(pos<lim){
		theReader = fileReaders[pos];
		spinOff((function(r){
			return function(){
				ext=grabExtension(r.Name)[0];
				if(ext.toLowerCase()==="stl"){
					partGeom=parseStl(r.Reader.result);
					if(partGeom===null){
						partGeom=parseStlBinary(r.Reader.result);
					}
					//console.log(partGeom);
					var postMaterial =
					partMesh=new THREE.Mesh(
							partGeom,
							getStdMaterial()
					);
					parts.push({
						Mesh: partMesh,
						Name: r.Name
					});
					scene.add(partMesh);
					console.log("Parts: "+parts.length);
					spinOff(handleSTLs);
				}
			}
		}) (theReader));
		pos++;
	}
	console.log("Model data processed");

}

function handleSTLs(){

	stlNum++;
	if(stlNum < modelNum){
		return;
	}
	console.log("Handling "+stlNum+" model files");

	//parts.length=0;
	var pos=0;
	var lim=fileReaders.length;
	var ext;
	while(pos<lim){
		theReader = fileReaders[pos];
		spinOff((function(r){
			return function(){
				ext=grabExtension(r.Name)[0];
				if(ext.toLowerCase()==="stl"){
					STLs.push({ Name: r.Name, Data: arrayToString(r.Reader.result) });
					spinOff(giveModels());
				}
			}
		}) (theReader));
		pos++;
	}


}


startupScripts["0"] = function (){
	// Inserts the file loading manager into the document
	document.getElementById('fileinput').addEventListener('change', readMultipleFiles, false);

}