ExporterForm.cs 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166
  1. using System;
  2. using System.Windows.Forms;
  3. using MaxCustomControls;
  4. using MaxSharp;
  5. using Color = System.Drawing.Color;
  6. namespace Max2Babylon
  7. {
  8. public partial class ExporterForm : MaxForm
  9. {
  10. private readonly BabylonExportActionItem babylonExportAction;
  11. private BabylonExporter exporter;
  12. TreeNode currentNode;
  13. int currentRank;
  14. public ExporterForm(BabylonExportActionItem babylonExportAction)
  15. {
  16. InitializeComponent();
  17. this.babylonExportAction = babylonExportAction;
  18. }
  19. private void ExporterForm_Load(object sender, EventArgs e)
  20. {
  21. txtFilename.Text = Kernel.Scene.RootNode.GetLocalData();
  22. Tools.PrepareCheckBox(chkQuaternions, Kernel.Scene.RootNode._Node, "babylonjs_exportquaternions");
  23. Tools.PrepareCheckBox(chkManifest, Kernel.Scene.RootNode._Node, "babylonjs_generatemanifest");
  24. Tools.PrepareCheckBox(chkCopyTextures, Kernel.Scene.RootNode._Node, "babylonjs_copytextures", 1);
  25. }
  26. private void butBrowse_Click(object sender, EventArgs e)
  27. {
  28. if (saveFileDialog.ShowDialog(this) == DialogResult.OK)
  29. {
  30. txtFilename.Text = saveFileDialog.FileName;
  31. }
  32. }
  33. private void butExport_Click(object sender, EventArgs e)
  34. {
  35. Tools.UpdateCheckBox(chkQuaternions, Kernel.Scene.RootNode._Node, "babylonjs_exportquaternions");
  36. Tools.UpdateCheckBox(chkManifest, Kernel.Scene.RootNode._Node, "babylonjs_generatemanifest");
  37. Tools.UpdateCheckBox(chkCopyTextures, Kernel.Scene.RootNode._Node, "babylonjs_copytextures");
  38. Kernel.Scene.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.CopyTexturesToOutput = chkCopyTextures.Checked;
  90. exporter.Export(txtFilename.Text, chkManifest.Checked, this);
  91. }
  92. catch (OperationCanceledException)
  93. {
  94. progressBar.Value = 0;
  95. }
  96. catch (Exception ex)
  97. {
  98. currentNode = CreateTreeNode(0, "Exportation cancelled: " + ex.Message, Color.Red);
  99. currentNode.EnsureVisible();
  100. progressBar.Value = 0;
  101. }
  102. butCancel.Enabled = false;
  103. butExport.Enabled = true;
  104. }
  105. private TreeNode CreateTreeNode(int rank, string text, Color color)
  106. {
  107. var newNode = new TreeNode(text) { ForeColor = color };
  108. if (rank == 0)
  109. {
  110. treeView.Nodes.Add(newNode);
  111. }
  112. else if (rank == currentRank + 1)
  113. {
  114. currentNode.Nodes.Add(newNode);
  115. }
  116. else
  117. {
  118. var parentNode = currentNode;
  119. while (currentRank != rank - 1)
  120. {
  121. parentNode = parentNode.Parent;
  122. currentRank--;
  123. }
  124. parentNode.Nodes.Add(newNode);
  125. }
  126. currentRank = rank;
  127. return newNode;
  128. }
  129. private void ExporterForm_FormClosed(object sender, FormClosedEventArgs e)
  130. {
  131. exporter.IsCancelled = true;
  132. babylonExportAction.Close();
  133. }
  134. private void txtFilename_TextChanged(object sender, EventArgs e)
  135. {
  136. butExport.Enabled = !string.IsNullOrEmpty(txtFilename.Text.Trim());
  137. }
  138. private void butCancel_Click(object sender, EventArgs e)
  139. {
  140. exporter.IsCancelled = true;
  141. }
  142. }
  143. }