Пример #1
0
        public void TryPack(Figure paral)
        {
            if (InsideColor.Contains(paral.Color[0])) //FrontAngles
            {
                if (InsideColor.Contains(paral.Color[2]))
                {
                    if (InsideColor.Contains(paral.Color[4]))
                        Location.Set(0, 0, 0);
                    if (InsideColor.Contains(paral.Color[5]))
                        Location.Set(0, 0, paral.Size.Z - CorrectOrientation.Z);
                }
                if (InsideColor.Contains(paral.Color[3]))
                {
                    if (InsideColor.Contains(paral.Color[4]))
                        Location.Set(0, paral.Size.Y - CorrectOrientation.Y, 0);
                    if (InsideColor.Contains(paral.Color[5]))
                        Location.Set(0, paral.Size.Y - CorrectOrientation.Y, paral.Size.Z - CorrectOrientation.Z);
                }
            }

            if (InsideColor.Contains(paral.Color[1])) //BackAngles
            {
                if (InsideColor.Contains(paral.Color[2]))
                {
                    if (InsideColor.Contains(paral.Color[4]))
                        Location.Set(paral.Size.X - CorrectOrientation.X, 0, 0);
                    if (InsideColor.Contains(paral.Color[5]))
                        Location.Set(paral.Size.X - CorrectOrientation.X, 0, paral.Size.X - CorrectOrientation.X);
                }
                if (InsideColor.Contains(paral.Color[3]))
                {
                    if (InsideColor.Contains(paral.Color[4]))
                        Location.Set(paral.Size.X - CorrectOrientation.X, paral.Size.Y - CorrectOrientation.Y, 0);
                    if (InsideColor.Contains(paral.Color[5]))
                        Location.Set(paral.Size.X - CorrectOrientation.X, paral.Size.Y - CorrectOrientation.Y,
                                     paral.Size.Z - CorrectOrientation.Z);
                }
            }
        }
Пример #2
0
        public Orientator(Figure paral)
        {
            var Orient = new Dictionary<string, string>();
            string R = paral.Color[0].ToString(), O = paral.Color[1].ToString(), Y = paral.Color[2].ToString(), G = paral.Color[3].ToString(), B = paral.Color[4].ToString(), V = paral.Color[5].ToString();

            foreach (string str in new List<string> { (R + O + Y + G + B + V), (R + O + G + Y + V + B), (O + R + Y + G + V + B), (O + R + G + Y + B + V)})
                Orient[str] = "XYZ";
            foreach (String str in new List<string> { (R + O + V + B + Y + G), (R + O + B + V + G + Y), (O + R + B + V + Y + G), (O + R + V + B + G + Y)})
                Orient[str] = "XZY";
            foreach (String str in new List<string> { (Y + G + O + R + B + V), (Y + G + R + O + V + B), (G + Y + O + R + V + B), (G + Y + R + O + B + V)})
                Orient[str] = "YXZ";
            foreach (String str in new List<string> { (Y + G + V + B + O + R), (Y + G + B + V + R + O), (G + Y + B + V + O + R), (G + Y + V + B + R + O)})
                Orient[str] = "ZXY";
            foreach (String str in new List<string> { (B + V + Y + G + O + R), (B + V + G + Y + R + O), (V + B + Y + G + R + O), (V + B + G + Y + O + R)})
                Orient[str] = "ZYX";
            foreach (String str in new List<string> { (B + V + R + O + Y + G), (B + V + O + R + G + Y), (V + B + O + R + Y + G), (V + B + R + O + G + Y)})
                Orient[str] = "YZX";

            Orientation = new Dictionary<string, Tuple<string, string>>();
            string pattern = "FBDULR";
            foreach (string key in Orient.Keys)
            {
                char [] sides = new char[2];
                for (int i = 0; i < 6; i++)
                {
                    if (key[i] == paral.Color[0])
                        sides[0] = pattern[i];
                    if (key[i] == paral.Color[2])
                        sides[1] = pattern[i];
                }

                Orientation[key] = new Tuple<string, string>(Orient[key], sides[0].ToString() + sides[1].ToString());

                StringBuilder skips = new StringBuilder(key);
                for (int i = 0; i < skips.Length; i++)
                {
                    skips[i] = '.';
                    for (int j = i; j < skips.Length; j++)
                    {
                        skips[j] = '.';
                        Orientation[skips.ToString()] = new Tuple<string, string>(Orient[key],
                                                                       sides[0].ToString() + sides[1].ToString());
                        if(i != j)
                            skips[j] = key[j];
                    }
                    skips[i] = key[i];
                }
            }
        }
Пример #3
0
 public void PackFront(List<Figure> figures, Figure paral)
 {
     List<Figure> frontFigure = new List<Figure>();
     Dot nextDot = new Dot(0, 0, 0);
     foreach (Figure f in figures)
     {
         if (f.InsideColor.Contains(paral.Color[0]))
         {
             if (f.Location.Compare(0, 0, 0))
             {
                 if ((paral.Size.X == f.CorrectOrientation.X) && (paral.Size.Y == f.CorrectOrientation.Y))
                     nextDot = new Dot(0, 0, f.CorrectOrientation.Z);
                 if ((paral.Size.X == f.CorrectOrientation.X) && (paral.Size.Z == f.CorrectOrientation.Z))
                     nextDot = new Dot(0, f.CorrectOrientation.Y, 0);
                 if ((paral.Size.Y == f.CorrectOrientation.Y) && (paral.Size.Z == f.CorrectOrientation.Z))
                 {
                     nextDot = new Dot(f.CorrectOrientation.X, 0, 0);
                     PackSide(figures, nextDot);
                     return;
                 }
             }
             else
                 if(f.Location.Compare(-1,-1,-1))
                     frontFigure.Add(f);
         }
     }
     foreach (Figure f in frontFigure)
     {
         if (nextDot.Z != 0)
         {
             f.Location.Set(nextDot.X, nextDot.Y, nextDot.Z);
             nextDot.Z += f.CorrectOrientation.Z;
         }
         if (nextDot.Y != 0)
         {
             f.Location.Set(nextDot.X, nextDot.Y, nextDot.Z);
             nextDot.Y += f.CorrectOrientation.Y;
         }
     }
 }