コード例 #1
0
 internal static void PrintUse()
 {
     ULogger.W("APP", "Usage: mset2 <arguments...> <files>");
     ULogger.N("APP");
     ULogger.W("APP", "Extraction options:");
     ULogger.W("APP", "  -e:<encoder>");
     ULogger.W("APP", "  Specifies output encoder. <encoder> must be a valid encoder. For available encoders, see readme.");
     ULogger.W("APP", "  Default value: OBJ");
     ULogger.N("APP");
     ULogger.W("APP", "  -d:<path>");
     ULogger.W("APP", "  Specifies output directory. <path> must be a valid directory path.");
     ULogger.W("APP", "  Default value: <null> (outputs to source files' directory)");
     ULogger.N("APP");
     ULogger.W("APP", "  -l");
     ULogger.W("APP", "  Lists models in a file then exists.");
     ULogger.N("APP");
     ULogger.W("APP", "  -m:<model_name>");
     ULogger.W("APP", "  Specifies extracting a specific model from input file(s). <model_name> is a model to extract.");
     ULogger.W("APP", "  Default value: <null> (extracts all models)");
     ULogger.N("APP");
     ULogger.W("APP", "  -c:<color>");
     ULogger.W("APP", "  Overrides vertex colors on resulting mesh. <color> is an unsigned 32-bit integer containing ARGB information.");
     ULogger.W("APP", "  Default value: <null> (does not override colors)");
     ULogger.N("APP");
     ULogger.W("APP", "  -o:<options>");
     ULogger.W("APP", "  Specifies selected encoder's options. <options> is a string of comma-separated key-value pairs. For examples and available encoder options, see readme.");
     ULogger.W("APP", "  Default value: <null> (use default options)");
     ULogger.N("APP");
     ULogger.W("APP", "  -r");
     ULogger.W("APP", "  Creates raw mesh dumps alongside output files. These are UTF-8-encoded text files describing raw input data.");
     ULogger.N("APP");
     ULogger.W("APP", "Program options:");
     ULogger.W("APP", "  -v");
     ULogger.W("APP", "  Enables verbose logging to console.");
     ULogger.N("APP");
     ULogger.W("APP", "  -v:<path>");
     ULogger.W("APP", "  Enables logging to file. Supersedes -v. <path> must be a valid file path.");
     ULogger.N("APP");
     ULogger.W("APP", "  -help");
     ULogger.W("APP", "  Prints this message and quits.");
     ULogger.N("APP");
 }
コード例 #2
0
        /*
         * COMMANDLINE OPTIONS
         *
         * Extraction options:
         *   -e:<encoder>
         *   Specifies output encoder. <encoder> must be a valid encoder. For available encoders, see readme.
         *   Default value: OBJ
         *
         *   -d:<path>
         *   Specifies output directory. <path> must be a valid directory path.
         *   Default value: <null> (outputs to source files' directory)
         *
         *   -l
         *   Lists models in a file then exists.
         *
         *   -m:<model_name>
         *   Specifies extracting a specific model from input file(s). <model_name> is a model to extract.
         *   Default value: <null> (extracts all models)
         *
         *   -c:<color>
         *   Overrides vertex colors on resulting mesh. <color> is an unsigned 32-bit integer containing ARGB information.
         *   Default value: <null> (does not override colors)
         *
         *   -o:<options>
         *   Specifies selected encoder's options. <options> is a string of comma-separated key-value pairs. For examples and available encoder options, see readme.
         *   Default value: <null> (use default options)
         *
         *   -r
         *   Creates raw mesh dumps alongside output files. These are UTF-8-encoded text files describing raw input data.
         *
         * Program options:
         *   -v
         *   Enables verbose logging to console.
         *
         *   -v:<path>
         *   Enables logging to file. Supersedes -v. <path> must be a valid file path.
         */
        internal static void Main(string[] args)
        {
            ULogger.D(Debugger.IsAttached);
            ULogger.R(Console.Out);

            ULogger.W("MSET2", "Initializing");

            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            var cmdl = ParseCommandLine(args);

            Options = cmdl;

            if (cmdl.VerboseMode)
            {
                if (cmdl.VerboseModeLogFile != null)
                {
                    var tw = new StreamWriter(cmdl.VerboseModeLogFile.Create(), new UTF8Encoding(false));
                    ULogger.R(tw);
                }

                ULogger.W("APP", "Commandline options:");
                ULogger.W("APP", "  Encoder: {0} (ver. {1})", cmdl.ModelWriter.WriterID, cmdl.ModelWriter.VersionID);
                ULogger.W("APP", "  Output path: {0}", cmdl.OutputDirectory != null ? cmdl.OutputDirectory.FullName : "<null>");
                ULogger.W("APP", "  Just list models: {0}", cmdl.ListModels ? "Yes" : "No");
                ULogger.W("APP", "  Model name: {0}", cmdl.ModelName != null ? cmdl.ModelName : "<null>");
                ULogger.W("APP", "  Override color: {0}", cmdl.IsColorDefined ? string.Format("Yes (RGBA #{0:X2}{1:X2}{2:X2}{3:X2})", cmdl.OverrideColor.R, cmdl.OverrideColor.G, cmdl.OverrideColor.B, cmdl.OverrideColor.A) : "No");
                ULogger.W("APP", "  Encoder options specified: {0}", cmdl.ModelWriterOptions.Count);
                ULogger.W("APP", "  Create raw meshes: {0}", cmdl.CreateRawMeshes ? "Yes" : "No");
                ULogger.W("APP", "  Verbose mode: {0}", cmdl.VerboseMode ? "Yes" : "No");
                ULogger.W("APP", "  Log file: {0}", cmdl.VerboseModeLogFile != null ? cmdl.VerboseModeLogFile.FullName : "<null>");
                ULogger.N("APP");
                ULogger.W("APP", "Invalid arguments specified: {0}", cmdl.HasInvalidArguments ? "Yes" : "No");
                ULogger.N("APP");
                ULogger.W("APP", "Input files ({0}):", cmdl.InputFiles.Count());
                foreach (var infile in cmdl.InputFiles)
                {
                    ULogger.W("APP", "'{0}'", infile.FullName);
                }
                ULogger.N("APP");
            }

            if (cmdl.HasInvalidArguments && cmdl.ArgumentException != null)
            {
                ULogger.X("APP", cmdl.ArgumentException);
                ULogger.N("APP");
            }

            if (cmdl.HelpMode || cmdl.HasInvalidArguments)
            {
                PrintUse();
                ULogger.Q();
                return;
            }

            var msetrdr = new MSetReader();
            var msetdmp = new RawDumper();

            foreach (var kvp in cmdl.ModelWriterOptions)
            {
                cmdl.ModelWriter.Options.Add(kvp.Key, kvp.Value);
            }
            var m3dw = cmdl.ModelWriter;
            var utf8 = new UTF8Encoding(false);

            try
            {
                foreach (var msetf in cmdl.InputFiles)
                {
                    if (cmdl.VerboseMode)
                    {
                        ULogger.W("MSETLDR", "Loading '{0}'", msetf.FullName);
                    }

                    var mset = msetrdr.Load(msetf);
                    var m3ds = msetrdr.Create3DModels(mset).ToList();

                    if (cmdl.VerboseMode)
                    {
                        ULogger.W("MSETLDR", "Loaded {0} models", m3ds.Count);
                    }

                    foreach (var m3d in m3ds)
                    {
                        ULogger.W("M3D", "Model '{0}' in file '{1}'", m3d.ModelName, msetf.FullName);
                        if (cmdl.ListModels)
                        {
                            continue;
                        }

                        if (cmdl.ModelName != null && m3d.ModelName != cmdl.ModelName)
                        {
                            continue;
                        }

                        ULogger.W("M3DWRTR", "Extracting '{0}'", m3d.ModelName);
                        var opath = cmdl.OutputDirectory != null ? cmdl.OutputDirectory.FullName : msetf.Directory.FullName;
                        //var msetn = msetf.Name.Substring(0, msetf.Name.Length - msetf.Extension.Length);
                        var msetn = m3d.ModelName;
                        msetn = string.Concat(msetn, m3dw.FileExtension);
                        opath = Path.Combine(opath, msetn);
                        var m3df = new FileInfo(opath);

                        m3dw.WriteModel(m3d, m3df);

                        if (cmdl.CreateRawMeshes)
                        {
                            if (cmdl.VerboseMode)
                            {
                                ULogger.W("M3D RAW", "Creating raw dump");
                            }

                            opath = string.Concat(opath, ".raw_3d");
                            var m3drf = new FileInfo(opath);

                            msetdmp.WriteRawMesh(m3d, msetf, m3drf, utf8);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                ULogger.W("APP ERROR", "CRITICAL: ERROR WHILE UNPACKING MSET");
                ULogger.X("APP ERROR", ex);
            }

            ULogger.W("MSET2", "Conversion completed");
            ULogger.Q();

            if (Debugger.IsAttached)
            {
                Console.ReadKey();
            }
        }