ExporterForm.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177
  1. using System;
  2. using System.Windows.Forms;
  3. using Color = System.Drawing.Color;
  4. namespace Max2Babylon
  5. {
  6. public partial class ExporterForm : Form
  7. {
  8. private readonly BabylonExportActionItem babylonExportAction;
  9. private BabylonExporter exporter;
  10. TreeNode currentNode;
  11. int currentRank;
  12. public ExporterForm(BabylonExportActionItem babylonExportAction)
  13. {
  14. InitializeComponent();
  15. this.babylonExportAction = babylonExportAction;
  16. }
  17. private void ExporterForm_Load(object sender, EventArgs e)
  18. {
  19. txtFilename.Text = Loader.Core.RootNode.GetLocalData();
  20. Tools.PrepareCheckBox(chkManifest, Loader.Core.RootNode, "babylonjs_generatemanifest");
  21. Tools.PrepareCheckBox(chkCopyTextures, Loader.Core.RootNode, "babylonjs_copytextures", 1);
  22. Tools.PrepareCheckBox(chkHidden, Loader.Core.RootNode, "babylonjs_exporthidden");
  23. }
  24. private void butBrowse_Click(object sender, EventArgs e)
  25. {
  26. if (saveFileDialog.ShowDialog(this) == DialogResult.OK)
  27. {
  28. txtFilename.Text = saveFileDialog.FileName;
  29. }
  30. }
  31. private async void butExport_Click(object sender, EventArgs e)
  32. {
  33. Tools.UpdateCheckBox(chkManifest, Loader.Core.RootNode, "babylonjs_generatemanifest");
  34. Tools.UpdateCheckBox(chkCopyTextures, Loader.Core.RootNode, "babylonjs_copytextures");
  35. Tools.UpdateCheckBox(chkHidden, Loader.Core.RootNode, "babylonjs_exporthidden");
  36. Loader.Core.RootNode.SetLocalData(txtFilename.Text);
  37. exporter = new BabylonExporter();
  38. treeView.Nodes.Clear();
  39. exporter.OnImportProgressChanged += progress =>
  40. {
  41. progressBar.Value = progress;
  42. Application.DoEvents();
  43. };
  44. exporter.OnWarning += (warning, rank) =>
  45. {
  46. try
  47. {
  48. currentNode = CreateTreeNode(rank, warning, Color.Orange);
  49. currentNode.EnsureVisible();
  50. }
  51. catch
  52. {
  53. }
  54. Application.DoEvents();
  55. };
  56. exporter.OnError += (error, rank) =>
  57. {
  58. try
  59. {
  60. currentNode = CreateTreeNode(rank, error, Color.Red);
  61. currentNode.EnsureVisible();
  62. }
  63. catch
  64. {
  65. }
  66. Application.DoEvents();
  67. };
  68. exporter.OnMessage += (message, color, rank, emphasis) =>
  69. {
  70. try
  71. {
  72. currentNode = CreateTreeNode(rank, message, color);
  73. if (emphasis)
  74. {
  75. currentNode.EnsureVisible();
  76. }
  77. }
  78. catch
  79. {
  80. }
  81. Application.DoEvents();
  82. };
  83. butExport.Enabled = false;
  84. butCancel.Enabled = true;
  85. try
  86. {
  87. exporter.ExportHiddenObjects = chkHidden.Checked;
  88. exporter.CopyTexturesToOutput = chkCopyTextures.Checked;
  89. await exporter.ExportAsync(txtFilename.Text, chkManifest.Checked, this);
  90. }
  91. catch (OperationCanceledException)
  92. {
  93. progressBar.Value = 0;
  94. }
  95. catch (Exception ex)
  96. {
  97. currentNode = CreateTreeNode(0, "Exportation cancelled: " + ex.Message, Color.Red);
  98. currentNode.EnsureVisible();
  99. progressBar.Value = 0;
  100. }
  101. butCancel.Enabled = false;
  102. butExport.Enabled = true;
  103. BringToFront();
  104. }
  105. private TreeNode CreateTreeNode(int rank, string text, Color color)
  106. {
  107. TreeNode newNode = null;
  108. Invoke(new Action(() =>
  109. {
  110. newNode = new TreeNode(text) {ForeColor = color};
  111. if (rank == 0)
  112. {
  113. treeView.Nodes.Add(newNode);
  114. }
  115. else if (rank == currentRank + 1)
  116. {
  117. currentNode.Nodes.Add(newNode);
  118. }
  119. else
  120. {
  121. var parentNode = currentNode;
  122. while (currentRank != rank - 1)
  123. {
  124. parentNode = parentNode.Parent;
  125. currentRank--;
  126. }
  127. parentNode.Nodes.Add(newNode);
  128. }
  129. currentRank = rank;
  130. }));
  131. return newNode;
  132. }
  133. private void ExporterForm_FormClosed(object sender, FormClosedEventArgs e)
  134. {
  135. if (exporter != null)
  136. {
  137. exporter.IsCancelled = true;
  138. }
  139. babylonExportAction.Close();
  140. }
  141. private void txtFilename_TextChanged(object sender, EventArgs e)
  142. {
  143. butExport.Enabled = !string.IsNullOrEmpty(txtFilename.Text.Trim());
  144. }
  145. private void butCancel_Click(object sender, EventArgs e)
  146. {
  147. exporter.IsCancelled = true;
  148. }
  149. }
  150. }