private static void ToQubicle(BinaryWriter stream, Volume vol) { stream.Write(new byte[] { 1, 1, 0, 0 }); // version stream.Write(Convert.ToUInt32(0)); // colorFormat stream.Write(Convert.ToUInt32(1)); // zAxisOrientation stream.Write(Convert.ToUInt32(0)); // compressed stream.Write(Convert.ToUInt32(0)); // vis mask stream.Write(Convert.ToUInt32(1)); // num matrices var name = ""; if (vol.gameObject.name.Length > 255) { name = vol.gameObject.name.Substring(0, 255); } else { name = vol.gameObject.name; } stream.Write((byte)name.Length); // write name length stream.Write(UTF8Encoding.UTF8.GetBytes(name)); stream.Write(Convert.ToUInt32(vol.XSize)); // matrix size stream.Write(Convert.ToUInt32(vol.YSize)); stream.Write(Convert.ToUInt32(vol.ZSize)); stream.Write(Convert.ToInt32(0)); // matrix position (as we're only exporting one matrix, we'll leave it at 0,0,0 stream.Write(Convert.ToInt32(0)); stream.Write(Convert.ToInt32(0)); // write uncompressed data for (var z = 0; z < vol.ZSize; z++) { for (var y = 0; y < vol.YSize; y++) { for (var x = 0; x < vol.XSize; x++) { var v = vol.GetVoxelAtArrayPosition(x, y, z); if (v.HasValue) { if (v.Value.Active) { stream.Write(ColorToUInt(v.Value.Color)); } else { stream.Write(Convert.ToUInt32(0)); } } else { stream.Write(Convert.ToUInt32(0)); } } } } stream.Flush(); }