public static void convertFile(File csvFile) {
		CSVReader csv = new CSVReader(csvFile);
		csv.sep = ",";
		String[] d = csv.readRow();
		
		int width = Integer.parseInt(d[0]);
		int height = Integer.parseInt(d[1]);
		int depth = Integer.parseInt(d[2]);
		
		Block[][][] blocks = new Block[width][width][width];
		
		String cell;
		int index = 0;
		
		CFG.p("> reading cell data");
		
		if (width != height || width != depth || height != depth) {
			JOptionPane.showMessageDialog(null, "The Input Sproxel-CSV-Model has to have cubic dimensions! ", "Error!", JOptionPane.ERROR_MESSAGE);
			CFG.p("> ABORT");
			return;
		}
		
		while ((cell = csv.readNext()) != null) {
			int x = index / (blocks.length * blocks[0].length);
			int y = index / blocks.length % blocks[0].length;
			int z = index % blocks[0][0].length;
			try {
				blocks[x][y][z] = new Block(x, y, z, parseLong(cell));
			} catch (Exception e) {
				e.printStackTrace();
			}
			index++;
		}
		
		System.gc();
		
		CFG.p("> generating faces");
		HashMap<VoxelFaceKey, VoxelFace> faces = generateFaces(blocks);
		
		CFG.p("  > got " + faces.size() + " faces");
		
		CFG.p("> running greedy meshing");
		HashMap<VoxelFaceKey, VoxelFace> meshes = generateGreedyMesh(faces, blocks.length);
		
		CFG.p("  > got " + meshes.size() + " meshes");
		
		CFG.p("> saving obj file");
		saveOBJ(new File(csvFile.getPath().replace(".csv", ".obj")), blocks.length, meshes);
		
		CFG.p("> sorting files");
		packFilesInFolder(csvFile);
		
		CFG.p("> DONE");
	}