/// <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()); }
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(""); }
private void infoProjectToolStripMenuItem_Click(object sender, EventArgs e) { infoProject infoProjectForm = new infoProject(); infoProjectForm.Show(); }