/// <summary> /// /// </summary> /// <param name="fileName"></param> public void DumpContents( string fileName ) { var fs = File.Open( fileName, FileMode.Create ); var writer = new StreamWriter( fs ); writer.AutoFlush = true; writer.WriteLine( "-= Debug output of skeleton {0} =-", Name ); writer.WriteLine( "" ); writer.WriteLine( "== Bones ==" ); writer.WriteLine( "Number of bones: {0}", this.boneList.Count ); var q = new Quaternion(); Real angle = 0; var axis = new Vector3(); // write each bone out foreach ( var bone in this.boneList.Values ) { writer.WriteLine( "-- Bone {0} --", bone.Handle ); writer.Write( "Position: {0}", bone.Position ); q = bone.Orientation; writer.Write( "Rotation: {0}", q ); q.ToAngleAxis( ref angle, ref axis ); writer.Write( " = {0} radians around axis {1}", angle, axis ); writer.WriteLine( "" ); writer.WriteLine( "" ); } writer.WriteLine( "== Animations ==" ); writer.WriteLine( "Number of animations: {0}", this.animationList.Count ); // animations foreach ( var anim in this.animationList.Values ) { writer.WriteLine( "-- Animation '{0}' (length {1}) --", anim.Name, anim.Length ); writer.WriteLine( "Number of tracks: {0}", anim.NodeTracks.Count ); // tracks foreach ( var track in anim.NodeTracks.Values ) { writer.WriteLine( " -- AnimationTrack {0} --", track.Handle ); writer.WriteLine( " Affects bone: {0}", ( (Bone)track.TargetNode ).Handle ); writer.WriteLine( " Number of keyframes: {0}", track.KeyFrames.Count ); // key frames var kf = 0; for ( ushort i = 0; i < track.KeyFrames.Count; i++ ) { var keyFrame = track.GetNodeKeyFrame( i ); writer.WriteLine( " -- KeyFrame {0} --", kf++ ); writer.Write( " Time index: {0}", keyFrame.Time ); writer.WriteLine( " Translation: {0}", keyFrame.Translate ); q = keyFrame.Rotation; writer.Write( " Rotation: {0}", q ); q.ToAngleAxis( ref angle, ref axis ); writer.WriteLine( " = {0} radians around axis {1}", angle, axis ); } } } writer.Close(); fs.Close(); }