OSDN Git Service

added.
authornomeu <nomeu@nomeu.org>
Sun, 25 Jan 2015 18:19:57 +0000 (03:19 +0900)
committernomeu <nomeu@nomeu.org>
Sun, 25 Jan 2015 19:55:39 +0000 (04:55 +0900)
MqxDump.cs [new file with mode: 0644]
MqxFile.cs [new file with mode: 0644]
MqxReader.cs [new file with mode: 0644]
MqxWriter.cs
TSOGeneratorMqxBone.cs [new file with mode: 0644]
Tso2MqoGui.csproj
debug-MqxDump.bat [new file with mode: 0644]

diff --git a/MqxDump.cs b/MqxDump.cs
new file mode 100644 (file)
index 0000000..19fff65
--- /dev/null
@@ -0,0 +1,21 @@
+using System;
+
+namespace Tso2MqoGui
+{
+    static class MqxDump
+    {
+        static void Main(string[] args)
+        {
+            if (args.Length < 1)
+            {
+                Console.WriteLine("MqxDump.exe <mqo file>");
+                return;
+            }
+            string mqo_file = args[0];
+
+            MqxReader reader = new MqxReader();
+            reader.MqoFile = mqo_file;
+            reader.Read();
+        }
+    }
+}
diff --git a/MqxFile.cs b/MqxFile.cs
new file mode 100644 (file)
index 0000000..6cf9ddf
--- /dev/null
@@ -0,0 +1,157 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using System.Xml;
+
+namespace Tso2MqoGui
+{
+    public class MqoBone
+    {
+        public int id;
+        public string name;
+        public bool tail;
+        //\82È\82¯\82ê\82Î-1
+        public int pid;
+        public List<int> cids = new List<int>();
+
+        //\8dª\96{position
+        public Point3 q;
+
+        //\90æ\92[position
+        public Point3 p;
+
+        public List<MqoWeit> weits;
+
+        public MqoBone()
+        {
+            weits = new List<MqoWeit>(2048*3*4);
+        }
+
+        public void Write(XmlWriter writer)
+        {
+            writer.WriteStartElement("Bone");
+            writer.WriteAttributeString("id", (id+1).ToString());
+
+            writer.WriteAttributeString("rtX", q.X.ToString());
+            writer.WriteAttributeString("rtY", q.Y.ToString());
+            writer.WriteAttributeString("rtZ", q.Z.ToString());
+
+            writer.WriteAttributeString("tpX", p.X.ToString());
+            writer.WriteAttributeString("tpY", p.Y.ToString());
+            writer.WriteAttributeString("tpZ", p.Z.ToString());
+
+            writer.WriteAttributeString("rotB", "0.0");
+            writer.WriteAttributeString("rotH", "0.0");
+            writer.WriteAttributeString("rotP", "0.0");
+
+            writer.WriteAttributeString("mvX", "0.0");
+            writer.WriteAttributeString("mvY", "0.0");
+            writer.WriteAttributeString("mvZ", "0.0");
+
+            writer.WriteAttributeString("sc", "1.0");
+
+            writer.WriteAttributeString("maxAngB", "90.0");
+            writer.WriteAttributeString("maxAngH", "180.0");
+            writer.WriteAttributeString("maxAngP", "180.0");
+
+            writer.WriteAttributeString("minAngB", "-90.0");
+            writer.WriteAttributeString("minAngH", "-180.0");
+            writer.WriteAttributeString("minAngP", "-180.0");
+
+            writer.WriteAttributeString("isDummy", tail ? "1" : "0");
+            writer.WriteAttributeString("name", name);
+
+            writer.WriteStartElement("P");
+            writer.WriteAttributeString("id", (pid+1).ToString());
+            writer.WriteEndElement();
+
+            foreach (int cid in cids)
+            {
+                writer.WriteStartElement("C");
+                writer.WriteAttributeString("id", (cid+1).ToString());
+                writer.WriteEndElement();
+            }
+            foreach (MqoWeit weit in weits)
+            {
+                weit.Write(writer);
+            }
+
+            writer.WriteEndElement();
+        }
+
+        public void Read(XmlReader reader)
+        {
+            Console.WriteLine("Bone");
+
+            this.id = int.Parse(reader.GetAttribute("id"));
+            this.name = reader.GetAttribute("name");
+
+            Console.WriteLine("  id:{0}", this.id);
+            Console.WriteLine("  name:{0}", this.name);
+
+            reader.Read();//Bone
+
+            if (reader.IsStartElement("P"))
+            {
+                Console.WriteLine("P");
+                int id = int.Parse(reader.GetAttribute("id"));
+                Console.WriteLine("  id:{0}", id);
+                reader.Read();//P
+                this.pid = id;
+            }
+
+            while (reader.IsStartElement("C"))
+            {
+                Console.WriteLine("C");
+                int id = int.Parse(reader.GetAttribute("id"));
+                Console.WriteLine("  id:{0}", reader.GetAttribute("id"));
+                reader.Read();//C
+                this.cids.Add(id);
+            }
+
+            while (reader.IsStartElement("W"))
+            {
+                MqoWeit weit = new MqoWeit();
+                weit.Read(reader);
+                this.weits.Add(weit);
+            }
+
+            reader.ReadEndElement();//Bone
+        }
+    }
+
+    public class MqoWeit
+    {
+        public int object_id;
+        public int vertex_id;
+        //public int bone_id;
+        public float weit;
+
+        public void Write(XmlWriter writer)
+        {
+            float weit_percent = weit * 100.0f;
+
+            writer.WriteStartElement("W");
+            writer.WriteAttributeString("oi", object_id.ToString());
+            writer.WriteAttributeString("vi", vertex_id.ToString());
+            writer.WriteAttributeString("w", weit_percent.ToString());
+            writer.WriteEndElement();
+        }
+
+        public void Read(XmlReader reader)
+        {
+            Console.WriteLine("W");
+
+            this.object_id = int.Parse(reader.GetAttribute("oi"));
+            this.vertex_id = int.Parse(reader.GetAttribute("vi"));
+            this.weit = float.Parse(reader.GetAttribute("w"));
+
+            Console.WriteLine("  oi:{0}", this.object_id);
+            Console.WriteLine("  vi:{0}", this.vertex_id);
+            Console.WriteLine("  w:{0}", this.weit);
+
+            reader.Read();//W
+        }
+    }
+}
diff --git a/MqxReader.cs b/MqxReader.cs
new file mode 100644 (file)
index 0000000..b620bdf
--- /dev/null
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+using System.Xml;
+
+namespace Tso2MqoGui
+{
+    /// MqxFileを読み込みます。
+    public class MqxReader
+    {
+        // mqo path
+        //todo: rename to MqoPath
+        public string MqoFile;
+
+        string GetMqxPath()
+        {
+            return Path.ChangeExtension(MqoFile, ".mqx");
+        }
+
+        // ボーン配列 [out]
+        public MqoBone[] bones;
+
+        // MqxFileを読み込む。
+        public void Read()
+        {
+            XmlReader reader = XmlReader.Create(GetMqxPath());
+            reader.Read();
+
+            reader.ReadStartElement("MetasequoiaDocument");
+
+            reader.ReadStartElement("IncludedBy");
+            string mqo_file = reader.ReadString();
+            Console.WriteLine(mqo_file);
+            reader.ReadEndElement();//IncludedBy
+
+            reader.ReadStartElement("Plugin.56A31D20.71F282AB");
+            reader.ReadStartElement("BoneSet");
+            int len = 255;
+            bones = new MqoBone[len];
+            int i = 0;
+            while (reader.IsStartElement("Bone"))
+            {
+                MqoBone bone = new MqoBone();
+                bone.Read(reader);
+                this.bones[i++] = bone;
+            }
+            reader.ReadEndElement();//BoneSet
+
+            while (reader.IsStartElement("Obj"))
+            {
+                Console.WriteLine("Obj");
+                Console.WriteLine("  id:{0}", reader.GetAttribute("id"));
+                reader.Read();//Obj
+            }
+
+            while (reader.IsStartElement("Poses"))
+            {
+                Console.WriteLine("Poses");
+                Console.WriteLine("  isExist:{0}", reader.GetAttribute("isExist"));
+                bool empty = reader.IsEmptyElement;
+                reader.Read();//Poses
+                if (empty)
+                    continue;
+                while (reader.IsStartElement("Pose"))
+                {
+                    Console.WriteLine("Pose");
+                    Console.WriteLine("  id:{0}", reader.GetAttribute("id"));
+                    reader.Read();//Pose
+                }
+                reader.ReadEndElement();//Poses
+            }
+            reader.ReadEndElement();//Plugin.56A31D20.71F282AB
+            reader.ReadEndElement();//MetasequoiaDocument
+
+            reader.Close();
+        }
+    }
+}
index 4c753c6..1aa6bb7 100644 (file)
@@ -13,6 +13,11 @@ namespace Tso2MqoGui
         //todo: rename to MqoPath
         public string MqoFile;
 
+        string GetMqxPath()
+        {
+            return Path.ChangeExtension(MqoFile, ".mqx");
+        }
+
         // MqxFileを書き出す。
         //
         // bones:
@@ -27,7 +32,7 @@ namespace Tso2MqoGui
             XmlWriterSettings settings = new XmlWriterSettings();
             settings.Indent = true;
             settings.IndentChars = new String(' ', 4);
-            XmlWriter writer = XmlWriter.Create(Path.ChangeExtension(MqoFile, ".mqx"), settings);
+            XmlWriter writer = XmlWriter.Create(GetMqxPath(), settings);
             writer.WriteStartElement("MetasequoiaDocument");
                 writer.WriteElementString("IncludedBy", Path.GetFileName(MqoFile));
 
@@ -52,98 +57,4 @@ namespace Tso2MqoGui
             writer.Close();
         }
     }
-
-    public class MqoBone
-    {
-        public int id;
-        public string name;
-        public bool tail;
-        //なければ-1
-        public int pid;
-        public List<int> cids = new List<int>();
-
-        //根本position
-        public Point3 q;
-
-        //先端position
-        public Point3 p;
-
-        public List<MqoWeit> weits;
-
-        public MqoBone()
-        {
-            weits = new List<MqoWeit>(2048*3*4);
-        }
-
-        public void Write(XmlWriter writer)
-        {
-            writer.WriteStartElement("Bone");
-            writer.WriteAttributeString("id", (id+1).ToString());
-
-            writer.WriteAttributeString("rtX", q.X.ToString());
-            writer.WriteAttributeString("rtY", q.Y.ToString());
-            writer.WriteAttributeString("rtZ", q.Z.ToString());
-
-            writer.WriteAttributeString("tpX", p.X.ToString());
-            writer.WriteAttributeString("tpY", p.Y.ToString());
-            writer.WriteAttributeString("tpZ", p.Z.ToString());
-
-            writer.WriteAttributeString("rotB", "0.0");
-            writer.WriteAttributeString("rotH", "0.0");
-            writer.WriteAttributeString("rotP", "0.0");
-
-            writer.WriteAttributeString("mvX", "0.0");
-            writer.WriteAttributeString("mvY", "0.0");
-            writer.WriteAttributeString("mvZ", "0.0");
-
-            writer.WriteAttributeString("sc", "1.0");
-
-            writer.WriteAttributeString("maxAngB", "90.0");
-            writer.WriteAttributeString("maxAngH", "180.0");
-            writer.WriteAttributeString("maxAngP", "180.0");
-
-            writer.WriteAttributeString("minAngB", "-90.0");
-            writer.WriteAttributeString("minAngH", "-180.0");
-            writer.WriteAttributeString("minAngP", "-180.0");
-
-            writer.WriteAttributeString("isDummy", tail ? "1" : "0");
-            writer.WriteAttributeString("name", name);
-
-            writer.WriteStartElement("P");
-            writer.WriteAttributeString("id", (pid+1).ToString());
-            writer.WriteEndElement();
-
-            foreach (int cid in cids)
-            {
-                writer.WriteStartElement("C");
-                writer.WriteAttributeString("id", (cid+1).ToString());
-                writer.WriteEndElement();
-            }
-            foreach (MqoWeit weit in weits)
-            {
-                weit.Write(writer);
-            }
-
-            writer.WriteEndElement();
-        }
-    }
-
-    public class MqoWeit
-    {
-        public int object_id;
-        public int vertex_id;
-        //public int bone_id;
-        public float weit;
-
-        public void Write(XmlWriter writer)
-        {
-            float weit_percent = weit * 100.0f;
-
-            writer.WriteStartElement("W");
-            writer.WriteAttributeString("oi", object_id.ToString());
-            writer.WriteAttributeString("vi", vertex_id.ToString());
-            writer.WriteAttributeString("w", weit_percent.ToString());
-            writer.WriteEndElement();
-        }
-    }
 }
diff --git a/TSOGeneratorMqxBone.cs b/TSOGeneratorMqxBone.cs
new file mode 100644 (file)
index 0000000..9f30112
--- /dev/null
@@ -0,0 +1,25 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace Tso2MqoGui
+{
+    public class TSOGeneratorMqxBone : TSOGenerator
+    {
+        public TSOGeneratorMqxBone(TSOGeneratorConfig config)
+            : base(config)
+        {
+        }
+
+        protected override bool DoLoadRefTSO(string path)
+        {
+            return true;
+        }
+
+        protected override bool DoGenerateMeshes()
+        {
+            return true;
+        }
+    }
+}
index b18fb91..fd3cd6a 100644 (file)
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
   <PropertyGroup>
     <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
@@ -80,6 +80,8 @@
     <Compile Include="MqoGenerator.cs" />
     <Compile Include="MqoReader.cs" />
     <Compile Include="MqoWriter.cs" />
+    <Compile Include="MqxFile.cs" />
+    <Compile Include="MqxReader.cs" />
     <Compile Include="MqxWriter.cs" />
     <Compile Include="NvTriStrip.cs" />
     <Compile Include="PointCluster.cs" />
   <Target Name="AfterBuild">
   </Target>
   -->
-</Project>
\ No newline at end of file
+</Project>
diff --git a/debug-MqxDump.bat b/debug-MqxDump.bat
new file mode 100644 (file)
index 0000000..800753a
--- /dev/null
@@ -0,0 +1 @@
+csc /debug /d:DEBUG /out:bin\MqxDump.exe MqxDump.cs MqxReader.cs MqxFile.cs General.cs