public Hex GetHexAt(int q, int r) { if (Hexes == null) { Debug.LogError("Hex Array is Null"); return(null); } if (horizWrapping) { q = q % Columns; if (q < 0) { q += Columns; } if (q > Columns) { q -= Columns; } } if (vertWrapping) { r = r % Rows; if (r < 0) { r += Rows; } if (r > Rows) { r -= Rows; } } if (q >= Hexes.GetLength(0) || q < 0) { return(null); } if (r >= Hexes.GetLength(1) || r < 0) { return(null); } return(Hexes[q, r]); }
public string Draw(int width, int height) { //var b = new Bitmap(width, height); var hexWidth = Math.Floor((double)(width / (Columns * 1.75))); var hexHeight = Math.Floor((double)(height / (Rows + 1))) * 2; hexWidth = hexHeight = Math.Min(hexWidth, hexHeight); var svgDoc = new SvgDocument { Width = width, Height = height, ViewBox = new SvgViewBox(0, 0, width, height), }; var group = new SvgGroup(); svgDoc.Children.Add(group); for (var r = 0; r < Hexes.GetLength(0); r++) { for (var q = 0; q < Hexes.GetLength(1); q++) { int offsetRow = !(r % 2 == 0) ? 1 : 0; var originX = (q * hexWidth * 1.5) + (hexWidth / 2) + (offsetRow * hexWidth * 0.75); var originY = (r * hexHeight / 2) + (hexHeight / 2); var ax = originX - (hexWidth / 4); var ay = originY - (hexHeight / 2); var bx = originX + (hexWidth / 4); var by = originY - (hexHeight / 2); var cx = originX + (hexWidth / 2); var cy = originY; var dx = originX + (hexWidth / 4); var dy = originY + (hexHeight / 2); var ex = originX - (hexWidth / 4); var ey = originY + (hexHeight / 2); var fx = originX - (hexWidth / 2); var fy = originY; var p = new SvgPolygon(); p.Points = new SvgPointCollection(); p.Points.Add(new SvgUnit((float)ax)); p.Points.Add(new SvgUnit((float)ay)); p.Points.Add(new SvgUnit((float)bx)); p.Points.Add(new SvgUnit((float)by)); p.Points.Add(new SvgUnit((float)cx)); p.Points.Add(new SvgUnit((float)cy)); p.Points.Add(new SvgUnit((float)dx)); p.Points.Add(new SvgUnit((float)dy)); p.Points.Add(new SvgUnit((float)ex)); p.Points.Add(new SvgUnit((float)ey)); p.Points.Add(new SvgUnit((float)fx)); p.Points.Add(new SvgUnit((float)fy)); p.Stroke = new SvgColourServer(Color.Black); p.Fill = new SvgColourServer(r % 2 == 0 ? Color.White : Color.AliceBlue); group.Children.Add(p); //DrawLine(b, ax, ay, bx, by); //DrawLine(b, bx, by, cx, cy); //DrawLine(b, cx, cy, dx, dy); //DrawLine(b, dx, dy, ex, ey); //DrawLine(b, ex, ey, fx, fy); //DrawLine(b, fx, fy, ax, ay); //DrawText(b, ax, ay, q, r); } } //b.Save(@"c:\temp\output.jpg"); //svgDoc.Write(@"c:\temp\output.svg"); using (var stream = new MemoryStream()) { svgDoc.Write(stream); return(Encoding.UTF8.GetString(stream.GetBuffer())); } }