MqoBone[] CreateBones(TSOFile tso) { MqoBone[] bones = new MqoBone[tso.nodes.Length]; tso.UpdateNodesWorld(); foreach (TSONode node in tso.nodes) { MqoBone bone = new MqoBone(node.id); bone.id = node.id + 1; bone.name = node.Name; bone.tail = node.children.Count == 0; if (node.parent == null) { bone.pid = 0; } else { bone.pid = node.parent.id + 1; bones[node.parent.id].cids.Add(bone.id); } //根本 bone.q = node.world.Translation; //先端 if (!bone.tail) { bone.p = node.children[0].world.Translation; } else { bone.p = node.world.Translation; } bones[node.id] = bone; } return(bones); }
public void Read(XmlReader reader) { 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(i); bone.Read(reader); this.bones[i++] = bone; } reader.ReadEndElement();//BoneSet len = i; Array.Resize(ref bones, len); CreateBoneMap(); CreateBoneTurnedMap(); UpdateBones(); 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 }