private byte[] GetTextureCoordinatesBytes(Rhino.Geometry.Collections.MeshTextureCoordinateList texCoords, out Point2f min, out Point2f max) { Point2f texCoordsMin = new Point2f() { X = float.PositiveInfinity, Y = float.PositiveInfinity }; Point2f texCoordsMax = new Point2f() { X = float.NegativeInfinity, Y = float.NegativeInfinity }; List <float> coordinates = new List <float>(texCoords.Count * 2); foreach (Point2f coordinate in texCoords) { coordinates.AddRange(new float[] { coordinate.X, coordinate.Y }); texCoordsMin.X = Math.Min(texCoordsMin.X, coordinate.X); texCoordsMax.X = Math.Max(texCoordsMax.X, coordinate.X); texCoordsMin.Y = Math.Min(texCoordsMin.Y, coordinate.Y); texCoordsMax.Y = Math.Max(texCoordsMax.Y, coordinate.Y); } IEnumerable <byte> bytesEnumerable = coordinates.SelectMany(value => BitConverter.GetBytes(value)); min = texCoordsMin; max = texCoordsMax; return(bytesEnumerable.ToArray()); }
glTFLoader.Schema.Buffer CreateTextureCoordinatesBuffer(Rhino.Geometry.Collections.MeshTextureCoordinateList texCoords, out Point2f min, out Point2f max) { byte[] bytes = GetTextureCoordinatesBytes(texCoords, out min, out max); return(new glTFLoader.Schema.Buffer() { Uri = Constants.TextBufferHeader + Convert.ToBase64String(bytes), ByteLength = bytes.Length, }); }