// [分離案]シェイプキーが列挙型に依存している。

        public float this[MorphKey key]
        {
            get
            {
                return(skinnedMesh.GetBlendShapeWeight((int)key));
            }
            set
            {
                skinnedMesh.SetBlendShapeWeight((int)key, value);
            }
        }
Example #2
0
        private void ApplyAnimation_Click_Model()
        {
            var xml = XDocument.Parse(txt.Text);

            var es = xml.Root.Elements().ToList();

            ModelAnimation = new List <ModelAnimation>();

            for (int i = 0; i < es.Count(); i++)
            {
                var anim = new ModelAnimation();

                var ats = es[i].Attributes().ToList();
                var transformkeydata2 = new TransformKeyData2
                {
                    TransformKey = new TransformKey()
                };

                anim.Name = ats[1].Value;
                transformkeydata2.Duration = TimeSpan.FromMilliseconds(double.Parse(ats[2].Value));

                var inits = es[i].Elements().ToList()[0].Elements().ToList();
                if (inits.Count != 0)
                {
                    transformkeydata2.TransformKey.Translation = new Vector3(
                        float.Parse(inits[0].Attribute("X").Value),
                        float.Parse(inits[0].Attribute("Y").Value),
                        float.Parse(inits[0].Attribute("Z").Value)
                        );

                    transformkeydata2.TransformKey.Rotation = new Vector3(
                        float.Parse(inits[1].Attribute("X").Value),
                        float.Parse(inits[1].Attribute("Y").Value),
                        float.Parse(inits[1].Attribute("Z").Value)
                        ).ToQuaternion();

                    transformkeydata2.TransformKey.Scale = new Vector3(
                        float.Parse(inits[2].Attribute("X").Value),
                        float.Parse(inits[2].Attribute("Y").Value),
                        float.Parse(inits[2].Attribute("Z").Value)
                        );

                    var transformkey = es[i].Elements().ToList()[1].Elements();

                    var translationkey = transformkey.Where(_ => _.Name == "translation_key").ToList();
                    for (int j = 0; j < translationkey.Count(); j++)
                    {
                        transformkeydata2.TransformKey.TKey.Add(new TKey
                        {
                            Duration    = TimeSpan.FromMilliseconds(double.Parse(translationkey[j].Attribute("tick_time").Value)),
                            Translation = new Vector3(
                                float.Parse(translationkey[j].Attribute("X").Value),
                                float.Parse(translationkey[j].Attribute("Y").Value),
                                float.Parse(translationkey[j].Attribute("Z").Value)
                                )
                        });
                    }

                    var rotationkey = transformkey.Where(_ => _.Name == "rotation_key").ToList();
                    for (int k = 0; k < rotationkey.Count(); k++)
                    {
                        transformkeydata2.TransformKey.RKey.Add(new RKey
                        {
                            Duration = TimeSpan.FromMilliseconds(double.Parse(rotationkey[k].Attribute("tick_time").Value)),
                            Rotation = new Vector3(
                                float.Parse(rotationkey[k].Attribute("X").Value),
                                float.Parse(rotationkey[k].Attribute("Y").Value),
                                float.Parse(rotationkey[k].Attribute("Z").Value)
                                ).ToQuaternion()
                        });
                    }

                    var scalekey = transformkey.Where(_ => _.Name == "scale_key").ToList();
                    for (int l = 0; l < scalekey.Count(); l++)
                    {
                        transformkeydata2.TransformKey.SKey.Add(new SKey
                        {
                            Duration = TimeSpan.FromMilliseconds(double.Parse(scalekey[l].Attribute("tick_time").Value)),
                            Scale    = new Vector3(
                                float.Parse(scalekey[l].Attribute("X").Value),
                                float.Parse(scalekey[l].Attribute("Y").Value),
                                float.Parse(scalekey[l].Attribute("Z").Value)
                                )
                        });
                    }
                }

                var floatkey = es[i].Elements().ToList()[2].Elements().ToList();
                for (int m = 0; m < floatkey.Count(); m++)
                {
                    transformkeydata2.FloatKeys.Add(new FloatKey
                    {
                        Duration = TimeSpan.FromMilliseconds(double.Parse(floatkey[m].Attribute("tick_time").Value)),
                        Alpha    = float.Parse(floatkey[m].Attribute("alpha").Value)
                    });
                }

                var morphkey = es[i].Elements().ToList()[3].Elements().ToList();
                for (int n = 0; n < morphkey.Count(); n++)
                {
                    var m = new MorphKey
                    {
                        Duration = TimeSpan.FromMilliseconds(double.Parse(morphkey[n].Attribute("tick_time").Value))
                    };

                    var mpl = new List <Vector3>();
                    var mp  = morphkey[n].Elements().Where(_ => _.Name == "morph_position").ToList();
                    for (int o = 0; o < mp.Count; o++)
                    {
                        mpl.Add(new Vector3(
                                    float.Parse(mp[o].Attribute("X").Value),
                                    float.Parse(mp[o].Attribute("Y").Value),
                                    float.Parse(mp[o].Attribute("Z").Value)));
                    }
                    m.Positions = mpl;

                    var mrl = new List <Quaternion>();
                    var mr  = morphkey[n].Elements().Where(_ => _.Name == "morph_rotation").ToList();
                    for (int p = 0; p < mr.Count; p++)
                    {
                        mrl.Add(new Vector3(
                                    float.Parse(mr[p].Attribute("X").Value),
                                    float.Parse(mr[p].Attribute("Y").Value),
                                    float.Parse(mr[p].Attribute("Z").Value)).ToQuaternion());
                    }
                    m.Rotations = mrl;

                    transformkeydata2.MorphKeys.Add(m);
                }

                anim.TransformKeyData2 = transformkeydata2;
                ModelAnimation.Add(anim);
            }
        }