コード例 #1
0
 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());
     }
 }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
        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;
            }
        }
コード例 #4
0
        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;
            }
        }
コード例 #5
0
        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());
                        }
                    }
                }
            }
        }