/// <summary>
/// Returns chunk with duplicate point positions removed.
/// </summary>
public Chunk ImmutableDeduplicate()
{
if (!HasPositions)
{
return(this);
}
var dedup = new HashSet <V3d>();
var ia = new List <int>();
for (var i = 0; i < Count; i++)
{
if (dedup.Add(Positions[i]))
{
ia.Add(i);
}
}
var hasDuplicates = ia.Count < Count;
if (hasDuplicates)
{
var self = this;
var ps = HasPositions ? ia.Map(i => self.Positions[i]) : null;
var cs = HasColors ? ia.Map(i => self.Colors[i]) : null;
var ns = HasNormals ? ia.Map(i => self.Normals[i]) : null;
var js = HasIntensities ? ia.Map(i => self.Intensities[i]) : null;
return(new Chunk(ps, cs, ns, js));
}
else
{
return(this);
}
}