public void TestParseFace3() { // given var expected = new ObjFormat.Face(); var obj = new ObjFormat(); expected.GeometricVertexReferences.AddRange(new List <int> { 1, 2, 3, 4 }); expected.NormalVertexReferences.AddRange(new List <int> { 1, 2, 3, 4 }); expected.TextureVertexReferences.AddRange(new List <int> { 1, 2, 3, 4 }); var completeLayout = "1/1/1 2/2/2 3/3/3 4/4/4"; // when var result = reader.ParseFace(completeLayout, obj); // then Assert.True(expected.GeometricVertexReferences.SequenceEqual(result.GeometricVertexReferences)); Assert.True(expected.NormalVertexReferences.SequenceEqual(result.NormalVertexReferences)); Assert.True(expected.TextureVertexReferences.SequenceEqual(result.TextureVertexReferences)); }
public void TestParseFace1() { // given var expected = new ObjFormat.Face(); var obj = new ObjFormat(); expected.GeometricVertexReferences.AddRange(new List <int> { 3, 4, 25, 26 }); var onlyVertexLayout = "3 4 25 26"; // when var result = reader.ParseFace(onlyVertexLayout, obj); // then Assert.True(expected.GeometricVertexReferences.SequenceEqual(result.GeometricVertexReferences)); }
internal ObjFormat.Face ParseFace(string str, ObjFormat obj) { var faceLayout = DetermineFaceLayout(str); var faceElementsPerLine = str.Split(' '); var result = new ObjFormat.Face(); foreach (var faceElement in faceElementsPerLine) { if (faceLayout != null && faceLayout.IsMatch(faceElement)) { if (faceLayout == OnlyVertices) { var vertexRef = ParseFaceElement(faceElement, obj.GeometricVertices.Count); result.GeometricVertexReferences.Add(vertexRef); } else if (faceLayout == Complete) { var elements = faceElement.Split('/'); result.GeometricVertexReferences.Add(ParseFaceElement(elements[0], obj.GeometricVertices.Count)); result.TextureVertexReferences.Add(ParseFaceElement(elements[1], obj.TextureVertices.Count)); result.NormalVertexReferences.Add(ParseFaceElement(elements[2], obj.VertexNormals.Count)); } else if (faceLayout == VerticesAndNormals) { var elements = faceElement.Split('/'); result.GeometricVertexReferences.Add(ParseFaceElement(elements[0], obj.GeometricVertices.Count)); result.NormalVertexReferences.Add(ParseFaceElement(elements[2], obj.VertexNormals.Count)); } else if (faceLayout == VerticesAndTexture) { var elements = faceElement.Split('/'); result.GeometricVertexReferences.Add(ParseFaceElement(elements[0], obj.GeometricVertices.Count)); result.TextureVertexReferences.Add(ParseFaceElement(elements[1], obj.TextureVertices.Count)); } } else { throw new FormatException($"Not recognizable .obj face element layout: {faceElement}"); } } return(result); }
public void TestParseFace2() { // given var expected = new ObjFormat.Face(); var obj = new ObjFormat(); expected.GeometricVertexReferences.AddRange(new List <int> { 1, 2, 3, 4 }); expected.NormalVertexReferences.AddRange(new List <int> { 1, 2, 3, 4 }); var vertexAndNormalLayout = "1//1 2//2 3//3 4//4"; // when var result = reader.ParseFace(vertexAndNormalLayout, obj); // then Assert.True(expected.GeometricVertexReferences.SequenceEqual(result.GeometricVertexReferences)); Assert.True(expected.NormalVertexReferences.SequenceEqual(result.NormalVertexReferences)); }