ExporterForm.cs 5.3 KB

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