public static void Export(ExportParameters exportParameters) { // Check output format is valid List <string> validFormats = new List <string>(new string[] { "babylon", "binary babylon", "gltf", "glb" }); if (!validFormats.Contains(exportParameters.outputFormat)) { Autodesk.Max.GlobalInterface.Instance.TheListener.EditStream.Printf("ERROR - Valid output formats are: " + validFormats.ToArray().ToString(true) + "\n"); return; } BabylonExporter exporter = new BabylonExporter(); // Init log system exporter.OnWarning += (warning, rank) => { Autodesk.Max.GlobalInterface.Instance.TheListener.EditStream.Printf(warning + "\n"); }; exporter.OnError += (error, rank) => { Autodesk.Max.GlobalInterface.Instance.TheListener.EditStream.Printf(error + "\n"); }; exporter.OnMessage += (message, color, rank, emphasis) => { // TODO - Add a log level parameter (Error, Warning, Message, Verbose) if (rank < 1) { Autodesk.Max.GlobalInterface.Instance.TheListener.EditStream.Printf(message + "\n"); } }; // Start export exporter.Export(exportParameters); }
private async void butExport_Click(object sender, EventArgs e) { Kernel.Scene.RootNode.SetLocalData(txtFilename.Text); var exporter = new BabylonExporter(); TreeNode currentNode = null; TreeNode previousNode = null; treeView.Nodes.Clear(); exporter.OnImportProgressChanged += progress => Invoke(new Action(() => { progressBar.Value = progress; })); exporter.OnWarning += (warning, asChild) => Invoke(new Action(() => { previousNode = new TreeNode(warning) { ForeColor = Color.Orange }; currentNode = CreateTreeNode(asChild, currentNode, previousNode); previousNode.EnsureVisible(); })); exporter.OnError += (error, asChild) => Invoke(new Action(() => { previousNode = new TreeNode(error) { ForeColor = Color.Red }; currentNode = CreateTreeNode(asChild, currentNode, previousNode); previousNode.EnsureVisible(); })); exporter.OnMessage += (message, asChild, emphasis, embed) => Invoke(new Action(() => { var oldPrevious = previousNode; previousNode = new TreeNode(message); if (emphasis) { previousNode.ForeColor = Color.Green; } currentNode = CreateTreeNode(asChild || embed, embed ? oldPrevious : currentNode, previousNode); if (emphasis) { previousNode.EnsureVisible(); } })); await Task.Run(() => exporter.Export(txtFilename.Text)); }
private async Task <bool> DoExport(ExportItem exportItem, bool multiExport = false) { new BabylonAnimationActionItem().Close(); exporter = new BabylonExporter(logger); butExport.Enabled = false; butCancel.Enabled = true; bool success = true; try { string modelAbsolutePath = multiExport ? exportItem.ExportFilePathAbsolute : txtModelPath.Text; string textureExportPath = multiExport ? exportItem.ExportTexturesesFolderAbsolute : txtTexturesPath.Text; exportParameters.outputPath = modelAbsolutePath; exportParameters.textureFolder = textureExportPath; exportParameters.exportNode = exportItem?.Node; exportParameters.exportLayers = exportItem?.Layers; exportParameters.useMultiExporter = multiExport; exporter.callerForm = this; exporter.Export(exportParameters); } catch (OperationCanceledException) { progressBar.Value = 0; success = false;; } catch (Exception ex) { IUTF8Str operationStatus = GlobalInterface.Instance.UTF8Str.Create("BabylonExportAborted"); Loader.Global.BroadcastNotification(SystemNotificationCode.PreExport, operationStatus); currentNode = CreateTreeNode(0, "Export cancelled: " + ex.Message, Color.Red); currentNode = CreateTreeNode(1, ex.ToString(), Color.Red); currentNode.EnsureVisible(); progressBar.Value = 0; success = false; } butCancel.Enabled = false; butExport.Enabled = true; BringToFront(); return(success); }
public static void Export(MaxExportParameters exportParameters, ILoggingProvider _logger) { if (Loader.Class_ID == null) { Loader.AssemblyMain(); } // Check output format is valid List <string> validFormats = new List <string>(new string[] { "babylon", "binary babylon", "gltf", "glb" }); if (!validFormats.Contains(exportParameters.outputFormat)) { Autodesk.Max.GlobalInterface.Instance.TheListener.EditStream.Printf("ERROR - Valid output formats are: " + validFormats.ToArray().ToString(true) + "\n"); return; } BabylonExporter exporter = new BabylonExporter(_logger); // Start export exporter.Export(exportParameters); }
public static void Export(MaxExportParameters exportParameters, bool logInListener) { if (Loader.Class_ID == null) { Loader.AssemblyMain(); } // Check output format is valid List <string> validFormats = new List <string>(new string[] { "babylon", "binary babylon", "gltf", "glb" }); if (!validFormats.Contains(exportParameters.outputFormat)) { Autodesk.Max.GlobalInterface.Instance.TheListener.EditStream.Printf("ERROR - Valid output formats are: " + validFormats.ToArray().ToString(true) + "\n"); return; } BabylonExporter exporter = new BabylonExporter(); if (logInListener) { // Init log system exporter.OnWarning += (warning, rank) => { Autodesk.Max.GlobalInterface.Instance.TheListener.EditStream.Printf(warning + "\n"); }; exporter.OnError += (error, rank) => { Autodesk.Max.GlobalInterface.Instance.TheListener.EditStream.Printf(error + "\n"); }; exporter.OnMessage += (message, color, rank, emphasis) => { Autodesk.Max.GlobalInterface.Instance.TheListener.EditStream.Printf(message + "\n"); }; exporter.OnVerbose += (message, color, rank, emphasis) => { Autodesk.Max.GlobalInterface.Instance.TheListener.EditStream.Printf(message + "\n"); }; } // Start export exporter.Export(exportParameters); }
private void AddCallbacks() { // Retreive the material just created string cmd = "maxMaterial = callbacks.notificationParam();"; // Easy syntax for a switch/case expression cmd += "\r\n" + "if classof maxMaterial == StandardMaterial then"; cmd += "\r\n" + "("; cmd += "\r\n" + BabylonExporter.GetStandardBabylonAttributesDataCA(); cmd += "\r\n" + "custAttributes.add maxMaterial babylonAttributesDataCA;"; cmd += "\r\n" + ")"; cmd += "\r\n" + "else if classof maxMaterial == PhysicalMaterial then"; cmd += "\r\n" + "("; cmd += "\r\n" + BabylonExporter.GetPhysicalBabylonAttributesDataCA(); cmd += "\r\n" + "custAttributes.add maxMaterial babylonAttributesDataCA;"; cmd += "\r\n" + ")"; cmd += "\r\n" + "else if classof maxMaterial == ai_standard_surface then"; cmd += "\r\n" + "("; cmd += "\r\n" + BabylonExporter.GetAiStandardSurfaceBabylonAttributesDataCA(); cmd += "\r\n" + "custAttributes.add maxMaterial babylonAttributesDataCA;"; cmd += "\r\n" + ")"; // Escape cmd cmd = cmd.Replace("\"", "\\\""); // Create cmd as string ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand("cmd = \"" + cmd + "\""); // Remove any definition of this callback ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand("callbacks.removeScripts id:#BabylonAttributesMaterial;"); // Add a callback triggered when a new material is created // Note: // The callback is NOT persistent (default value is false). // This means that it is not linked to a specific file. // Rather, the callback is active for the current run of 3ds Max. // See Autodesk documentation for more info: http://help.autodesk.com/view/3DSMAX/2015/ENU/?guid=__files_GUID_C1F6495F_5831_4FC8_A00C_667C5F2EAE36_htm ManagedServices.MaxscriptSDK.ExecuteMaxscriptCommand("callbacks.addScript #mtlRefAdded cmd id:#BabylonAttributesMaterial;"); }
private async Task <bool> DoExport() { Tools.UpdateCheckBox(chkManifest, Loader.Core.RootNode, "babylonjs_generatemanifest"); Tools.UpdateCheckBox(chkCopyTextures, Loader.Core.RootNode, "babylonjs_copytextures"); Tools.UpdateCheckBox(chkHidden, Loader.Core.RootNode, "babylonjs_exporthidden"); Tools.UpdateCheckBox(chkAutoSave, Loader.Core.RootNode, "babylonjs_autosave"); Tools.UpdateCheckBox(chkOnlySelected, Loader.Core.RootNode, "babylonjs_onlySelected"); Tools.UpdateComboBox(comboOutputFormat, Loader.Core.RootNode, "babylonjs_outputFormat"); Loader.Core.RootNode.SetLocalData(txtFilename.Text); exporter = new BabylonExporter(); treeView.Nodes.Clear(); exporter.OnImportProgressChanged += progress => { progressBar.Value = progress; Application.DoEvents(); }; exporter.OnWarning += (warning, rank) => { try { currentNode = CreateTreeNode(rank, warning, Color.DarkOrange); currentNode.EnsureVisible(); } catch { } Application.DoEvents(); }; exporter.OnError += (error, rank) => { try { currentNode = CreateTreeNode(rank, error, Color.Red); currentNode.EnsureVisible(); } catch { } Application.DoEvents(); }; exporter.OnMessage += (message, color, rank, emphasis) => { try { currentNode = CreateTreeNode(rank, message, color); if (emphasis) { currentNode.EnsureVisible(); } } catch { } Application.DoEvents(); }; butExport.Enabled = false; butExportAndRun.Enabled = false; butCancel.Enabled = true; bool success = true; try { ExportParameters exportParameters = new ExportParameters(); exportParameters.outputPath = txtFilename.Text; exportParameters.outputFormat = comboOutputFormat.SelectedItem.ToString(); exportParameters.scaleFactor = txtScaleFactor.Text; exportParameters.copyTexturesToOutput = chkCopyTextures.Checked; exportParameters.exportHiddenObjects = chkHidden.Checked; exportParameters.exportOnlySelected = chkOnlySelected.Checked; exportParameters.generateManifest = chkManifest.Checked; exportParameters.autoSave3dsMaxFile = chkAutoSave.Checked; exporter.callerForm = this; exporter.Export(exportParameters); } catch (OperationCanceledException) { progressBar.Value = 0; success = false; } catch (Exception ex) { currentNode = CreateTreeNode(0, "Exportation cancelled: " + ex.Message, Color.Red); currentNode.EnsureVisible(); progressBar.Value = 0; success = false; } butCancel.Enabled = false; butExport.Enabled = true; butExportAndRun.Enabled = WebServer.IsSupported; BringToFront(); return(success); }
private async Task<bool> DoExport() { Tools.UpdateCheckBox(chkManifest, Loader.Core.RootNode, "babylonjs_generatemanifest"); Tools.UpdateCheckBox(chkCopyTextures, Loader.Core.RootNode, "babylonjs_copytextures"); Tools.UpdateCheckBox(chkHidden, Loader.Core.RootNode, "babylonjs_exporthidden"); Tools.UpdateCheckBox(chkAutoSave, Loader.Core.RootNode, "babylonjs_autosave"); Loader.Core.RootNode.SetLocalData(txtFilename.Text); exporter = new BabylonExporter(); treeView.Nodes.Clear(); exporter.OnImportProgressChanged += progress => { progressBar.Value = progress; Application.DoEvents(); }; exporter.OnWarning += (warning, rank) => { try { currentNode = CreateTreeNode(rank, warning, Color.DarkOrange); currentNode.EnsureVisible(); } catch { } Application.DoEvents(); }; exporter.OnError += (error, rank) => { try { currentNode = CreateTreeNode(rank, error, Color.Red); currentNode.EnsureVisible(); } catch { } Application.DoEvents(); }; exporter.OnMessage += (message, color, rank, emphasis) => { try { currentNode = CreateTreeNode(rank, message, color); if (emphasis) { currentNode.EnsureVisible(); } } catch { } Application.DoEvents(); }; butExport.Enabled = false; butExportAndRun.Enabled = false; butCancel.Enabled = true; bool success = true; try { exporter.AutoSave3dsMaxFile = chkAutoSave.Checked; exporter.ExportHiddenObjects = chkHidden.Checked; exporter.CopyTexturesToOutput = chkCopyTextures.Checked; await exporter.ExportAsync(txtFilename.Text, chkManifest.Checked, this); } catch (OperationCanceledException) { progressBar.Value = 0; success = false; } catch (Exception ex) { currentNode = CreateTreeNode(0, "Exportation cancelled: " + ex.Message, Color.Red); currentNode.EnsureVisible(); progressBar.Value = 0; success = false; } butCancel.Enabled = false; butExport.Enabled = true; butExportAndRun.Enabled = WebServer.IsSupported; BringToFront(); return success; }
private async Task <bool> DoExport(ExportItem exportItem, bool multiExport = false, bool clearLogs = true) { new BabylonAnimationActionItem().Close(); SaveOptions(); //store layer visibility status and force visibility on Dictionary <IILayer, bool> layerState = new Dictionary <IILayer, bool>(); if (exportItem.Layers != null) { foreach (IILayer layer in exportItem.Layers) { List <IILayer> treeLayers = layer.LayerTree().ToList(); treeLayers.Add(layer); foreach (IILayer l in treeLayers) { #if MAX2015 layerState.Add(l, l.IsHidden); #else layerState.Add(l, l.IsHidden(false)); #endif l.Hide(false, false); } } } exporter = new BabylonExporter(); if (clearLogs) { treeView.Nodes.Clear(); } exporter.OnExportProgressChanged += progress => { progressBar.Value = progress; Application.DoEvents(); }; exporter.OnWarning += (warning, rank) => CreateWarningMessage(warning, rank); exporter.OnError += (error, rank) => CreateErrorMessage(error, rank); exporter.OnMessage += (message, color, rank, emphasis) => CreateMessage(message, color, rank, emphasis); exporter.OnVerbose += (message, color, rank, emphasis) => { try { currentNode = CreateTreeNode(rank, message, color); if (emphasis) { currentNode.EnsureVisible(); } } catch { //do nothing } Application.DoEvents(); }; butExport.Enabled = false; butExportAndRun.Enabled = false; butMultiExport.Enabled = false; butCancel.Enabled = true; bool success = true; try { string modelAbsolutePath = multiExport ? exportItem.ExportFilePathAbsolute : txtModelPath.Text; string textureExportPath = multiExport ? exportItem.ExportTexturesesFolderAbsolute : txtTexturesPath.Text; var scaleFactorParsed = 1.0f; var textureQualityParsed = 100L; try { scaleFactorParsed = float.Parse(txtScaleFactor.Text); } catch (Exception e) { throw new InvalidDataException(String.Format("Invalid Scale Factor value: {0}", txtScaleFactor.Text)); } try { textureQualityParsed = long.Parse(txtQuality.Text); } catch (Exception e) { throw new InvalidDataException(String.Format("Invalid Texture Quality value: {0}", txtScaleFactor.Text)); } MaxExportParameters exportParameters = new MaxExportParameters { outputPath = modelAbsolutePath, textureFolder = textureExportPath, outputFormat = comboOutputFormat.SelectedItem.ToString(), scaleFactor = scaleFactorParsed, writeTextures = chkWriteTextures.Enabled && chkWriteTextures.Checked, overwriteTextures = chkOverwriteTextures.Enabled && chkOverwriteTextures.Checked, exportHiddenObjects = chkHidden.Checked, exportOnlySelected = chkOnlySelected.Checked, generateManifest = chkManifest.Checked, autoSaveSceneFile = chkAutoSave.Checked, exportTangents = chkExportTangents.Checked, exportMorphTangents = chkExportMorphTangents.Checked, exportMorphNormals = chkExportMorphNormals.Checked, txtQuality = textureQualityParsed, mergeAOwithMR = chkMergeAOwithMR.Enabled && chkMergeAOwithMR.Checked, bakeAnimationType = (BakeAnimationType)cmbBakeAnimationOptions.SelectedIndex, dracoCompression = chkDracoCompression.Enabled && chkDracoCompression.Checked, enableKHRLightsPunctual = chkKHRLightsPunctual.Checked, enableKHRTextureTransform = chkKHRTextureTransform.Checked, enableKHRMaterialsUnlit = chkKHRMaterialsUnlit.Checked, exportMaterials = chkExportMaterials.Enabled && chkExportMaterials.Checked, exportAnimations = chkExportAnimations.Checked, exportAnimationsOnly = chkExportAnimationsOnly.Checked, optimizeAnimations = !chkDoNotOptimizeAnimations.Checked, animgroupExportNonAnimated = chkAnimgroupExportNonAnimated.Checked, exportNode = exportItem?.Node, exportLayers = exportItem?.Layers, pbrNoLight = chkNoAutoLight.Checked, pbrFull = chkFullPBR.Checked, pbrEnvironment = txtEnvironmentName.Text, usePreExportProcess = chkUsePreExportProces.Checked, flattenScene = chkFlatten.Enabled && chkFlatten.Checked, mergeContainersAndXRef = chkMrgContainersAndXref.Checked, useMultiExporter = multiExport }; exporter.callerForm = this; exporter.Export(exportParameters); } catch (OperationCanceledException) { progressBar.Value = 0; success = false; ScriptsUtilities.ExecuteMaxScriptCommand(@"global BabylonExporterStatus = ""Available"""); } catch (Exception ex) { IUTF8Str operationStatus = GlobalInterface.Instance.UTF8Str.Create("BabylonExportAborted"); Loader.Global.BroadcastNotification(SystemNotificationCode.PreExport, operationStatus); currentNode = CreateTreeNode(0, "Export cancelled: " + ex.Message, Color.Red); currentNode = CreateTreeNode(1, ex.ToString(), Color.Red); currentNode.EnsureVisible(); progressBar.Value = 0; success = false; ScriptsUtilities.ExecuteMaxScriptCommand(@"global BabylonExporterStatus = Available"); } butCancel.Enabled = false; butExport.Enabled = true; butMultiExport.Enabled = true; butExportAndRun.Enabled = WebServer.IsSupported; BringToFront(); //re-store layer visibility status if (exportItem.Layers != null) { foreach (IILayer layer in exportItem.Layers) { List <IILayer> treeLayers = layer.LayerTree().ToList(); treeLayers.Add(layer); foreach (IILayer l in treeLayers) { bool exist; layerState.TryGetValue(l, out exist); if (exist) { l.Hide(layerState[l], false); } } } } return(success); }
private async Task <bool> DoExport(ExportItem exportItem, bool multiExport = false, bool clearLogs = true) { SaveOptions(); exporter = new BabylonExporter(); if (clearLogs) { treeView.Nodes.Clear(); } exporter.OnImportProgressChanged += progress => { progressBar.Value = progress; Application.DoEvents(); }; exporter.OnWarning += (warning, rank) => { try { currentNode = CreateTreeNode(rank, warning, Color.DarkOrange); currentNode.EnsureVisible(); } catch { } Application.DoEvents(); }; exporter.OnError += (error, rank) => { try { currentNode = CreateTreeNode(rank, error, Color.Red); currentNode.EnsureVisible(); } catch { } Application.DoEvents(); }; exporter.OnMessage += (message, color, rank, emphasis) => { try { currentNode = CreateTreeNode(rank, message, color); if (emphasis) { currentNode.EnsureVisible(); } } catch { } Application.DoEvents(); }; butExport.Enabled = false; butExportAndRun.Enabled = false; butMultiExport.Enabled = false; butCancel.Enabled = true; bool success = true; try { string modelAbsolutePath = multiExport ? exportItem.ExportFilePathAbsolute : txtModelName.Text; string textureExportPath = multiExport ? exportItem.ExportTexturesesFolderPath : txtTextureName.Text; MaxExportParameters exportParameters = new MaxExportParameters { outputPath = modelAbsolutePath, textureFolder = textureExportPath, outputFormat = comboOutputFormat.SelectedItem.ToString(), scaleFactor = float.Parse(txtScaleFactor.Text), writeTextures = chkWriteTextures.Checked, overwriteTextures = chkOverwriteTextures.Checked, exportHiddenObjects = chkHidden.Checked, exportOnlySelected = chkOnlySelected.Checked, generateManifest = chkManifest.Checked, autoSaveSceneFile = chkAutoSave.Checked, exportTangents = chkExportTangents.Checked, exportMorphTangents = chkExportMorphTangents.Checked, exportMorphNormals = chkExportMorphNormals.Checked, txtQuality = long.Parse(txtQuality.Text), mergeAOwithMR = chkMergeAOwithMR.Checked, dracoCompression = chkDracoCompression.Checked, enableKHRLightsPunctual = chkKHRLightsPunctual.Checked, enableKHRTextureTransform = chkKHRTextureTransform.Checked, enableKHRMaterialsUnlit = chkKHRMaterialsUnlit.Checked, exportMaterials = chkExportMaterials.Checked, optimizeAnimations = !chkDoNotOptimizeAnimations.Checked, animgroupExportNonAnimated = chkAnimgroupExportNonAnimated.Checked, exportNode = exportItem != null ? exportItem.Node : null, pbrNoLight = chkNoAutoLight.Checked, pbrFull = chkFullPBR.Checked, pbrEnvironment = txtEnvironmentName.Text, usePreExportProcess = chkUsePreExportProces.Checked, flattenScene = chkFlatten.Checked, mergeInheritedContainers = chkMrgInheritedContainers.Checked }; exporter.callerForm = this; exporter.Export(exportParameters); } catch (OperationCanceledException) { progressBar.Value = 0; success = false; } catch (Exception ex) { IUTF8Str operationStatus = GlobalInterface.Instance.UTF8Str.Create("BabylonExportAborted"); Loader.Global.BroadcastNotification(SystemNotificationCode.PreExport, operationStatus); currentNode = CreateTreeNode(0, "Export cancelled: " + ex.Message, Color.Red); currentNode = CreateTreeNode(1, ex.ToString(), Color.Red); currentNode.EnsureVisible(); progressBar.Value = 0; success = false; } butCancel.Enabled = false; butExport.Enabled = true; butMultiExport.Enabled = true; butExportAndRun.Enabled = WebServer.IsSupported; BringToFront(); return(success); }
private async Task <bool> DoExport(ExportItem exportItem, bool multiExport = false, bool clearLogs = true) { new BabylonAnimationActionItem().Close(); SaveOptions(); if (multiExport) { ShowExportItemLayers(exportItem.Layers); } exporter = new BabylonExporter(); if (clearLogs) { treeView.Nodes.Clear(); } exporter.OnExportProgressChanged += progress => { progressBar.Value = progress; Application.DoEvents(); }; exporter.OnWarning += (warning, rank) => CreateWarningMessage(warning, rank); exporter.OnError += (error, rank) => CreateErrorMessage(error, rank); exporter.OnMessage += (message, color, rank, emphasis) => CreateMessage(message, color, rank, emphasis); exporter.OnVerbose += (message, color, rank, emphasis) => CreateMessage(message, color, rank, emphasis); exporter.OnPrint += (message, color, rank, emphasis) => CreateMessage(message, color, rank, emphasis); butExport.Enabled = false; butExportAndRun.Enabled = false; butMultiExport.Enabled = false; butCancel.Enabled = true; bool success = true; try { string modelAbsolutePath = multiExport ? exportItem.ExportFilePathAbsolute : txtModelPath.Text; string textureExportPath = multiExport ? exportItem.ExportTexturesesFolderAbsolute : txtTexturesPath.Text; var scaleFactorParsed = 1.0f; var textureQualityParsed = 100L; try { scaleFactorParsed = float.Parse(txtScaleFactor.Text); } catch (Exception e) { throw new InvalidDataException(String.Format("Invalid Scale Factor value: {0}", txtScaleFactor.Text)); } try { textureQualityParsed = long.Parse(txtQuality.Text); } catch (Exception e) { throw new InvalidDataException(String.Format("Invalid Texture Quality value: {0}", txtScaleFactor.Text)); } MaxExportParameters exportParameters = new MaxExportParameters { outputPath = modelAbsolutePath, textureFolder = textureExportPath, outputFormat = comboOutputFormat.SelectedItem.ToString(), scaleFactor = scaleFactorParsed, writeTextures = chkWriteTextures.Enabled && chkWriteTextures.Checked, overwriteTextures = chkOverwriteTextures.Enabled && chkOverwriteTextures.Checked, exportHiddenObjects = chkHidden.Checked, exportOnlySelected = chkOnlySelected.Checked, generateManifest = chkManifest.Checked, autoSaveSceneFile = chkAutoSave.Checked, exportTangents = chkExportTangents.Checked, exportMorphTangents = chkExportMorphTangents.Checked, exportMorphNormals = chkExportMorphNormals.Checked, txtQuality = textureQualityParsed, mergeAOwithMR = chkMergeAOwithMR.Enabled && chkMergeAOwithMR.Checked, bakeAnimationType = (BakeAnimationType)cmbBakeAnimationOptions.SelectedIndex, logLevel = (LogLevel)logLevelcmb.SelectedIndex, dracoCompression = chkDracoCompression.Enabled && chkDracoCompression.Checked, enableKHRLightsPunctual = chkKHRLightsPunctual.Checked, enableKHRTextureTransform = chkKHRTextureTransform.Checked, enableKHRMaterialsUnlit = chkKHRMaterialsUnlit.Checked, exportMaterials = chkExportMaterials.Enabled && chkExportMaterials.Checked, animationExportType = (AnimationExportType)cmbExportAnimationType.SelectedIndex, enableASBAnimationRetargeting = chkASBAnimationRetargeting.Checked, optimizeAnimations = !chkDoNotOptimizeAnimations.Checked, animgroupExportNonAnimated = chkAnimgroupExportNonAnimated.Checked, exportNode = exportItem?.Node, exportLayers = exportItem?.Layers, pbrNoLight = chkNoAutoLight.Checked, pbrFull = chkFullPBR.Checked, pbrEnvironment = txtEnvironmentName.Text, usePreExportProcess = chkUsePreExportProces.Checked, flattenScene = chkFlatten.Enabled && chkFlatten.Checked, mergeContainersAndXRef = chkMrgContainersAndXref.Checked, useMultiExporter = multiExport, tangentSpaceConvention = (TangentSpaceConvention)cmbNormalMapConvention.SelectedIndex, removeLodPrefix = chk_RemoveLodPrefix.Checked, removeNamespaces = chkRemoveNamespace.Checked, srcTextureExtension = txtSrcTextureExt.Text, dstTextureExtension = txtDstTextureExt.Text }; exporter.callerForm = this; exporter.Export(exportParameters); } catch (OperationCanceledException) { progressBar.Value = 0; success = false; ScriptsUtilities.ExecuteMaxScriptCommand(@"global BabylonExporterStatus = ""Available"""); } catch (Exception ex) { IUTF8Str operationStatus = GlobalInterface.Instance.UTF8Str.Create("BabylonExportAborted"); Loader.Global.BroadcastNotification(SystemNotificationCode.PreExport, operationStatus); currentNode = CreateTreeNode(0, "Export cancelled: " + ex.Message, Color.Red); currentNode = CreateTreeNode(1, ex.ToString(), Color.Red); currentNode.EnsureVisible(); progressBar.Value = 0; success = false; ScriptsUtilities.ExecuteMaxScriptCommand(@"global BabylonExporterStatus = Available"); } butCancel.Enabled = false; butExport.Enabled = true; butMultiExport.Enabled = true; butExportAndRun.Enabled = WebServer.IsSupported; BringToFront(); return(success); }
private void butExport_Click(object sender, EventArgs e) { Kernel.Scene.RootNode.SetLocalData(txtFilename.Text); exporter = new BabylonExporter(); TreeNode currentNode = null; TreeNode previousNode = null; treeView.Nodes.Clear(); exporter.OnImportProgressChanged += progress => { progressBar.Value = progress; Application.DoEvents(); }; exporter.OnWarning += (warning, asChild) => { previousNode = new TreeNode(warning) { ForeColor = Color.Orange }; currentNode = CreateTreeNode(asChild, currentNode, previousNode); previousNode.EnsureVisible(); Application.DoEvents(); }; exporter.OnError += (error, asChild) => { previousNode = new TreeNode(error) { ForeColor = Color.Red }; currentNode = CreateTreeNode(asChild, currentNode, previousNode); previousNode.EnsureVisible(); Application.DoEvents(); }; exporter.OnMessage += (message, asChild, emphasis, embed, color) => { var oldPrevious = previousNode; previousNode = new TreeNode(message) {ForeColor = color}; if (emphasis) { previousNode.ForeColor = Color.Green; } currentNode = CreateTreeNode(asChild || embed, embed ? oldPrevious : currentNode, previousNode); if (emphasis) { previousNode.EnsureVisible(); } Application.DoEvents(); }; butExport.Enabled = false; butCancel.Enabled = true; try { exporter.Export(txtFilename.Text); } catch (OperationCanceledException) { progressBar.Value = 0; } catch (Exception ex) { previousNode = new TreeNode("Exportation cancelled: " + ex.Message) { ForeColor = Color.Red }; currentNode = CreateTreeNode(false, currentNode, previousNode); previousNode.EnsureVisible(); progressBar.Value = 0; } butCancel.Enabled = false; butExport.Enabled = true; }
private async Task <bool> DoExport() { Tools.UpdateCheckBox(chkManifest, Loader.Core.RootNode, "babylonjs_generatemanifest"); Tools.UpdateCheckBox(chkWriteTextures, Loader.Core.RootNode, "babylonjs_writetextures"); Tools.UpdateCheckBox(chkOverwriteTextures, Loader.Core.RootNode, "babylonjs_overwritetextures"); Tools.UpdateCheckBox(chkHidden, Loader.Core.RootNode, "babylonjs_exporthidden"); Tools.UpdateCheckBox(chkAutoSave, Loader.Core.RootNode, "babylonjs_autosave"); Tools.UpdateCheckBox(chkOnlySelected, Loader.Core.RootNode, "babylonjs_onlySelected"); Tools.UpdateCheckBox(chkExportTangents, Loader.Core.RootNode, "babylonjs_exporttangents"); Tools.UpdateComboBox(comboOutputFormat, Loader.Core.RootNode, "babylonjs_outputFormat"); Tools.UpdateTextBox(txtScaleFactor, Loader.Core.RootNode, "babylonjs_txtScaleFactor"); Tools.UpdateTextBox(txtQuality, Loader.Core.RootNode, "babylonjs_txtCompression"); Tools.UpdateCheckBox(chkMergeAOwithMR, Loader.Core.RootNode, "babylonjs_mergeAOwithMR"); Tools.UpdateCheckBox(chkDracoCompression, Loader.Core.RootNode, "babylonjs_dracoCompression"); Tools.UpdateCheckBox(chkKHRTextureTransform, Loader.Core.RootNode, "babylonjs_khrTextureTransform"); Tools.UpdateCheckBox(chkKHRLightsPunctual, Loader.Core.RootNode, "babylonjs_khrLightsPunctual"); Tools.UpdateCheckBox(chkKHRMaterialsUnlit, Loader.Core.RootNode, "babylonjs_khr_materials_unlit"); Tools.UpdateCheckBox(chkExportMaterials, Loader.Core.RootNode, "babylonjs_export_materials"); Loader.Core.RootNode.SetLocalData(txtFilename.Text); exporter = new BabylonExporter(); treeView.Nodes.Clear(); exporter.OnImportProgressChanged += progress => { progressBar.Value = progress; Application.DoEvents(); }; exporter.OnWarning += (warning, rank) => { try { currentNode = CreateTreeNode(rank, warning, Color.DarkOrange); currentNode.EnsureVisible(); } catch { } Application.DoEvents(); }; exporter.OnError += (error, rank) => { try { currentNode = CreateTreeNode(rank, error, Color.Red); currentNode.EnsureVisible(); } catch { } Application.DoEvents(); }; exporter.OnMessage += (message, color, rank, emphasis) => { try { currentNode = CreateTreeNode(rank, message, color); if (emphasis) { currentNode.EnsureVisible(); } } catch { } Application.DoEvents(); }; butExport.Enabled = false; butExportAndRun.Enabled = false; butCancel.Enabled = true; bool success = true; try { ExportParameters exportParameters = new ExportParameters { outputPath = txtFilename.Text, outputFormat = comboOutputFormat.SelectedItem.ToString(), scaleFactor = txtScaleFactor.Text, writeTextures = chkWriteTextures.Checked, overwriteTextures = chkOverwriteTextures.Checked, exportHiddenObjects = chkHidden.Checked, exportOnlySelected = chkOnlySelected.Checked, generateManifest = chkManifest.Checked, autoSave3dsMaxFile = chkAutoSave.Checked, exportTangents = chkExportTangents.Checked, txtQuality = txtQuality.Text, mergeAOwithMR = chkMergeAOwithMR.Checked, dracoCompression = chkDracoCompression.Checked, enableKHRLightsPunctual = chkKHRLightsPunctual.Checked, enableKHRTextureTransform = chkKHRTextureTransform.Checked, enableKHRMaterialsUnlit = chkKHRMaterialsUnlit.Checked, exportMaterials = chkExportMaterials.Checked }; exporter.callerForm = this; exporter.Export(exportParameters); } catch (OperationCanceledException) { progressBar.Value = 0; success = false; } catch (Exception ex) { currentNode = CreateTreeNode(0, "Exportation cancelled: " + ex.Message, Color.Red); currentNode = CreateTreeNode(1, ex.ToString(), Color.Red); currentNode.EnsureVisible(); progressBar.Value = 0; success = false; } butCancel.Enabled = false; butExport.Enabled = true; butExportAndRun.Enabled = WebServer.IsSupported; BringToFront(); return(success); }
private async void butExport_Click(object sender, EventArgs e) { Kernel.Scene.RootNode.SetLocalData(txtFilename.Text); var exporter = new BabylonExporter(); TreeNode currentNode = null; TreeNode previousNode = null; treeView.Nodes.Clear(); exporter.OnImportProgressChanged += progress => Invoke(new Action(() => { progressBar.Value = progress; })); exporter.OnWarning += (warning, asChild) => Invoke(new Action(() => { previousNode = new TreeNode(warning) { ForeColor = Color.Orange }; currentNode = CreateTreeNode(asChild, currentNode, previousNode); previousNode.EnsureVisible(); })); exporter.OnError += (error, asChild) => Invoke(new Action(() => { previousNode = new TreeNode(error) { ForeColor = Color.Red }; currentNode = CreateTreeNode(asChild, currentNode, previousNode); previousNode.EnsureVisible(); })); exporter.OnMessage += (message, asChild, emphasis, embed) => Invoke(new Action(() => { var oldPrevious = previousNode; previousNode = new TreeNode(message); if (emphasis) { previousNode.ForeColor = Color.Green; } currentNode = CreateTreeNode(asChild || embed, embed ? oldPrevious : currentNode, previousNode); if (emphasis) { previousNode.EnsureVisible(); } })); butExport.Enabled = false; butCancel.Enabled = true; cancellationToken = new CancellationTokenSource(); var token = cancellationToken.Token; try { await Task.Run(() => exporter.Export(txtFilename.Text, token), token); } catch { previousNode = new TreeNode("Exportation cancelled") { ForeColor = Color.Red }; currentNode = CreateTreeNode(false, currentNode, previousNode); previousNode.EnsureVisible(); progressBar.Value = 0; } butCancel.Enabled = false; butExport.Enabled = true; }