private void CheckForComplete(SlicingOptions options, CubeManager manager) { int expectedResults = options.TextureSliceX * options.TextureSliceY; if (StorageUtilities.GetWorkCompletedCount(TableClient, options.CloudResultPath, options.CloudResultContainer) != expectedResults) { return; } var workResults = StorageUtilities.GetWorkCompletedMetadata(TableClient, options.CloudResultPath, options.CloudResultContainer); // Write metadata CubeMetadata metadata = new CubeMetadata(options.CubeGrid) { WorldBounds = manager.ObjInstance.Size, VirtualWorldBounds = options.ForceCubicalCubes ? manager.ObjInstance.CubicalSize : manager.ObjInstance.Size, VertexCount = manager.ObjInstance.VertexList.Count }; // Configure texture slicing metadata if (!string.IsNullOrEmpty(options.Texture) && (options.TextureSliceX + options.TextureSliceY) > 2) { metadata.TextureSetSize = new Vector2(options.TextureSliceX, options.TextureSliceY); } else { metadata.TextureSetSize = new Vector2(1, 1); } var resultsList = workResults.Select(w => SerializationUtilities.DecodeMetadataFromBase64( Texture.GetCubeListFromTextureTile(options.TextureSliceY, options.TextureSliceX, w.TextureTileX, w.TextureTileY, manager.ObjInstance), w.MetadataBase64)); foreach (var result in resultsList) { foreach (var cube in result.Keys) { metadata.CubeExists[cube.X, cube.Y, cube.Z] = result[cube]; } } // Write out some json metadata string metadataPath = Path.Combine(outputPath, "metadata.json"); if (File.Exists(metadataPath)) { File.Delete(metadataPath); } string metadataString = JsonConvert.SerializeObject(metadata); File.WriteAllText(metadataPath, metadataString); StorageUtilities.UpdateSetCompleted(TableClient, options.SetKey); }
public void EncodeDecodeTest() { var data = GenerateTestMetadata(61); string encoded = SerializationUtilities.EncodeMetadataToBase64(data); Assert.IsFalse(string.IsNullOrEmpty(encoded)); var decoded = SerializationUtilities.DecodeMetadataFromBase64(data.Keys, encoded); Assert.AreEqual(decoded.Count, data.Count); foreach (var key in data.Keys) { Assert.AreEqual(data[key] > 0, decoded[key]); } }