private List <List <IPaletteItem> > GenerateRows(TextPatternStart textPatternStart) { var result = new List <List <IPaletteItem> >(this.RowCount); var rows = GetRowCoordinates(); if (textPatternStart == TextPatternStart.BottomRight) { rows = rows.Reverse(); } int rowIndex = 0; foreach (var rowCoordinates in rows) { List <IPaletteItem> row = new List <IPaletteItem>(); int x = rowCoordinates.Start.X; int y = rowCoordinates.Start.Y; for (; x <= rowCoordinates.End.X && y >= rowCoordinates.End.Y; x++, y--) { row.Add(this[x, y]); } if (rowIndex++ % 2 == 0) { row.Reverse(); } result.Add(row); } return(result); }
public string GenerateTextPattern(TextPatternStart textPatternStart = TextPatternStart.BottomRight) { StringBuilder sb = new StringBuilder(); sb.AppendLine($"Pattern starts {(textPatternStart == TextPatternStart.TopLeft ? "top left" : "bottom right")}"); sb.AppendLine("Odd rows (1, 3 etc) are down rows"); sb.AppendLine(); int rowNumber = 1; foreach (List <IPaletteItem> row in GenerateRows(textPatternStart)) { IPaletteItem lastColor = null; int lastColorCount = 0; Action <bool> appendColor = (includeComma) => { if (lastColorCount > 0) { string colorString = lastColor.Text; sb.Append(lastColorCount); sb.Append(colorString); if (includeComma) { sb.Append(","); } } lastColorCount = 0; }; sb.Append(rowNumber++); sb.Append(":"); sb.Append("\t"); for (int i = 0; i < row.Count; i++) { if (row[i] != lastColor) { appendColor(true); lastColor = row[i]; } lastColorCount++; } appendColor(false); sb.AppendFormat("({0})", row.Count); sb.AppendLine(); } return(sb.ToString()); }