public void CodeCubeToFile(LEDCubeModel cube) { FileStream fs; if (!File.Exists(pathToCubeFile)) { fs = File.Create(pathToCubeFile); fs.Close(); } int numLine = 0; using (StreamReader sr = new StreamReader(pathToCubeFile)) { while (sr.Peek() >= 0) { sr.ReadLine(); numLine++; } } var fileString = GenerateFileString(cube, numLine); using (StreamWriter sw = new StreamWriter(pathToCubeFile)) { sw.WriteLine(fileString); } }
private string GenerateFileString(LEDCubeModel cube, int number) { var tempCount = cube.IsTemplate ? cube.CurrentLEDCubeTemplateActionsModel.StepsStringsDiods.Count.ToString() : cube.StepsDiods.Count.ToString(); string result = $"*{number}*+{cube.Name}+t{(cube.IsTemplate ? cube.CurrentLEDCubeTemplateActionsModel.Name : "0")}tm{tempCount}m-"; if (!cube.IsTemplate) { for (int i = 0; i < cube.StepsDiods.Count; i++) { for (int j = 0; j < 8; j++) { for (int k = 0; k < 8; k++) { for (int l = 0; l < 8; l++) { result += cube.StepsDiods[i][j, k, l] ? "1" : "0"; } } } result += "-" + cube.StepsTiming[i].ToString() + "-"; } } else { for (int step = 0; step < cube.CurrentLEDCubeTemplateActionsModel.StepsStringsDiods.Count; step++) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { for (int k = 0; k < 8; k++) { result += cube.StepsDiods[step][i, j, k] ? "1" : "0"; } } } result += $"T{cube.CurrentLEDCubeTemplateActionsModel.StepsTimingDiods[step]}T"; for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { for (int k = 0; k < 8; k++) { if (cube.CurrentLEDCubeTemplateActionsModel.StepsDiods[step].First()[i, j, k]) { var firstNum = int.Parse(cube.CurrentLEDCubeTemplateActionsModel.StepsStringsDiods[step].First()[i, j, k]); int secondNum = -1; for (int i2 = 0; i2 < 8; i2++) { for (int j2 = 0; j2 < 8; j2++) { for (int k2 = 0; k2 < 8; k2++) { var secondTarget = cube.CurrentLEDCubeTemplateActionsModel.StepsStringsDiods[step].Last()[i2, j2, k2]; if (int.Parse(secondTarget) == firstNum) { secondNum = i2 * 100 + j2 * 10 + k2; } } } } if (secondNum != -1) { cube.StepsDiods[step][i, j, k] = cube.StepsDiods[step][secondNum / 100, (secondNum / 10) % 10, secondNum % 10]; } result += cube.StepsDiods[step][i, j, k] ? "1" : "0"; } else { result += cube.StepsDiods[step][i, j, k] ? "1" : "0"; } } } } result += $"T{cube.CurrentLEDCubeTemplateActionsModel.StepsTimingDiods[step + 10]}T"; } } return(result + "#\n"); }
private LEDCubeModel GetLEDCubeModelFromString(string line) { var resultModel = new LEDCubeModel(); resultModel.StepsTiming = new Dictionary <int, int>(); resultModel.StepsDiods = new Dictionary <int, bool[, , ]>(); for (int str = 0; str < line.Count(); str++) { if (line[str] == '+') { string name = string.Empty; str++; while (line[str] != '+') { name += line[str]; str++; } str++; resultModel.Name = name; } if (line[str] == 't') { str++; resultModel.IsTemplate = line[str] == '1'; str++; } if (line[str] == 'm') { str++; string numStepsStr = string.Empty; while (line[str] != 'm') { numStepsStr += line[str]; str++; } int numSteps = int.Parse(numStepsStr); for (int k = 0; k < numSteps; k++) { resultModel.StepsDiods.Add(k, new bool[8, 8, 8]); } str++; } if (line[str] == '-') { str++; for (int step = 0; step < resultModel.StepsDiods.Count; step++) { for (int i = 0; i < 8; i++) { for (int j = 0; j < 8; j++) { for (int k = 0; k < 8; k++) { resultModel.StepsDiods[step][i, j, k] = line[str] == '1'; str++; } } } str++; string timing = string.Empty; while (line[str] != '-') { timing += line[str]; str++; } resultModel.StepsTiming.Add(step, int.Parse(timing)); str++; } } } return(resultModel); }