using System; using System.Collections; using System.IO; using System.Collections.Generic; using System.Linq; using System.Text; using OpenGL4NET; namespace Semestralka { class LoadObjectOBJ { private int countOfObjects; private int countOfVertex; private int countOfFaces; private ArrayList obj; public ArrayList loadObjectOBJ(string fileName){ if (!File.Exists(fileName)) { Console.WriteLine("{0} neexistuje!", fileName); return null; } countOfObjects = 0; countOfVertex = 0; countOfFaces = 0; obj = new ArrayList(); FileStream fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); StreamReader sr = new StreamReader(fStream, Encoding.UTF8, true); while (sr.Peek() > -1) { string input = sr.ReadLine(); if (input.StartsWith("o")) { obj.Add(new Object(input.Split(' ')[1])); countOfObjects++; } if(input.StartsWith("v")){ ((Object) obj[countOfObjects-1]).addedVertex(); countOfVertex++; } if (input.StartsWith("f")) { ((Object)obj[countOfObjects - 1]).addedFace(); countOfFaces++; if (input.Split(' ').Length == 5) { ((Object)obj[countOfObjects - 1]).addedFace(); countOfFaces++; } } } sr.Close(); Console.WriteLine("count of objects = " + countOfObjects); Console.WriteLine("count of vertex = " + countOfVertex); Console.WriteLine("count of faces = " + countOfFaces); for (int i = 0; i < obj.Count; i++) { Console.WriteLine(i); ((Object)obj[i]).objectInfo(); ((Object)obj[i]).createVertexField(); ((Object)obj[i]).createIndexFiels(); } fStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.Read); sr = new StreamReader(fStream, Encoding.UTF8, true); countOfObjects = 0; countOfVertex = 0; int index = 0; while (sr.Peek() > -1) { string input = sr.ReadLine(); if (input.StartsWith("o")) { countOfObjects++; index = countOfVertex; Console.WriteLine("index = "+index); } if (input.StartsWith("v")) { countOfVertex++; string[] strField = input.Replace('.',',').Split(' '); ((Object)obj[countOfObjects - 1]).addVertex((float)System.Convert.ToDouble(strField[1]), (float)System.Convert.ToDouble(strField[2]), (float)System.Convert.ToDouble(strField[3])); } if (input.StartsWith("f")) { string[] strField = input.Split(' '); ((Object)obj[countOfObjects - 1]).addFace((uint)(uint.Parse(strField[1]) - index), (uint)(uint.Parse(strField[2]) - index), (uint)(uint.Parse(strField[3]) - index)); if (strField.Length == 5) { ((Object)obj[countOfObjects - 1]).addFace((uint)(uint.Parse(strField[1]) - index), (uint)(uint.Parse(strField[3]) - index), (uint)(uint.Parse(strField[4]) - index)); } } } sr.Close(); for (int i = 0; i < obj.Count; i++) { Console.WriteLine("creating buffers " + i); ((Object)obj[i]).objectInfo(); ((Object)obj[i]).createBuffers(); } return obj; } } }