public void Flip(Axis _axis) { Vector3 sizeAll = SizeAll; for (int i = 0; i < MatrixList.Count; i++) { QbMatrix qm = MatrixList[i]; for (int x = 0; x < (_axis == Axis.X ? qm.SizeX * 0.5f : qm.SizeX); x++) { for (int y = 0; y < (_axis == Axis.Y ? qm.SizeY * 0.5f : qm.SizeY); y++) { for (int z = 0; z < (_axis == Axis.Z ? qm.SizeZ * 0.5f : qm.SizeZ); z++) { int ii = _axis == Axis.X ? (int)qm.SizeX - x - 1 : x; int jj = _axis == Axis.Y ? (int)qm.SizeY - y - 1 : y; int kk = _axis == Axis.Z ? (int)qm.SizeZ - z - 1 : z; int _b = qm.Voxels[x, y, z]; qm.Voxels[x, y, z] = qm.Voxels[ii, jj, kk]; qm.Voxels[ii, jj, kk] = _b; } } } qm.PosX = _axis == Axis.X ? (int)sizeAll.x - qm.PosX - (int)qm.SizeX : qm.PosX; qm.PosY = _axis == Axis.Y ? (int)sizeAll.y - qm.PosY - (int)qm.SizeY : qm.PosY; qm.PosZ = _axis == Axis.Z ? (int)sizeAll.z - qm.PosZ - (int)qm.SizeZ : qm.PosZ; MatrixList[i] = qm; } }
public void Rotate(Axis _axis, bool reverse = false) { for (int index = 0; index < MatrixList.Count; index++) { QbMatrix qm = MatrixList[index]; int _newSizeX = qm.SizeX; int _newSizeY = qm.SizeY; int _newSizeZ = qm.SizeZ; int _newPosX = qm.PosX; int _newPosY = qm.PosY; int _newPosZ = qm.PosZ; int[,,] _newByte = null; switch (_axis) { case Axis.X: _newSizeY = qm.SizeZ; _newSizeZ = qm.SizeY; _newPosY = qm.PosZ; _newPosZ = qm.PosY; _newByte = new int[_newSizeX, _newSizeY, _newSizeZ]; for (int i = 0; i < qm.SizeX; i++) { for (int j = 0; j < qm.SizeY; j++) { for (int k = 0; k < qm.SizeZ; k++) { _newByte[i, k, j] = qm.Voxels[i, j, k]; } } } qm.SizeY = _newSizeY; qm.SizeZ = _newSizeZ; qm.PosY = _newPosY; qm.PosZ = _newPosZ; qm.Voxels = _newByte; MatrixList[index] = qm; break; case Axis.Y: _newSizeX = qm.SizeZ; _newSizeZ = qm.SizeX; _newPosX = qm.PosZ; _newPosZ = qm.PosX; _newByte = new int[_newSizeX, _newSizeY, _newSizeZ]; for (int i = 0; i < qm.SizeX; i++) { for (int j = 0; j < qm.SizeY; j++) { for (int k = 0; k < qm.SizeZ; k++) { _newByte[k, j, i] = qm.Voxels[i, j, k]; } } } qm.SizeX = _newSizeX; qm.SizeZ = _newSizeZ; qm.PosX = _newPosX; qm.PosZ = _newPosZ; qm.Voxels = _newByte; MatrixList[index] = qm; break; case Axis.Z: _newSizeX = qm.SizeY; _newSizeY = qm.SizeX; _newPosX = qm.PosY; _newPosY = qm.PosX; _newByte = new int[_newSizeX, _newSizeY, _newSizeZ]; for (int i = 0; i < qm.SizeX; i++) { for (int j = 0; j < qm.SizeY; j++) { for (int k = 0; k < qm.SizeZ; k++) { _newByte[j, i, k] = qm.Voxels[i, j, k]; } } } qm.SizeX = _newSizeX; qm.SizeY = _newSizeY; qm.PosX = _newPosX; qm.PosY = _newPosY; qm.Voxels = _newByte; MatrixList[index] = qm; break; } } switch (_axis) { case Axis.X: if (reverse) { Flip(Axis.Z); } else { Flip(Axis.Y); } break; case Axis.Y: if (reverse) { Flip(Axis.X); } else { Flip(Axis.Z); } break; case Axis.Z: if (reverse) { Flip(Axis.Y); } else { Flip(Axis.X); } break; } }