private void SaveOptions() { 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"); string unformattedPath = Tools.UnformatPath(txtModelName.Text); Loader.Core.RootNode.SetStringProperty(ExportParameters.ModelFilePathProperty, Tools.RelativePathStore(unformattedPath)); string unformattedTextureFolderPath = Tools.UnformatPath(txtTextureName.Text); Loader.Core.RootNode.SetStringProperty(ExportParameters.TextureFolderPathProperty, Tools.RelativePathStore(unformattedTextureFolderPath)); Tools.UpdateCheckBox(chkFullPBR, Loader.Core.RootNode, ExportParameters.PBRFullPropertyName); Tools.UpdateCheckBox(chkNoAutoLight, Loader.Core.RootNode, ExportParameters.PBRNoLightPropertyName); string unformattedEnvironmentPath = Tools.UnformatPath(txtEnvironmentName.Text); Loader.Core.RootNode.SetStringProperty(ExportParameters.PBREnvironmentPathPropertyName, Tools.RelativePathStore(unformattedEnvironmentPath)); }
private void ExporterForm_Load(object sender, EventArgs e) { string userRelativePath = Tools.ResolveRelativePath(Loader.Core.RootNode.GetLocalData()); txtFilename.Text = userRelativePath; singleExportItem = new ExportItem(Tools.UnformatPath(txtFilename.Text)); Tools.PrepareCheckBox(chkManifest, Loader.Core.RootNode, "babylonjs_generatemanifest"); Tools.PrepareCheckBox(chkWriteTextures, Loader.Core.RootNode, "babylonjs_writetextures", 1); Tools.PrepareCheckBox(chkOverwriteTextures, Loader.Core.RootNode, "babylonjs_overwritetextures", 1); Tools.PrepareCheckBox(chkHidden, Loader.Core.RootNode, "babylonjs_exporthidden"); Tools.PrepareCheckBox(chkAutoSave, Loader.Core.RootNode, "babylonjs_autosave", 1); Tools.PrepareCheckBox(chkOnlySelected, Loader.Core.RootNode, "babylonjs_onlySelected"); Tools.PrepareCheckBox(chkExportTangents, Loader.Core.RootNode, "babylonjs_exporttangents"); Tools.PrepareComboBox(comboOutputFormat, Loader.Core.RootNode, "babylonjs_outputFormat", "babylon"); Tools.PrepareTextBox(txtScaleFactor, Loader.Core.RootNode, "babylonjs_txtScaleFactor", "1"); Tools.PrepareTextBox(txtQuality, Loader.Core.RootNode, "babylonjs_txtCompression", "100"); Tools.PrepareCheckBox(chkMergeAOwithMR, Loader.Core.RootNode, "babylonjs_mergeAOwithMR", 1); Tools.PrepareCheckBox(chkDracoCompression, Loader.Core.RootNode, "babylonjs_dracoCompression", 0); Tools.PrepareCheckBox(chkKHRLightsPunctual, Loader.Core.RootNode, "babylonjs_khrLightsPunctual"); Tools.PrepareCheckBox(chkKHRTextureTransform, Loader.Core.RootNode, "babylonjs_khrTextureTransform"); Tools.PrepareCheckBox(chkKHRMaterialsUnlit, Loader.Core.RootNode, "babylonjs_khr_materials_unlit"); Tools.PrepareCheckBox(chkExportMaterials, Loader.Core.RootNode, "babylonjs_export_materials", 1); if (comboOutputFormat.SelectedText == "babylon" || comboOutputFormat.SelectedText == "binary babylon" || !gltfPipelineInstalled) { chkDracoCompression.Checked = false; chkDracoCompression.Enabled = false; } }
public static void Export() { string storedModelPath = Loader.Core.RootNode.GetStringProperty(ExportParameters.ModelFilePathProperty, string.Empty); string userRelativePath = Tools.ResolveRelativePath(storedModelPath); string absoluteModelPath = Tools.UnformatPath(userRelativePath); Export(InitParameters(absoluteModelPath)); }
private async void butExportAndRun_Click(object sender, EventArgs e) { if (await DoExport(singleExportItem)) { WebServer.SceneFilename = Path.GetFileName(Tools.UnformatPath(txtModelName.Text)); WebServer.SceneFolder = Path.GetDirectoryName(Tools.UnformatPath(txtModelName.Text)); Process.Start(WebServer.url + WebServer.SceneFilename); WindowState = FormWindowState.Minimized; } }
private void ExporterForm_Load(object sender, EventArgs e) { string storedModelPath = Loader.Core.RootNode.GetStringProperty(ExportParameters.ModelFilePathProperty, string.Empty); string userRelativePath = Tools.ResolveRelativePath(storedModelPath); txtModelName.Text = userRelativePath; string absoluteModelPath = Tools.UnformatPath(txtModelName.Text); singleExportItem = new ExportItem(absoluteModelPath); string storedFolderPath = Loader.Core.RootNode.GetStringProperty(ExportParameters.TextureFolderPathProperty, string.Empty); string formatedFolderPath = Tools.ResolveRelativePath(storedFolderPath); txtTextureName.Text = formatedFolderPath; Tools.PrepareCheckBox(chkManifest, Loader.Core.RootNode, "babylonjs_generatemanifest"); Tools.PrepareCheckBox(chkWriteTextures, Loader.Core.RootNode, "babylonjs_writetextures", 1); Tools.PrepareCheckBox(chkOverwriteTextures, Loader.Core.RootNode, "babylonjs_overwritetextures", 1); Tools.PrepareCheckBox(chkHidden, Loader.Core.RootNode, "babylonjs_exporthidden"); Tools.PrepareCheckBox(chkAutoSave, Loader.Core.RootNode, "babylonjs_autosave", 1); Tools.PrepareCheckBox(chkOnlySelected, Loader.Core.RootNode, "babylonjs_onlySelected"); Tools.PrepareCheckBox(chkExportTangents, Loader.Core.RootNode, "babylonjs_exporttangents"); Tools.PrepareComboBox(comboOutputFormat, Loader.Core.RootNode, "babylonjs_outputFormat", "babylon"); Tools.PrepareTextBox(txtScaleFactor, Loader.Core.RootNode, "babylonjs_txtScaleFactor", "1"); Tools.PrepareTextBox(txtQuality, Loader.Core.RootNode, "babylonjs_txtCompression", "100"); Tools.PrepareCheckBox(chkMergeAOwithMR, Loader.Core.RootNode, "babylonjs_mergeAOwithMR", 1); Tools.PrepareCheckBox(chkDracoCompression, Loader.Core.RootNode, "babylonjs_dracoCompression", 0); Tools.PrepareCheckBox(chkKHRLightsPunctual, Loader.Core.RootNode, "babylonjs_khrLightsPunctual"); Tools.PrepareCheckBox(chkKHRTextureTransform, Loader.Core.RootNode, "babylonjs_khrTextureTransform"); Tools.PrepareCheckBox(chkKHRMaterialsUnlit, Loader.Core.RootNode, "babylonjs_khr_materials_unlit"); Tools.PrepareCheckBox(chkExportMaterials, Loader.Core.RootNode, "babylonjs_export_materials", 1); if (comboOutputFormat.SelectedText == "babylon" || comboOutputFormat.SelectedText == "binary babylon" || !gltfPipelineInstalled) { chkDracoCompression.Checked = false; chkDracoCompression.Enabled = false; } Tools.PrepareCheckBox(chkFullPBR, Loader.Core.RootNode, ExportParameters.PBRFullPropertyName); Tools.PrepareCheckBox(chkNoAutoLight, Loader.Core.RootNode, ExportParameters.PBRNoLightPropertyName); string storedEnvironmentPath = Loader.Core.RootNode.GetStringProperty(ExportParameters.PBREnvironmentPathPropertyName, string.Empty); string formatedEnvironmentPath = Tools.ResolveRelativePath(storedEnvironmentPath); txtEnvironmentName.Text = formatedEnvironmentPath; }
private void btnTextureBrowse_Click(object sender, EventArgs e) { if (string.IsNullOrWhiteSpace(txtModelName.Text)) { MessageBox.Show("Select model file path first"); return; } if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) { string selectedFolderPath = folderBrowserDialog1.SelectedPath; string absoluteModelPath = Tools.UnformatPath(txtModelName.Text); if (!Tools.IsBelowModelPath(selectedFolderPath, absoluteModelPath)) { MessageBox.Show("WARNING: folderPath should be below model file path"); } txtTextureName.Text = Tools.FormatPath(folderBrowserDialog1.SelectedPath); } }
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); }
private async Task <bool> DoExport(ExportItem exportItem, bool clearLogs = true) { 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"); string unformattedPath = Tools.UnformatPath(txtFilename.Text); Loader.Core.RootNode.SetLocalData(Tools.RelativePathStore(unformattedPath)); 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 { ExportParameters exportParameters = new ExportParameters { outputPath = Tools.UnformatPath(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, exportNode = exportItem != null ? exportItem.Node : null }; 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); }