ExporterForm.cs 5.3 KB

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