Beispiel #1
0
        static void Main(string[] args)
        {
            string     sample = args[0];
            AnimReader anim   = new AnimReader(sample);

            anim.SaveRecord();
        }
Beispiel #2
0
 public Animation_Picker(string FileName, string Animation)
 {
     InitializeComponent();
     Text = Animation;
     foreach (cAnimation cAnimation in AnimReader.ReadFile(FileName).Animation)
     {
         LbAnimationList.Items.Add(cAnimation.AnimeName);
     }
 }
Beispiel #3
0
        protected int OnExecute(CommandLineApplication app)
        {
            FramePerSecond = Math.Max(1, FramePerSecond);

            if (Timeline == null || Timeline?.Length == 0)
            {
                Timeline = new string[] { $"Linear,{FrameLoop},0,0,0", $"Linear,{FrameEnd},100,0,0" };
            }

            var mdlxFile = MdlxMaker.CreateMdlxHaving2Bones(tx: MatrixValue);

            var motion       = Motion.CreateInterpolatedFromScratch();
            var interpolated = motion.Interpolated;

            interpolated.ModelBoneAnimation.Add(
                new BoneAnimationTable
            {
                JointIndex         = 1,
                Channel            = (byte)(6 | ((3 & Pre) << 4) | ((3 & Post) << 6)),
                TimelineStartIndex = 0,
                TimelineCount      = Convert.ToByte(Timeline.Length),
            }
                );
            interpolated.BoneCount      = 2;
            interpolated.FrameCount     = FrameCount;
            interpolated.FrameEnd       = FrameEnd;
            interpolated.FrameLoop      = FrameLoop;
            interpolated.FramePerSecond = FramePerSecond;
            interpolated.StaticPose.Add(
                new Motion.StaticPoseTable
            {
                BoneIndex = 1,
                Channel   = 6,
                Value     = InitialValue,
            }
                );
            interpolated.Joints.Add(new JointTable {
                JointIndex = 0,
            });
            interpolated.Joints.Add(new JointTable {
                JointIndex = 1,
            });
            interpolated.TotalFrameCount = TotalFrameCount;
            interpolated.Footer.Unknown  = new int[9];

            var converter = new TimelineTableConverter();

            interpolated.Timeline.AddRange(
                (Timeline ?? new string[0])
                .Select(text => converter.ConvertFromInvariantString(text))
                .Cast <TimelineTable>()
                );

            var motionBin = new MemoryStream();

            Motion.Write(motionBin, motion);

            motionBin.Position = 0;

            var anbFile = new MemoryStream();

            var anbBarEntries = new Bar.Entry[]
            {
                new Bar.Entry
                {
                    Type   = Bar.EntryType.Motion,
                    Stream = motionBin,
                    Name   = "A000",
                },
            };

            Bar.Write(
                anbFile,
                anbBarEntries
                );

            anbFile.Position = 0;

            var msetFile = new MemoryStream();

            Bar.Write(
                msetFile,
                new Bar.Entry[]
            {
                new Bar.Entry
                {
                    Type   = Bar.EntryType.Anb,
                    Stream = anbFile,
                    Name   = "A000",
                },
            }
                );

            msetFile.Position = 0;

            if (!string.IsNullOrEmpty(OutputMset))
            {
                File.WriteAllBytes(OutputMset, msetFile.ToArray());
            }

            motionBin.Position = 0;

            var animReader = new AnimReader(motionBin);

            mdlxFile.Position = 0;

            var outFiles = new Dictionary <string, object>();

            {
                var dat     = new StringWriter();
                var gnuplot = new StringWriter();
                gnuplot.WriteLine($"set terminal png");
                gnuplot.WriteLine($"set title '{Prefix}'");
                gnuplot.WriteLine($"set output '{Prefix}.png'");
                gnuplot.WriteLine($"plot '{Prefix}.dat' index 0 title 'out' with lines, \\");
                gnuplot.WriteLine($"     '' index 1 title 'in' with points");

                outFiles[$"{Prefix}.dat"] = dat;
                outFiles[$"{Prefix}.txt"] = gnuplot;

                var provider = (IAnimMatricesProvider) new EmuBasedAnimMatricesProvider(animReader, mdlxFile, motionBin);

                dat.WriteLine("# X Y");

                foreach (var x in Enumerable.Range(0, (int)((FrameEnd - FrameLoop + 1) * FramePerSecond)))
                {
                    var matrices = provider.ProvideMatrices((x == 0) ? 0 : 1);

                    var xVal = FrameLoop + (x / FramePerSecond);
                    var yVal = matrices[1].M41;

                    dat.WriteLine($"{xVal} {yVal}");
                }

                dat.WriteLine();
                dat.WriteLine();

                dat.WriteLine("# X Y");

                interpolated.Timeline
                .ForEach(
                    indir =>
                {
                    dat.WriteLine($"{indir.KeyFrame} {indir.Value}");
                }
                    );
            }

            if (!string.IsNullOrEmpty(Prefix))
            {
                outFiles.ForEach(
                    pair => File.WriteAllText(
                        pair.Key,
                        "" + pair.Value,
                        new UTF8Encoding(encoderShouldEmitUTF8Identifier: false)
                        )
                    );

                Console.WriteLine($"Run: gnuplot {Prefix}.txt");
            }

            return(0);
        }