public void TestMask() { var a = new int[, ] { { 1, 0 }, { 0, 1 }, }; var model = new AdjacentModel(); model.AddSample(TopoArray.Create(a, true).ToTiles()); var mask = new bool[5 * 5]; for (var x = 0; x < 5; x++) { for (var y = 0; y < 5; y++) { if (x == 2 || y == 2) { mask[x + y * 5] = false; } else { mask[x + y * 5] = true; } } } var topology = new GridTopology(5, 5, true).WithMask(mask); var propagator = new TilePropagator(model, topology); propagator.Run(); Assert.AreEqual(Resolution.Decided, propagator.Status); }
public TileModel GetModel(DirectionSet directions, ITopoArray <Tile>[] samples, TileRotation tileRotation) { var modelConfig = Config.Model ?? new Adjacent(); TileModel tileModel; if (modelConfig is Overlapping overlapping) { var model = new OverlappingModel(overlapping.NX, overlapping.NY, overlapping.NZ); foreach (var sample in samples) { model.AddSample(sample, tileRotation); } tileModel = model; } else if (modelConfig is Adjacent adjacent) { var model = new AdjacentModel(directions); foreach (var sample in samples) { model.AddSample(sample, tileRotation); } tileModel = model; } else { throw new ConfigurationException($"Unrecognized model type {modelConfig.GetType()}"); } SetupAdjacencies(tileModel, tileRotation); SetupTiles(tileModel, tileRotation); return(tileModel); }
public TileModel GetModel(DirectionSet directions, SampleSet sampleSet, TileRotation tileRotation) { var samples = sampleSet.Samples; var modelConfig = Config.Model ?? new Adjacent(); TileModel tileModel; if (modelConfig is Overlapping overlapping) { var model = new OverlappingModel(overlapping.NX, overlapping.NY, overlapping.NZ); foreach (var sample in samples) { model.AddSample(sample, tileRotation); } tileModel = model; } else if (modelConfig is Adjacent adjacent) { var model = new AdjacentModel(directions); foreach (var sample in samples) { model.AddSample(sample, tileRotation); } tileModel = model; } else { throw new ConfigurationException($"Unrecognized model type {modelConfig.GetType()}"); } var autoAdjacencies = Config.AutoAdjacency ? AdjacencyUtils.GetAutoAdjacencies(sampleSet, tileRotation, Config.AutoAdjacencyTolerance) : new AdjacentModel.Adjacency[0]; var manualAdjacencies = GetManualAdjacencies(sampleSet.Directions, tileRotation); SetupAdjacencies(tileModel, tileRotation, autoAdjacencies.Concat(manualAdjacencies).ToList()); SetupTiles(tileModel, tileRotation); return(tileModel); }
private static TileModel GetModel(DeBroglieConfig config, Directions directions, ITopoArray <Tile>[] samples, TileRotation tileRotation) { var modelConfig = config.Model ?? new Adjacent(); if (modelConfig is Overlapping overlapping) { var model = new OverlappingModel(overlapping.NX, overlapping.NY, overlapping.NZ); foreach (var sample in samples) { model.AddSample(sample, config.RotationalSymmetry, config.ReflectionalSymmetry, tileRotation); } return(model); } else if (modelConfig is Adjacent adjacent) { var model = new AdjacentModel(directions); foreach (var sample in samples) { model.AddSample(sample, config.RotationalSymmetry, config.ReflectionalSymmetry, tileRotation); } return(model); } throw new System.Exception($"Unrecognized model type {modelConfig.GetType()}"); }