protected override void ProcessInnerNode(AseReader reader, AseNode parentNode) { if (reader.NodeName == "MESH_VERTEX") { AseStringTokenizer tokens = new AseStringTokenizer(reader.NodeData); int index = int.Parse(tokens.GetNext()); _vertices[index].X = float.Parse(tokens.GetNext()); _vertices[index].Y = float.Parse(tokens.GetNext()); _vertices[index].Z = float.Parse(tokens.GetNext()); } }
protected override void ProcessInnerNode(AseReader reader, AseNode parentNode) { AseMesh mesh = parentNode as AseMesh; if (reader.NodeName == "MESH_FACENORMAL") { AseStringTokenizer tokens = new AseStringTokenizer(reader.NodeData); int index = int.Parse(tokens.GetNext()); AseFace face = mesh.FaceList[index]; face.NormalFace = new AseVertex( float.Parse(tokens.GetNext()), float.Parse(tokens.GetNext()), float.Parse(tokens.GetNext())); for (int i = 0; i < 3; i++) { reader.ReadNextLine(); tokens = new AseStringTokenizer(reader.NodeData); if (reader.NodeName == "MESH_VERTEXNORMAL") { int vIndex = int.Parse(tokens.GetNext()); if (vIndex == mesh.FaceList[index].A) { face.NormalA = new AseVertex( float.Parse(tokens.GetNext()), float.Parse(tokens.GetNext()), float.Parse(tokens.GetNext())); } else if (vIndex == mesh.FaceList[index].B) { face.NormalB = new AseVertex( float.Parse(tokens.GetNext()), float.Parse(tokens.GetNext()), float.Parse(tokens.GetNext())); } else if (vIndex == mesh.FaceList[index].C) { face.NormalC = new AseVertex( float.Parse(tokens.GetNext()), float.Parse(tokens.GetNext()), float.Parse(tokens.GetNext())); } } else { // we must have atleast 3 MESH_VERTEXNORMAL nodes i--; } } mesh.FaceList[index] = face; } }
protected override void ProcessInnerNode(AseReader reader, AseNode parentNode) { AseMesh mesh = parentNode as AseMesh; if (reader.NodeName == "MESH_TFACE") { AseStringTokenizer tokens = new AseStringTokenizer(reader.NodeData); int index = int.Parse(tokens.GetNext()); AseFace face = mesh.FaceList[index]; face.TextureA = int.Parse(tokens.GetNext()); face.TextureB = int.Parse(tokens.GetNext()); face.TextureC = int.Parse(tokens.GetNext()); mesh.FaceList[index] = face; } }
protected override void ProcessInnerNode(AseReader reader, AseNode parentNode) { AseStringTokenizer tokens; switch (reader.NodeName) { case "TM_ROW0": tokens = new AseStringTokenizer(reader.NodeData); this[0, 0] = float.Parse(tokens.GetNext()); this[0, 1] = float.Parse(tokens.GetNext()); this[0, 2] = float.Parse(tokens.GetNext()); this[0, 3] = 0.0f; break; case "TM_ROW1": tokens = new AseStringTokenizer(reader.NodeData); this[1, 0] = float.Parse(tokens.GetNext()); this[1, 1] = float.Parse(tokens.GetNext()); this[1, 2] = float.Parse(tokens.GetNext()); this[1, 3] = 0.0f; break; case "TM_ROW2": tokens = new AseStringTokenizer(reader.NodeData); this[2, 0] = float.Parse(tokens.GetNext()); this[2, 1] = float.Parse(tokens.GetNext()); this[2, 2] = float.Parse(tokens.GetNext()); this[2, 3] = 0.0f; break; case "TM_ROW3": tokens = new AseStringTokenizer(reader.NodeData); this[3, 0] = float.Parse(tokens.GetNext()); this[3, 1] = float.Parse(tokens.GetNext()); this[3, 2] = float.Parse(tokens.GetNext()); this[3, 3] = 1.0f; break; } }
protected override void ProcessInnerNode(AseReader reader, AseNode parentNode) { if (reader.NodeName == "MESH_FACE") { AseStringTokenizer tokens = new AseStringTokenizer(reader.NodeData); string indexStr = tokens.GetNext(); if (indexStr.EndsWith(":")) { indexStr = indexStr.Substring(0, indexStr.Length - 1).Trim(); } int index = int.Parse(indexStr); for (int i = 0; i < 3; i++) { string type = tokens.GetNext(); int value = int.Parse(tokens.GetNext()); if (type == "A:") { _faces[index].A = value; } else if (type == "B:") { _faces[index].B = value; } else if (type == "C:") { _faces[index].C = value; } } for (int i = 0; i < 3; i++) { string type = tokens.GetNext(); bool value = int.Parse(tokens.GetNext()) != 0; if (type == "AB:") { _faces[index].EdgeAB = value; } else if (type == "BC:") { _faces[index].EdgeBC = value; } else if (type == "CA:") { _faces[index].EdgeCA = value; } } while (tokens.HasMore()) { string extended = tokens.GetNext(); if (extended.StartsWith("*")) { if (extended == "*MESH_SMOOTHING") { if (tokens.Peek().StartsWith("*")) { continue; } string[] meshSmooth = tokens.GetNext().Split(','); _faces[index].SmoothingCount = meshSmooth.Length; for (int i = 0; i < meshSmooth.Length; i++) { _faces[index][i] = int.Parse(meshSmooth[i]); } } else if (extended == "*MESH_MTLID") { if (tokens.Peek().StartsWith("*")) { continue; } _faces[index].MaterialID = int.Parse(tokens.GetNext()); } } } } }