private async Task <bool> DoExport(ExportItem exportItem, bool multiExport = false, bool clearLogs = true) { SaveOptions(); exporter = new BabylonExporter(); if (!string.IsNullOrWhiteSpace(txtTextureName.Text)) { exporter.relativeTextureFolder = Tools.GetPathRelativeToModel(Tools.UnformatPath(txtTextureName.Text), Tools.UnformatPath(txtModelName.Text)); } 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 : Tools.UnformatPath(txtModelName.Text); ExportParameters exportParameters = new ExportParameters { outputPath = Tools.UnformatPath(txtModelName.Text), textureFolder = Tools.UnformatPath(txtTextureName.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, exportNode = exportItem != null ? exportItem.Node : null, pbrNoLight = chkNoAutoLight.Checked, pbrFull = chkFullPBR.Checked, pbrEnvironment = txtEnvironmentName.Text }; 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); }