public void FillWithTestPattern() { Points.Clear(); RawBoardOutline.Clear(); var rnd = new Random(); for (var x = 0; x < SizeX; x++) { for (var y = 0; y < SizeY; y++) { var xPosition = (x * (Max.X - Min.X)) / (SizeX - 1) + Min.X; var yPosition = (y * (Max.Y - Min.Y)) / (SizeY - 1) + Min.Y; var height = (0.5 - rnd.NextDouble()); Points.Add(new HeightMapProbePoint() { XIndex = x, YIndex = y, Point = new Vector3(xPosition, yPosition, height), Status = HeightMapProbePointStatus.Probed }); MaxHeight = Math.Max(height, MaxHeight); MinHeight = Math.Min(height, MinHeight); } } RawBoardOutline.Add(Line3D.Create(Min.X, Min.Y, 0, Min.X, Max.Y, 0)); RawBoardOutline.Add(Line3D.Create(Min.X, Max.Y, 0, Max.X, Max.Y, 0)); RawBoardOutline.Add(Line3D.Create(Max.X, Max.Y, 0, Max.X, Min.Y, 0)); RawBoardOutline.Add(Line3D.Create(Max.X, Min.Y, 0, Min.X, Min.Y, 0)); Status = HeightMapStatus.Populated; RaisePropertyChanged(nameof(RawBoardOutline)); RaisePropertyChanged(nameof(Points)); RaisePropertyChanged(nameof(Min)); RaisePropertyChanged(nameof(Max)); RaisePropertyChanged(nameof(MinHeight)); RaisePropertyChanged(nameof(MaxHeight)); }
public void Refresh() { Points.Clear(); RawBoardOutline.Clear(); RaisePropertyChanged(nameof(Points)); RaisePropertyChanged(nameof(RawBoardOutline)); var min = Min; var max = Max; var gridSize = GridSize; if (min.X == max.X) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min X must not equal Max X, both are {min.X}"); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min X must not equal Max X, both are {min.X}"); return; } if (min.Y == max.Y) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min Y must not equal Max Y, both are {min.Y}"); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min Y must not equal Max Y, both are {min.Y}"); return; } if (min.X > max.X) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min X [{min.X}] must be greater than Max X [{max.X}]"); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min X [{min.X}] must be greater than Max X [{max.X}]"); return; } if (min.Y > max.Y) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Min Y [{min.Y}] must be greater than Max Y [{max.Y}]"); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Min Y [{min.Y}] must be greater than Max Y [{max.Y}]"); return; } if (gridSize == 0) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Grid Size must not equal to 0."); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Grid Size must not be equal to 0."); return; } var pointsX = (int)Math.Ceiling((max.X - min.X) / gridSize) + 1; var pointsY = (int)Math.Ceiling((max.Y - min.Y) / gridSize) + 1; if (pointsX == 0 || pointsY == 0) { _machine.AddStatusMessage(StatusMessageTypes.Warning, $"Grid Size too large for board size."); _logger.Log(LogLevel.Warning, "HeightMap_Refresh", $"Grid Size too large for board size.."); return; } SizeX = pointsX; SizeY = pointsY; for (var x = 0; x < SizeX; x++) { for (var y = 0; y < SizeY; y++) { var xPosition = (x * (Max.X - Min.X)) / (SizeX - 1) + Min.X; var yPosition = (y * (Max.Y - Min.Y)) / (SizeY - 1) + Min.Y; Points.Add(new HeightMapProbePoint() { XIndex = x, YIndex = y, Point = new Vector3(xPosition, yPosition, 0), Status = HeightMapProbePointStatus.NotProbed }); } } RawBoardOutline.Add(Line3D.Create(Min.X, Min.Y, 0, Min.X, Max.Y, 0)); RawBoardOutline.Add(Line3D.Create(Min.X, Max.Y, 0, Max.X, Max.Y, 0)); RawBoardOutline.Add(Line3D.Create(Max.X, Max.Y, 0, Max.X, Min.Y, 0)); RawBoardOutline.Add(Line3D.Create(Max.X, Min.Y, 0, Min.X, Min.Y, 0)); RaisePropertyChanged(nameof(RawBoardOutline)); RaisePropertyChanged(nameof(Points)); RaisePropertyChanged(nameof(Min)); RaisePropertyChanged(nameof(Max)); Initialized = true; }