Skip to content
Permalink
Browse files
Add experimental Export as COLLADA option to Old Scenery Entry
  • Loading branch information
U-VAMOOLA\Administrator authored and U-VAMOOLA\Administrator committed Sep 19, 2013
1 parent 706b5bc commit ddc78cf9bc716e5e52b0ed00a52c0a244af8535a
@@ -157,5 +157,6 @@
</ItemGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.XML" />
</ItemGroup>
</Project>
@@ -1,5 +1,6 @@
using System;
using System.IO;
using System.Xml;
using System.Collections.Generic;

namespace Crash
@@ -90,5 +91,129 @@ public byte[] ToOBJ()
return stream.ToArray();
}
}

public byte[] ToCOLLADA()
{
using (MemoryStream stream = new MemoryStream())
{
using (StreamWriter textwriter = new StreamWriter(stream))
using (XmlTextWriter xmlwriter = new XmlTextWriter(textwriter))
{
xmlwriter.WriteStartDocument();
xmlwriter.WriteStartElement("COLLADA");
xmlwriter.WriteAttributeString("xmlns","http://www.collada.org/2005/11/COLLADASchema");
xmlwriter.WriteAttributeString("version","1.4.1");
xmlwriter.WriteStartElement("library_geometries");
xmlwriter.WriteStartElement("geometry");
xmlwriter.WriteStartElement("mesh");
xmlwriter.WriteStartElement("source");
xmlwriter.WriteAttributeString("id","positions");
xmlwriter.WriteStartElement("float_array");
xmlwriter.WriteAttributeString("id","positions-array");
xmlwriter.WriteAttributeString("count",(vertices.Count * 3).ToString());
foreach (OldSceneryVertex vertex in vertices)
{
xmlwriter.WriteValue(vertex.X);
xmlwriter.WriteWhitespace(" ");
xmlwriter.WriteValue(vertex.Y);
xmlwriter.WriteWhitespace(" ");
xmlwriter.WriteValue(vertex.Z);
xmlwriter.WriteWhitespace(" ");
}
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("technique_common");
xmlwriter.WriteStartElement("accessor");
xmlwriter.WriteAttributeString("source","#positions-array");
xmlwriter.WriteAttributeString("count",vertices.Count.ToString());
xmlwriter.WriteAttributeString("stride","3");
xmlwriter.WriteStartElement("param");
xmlwriter.WriteAttributeString("name","X");
xmlwriter.WriteAttributeString("type","float");
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("param");
xmlwriter.WriteAttributeString("name","Y");
xmlwriter.WriteAttributeString("type","float");
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("param");
xmlwriter.WriteAttributeString("name","Y");
xmlwriter.WriteAttributeString("type","float");
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("source");
xmlwriter.WriteAttributeString("id","colors");
xmlwriter.WriteStartElement("float_array");
xmlwriter.WriteAttributeString("id","colors-array");
xmlwriter.WriteAttributeString("count",(vertices.Count * 3).ToString());
foreach (OldSceneryVertex vertex in vertices)
{
xmlwriter.WriteValue(vertex.Red / 256.0);
xmlwriter.WriteWhitespace(" ");
xmlwriter.WriteValue(vertex.Green / 256.0);
xmlwriter.WriteWhitespace(" ");
xmlwriter.WriteValue(vertex.Blue / 256.0);
xmlwriter.WriteWhitespace(" ");
}
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("technique_common");
xmlwriter.WriteStartElement("accessor");
xmlwriter.WriteAttributeString("source","#colors-array");
xmlwriter.WriteAttributeString("count",vertices.Count.ToString());
xmlwriter.WriteAttributeString("stride","3");
xmlwriter.WriteStartElement("param");
xmlwriter.WriteAttributeString("name","R");
xmlwriter.WriteAttributeString("type","float");
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("param");
xmlwriter.WriteAttributeString("name","G");
xmlwriter.WriteAttributeString("type","float");
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("param");
xmlwriter.WriteAttributeString("name","B");
xmlwriter.WriteAttributeString("type","float");
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("vertices");
xmlwriter.WriteAttributeString("id","vertices");
xmlwriter.WriteStartElement("input");
xmlwriter.WriteAttributeString("semantic","POSITION");
xmlwriter.WriteAttributeString("source","positions");
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("input");
xmlwriter.WriteAttributeString("semantic","COLOR");
xmlwriter.WriteAttributeString("source","colors");
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("triangles");
xmlwriter.WriteAttributeString("count",polygons.Count.ToString());
xmlwriter.WriteStartElement("input");
xmlwriter.WriteAttributeString("semantic","VERTEX");
xmlwriter.WriteAttributeString("source","vertices");
xmlwriter.WriteAttributeString("offset","0");
xmlwriter.WriteEndElement();
xmlwriter.WriteStartElement("p");
foreach (OldSceneryPolygon polygon in polygons)
{
xmlwriter.WriteValue(polygon.VertexA);
xmlwriter.WriteWhitespace(" ");
xmlwriter.WriteValue(polygon.VertexB);
xmlwriter.WriteWhitespace(" ");
xmlwriter.WriteValue(polygon.VertexC);
xmlwriter.WriteWhitespace(" ");
}
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteEndElement();
xmlwriter.WriteEndDocument();
}
return stream.ToArray();
}
}
}
}
@@ -15,6 +15,7 @@ public OldSceneryEntryController(EntryChunkController entrychunkcontroller,OldSc
Node.SelectedImageKey = "oldsceneryentry";
AddMenuSeparator();
AddMenu("Export as OBJ",Menu_Export_OBJ);
AddMenu("Export as COLLADA",Menu_Export_COLLADA);
}

protected override Control CreateEditor()
@@ -35,5 +36,14 @@ private void Menu_Export_OBJ()
}
FileUtil.SaveFile(oldsceneryentry.ToOBJ(),FileFilters.OBJ,FileFilters.Any);
}

private void Menu_Export_COLLADA()
{
if (MessageBox.Show("Exporting to COLLADA is experimental.\nTexture information will not be exported.\n\nContinue anyway?","Export as COLLADA",MessageBoxButtons.YesNo) != DialogResult.Yes)
{
return;
}
FileUtil.SaveFile(oldsceneryentry.ToCOLLADA(),FileFilters.COLLADA,FileFilters.Any);
}
}
}
@@ -8,6 +8,7 @@ public static class FileFilters
public const string NSF = "NSF Files (*.nsf)|*.nsf";
public const string Wave = "Wave Files (*.wav)|*.wav";
public const string OBJ = "Wavefront OBJ Files (*.obj)|*.obj";
public const string COLLADA = "COLLADA Files (*.dae)|*.dae";
public const string VH = "VAB Header Files (*.vh)|*.vh";
public const string VB = "VAB Body Files (*.vb)|*.vb";
public const string VAB = "VAB Files (*.vab)|*.vab";

0 comments on commit ddc78cf

Please sign in to comment.