public void TestSetFrequencyWithRotations() { var model = new AdjacentModel(DirectionSet.Cartesian2d); var tile1 = new Tile(1); var tile2 = new Tile(2); var builder = new TileRotationBuilder(4, true); builder.AddSymmetry(tile1, TileSymmetry.T); builder.SetTreatment(tile1, TileRotationTreatment.Generated); builder.SetTreatment(tile2, TileRotationTreatment.Generated); var rotations = builder.Build(); model.SetFrequency(tile1, 1.0, rotations); model.SetFrequency(tile2, 1.0, rotations); var tileModelMapping = model.GetTileModelMapping(new GridTopology(10, 10, false)); var patternModel = tileModelMapping.PatternModel; double GetFrequency(Tile tile) { return(patternModel.Frequencies[tileModelMapping.TilesToPatternsByOffset[0][tile].First()]); } Assert.AreEqual(0.25, GetFrequency(tile1)); Assert.AreEqual(0.25, GetFrequency(new Tile(new RotatedTile { Tile = tile1, Rotation = new Rotation(90) }))); Assert.AreEqual(0.125, GetFrequency(tile2)); }
public TileRotation GetTileRotation(TileRotationTreatment?rotationTreatment, Topology topology) { var tileData = Config.Tiles; var tileRotationBuilder = new TileRotationBuilder(Config.RotationalSymmetry, Config.ReflectionalSymmetry, rotationTreatment ?? TileRotationTreatment.Unchanged); var rotationGroup = tileRotationBuilder.RotationGroup; // Setup tiles if (tileData != null) { foreach (var td in tileData) { var tile = Parse(td.Value); if (td.TileSymmetry != null) { var ts = TileSymmetryUtils.Parse(td.TileSymmetry); tileRotationBuilder.AddSymmetry(tile, ts); } if (td.ReflectX != null) { tileRotationBuilder.Add(tile, new Rotation(0, true), Parse(td.ReflectX)); } if (td.ReflectY != null) { tileRotationBuilder.Add(tile, new Rotation(180, true), Parse(td.ReflectY)); } if (td.RotateCw != null) { tileRotationBuilder.Add(tile, new Rotation(rotationGroup.SmallestAngle, false), Parse(td.RotateCw)); } if (td.RotateCcw != null) { tileRotationBuilder.Add(tile, new Rotation(360 - rotationGroup.SmallestAngle, false), Parse(td.RotateCcw)); } if (td.RotationTreatment != null) { tileRotationBuilder.SetTreatment(tile, td.RotationTreatment.Value); } } } return(tileRotationBuilder.Build()); }
private TileRotation GetTileRotation(List <TileData> tileData, TileRotationTreatment?rotationTreatment, Topology topology) { var tileRotationBuilder = new TileRotationBuilder(rotationTreatment ?? TileRotationTreatment.Unchanged); // Setup tiles if (tileData != null) { foreach (var td in tileData) { var tile = Parse(td.Value); if (td.TileSymmetry != null) { var ts = TileSymmetryUtils.Parse(td.TileSymmetry); tileRotationBuilder.AddSymmetry(tile, ts); } if (td.ReflectX != null) { tileRotationBuilder.Add(tile, 0, true, Parse(td.ReflectX)); } if (td.ReflectY != null) { tileRotationBuilder.Add(tile, topology.Directions.Count / 2, true, Parse(td.ReflectY)); } if (td.RotateCw != null) { tileRotationBuilder.Add(tile, 1, false, Parse(td.RotateCw)); } if (td.RotateCcw != null) { tileRotationBuilder.Add(tile, -1, false, Parse(td.RotateCcw)); } if (td.RotationTreatment != null) { tileRotationBuilder.SetTreatment(tile, td.RotationTreatment.Value); } } } return(tileRotationBuilder.Build()); }