public override void init() { Device d3dDevice = GuiController.Instance.D3dDevice; TgcSceneLoader loader = new TgcSceneLoader(); TgcScene sceneOriginal = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "ModelosTgc\\Iglesia\\" + "Iglesia-TgcScene.xml"); TgcScene sceneOriginal2 = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "ModelosTgc\\Iglesia\\" + "Iglesia-TgcScene.xml"); //sceneOriginal = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "ModelosTgc\\CajaVerde\\" + "CajaVerde-TgcScene.xml"); //sceneOriginal = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "ModelosTgc\\Avion\\" + "Avion-TgcScene.xml"); //sceneOriginal = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "ModelosTgc\\Iglesia\\" + "Iglesia-TgcScene.xml"); //TgcScene sceneOriginal = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "ModelosTgc\\Box\\" + "Box-TgcScene.xml"); //TgcScene sceneOriginal2 = loader.loadSceneFromFile(GuiController.Instance.ExamplesMediaDir + "ModelosTgc\\Box\\" + "Box-TgcScene.xml"); string destFolder = GuiController.Instance.ExamplesDir + "\\" + "PruebaExporter"; TgcScene unifiedScene = new TgcScene("PruebaExporter", destFolder); unifiedScene.Meshes.AddRange(sceneOriginal.Meshes); unifiedScene.Meshes.AddRange(sceneOriginal2.Meshes); TgcSceneExporter exporter = new TgcSceneExporter(); //string fileSaved = exporter.exportSceneToXml(unifiedScene, destFolder); //string fileSaved = exporter.exportAndAppendSceneToXml(unifiedScene, destFolder); TgcSceneExporter.ExportResult r = exporter.exportAndAppendSceneToXml(sceneOriginal, destFolder); sceneRecover = loader.loadSceneFromFile(r.filePath); }
/// <summary> /// Guardar la escena /// </summary> private void exportScene(bool askConfirmation, string path) { FileInfo fInfo = null; if (askConfirmation) { if (exportSceneSaveDialog.ShowDialog() == DialogResult.OK) { fInfo = new FileInfo(exportSceneSaveDialog.FileName); lastSavePath = exportSceneSaveDialog.FileName; } } else { fInfo = new FileInfo(path); exportSceneSaveDialog.FileName = path; } //Obtener directorio y nombre if (fInfo == null) return; string sceneName = fInfo.Name.Split('.')[0]; sceneName = sceneName.Replace("-TgcScene", ""); string saveDir = fInfo.DirectoryName; //Intentar guardar try { //Convertir todos los objetos del escenario a un TgcMesh y agregarlos a la escena a exportar TgcScene exportScene = new TgcScene(sceneName, saveDir); foreach (EditorPrimitive p in meshes) { TgcMesh m = p.createMeshToExport(); exportScene.Meshes.Add(m); } //Exportar escena TgcSceneExporter exporter = new TgcSceneExporter(); TgcSceneExporter.ExportResult result; if (checkBoxAttachExport.Checked) { result = exporter.exportAndAppendSceneToXml(exportScene, saveDir); } else { result = exporter.exportSceneToXml(exportScene, saveDir); } //Hacer dispose de los objetos clonados para exportar exportScene.disposeAll(); exportScene = null; //Mostrar resultado if (result.result) { if (result.secondaryErrors) { MessageBox.Show(this, "La escena se exportó OK pero hubo errores secundarios. " + result.listErrors(), "Export Scene", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { MessageBox.Show(this, "Scene exported OK.", "Export Scene", MessageBoxButtons.OK, MessageBoxIcon.Information); } } else { MessageBox.Show(this, "Ocurrieron errores al intentar exportar la escena. " + result.listErrors(), "Export Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } } catch (Exception ex) { MessageBox.Show(this, "Hubo un error al intenar exportar la escena. Puede ocurrir que esté intentando reemplazar el mismo archivo de escena que tiene abierto ahora. Los archivos de Textura por ejemplo no pueden ser reemplazados si se están utilizando dentro del editor. En ese caso debera guardar en uno nuevo. " + "Error: " + ex.Message + " - " + ex.InnerException.Message, "Export Error", MessageBoxButtons.OK, MessageBoxIcon.Error); } }