// [分離案]シェイプキーが列挙型に依存している。 public float this[MorphKey key] { get { return(skinnedMesh.GetBlendShapeWeight((int)key)); } set { skinnedMesh.SetBlendShapeWeight((int)key, value); } }
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); } }