private void exportToolStripButton_Click(object sender, EventArgs e) { FolderBrowserDialog dialog = new FolderBrowserDialog(); if (dialog.ShowDialog() == DialogResult.OK) { string directory = dialog.SelectedPath; foreach (Drome.Object o in World.Objects) { if (o is Drome.Objects.OctreeModel octree) { try { using (System.IO.MemoryStream ms = new System.IO.MemoryStream(Program.Filesystem.GetFileData(Program.Filesystem.GetFileEntry(octree.VOMFilename)))) using (System.IO.BinaryReader reader = new System.IO.BinaryReader(ms)) { VOMFile vom = new VOMFile(reader); vom.ExportOBJ(Path.Combine(directory, o.Header.ClassName + "." + o.InstanceName + ".obj")); } } catch (Exception ex) { MessageBox.Show("Exception exporting Octree scene node!\n" + ex.ToString()); } } } MessageBox.Show("Export complete."); } }
public OctreeModelSceneNode(SceneScreen screen, Drome.Objects.OctreeModel model) : base(screen, model, model.Physics) { this.OctreeModel = model; if (OctreeModel.VOMFilename == "") { return; } try { using (System.IO.MemoryStream ms = new System.IO.MemoryStream(Program.Filesystem.GetFileData(Program.Filesystem.GetFileEntry(OctreeModel.VOMFilename)))) using (System.IO.BinaryReader reader = new System.IO.BinaryReader(ms)) { VOMFile = new VOMFile(reader); List <SceneScreen.RenderTexture> textures = new List <SceneScreen.RenderTexture>(); foreach (TextureReference texref in VOMFile.BitmapIndices) { textures.Add(screen.LoadTextureReference(texref)); } //VOMFile.ExportOBJ("vom.obj"); foreach (RenderGroup rg in VOMFile.RenderGroups) { SceneScreen.Mesh mesh = new SceneScreen.Mesh(screen.Renderer.D3DDevice, rg); TextureBlend baseBlend = rg.TextureBlends.First(b => b.Effect == Texture.MapType.Base); if (baseBlend.TextureIndex < textures.Count) { mesh.DiffuseTexture = textures[baseBlend.TextureIndex]; } else { System.Diagnostics.Debug.WriteLine("ERROR: TextureBlend.TextureIndex out of range!"); mesh.DiffuseTexture = new SceneScreen.RenderTexture(screen.GetTexture("__error")); } Meshes.Add(mesh); } } } catch (Exception ex) { System.Diagnostics.Debug.WriteLine("Exception loading octree file: " + OctreeModel.VOMFilename); } }