Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // REFERENCE: ConvertColor.dll
- using ConvertColor;
- using System.IO;
- def δ = 4;
- def vertexCount = 6 * (256 / δ + 1) * (256 / δ + 1);
- def faceCount = 6 * (256 / δ) * (256 / δ);
- def writer = File.CreateText("lab.ply");
- [ "ply"
- , "format ascii 1.0"
- , "comment Created by Alexey Badalov"
- , $"element vertex $vertexCount"
- , "property float x"
- , "property float y"
- , "property float z"
- , "property float red"
- , "property float green"
- , "property float blue"
- , $"element face $faceCount"
- , "property list uchar uint vertex_indices"
- , "end_header"
- ].Iter(writer.WriteLine);
- def ProcessSide(WriteVertex : double * double -> void)
- {
- foreach (b in [0, δ .. 256])
- foreach (a in [0, δ .. 256])
- WriteVertex(a / 256.0, b / 256.0);
- }
- def WriteVertex(r, g, b)
- {
- def (x, y, z) = (r, g, b) |> RgbToXyz |> XyzToLab;
- def x = x / 50.0;
- def y = y / 50.0;
- def z = z / 50.0;
- writer.WriteLine(string.Join(" ", array[x, y, z, r, g, b]))
- }
- ProcessSide(WriteVertex(0, _, _));
- ProcessSide(WriteVertex(1, _, _));
- ProcessSide(WriteVertex(_, 0, _));
- ProcessSide(WriteVertex(_, 1, _));
- ProcessSide(WriteVertex(_, _, 0));
- ProcessSide(WriteVertex(_, _, 1));
- foreach (k in [0 .. 5])
- foreach (b in [0 .. 256 / δ - 1])
- foreach (a in [0 .. 256 / δ - 1])
- {
- def offset = k * (256 / δ + 1) * (256 / δ + 1);
- def v0 = offset + (b + 0) * (256 / δ + 1) + a + 0;
- def v1 = offset + (b + 1) * (256 / δ + 1) + a + 0;
- def v2 = offset + (b + 1) * (256 / δ + 1) + a + 1;
- def v3 = offset + (b + 0) * (256 / δ + 1) + a + 1;
- writer.WriteLine("4 {0} {1} {2} {3}", v0, v1, v2, v3)
- }
- writer.Close();
Advertisement