示例#1
0
        /// <summary>
        /// Creates the output info model.
        /// </summary>
        private void CreateInfoFile(infoProject model, string path, bool dltextures = false)
        {
            var output = new StringBuilder();

            output.AppendLine(GenerateHeader("Model Details", true));
            output.AppendLine($"  {GetPropertyData(() => model.uidModel).Description}: {model.uidModel}");
            output.AppendLine($"  {GetPropertyData(() => model.nameModel).Description}: { model.nameModel}");
            output.AppendLine($"  {GetPropertyData(() => model.urlModel).Description}: {model.urlModel}");

            output.AppendLine(GenerateHeader("User Profile"));
            output.AppendLine($"  {GetPropertyData(() => model.displayName).Description}: {model.displayName}");
            output.AppendLine($"  {GetPropertyData(() => model.profileUrl).Description}: {model.profileUrl}");

            output.AppendLine(GenerateHeader("Model Files"));
            foreach (var file in model.modelFileNames)
            {
                output.AppendLine($"{model.urlFiles}" + file);
            }

            if (dltextures && model.textures.Count > 0)
            {
                output.AppendLine(GenerateHeader("Textures"));
                foreach (var texture in model.textures)
                {
                    output.AppendLine($"  {GetPropertyData(() => texture.filename).Description}: {texture.filename}");
                    output.AppendLine($"  {GetPropertyData(() => texture.remoteFilename).Description}: {texture.remoteFilename}");
                    output.AppendLine($"  Dimensions: {texture.width}x{texture.height}");
                    output.AppendLine($"  {texture.urlItemTexture}");
                    output.AppendLine();
                }
            }

            File.WriteAllText(Path.Combine(path, "infoModel.txt"), output.ToString());
        }
示例#2
0
        public void Download(string url, Arguments arguments)
        {
            var document = GetHtmlDocument(url);
            var data     = GetJsonItemModel(document);

            var infoData   = new infoProject();
            var outputInfo = new StringBuilder();

            Console.WriteLine(GenerateHeader("Getting info model.", true));
            infoData.uidModel = GetIdModelFromHtml(document);

            // root nodes
            var rootModel    = $"/i/models/{infoData.uidModel}";
            var rootTextures = $"/i/models/{infoData.uidModel}/textures?optimized=1";

            // Files Info
            infoData.uidFiles = data[rootModel]["files"][0]["uid"].ToString();
            infoData.urlFiles = $"https://media.sketchfab.com/urls/{infoData.uidModel}/dist/models/{infoData.uidFiles}/";

            // Model Info
            infoData.nameModel = data[rootModel]["name"].ToString();
            infoData.urlModel  = data[rootModel]["viewerUrl"].ToString();

            // User Info
            infoData.username    = data[rootModel]["user"]["username"].ToString();
            infoData.displayName = data[rootModel]["user"]["displayName"].ToString();
            infoData.profileUrl  = data[rootModel]["user"]["profileUrl"].ToString();

            Console.WriteLine(" Model Id: " + infoData.uidModel);
            Console.WriteLine(" Name: " + infoData.nameModel);
            Console.WriteLine(" Author: " + infoData.displayName);
            Console.WriteLine(" Profile Url: " + infoData.profileUrl);

            var dlPath         = Path.Combine(Directory.GetCurrentDirectory(), "downloads");
            var dlPathFiles    = Path.Combine(dlPath, MakeDirectoryValid($"{infoData.nameModel} ({infoData.uidModel})"));
            var dlPathTextures = Path.Combine(dlPathFiles, "textures");

            if (!Directory.Exists(dlPathFiles))
            {
                Directory.CreateDirectory(dlPathFiles);
            }

            Console.WriteLine(GenerateHeader("Downloading model files."));
            infoData.modelFileNames = new List <string>();
            foreach (string filename in new string[] { "file.osgjs.gz", "model_file.bin.gz", "model_file_wireframe.bin.gz" })
            {
                var urlfile = infoData.urlFiles + filename;
                if (!RemoteFileExists(urlfile))
                {
                    continue;
                }

                infoData.modelFileNames.Add(filename);

                var outFile = Path.Combine(dlPathFiles, filename);
                Console.Write(" " + filename);
                WriteFile(urlfile, outFile);
                Console.WriteLine(" - " + "Download Completed.");
            }

            // Download textures
            if (arguments.textures)
            {
                // Textures
                infoData.textures = new List <Texture>();
                var textures = data[rootTextures]["results"];

                // Make the sub directory for texture files
                if (textures.Count() > 0 && !Directory.Exists(dlPathTextures))
                {
                    Directory.CreateDirectory(dlPathTextures);
                }

                Console.WriteLine(GenerateHeader("Downloading texture files."));
                foreach (var item in textures)
                {
                    var infoTexture = new Texture();
                    infoTexture.uidTexture = item["uid"].ToString();
                    infoTexture.filename   = item["name"].ToString();

                    // Images Files
                    var images = item["images"]
                                 .OrderByDescending(x => x["width"])
                                 .ThenByDescending(x => (DateTimeOffset)x["updatedAt"]).First();

                    infoTexture.uidItemTexture = images["uid"].ToString();
                    infoTexture.width          = images["width"].ToString();
                    infoTexture.height         = images["height"].ToString();
                    infoTexture.urlItemTexture = images["url"].ToString();

                    // Add the texture data
                    infoData.textures.Add(infoTexture);

                    infoTexture.remoteFilename = infoTexture.urlItemTexture.Split('/').Last();
                    //var outFile = Path.Combine(dlPathTextures, infoTexture.filename);
                    var outFile = Path.Combine(dlPathTextures, infoTexture.remoteFilename);

                    Console.WriteLine(" Original Name: " + infoTexture.filename);
                    Console.WriteLine(" Name: " + infoTexture.remoteFilename);
                    Console.WriteLine(" Dimensions: " + infoTexture.width + "x" + infoTexture.height);

                    WriteFile(infoTexture.urlItemTexture, outFile);
                    Console.WriteLine(" Download completed.");
                    Console.WriteLine("");
                }
            }

            // Create the file with info of model
            CreateInfoFile(infoData, dlPathFiles, arguments.textures);

            // Blender exporting
            if (arguments.export)
            {
                Console.WriteLine(GenerateHeader("Exporting model file by blender."));

                var path     = dlPathFiles;
                var filename = MakeDirectoryValid($"{infoData.nameModel}").Replace(' ', '_').ToLower() + ".obj";

                var p = new Process();
                p.StartInfo.WorkingDirectory = ".\\blender";
                p.StartInfo.FileName         = "blender.exe";
                p.StartInfo.Arguments        = $"-b -P .blender\\scripts\\sketchfab-decode.py -- -s \"{path}\\file.osgjs\" -o \"{path}\\{filename}\"";

                p.StartInfo.CreateNoWindow  = false;
                p.StartInfo.UseShellExecute = true;

                if (arguments.background)
                {
                    p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
                }

                Console.Write(" " + filename);

                p.Start();
                p.WaitForExit();
                Thread.Sleep(2500);

                switch (p.ExitCode)
                {
                case 0:
                    Console.WriteLine(" - " + "Export completed.");
                    if (arguments.clear)
                    {
                        foreach (var file in new string[] { "file.osgjs", "file.osgjs.ys", "model_file.bin", "model_file_wireframe.bin" })
                        {
                            File.Delete(Path.Combine(path, file));
                        }
                    }
                    break;

                case -1:
                    Console.WriteLine(" - " + "Export failed.");
                    break;

                default:
                    Console.WriteLine(" - " + "Process failed.");
                    break;
                }
            }

            Console.WriteLine("");
        }
示例#3
0
        private void infoProjectToolStripMenuItem_Click(object sender, EventArgs e)
        {
            infoProject infoProjectForm = new infoProject();

            infoProjectForm.Show();
        }