using System.Collections.Generic;
using System.IO;
namespace fis.Vid.Visuals
{
public class Vinno3DVisual:VinnoVisual
{
///
/// Gets the tissue 3d areas for this visual.
///
public IList Tissue3DAreas { get; }
public Vinno3DVisual()
{
VisualType = VinnoVisualType.V3D;
Tissue3DAreas = new List();
}
public override byte[] ToBytes()
{
var baseData = base.ToBytes();
byte[] result;
using (var stream = new MemoryStream())
{
stream.Write(baseData, 0, baseData.Length);
var writer = new VinnoStreamWriter(stream);
writer.WriteByte((byte)Tissue3DAreas.Count);
foreach (var tissue3DArea in Tissue3DAreas)
{
writer.WriteBytes(tissue3DArea.ToBytes());
}
result = stream.ToArray();
}
return result;
}
public new static VinnoVisual FromBytes(byte[] bytes)
{
Vinno3DVisual result = null;
using (var stream = new MemoryStream(bytes))
{
stream.Position = 0;
var reader = new VinnoStreamReader(stream);
var visualType = (VinnoVisualType)reader.ReadByte();
var displayMode = (VinnoDisplayMode)reader.ReadByte();
if (visualType == VinnoVisualType.V3D)
{
var indicator = (VinnoVisualIndicator)reader.ReadByte();
result = new Vinno3DVisual {Indicator = indicator};
var activeModeType = (VinnoModeType)reader.ReadByte();
var modeCount = reader.ReadByte();
var modes = new List();
for (int i = 0; i < modeCount; i++)
{
var mode = VinnoMode.FromBytes(reader.ReadBytes());
modes.Add(mode);
}
foreach (var mode in modes)
{
result.Modes.Add(mode);
}
result.ActiveModeType = activeModeType;
var tissue3DAreaCount = reader.ReadByte();
var tissue3DAreas = new List();
for (int i = 0; i < tissue3DAreaCount; i++)
{
var tissue3DArea = VinnoTissue3DArea.FromBytes(reader.ReadBytes());
tissue3DAreas.Add(tissue3DArea);
}
foreach (var tissue3DArea in tissue3DAreas)
{
result.Tissue3DAreas.Add(tissue3DArea);
}
result.DisplayMode = displayMode;
}
}
return result;
}
}
}