Exemple #1
0
        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();
        }