private static string GenerateDominanceMatrixOutput(RefreshVisualOutputEventArgs e, int maxLayers, bool colorDisplay) { string[,,] valueStrings = new string[e.Dimensions[0], e.Dimensions[1], e.Dimensions[2] / 2]; ConsoleColor[,,] valueColors = new ConsoleColor[e.Dimensions[0], e.Dimensions[1], e.Dimensions[2] / 2]; for (int z = 0; z < e.Dimensions[2] / 2; z++) { for (int y = 0; y < e.Dimensions[1]; y++) { for (int x = 0; x < e.Dimensions[0]; x++) { float frequency = e.Values[x, y, z * 2 + 0]; float value = e.Values[x, y, z * 2 + 1]; if (colorDisplay) { byte[] rgb = ColorConverter.HSL2RGB(frequency / 2000.0f, 0.5, 0.5); valueColors[x, y, z] = ColorConverter.ClosestConsoleColor(rgb[0], rgb[1], rgb[2]); } valueStrings[x, y, z] = $"{frequency.ToString("0.0")}Hz ({value.ToString(" +0.0000; -0.0000")})"; } } } // Console Content consoleSB.Clear(); int displayLayers = Math.Min(maxLayers, e.Dimensions[2] / 2); for (int z = 0; z < displayLayers; z++) { PrintDominanceMatrixUnit(consoleSB, $"=== top {z+1} frequency", true, colorDisplay); PrintDominanceMatrixUnit(consoleSB, "+", false, colorDisplay); for (int x = 0; x < e.Dimensions[0]; x++) { PrintDominanceMatrixUnit(consoleSB, "------------------------+", false, colorDisplay); } PrintDominanceMatrixUnit(consoleSB, null, true, colorDisplay); for (int y = 0; y < e.Dimensions[1]; y++) { PrintDominanceMatrixUnit(consoleSB, "|", false, colorDisplay); for (int x = 0; x < e.Dimensions[0]; x++) { PrintDominanceMatrixUnit(consoleSB, String.Format("{0,24}|", valueStrings[x, y, z]), false, colorDisplay, valueColors[x, y, z]); } PrintDominanceMatrixUnit(consoleSB, null, true, colorDisplay); PrintDominanceMatrixUnit(consoleSB, "+", false, colorDisplay); for (int x = 0; x < e.Dimensions[0]; x++) { PrintDominanceMatrixUnit(consoleSB, "------------------------+", false, colorDisplay); } PrintDominanceMatrixUnit(consoleSB, null, true, colorDisplay); } } return(consoleSB.ToString()); }