Program.cs 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. using System;
  2. using System.IO;
  3. using System.Reflection;
  4. using BabylonExport.Core.Exporters;
  5. using BabylonExport.Core.Exporters.FBX;
  6. using System.Windows.Forms;
  7. using System.ServiceModel;
  8. using BabylonExport.Interface;
  9. using BabylonExport.Core;
  10. namespace BabylonExport
  11. {
  12. class Program
  13. {
  14. static void Main(string[] args)
  15. {
  16. string output = "";
  17. try
  18. {
  19. if ((args.Length == 1) && (args[0] == "/service"))
  20. {
  21. var serviceHost = new ServiceHost(typeof(Service), new Uri[] { new Uri("net.pipe://localhost/") });
  22. serviceHost.AddServiceEndpoint(typeof(IService), new NetNamedPipeBinding(), "exportservice");
  23. serviceHost.Open();
  24. Console.WriteLine("Service started. Available in following endpoints");
  25. foreach (var serviceEndpoint in serviceHost.Description.Endpoints)
  26. {
  27. Console.WriteLine(serviceEndpoint.ListenUri.AbsoluteUri);
  28. }
  29. Console.ReadLine();
  30. }
  31. else
  32. {
  33. if (args.Length < 2)
  34. {
  35. DisplayUsage();
  36. return;
  37. }
  38. // Parsing arguments
  39. string input = "";
  40. bool skinned = false;
  41. foreach (var arg in args)
  42. {
  43. var order = arg.Substring(0, 3);
  44. switch (order)
  45. {
  46. case "/i:":
  47. input = arg.Substring(3);
  48. break;
  49. case "/o:":
  50. output = arg.Substring(3);
  51. break;
  52. case "/sk":
  53. skinned = true;
  54. break;
  55. default:
  56. DisplayUsage();
  57. return;
  58. }
  59. }
  60. if (string.IsNullOrEmpty(input) || string.IsNullOrEmpty(output))
  61. {
  62. DisplayUsage();
  63. return;
  64. }
  65. var extension = Path.GetExtension(input).ToLower();
  66. var outputName = Path.Combine(output, Path.GetFileNameWithoutExtension(input) + ".babylon");
  67. if (!Directory.Exists(output))
  68. {
  69. Directory.CreateDirectory(output);
  70. }
  71. // Browsing exporters
  72. foreach (var type in Assembly.GetAssembly(typeof(NovaExporter)).GetTypes())
  73. {
  74. var interf = type.GetInterface("BabylonExport.Core.IExporter");
  75. if (interf != null)
  76. {
  77. var importer = (IExporter)Activator.CreateInstance(type);
  78. if (!importer.SupportedExtensions.Contains(extension))
  79. {
  80. continue;
  81. }
  82. Console.WriteLine("Using " + type);
  83. // Importation
  84. try
  85. {
  86. importer.OnImportProgressChanged += progress =>
  87. {
  88. Console.CursorLeft = 0;
  89. Console.Write("Generation....{0} %", progress);
  90. };
  91. Console.ForegroundColor = ConsoleColor.Green;
  92. Console.WriteLine("Generation of " + outputName + " started");
  93. Console.WriteLine();
  94. Console.ResetColor();
  95. importer.GenerateBabylonFile(input, outputName, skinned);
  96. Console.ForegroundColor = ConsoleColor.Green;
  97. Console.WriteLine();
  98. Console.WriteLine();
  99. Console.WriteLine("Generation of " + outputName + " successfull");
  100. Console.ResetColor();
  101. using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
  102. {
  103. debugFile.Write("Generation of " + outputName + " successfull");
  104. }
  105. }
  106. catch (Exception ex)
  107. {
  108. Console.ForegroundColor = ConsoleColor.Red;
  109. Console.WriteLine();
  110. Console.WriteLine(ex.Message);
  111. Console.ResetColor();
  112. using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
  113. {
  114. debugFile.Write(ex.Message);
  115. }
  116. }
  117. }
  118. }
  119. }
  120. }
  121. catch (ReflectionTypeLoadException ex)
  122. {
  123. Console.ForegroundColor = ConsoleColor.Red;
  124. Console.WriteLine("Fatal error encountered:");
  125. Console.WriteLine(ex.LoaderExceptions[0].Message);
  126. Console.ResetColor();
  127. if (output != "")
  128. {
  129. using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
  130. {
  131. debugFile.Write(ex.Message);
  132. }
  133. }
  134. }
  135. catch (Exception ex)
  136. {
  137. Console.ForegroundColor = ConsoleColor.Red;
  138. Console.WriteLine("Fatal error encountered:");
  139. Console.WriteLine(ex.Message);
  140. Console.ResetColor();
  141. if (output != "")
  142. {
  143. using (var debugFile = new StreamWriter(output + @"\debug.txt", true))
  144. {
  145. debugFile.Write(ex.Message);
  146. }
  147. }
  148. }
  149. }
  150. static void DisplayUsage()
  151. {
  152. Console.WriteLine("Babylon Import usage: BabylonImport.exe /i:\"source file\" /o:\"output folder\" [/sk]");
  153. }
  154. }
  155. }