public override void ProcessNode(AseReader reader, AseNode parentNode) { ProcessNodePre(reader, parentNode); reader.ReadNextLine(); while (!(reader.EndOfFile || reader.NodeParentEnd)) { AseNode node = GetParser(reader.NodeName); if (node == null) { if (reader.NodeParentStart) { TraverseUnhandledNodes(reader); } else { ProcessInnerNode(reader, parentNode); } } else { node.ProcessNode(reader, this); } reader.ReadNextLine(); } ProcessNodePost(reader, parentNode); }
protected void TraverseUnhandledNodes(AseReader reader) { reader.ReadNextLine(); while (!reader.NodeParentEnd) { if (reader.NodeParentStart) { TraverseUnhandledNodes(reader); } reader.ReadNextLine(); } }
public virtual void ProcessNode(AseReader reader, AseNode parentNode) { ProcessNodePre(reader, parentNode); reader.ReadNextLine(); while (!(reader.EndOfFile || reader.NodeParentEnd)) { if (reader.NodeParentStart) { TraverseUnhandledNodes(reader); } else { ProcessInnerNode(reader, parentNode); } reader.ReadNextLine(); } ProcessNodePost(reader, parentNode); }
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; } }
public void Open(string filename) { StreamReader reader = new StreamReader(filename); AseReader aseReader = new AseReader(reader); aseReader.ReadNextLine(); if (aseReader.NodeName != "3DSMAX_ASCIIEXPORT") { throw new AseException("Not a valid ASE file."); } int version = int.Parse(aseReader.NodeData); if (version != 200) { throw new AseException("The version of the ASE file is not supported."); } base.ProcessNode(aseReader, null); reader.Close(); }