Example #1
0
        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
            {
                exporter.AutoSaveMayaFile     = chkAutoSave.Checked;
                exporter.ExportHiddenObjects  = chkHidden.Checked;
                exporter.CopyTexturesToOutput = chkCopyTextures.Checked;
                var directoryName = Path.GetDirectoryName(txtFilename.Text);
                var fileName      = Path.GetFileName(txtFilename.Text);
                exporter.Export(directoryName, fileName, comboOutputFormat.SelectedItem.ToString(), chkManifest.Checked, chkOnlySelected.Checked, chkAutoSave.Checked, chkHidden.Checked, chkCopyTextures.Checked);
            }
            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);
        }
Example #2
0
        private async Task <bool> DoExport()
        {
            Loader.SetBoolProperty(chkCopyTexturesProperty, chkCopyTextures.Checked);
            Loader.SetBoolProperty(chkHiddenProperty, chkHidden.Checked);
            Loader.SetBoolProperty(chkOnlySelectedProperty, chkOnlySelected.Checked);
            Loader.SetBoolProperty(chkManifestProperty, chkManifest.Checked);
            Loader.SetBoolProperty(chkAutoSaveProperty, chkAutoSave.Checked);
            Loader.SetBoolProperty(chkOptimizeVerticesProperty, chkOptimizeVertices.Checked);
            Loader.SetBoolProperty(chkExportTangentsProperty, chkExportTangents.Checked);
            //Loader.SetBoolProperty(chkDracoCompressionProperty, chkDracoCompression.Checked);
            Loader.SetBoolProperty(chkExportSkinProperty, chkExportSkin.Checked);
            Loader.SetBoolProperty(chkExportMorphNormalProperty, chkExportMorphNormal.Checked);
            Loader.SetBoolProperty(chkExportMorphTangentProperty, chkExportMorphTangent.Checked);
            Loader.SetBoolProperty(chkExportKHRLightsPunctualProperty, chkExportKHRLightsPunctual.Checked);
            Loader.SetBoolProperty(chkExportKHRTextureTransformProperty, chkExportKHRTextureTransform.Checked);
            Loader.SetBoolProperty(chkBakeAnimationFramesProperty, chkBakeAnimationFrames.Checked);

            /*Tools.UpdateComboBox(comboOutputFormat, Loader.Core.RootNode, "babylonjs_outputFormat");
             *
             * Loader.Core.RootNode.SetLocalData(txtFilename.Text);*/

            exporter = new BabylonExporter();

            treeView.Nodes.Clear();

            exporter.OnExportProgressChanged += 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();
            };

            exporter.OnVerbose += (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
            {
                var directoryName = Path.GetDirectoryName(txtFilename.Text);
                var fileName      = Path.GetFileName(txtFilename.Text);
                exporter.Export(outputDirectory: directoryName, outputFileName: fileName, outputFormat: comboOutputFormat.SelectedItem.ToString(), generateManifest: chkManifest.Checked,
                                onlySelected: chkOnlySelected.Checked, autoSaveMayaFile: chkAutoSave.Checked, exportHiddenObjects: chkHidden.Checked, copyTexturesToOutput: chkCopyTextures.Checked,
                                optimizeVertices: chkOptimizeVertices.Checked, exportTangents: chkExportTangents.Checked, scaleFactor: txtScaleFactor.Text, exportSkin: chkExportSkin.Checked,
                                quality: txtQuality.Text, dracoCompression: chkDracoCompression.Checked, exportMorphNormal: chkExportMorphNormal.Checked, exportMorphTangent: chkExportMorphTangent.Checked,
                                exportKHRLightsPunctual: chkExportKHRLightsPunctual.Checked, exportKHRTextureTransform: chkExportKHRTextureTransform.Checked, bakeAnimationFrames: chkBakeAnimationFrames.Checked);
            }
            catch (OperationCanceledException)
            {
                progressBar.Value = 0;
                success           = false;
            }
            catch (Exception ex)
            {
                currentNode = CreateTreeNode(0, "Export cancelled: " + ex.Message + " " + ex.StackTrace, Color.Red);

                currentNode.EnsureVisible();
                progressBar.Value = 0;
                success           = false;
            }

            butCancel.Enabled       = false;
            butExport.Enabled       = true;
            butExportAndRun.Enabled = WebServer.IsSupported;

            BringToFront();

            return(success);
        }
Example #3
0
        private async Task <bool> DoExport()
        {
            Loader.SetBoolProperty(chkCopyTexturesProperty, chkCopyTextures.Checked);
            Loader.SetBoolProperty(chkHiddenProperty, chkHidden.Checked);
            Loader.SetBoolProperty(chkOnlySelectedProperty, chkOnlySelected.Checked);
            Loader.SetBoolProperty(chkManifestProperty, chkManifest.Checked);
            Loader.SetBoolProperty(chkAutoSaveProperty, chkAutoSave.Checked);
            Loader.SetBoolProperty(chkOptimizeVerticesProperty, chkOptimizeVertices.Checked);
            Loader.SetBoolProperty(chkExportTangentsProperty, chkExportTangents.Checked);
            //Loader.SetBoolProperty(chkDracoCompressionProperty, chkDracoCompression.Checked);
            Loader.SetBoolProperty(chkExportSkinProperty, chkExportSkin.Checked);
            Loader.SetBoolProperty(chkExportMorphNormalProperty, chkExportMorphNormal.Checked);
            Loader.SetBoolProperty(chkExportMorphTangentProperty, chkExportMorphTangent.Checked);
            Loader.SetBoolProperty(chkExportKHRLightsPunctualProperty, chkExportKHRLightsPunctual.Checked);
            Loader.SetBoolProperty(chkExportKHRTextureTransformProperty, chkExportKHRTextureTransform.Checked);
            Loader.SetBoolProperty(chkBakeAnimationFramesProperty, chkBakeAnimationFrames.Checked);

            Loader.SetBoolProperty(PBRFullPropertyName, chkFullPBR.Checked);
            Loader.SetBoolProperty(PBRNoLightPropertyName, chkNoAutoLight.Checked);
            Loader.SetBoolProperty(PBRDefaultSkyboxName, chkDefaultSkybox.Checked);

            /*Tools.UpdateComboBox(comboOutputFormat, Loader.Core.RootNode, "babylonjs_outputFormat");
             *
             * Loader.Core.RootNode.SetLocalData(txtFilename.Text);*/

            exporter = new BabylonExporter();

            treeView.Nodes.Clear();

            exporter.OnExportProgressChanged += 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();
            };

            exporter.OnVerbose += (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
            {
                var scaleFactorParsed    = 1.0f;
                var textureQualityParsed = 100L;
                var exportParameters     = new ExportParameters
                {
                    outputPath                = txtFilename.Text,
                    outputFormat              = comboOutputFormat.SelectedItem.ToString(),
                    generateManifest          = chkManifest.Checked,
                    exportOnlySelected        = chkOnlySelected.Checked,
                    autoSaveSceneFile         = chkAutoSave.Checked,
                    exportHiddenObjects       = chkHidden.Checked,
                    writeTextures             = chkCopyTextures.Checked,
                    overwriteTextures         = chkCopyTextures.Checked,
                    optimizeVertices          = chkOptimizeVertices.Checked,
                    exportTangents            = chkExportTangents.Checked,
                    scaleFactor               = float.TryParse(txtScaleFactor.Text, out scaleFactorParsed) ? scaleFactorParsed : 1.0f,
                    exportSkins               = chkExportSkin.Checked,
                    txtQuality                = long.TryParse(txtQuality.Text, out textureQualityParsed) ? textureQualityParsed : 100,
                    dracoCompression          = chkDracoCompression.Checked,
                    exportMorphNormals        = chkExportMorphNormal.Checked,
                    exportMorphTangents       = chkExportMorphTangent.Checked,
                    enableKHRLightsPunctual   = chkExportKHRLightsPunctual.Checked,
                    enableKHRTextureTransform = chkExportKHRTextureTransform.Checked,
                    bakeAnimationFrames       = chkBakeAnimationFrames.Checked,
                    pbrFull             = chkFullPBR.Checked,
                    pbrNoLight          = chkNoAutoLight.Checked,
                    createDefaultSkybox = chkDefaultSkybox.Checked,
                    pbrEnvironment      = txtEnvironmentName.Text
                };
                exporter.Export(exportParameters);
            }
            catch (OperationCanceledException)
            {
                progressBar.Value = 0;
                success           = false;
            }
            catch (Exception ex)
            {
                currentNode = CreateTreeNode(0, "Export cancelled: " + ex.Message + " " + ex.StackTrace, Color.Red);

                currentNode.EnsureVisible();
                progressBar.Value = 0;
                success           = false;
            }

            butCancel.Enabled       = false;
            butExport.Enabled       = true;
            butExportAndRun.Enabled = WebServer.IsSupported;

            BringToFront();

            return(success);
        }
Example #4
0
        private BabylonCamera ExportCameraAnimations(BabylonCamera babylonCamera, IIGameCamera camera, BabylonExporter exporter)
        {
            var animations = new List <BabylonAnimation>();

            int numProps = camera.IPropertyContainer.NumberOfProperties;

            for (int i = 0; i < numProps; ++i)
            {
                IIGameProperty property = camera.IPropertyContainer.GetProperty(i);

                if (property == null)
                {
                    continue;
                }

                IParamDef paramDef     = property.MaxParamBlock2?.GetParamDef(property.ParamID);
                string    propertyName = property.Name.ToUpperInvariant();

                switch (propertyName)
                {
                default:
                    break;
                }
            }

            babylonCamera.animations = animations.ToArray();
            return(babylonCamera);
        }
Example #5
0
        public bool ExportBabylonExtension <T>(T babylonObject, ref BabylonScene babylonScene, BabylonExporter exporter)
        {
            var  cameraNode     = babylonObject as Autodesk.Max.IIGameCamera;
            bool isGLTFExported = exporter.exportParameters.outputFormat == "gltf";

            // todo: MaterialUtilities class should be splitted as the wrapper contains more idwrapper then the materials one

            if (isGLTFExported && FlightSimCameraUtilities.class_ID.Equals(new MaterialUtilities.ClassIDWrapper(cameraNode.CameraTarget.MaxNode.ClassID)))
            {
                var id = cameraNode.CameraTarget.MaxNode.GetGuid().ToString();
                // add a basic babylon material to the list to forward the max material reference
                var babylonCamera = new BabylonCamera();//(id)
                //{
                //    maxGameMaterial = materialNode,
                //    name = materialNode.MaterialName
                //};

                babylonCamera = ExportCameraAnimations(babylonCamera, cameraNode, exporter);
                babylonScene.CamerasList.Add(babylonCamera);
                return(true);
            }

            return(false);
        }
Example #6
0
 public bool ExportBabylonExtension <T>(T babylonObject, ref BabylonScene babylonScene, BabylonExporter exporter)
 {
     // just skip this extension is ment only for GLTF
     return(false);
 }
Example #7
0
        private BabylonMaterial ExportMaterialAnimations(BabylonMaterial babylonMaterial, IIGameMaterial material, BabylonExporter exporter)
        {
            var animations = new List <BabylonAnimation>();

            int numProps = material.IPropertyContainer.NumberOfProperties;

            for (int i = 0; i < numProps; ++i)
            {
                IIGameProperty property = material.IPropertyContainer.GetProperty(i);

                if (property == null)
                {
                    continue;
                }

                if (!property.IsPropAnimated)
                {
                    continue;
                }

                IParamDef paramDef     = property.MaxParamBlock2?.GetParamDef(property.ParamID);
                string    propertyName = property.Name.ToUpperInvariant();

                switch (propertyName)
                {
                case "BASECOLOR":
                {
                    if (property.IGameControl.GetMaxControl(IGameControlType.Point4).NumKeys > 0)
                    {
                        exporter.ExportColor4Animation(property.Name, animations,
                                                       key => material.IPropertyContainer.GetPoint4Property(property.Name, key).ToArray());
                    }
                    break;
                }

                case "EMISSIVE":
                {
                    if (property.IGameControl.GetMaxControl(IGameControlType.Point3).NumKeys > 0)
                    {
                        exporter.ExportColor3Animation(property.Name, animations,
                                                       key => material.IPropertyContainer.GetPoint3Property(property.Name, key).ToArray());
                    }
                    break;
                }

                case "WIPERANIMSTATE1":
                case "WIPERANIMSTATE2":
                case "WIPERANIMSTATE3":
                case "WIPERANIMSTATE4":
                case "METALLIC":
                case "ROUGHNESS":
                case "UVOFFSETU":
                case "UVOFFSETV":
                case "UVTILINGU":
                case "UVTILINGV":
                case "UVROTATION":
                {
                    if (property.IGameControl.GetMaxControl(IGameControlType.Float).NumKeys > 0)
                    {
                        exporter.ExportFloatAnimation(property.Name, animations,
                                                      key => new[] { material.IPropertyContainer.GetFloatProperty(property.Name, key, 0) });
                    }
                    break;
                }

                default:
                    break;
                }
            }

            babylonMaterial.animations = animations.ToArray();
            return(babylonMaterial);
        }
Example #8
0
        public bool ExportBabylonExtension <T>(T babylonObject, ref BabylonScene babylonScene, BabylonExporter exporter)
        {
            var  materialNode   = babylonObject as Autodesk.Max.IIGameMaterial;
            bool isGLTFExported = exporter.exportParameters.outputFormat == "gltf";


            if (isGLTFExported && FlightSimMaterialUtilities.class_ID.Equals(new MaterialUtilities.ClassIDWrapper(materialNode.MaxMaterial.ClassID)))
            {
                var id = materialNode.MaxMaterial.GetGuid().ToString();
                // add a basic babylon material to the list to forward the max material reference
                var babylonMaterial = new BabylonMaterial(id)
                {
                    maxGameMaterial = materialNode,
                    name            = materialNode.MaterialName
                };

                babylonMaterial = ExportMaterialAnimations(babylonMaterial, materialNode, exporter);
                babylonScene.MaterialsList.Add(babylonMaterial);
                return(true);
            }

            return(false);
        }