
let import_stl = function(path, done) {
	iron.Data.getBlob(path, function(b) {
		let input = new core.BytesInput(b.bytes);
		let header = input.read(80);
		if (header.getString(0, 5) == "solid") {
			return; // ascii not supported
		}
		let faces = input.readInt32();
		let posTemp = new Float32Array(faces * 9);
		let norTemp = new Float32Array(faces * 3);
		for (let i = 0; i < faces; ++i) {
			let i3 = i * 3;
			norTemp[i3    ] = input.readFloat();
			norTemp[i3 + 1] = input.readFloat();
			norTemp[i3 + 2] = input.readFloat();
			let i9 = i * 9;
			posTemp[i9    ] = input.readFloat();
			posTemp[i9 + 1] = input.readFloat();
			posTemp[i9 + 2] = input.readFloat();
			posTemp[i9 + 3] = input.readFloat();
			posTemp[i9 + 4] = input.readFloat();
			posTemp[i9 + 5] = input.readFloat();
			posTemp[i9 + 6] = input.readFloat();
			posTemp[i9 + 7] = input.readFloat();
			posTemp[i9 + 8] = input.readFloat();
			input.readInt16(); // attribute
		}

		let scalePos = 0.0;
		for (let i = 0; i < posTemp.length; ++i) {
			let f = Math.abs(posTemp[i]);
			if (scalePos < f) scalePos = f;
		}
		let inv = 32767 * (1 / scalePos);

		let verts = posTemp.length / 3;
		let posa = new Int16Array(verts * 4);
		let nora = new Int16Array(verts * 2);
		let inda = new Uint32Array(verts);
		for (let i = 0; i < verts; ++i) {
			posa[i * 4    ] =  posTemp[i * 3    ] * inv;
			posa[i * 4 + 1] = -posTemp[i * 3 + 2] * inv;
			posa[i * 4 + 2] =  posTemp[i * 3 + 1] * inv;
			nora[i * 2    ] =  norTemp[i    ] * 32767;
			nora[i * 2 + 1] = -norTemp[i + 2] * 32767;
			posa[i * 4 + 3] =  norTemp[i + 1] * 32767;
			inda[i] = i;
		}

		let name = path.split("\\").pop().split("/").pop().split(".").shift();
		done({
			name: name,
			posa: posa,
			nora: nora,
			inda: inda,
			scale_pos: scalePos,
			scale_tex: 1.0
		});

		iron.Data.deleteBlob(path);
	});
}

let plugin = new arm.Plugin();
let formats = arm.Path.meshFormats;
let importers = arm.Path.meshImporters;
formats.push("stl");
importers.h["stl"] = import_stl;

plugin.delete = function() {
	formats.splice(formats.indexOf("stl"), 1);
	importers.h["stl"] = null;
};
