/** Copyright (C) 2010 Tobias Domhan This file is part of AndObjViewer. AndObjViewer is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. AndObjViewer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with AndObjViewer. If not, see <http://www.gnu.org/licenses/>. */ package edu.dhbw.andobjviewer.parser; import java.io.BufferedReader; import java.io.IOException; import java.util.regex.Pattern; import edu.dhbw.andobjviewer.models.Material; import edu.dhbw.andobjviewer.models.Model; import edu.dhbw.andobjviewer.util.BaseFileUtil; import android.R; import android.graphics.BitmapFactory; public class MtlParser { private BaseFileUtil fileUtil; public MtlParser(Model model, BaseFileUtil fileUtil) { this.fileUtil = fileUtil; } /** * parses the given material definition * @param line */ public void parse(Model model, BufferedReader is) { Material curMat = null; int lineNum = 1; String line; try { for (line = is.readLine(); line != null; line = is.readLine(), lineNum++) { line = Util.getCanonicalLine(line).trim(); if (line.length() > 0) { if (line.startsWith("newmtl ")) { // specular color String mtlName = line.substring(7); curMat = new Material(mtlName); model.addMaterial(curMat); } else if(curMat == null) { //if the current material is not set, there is no need to parse anything } else if (line.startsWith("# ")) { //ignore comments } else if (line.startsWith("Ka ")) { //ambient color String endOfLine = line.substring(3); curMat.setAmbient(parseTriple(endOfLine)); } else if (line.startsWith("Kd ")) { // diffuse color String endOfLine = line.substring(3); curMat.setDiffuse(parseTriple(endOfLine)); } else if (line.startsWith("Ks ")) { // specular color String endOfLine = line.substring(3); curMat.setSpecular(parseTriple(endOfLine)); } else if (line.startsWith("Ns ")) { // specular color String endOfLine = line.substring(3); curMat.setShininess(Float.parseFloat(endOfLine)); } else if (line.startsWith("Tr ")) { // specular color String endOfLine = line.substring(3); curMat.setAlpha(Float.parseFloat(endOfLine)); } else if (line.startsWith("d ")) { // specular color String endOfLine = line.substring(2); curMat.setAlpha(Float.parseFloat(endOfLine)); } else if(line.startsWith("map_Kd ")) { //limited texture support String imageFileName = line.substring(7); //f�r resources:Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.pic1); curMat.setFileUtil(fileUtil); curMat.setBitmapFileName(imageFileName); } else if(line.startsWith("mapKd ")) { //limited texture support String imageFileName = line.substring(6); //f�r resources:Bitmap mBitmap = BitmapFactory.decodeResource(getResources(),R.drawable.pic1); curMat.setFileUtil(fileUtil); curMat.setBitmapFileName(imageFileName); } } } } catch (IOException e) { e.printStackTrace(); } } private static float[] parseTriple(String str) { String[] colorVals = str.split(" "); float[] colorArr = new float[]{ Float.parseFloat(colorVals[0]), Float.parseFloat(colorVals[1]), Float.parseFloat(colorVals[2])}; return colorArr; } }