// Функция для инициализации всех частей, заполнения списка частей, // определения расстояний между разрезами и занесением их в списки private static void GetPiecesAndCuts() { int lastX = -1, lastY = -1, lastZ = -1; for (int i = 0; i < n; i++) { Cuboid piece = new Cuboid(); piece.Init(); // Проверяем положение, которое занимает новая часть switch (piece.SpecialPosition) { // Часть не содержит никакую ось case 'N': break; // Часть содержит начало координат // Добавляем соответсвующие ее размеры в начало списков, // описывающих расстояния между разрезами case 'F': cutX.AddFirst(piece.GetDimension(0, 2)); cutY.AddFirst(piece.GetDimension(4, 2)); cutZ.AddFirst(piece.GetDimension(0, 4)); break; // Часть содержит ось X // Добавляем в список, описывающий расстояния между разрезами, // перпендикулярными оси X длину ребра, лежащего на этой оси case 'X': cutX.AddLast(piece.GetDimension(0, 2)); break; case 'Y': cutY.AddLast(piece.GetDimension(4, 2)); break; case 'Z': cutZ.AddLast(piece.GetDimension(0, 4)); break; // Часть является последней по оси X, т.е. самой правой case 'R': lastX = i; break; case 'B': lastY = i; break; case 'U': lastZ = i; break; } pieces[i] = piece; } if (lastX != -1) cutX.AddLast(pieces[lastX].GetDimension(0, 2)); if (lastY != -1) cutY.AddLast(pieces[lastY].GetDimension(4, 2)); if (lastZ != -1) cutZ.AddLast(pieces[lastZ].GetDimension(0, 4)); }