public int GetMoves(Couronne courrone)
        {
            switch (courrone)
            {
            case Couronne.Max:
                return(MaxMovesCount);

                break;

            case Couronne.MidMax:
                return(MidMaxMovesCount);

                break;

            case Couronne.MidMin:
                return(MidMinMovesCount);

                break;

            default:
                return(0);

                break;
            }
        }
예제 #2
0
 public MoveClickEventArgs(MotorMove mv, Axe a, Sens s, Couronne c)
 {
     MotorMove = mv;
     Axe       = a;
     Sens      = s;
     Couronne  = c;
 }
        public void Add(Axe a, Couronne c, Sens s)
        {
            Add(new Move(a, c, s));

            var motorMove = new MotorMove(a, c, s);

            if (MotorMoves.Count > 0 && MotorMoves.Last().Axe == a)
            {
                MotorMoves.Last().Add(c, s);
            }
            else
            {
                MotorMoves.Add(motorMove);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="state"></param>
        /// <param name="remainQuarters"></param>
        /// <param name="sens">1 ou -1</param>
        /// <param name="axe"></param>
        //private static void AddWithAnticollision(GlobalState state,int[] remainQuarters, int sens, Axe axe)
        //{
        //    var couronnesToMove = new List<Couronne>();
        //    var couronnesToFix = new List<Couronne>();

        //    if (Math.Sign(remainQuarters[0]) == sens)
        //    {
        //        couronnesToMove.Add(Couronne.MidMin);
        //        remainQuarters[0] -= sens ;
        //    }
        //    else couronnesToFix.Add(Couronne.MidMin);

        //    if (Math.Sign(remainQuarters[1]) == sens)
        //    {
        //        couronnesToMove.Add(Couronne.MidMax);
        //    remainQuarters[1] -= sens;
        //    }
        //    else couronnesToFix.Add(Couronne.MidMax);

        //    if (Math.Sign(remainQuarters[2]) == sens)
        //    {
        //        couronnesToMove.Add(Couronne.Max);
        //        remainQuarters[2]-= sens;
        //    }
        //    else couronnesToFix.Add(Couronne.Max);


        //    if (couronnesToMove.Count == 0) return;

        //    Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.DisengagedAcceleration));
        //    Add(new SetSpeedInstruction(state.HardwareConfigGlobal.DisengagedSpeed));

        //    // mise en position des couronnes parallèles
        //    foreach (var c in couronnesToFix)
        //    {
        //        AddMoveToKnowPosition(axe, c, sens > 0 ? KnownPosition.MinStop : KnownPosition.MaxStop);
        //    }

        //    // mise en position des couronnes motrices
        //    foreach (var c in couronnesToMove)
        //    {
        //        AddMoveToKnowPosition(axe, c, sens > 0 ? KnownPosition.MaxStop : KnownPosition.MinStop);
        //    }


        //    //Déplacement des autres couronnes perpendiculaires
        //    foreach (var motor in state.Motors.Motors)
        //    {
        //        if (motor.Axe == axe) continue;
        //        /*
        //        var negCollision = couronnesToMove.Any((c) => motor.NegativeCollision.HasCollision(axe, c));
        //        var posCollision = couronnesToMove.Any((c) => motor.PositiveCollision.HasCollision(axe, c));

        //        KnownPosition pos;

        //        if (negCollision && posCollision) pos = KnownPosition.Middle;
        //        else if (negCollision) pos = KnownPosition.MaxStop;
        //        else if (posCollision) pos = KnownPosition.MinStop;
        //        else
        //        {
        //            // si pas de collision, ne pas toucher au moteur sauf s'il est en position middle non engreiné
        //            if (_designContext.GetPosition(motor.Courronne, motor.Axe) == KnownPosition.Middle) pos = KnownPosition.MinStop;
        //            else continue;
        //        }

        //        AddMoveToKnowPosition(motor.Axe, motor.Courronne, pos);
        //        */
        //        AddMoveToKnowPosition(motor.Axe, motor.Courronne, KnownPosition.Middle);

        //    }

        //    Add(new WaitTargetReachedInstruction());

        //    Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.EngagedAcceleration));
        //    Add(new SetSpeedInstruction(state.HardwareConfigGlobal.EngagedSpeed));

        //    // faire un quart de tour
        //    foreach(var c in couronnesToMove)
        //    {
        //        AddMoveToKnowPosition(axe, c, sens > 0 ? KnownPosition.PositiveQuarterFromMaxStop : KnownPosition.NegativeQuarterFromMinStop);
        //    }

        //    Add(new WaitTargetReachedInstruction());
        //}

        private static void AddMoveToKnowPosition(Axe axe, Couronne couronne, KnownPosition pos)
        {
            Add(new MoveToKnownPositionInstruction(axe, couronne, pos));

            /*
             * if (_designContext.GetPosition(couronne, axe) != pos)
             * {
             *  Add(new MoveToKnownPositionInstruction(axe, couronne, pos));
             *
             *  // un quart de tour ne modifie pas la position actuelle, ne mettre à jour que si changement
             *  if (pos != KnownPosition.NegativeQuarter && pos != KnownPosition.PositiveQuarter)
             *  {
             *      _designContext.SetPosition(couronne, axe, pos);
             *  }
             * }
             */
        }
        public void Add(Couronne c, Sens s)
        {
            switch (c)
            {
            case Couronne.Max:
                Increment(ref MaxMovesCount, s);
                break;

            case Couronne.MidMax:
                Increment(ref MidMaxMovesCount, s);
                break;

            case Couronne.MidMin:
                Increment(ref MidMinMovesCount, s);
                break;
            }
        }
예제 #6
0
        public Move(Axe a, Couronne c, Sens s)
        {
            _axe      = a;
            _couronne = c;
            _sens     = s;

            _vector = Vector3.Zero;

            switch (a)
            {
            case Axe.X:
                _vector.X = (int)c;
                break;

            case Axe.Y:
                _vector.Y = (int)c;
                break;

            case Axe.Z:
                _vector.Z = (int)c;
                break;
            }
        }
        private void SetCollision(Axe a, Couronne c, bool value)
        {
            int cId;

            switch (c)
            {
            case Couronne.MidMin:
                cId = 0;
                break;

            case Couronne.MidMax:
                cId = 1;
                break;

            case Couronne.Max:
                cId = 2;
                break;

            default:
                return;
            }

            items[(int)a, cId] = value;
        }
        public bool HasCollision(Axe a, Couronne c)
        {
            int cId;

            switch (c)
            {
            case Couronne.MidMin:
                cId = 0;
                break;

            case Couronne.MidMax:
                cId = 1;
                break;

            case Couronne.Max:
                cId = 2;
                break;

            default:
                return(false);
            }

            return(items[(int)a, cId]);
        }
예제 #9
0
        static void Main(string[] args)
        {
            int reponse;

            do
            {
                Console.Clear();
                //Console.BackgroundColor = ConsoleColor.Green;
                Console.ForegroundColor = ConsoleColor.Red;
                Console.SetCursorPosition(15, 2);
                Console.WriteLine("1  - Calcul de la surface d'un Carre");
                Console.SetCursorPosition(15, 3);
                Console.WriteLine("2  - Calcul de la surface d'un Cercle");
                Console.SetCursorPosition(15, 4);
                Console.WriteLine("3  - Calcul de la surface d'un Triangle");
                Console.SetCursorPosition(15, 5);
                Console.WriteLine("4  - Calcul de la Surface d'un Rectangle");
                Console.SetCursorPosition(15, 6);
                Console.WriteLine("5  - Calcul de la surface d'un Losange");
                Console.SetCursorPosition(15, 7);
                Console.WriteLine("6  - Calcul de la surface d'un Trapeze");
                Console.SetCursorPosition(15, 8);
                Console.WriteLine("7  - Calcul de la surface d'un Parallelogramme");
                Console.SetCursorPosition(15, 9);
                Console.WriteLine("8  - Calcul de la surface d'un Pentagone Regulier");
                Console.SetCursorPosition(15, 10);
                Console.WriteLine("9  - Calcul de la surface d'une Couronne(Anneau)");
                Console.SetCursorPosition(15, 11);
                Console.WriteLine("10 - Calcul de la surface d'un Demi - Cercle");
                Console.SetCursorPosition(15, 12);
                Console.WriteLine("11 - Calcul de la surface d'une Ellipse");
                Console.SetCursorPosition(15, 13);
                Console.WriteLine("12 - Calcul de la surface d'un Hexagone Regulier");
                Console.SetCursorPosition(15, 14);
                Console.WriteLine("0 - Quitter");
                Console.ForegroundColor = ConsoleColor.Gray;

                Console.WriteLine("Entrez votre Choix");
                reponse = Convert.ToInt32(Console.ReadLine());

                switch (reponse)
                {
                // Calcul de la surface d'un carre
                case 1:

                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UN CARRE");
                    Console.ForegroundColor = ConsoleColor.Gray;

                    Console.WriteLine("Donnez la longueur du Cote");
                    float c = float.Parse(Console.ReadLine());

                    Carre ca        = new Carre(c);
                    float aireCarre = ca.Aire();
                    Console.WriteLine("La Surface d'un carre de {0} Cm de cote est : {1} Cm2", c, aireCarre);
                    Console.ReadLine();
                    break;

                // Calcul de la surface d'un Cercle
                case 2:

                    Console.ForegroundColor = ConsoleColor.White;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UN CERCLE");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine("Donnez la longueur du Rayon");
                    float r = float.Parse(Console.ReadLine());

                    Cercle ce         = new Cercle(r);
                    float  aireCercle = ce.Aire();
                    Console.WriteLine("La surface d'un cercle de {0} Cm de rayon est : {1} Cm2", r, aireCercle);
                    Console.ReadLine();
                    break;

                // Calcul de la surface d'un Triangle
                case 3:

                    Console.ForegroundColor = ConsoleColor.Green;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UN TRIANGLE");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    //Figure();
                    Console.WriteLine("Donnez la longueur de la base du triangle");
                    float B = float.Parse(Console.ReadLine());
                    Console.WriteLine("Donnez la longueur de la hauteur de triangle");
                    float h = float.Parse(Console.ReadLine());

                    Triangle tr           = new Triangle(B, h);
                    float    aireTriangle = tr.Aire();
                    Console.WriteLine("La surface d'un Triangle de {0} Cm de base et {1} Cm de hauteur est : {2} Cm2", B, h, aireTriangle);
                    Console.ReadLine();
                    break;

                // Calcul de la Surface d'un rectangle
                case 4:

                    Console.ForegroundColor = ConsoleColor.Magenta;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UN RECTANGLE");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine("Donnez la longueur du rectangle");
                    float L = float.Parse(Console.ReadLine());
                    Console.WriteLine("Donnez la largeur du rectangle");
                    float l = float.Parse(Console.ReadLine());

                    Rectangle re            = new Rectangle(L, l);
                    float     aireRectangle = re.Aire();
                    Console.WriteLine("La surface d'un rectangle de {0} Cm de Long et {1} Cm de large est : {2} Cm2", L, l, aireRectangle);
                    Console.ReadLine();
                    break;

                // Calcul de la surface d'un Losange
                case 5:

                    Console.ForegroundColor = ConsoleColor.Blue;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UN LOSANGE");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine("Donnez la taille de la grande diagonale");
                    float gd = float.Parse(Console.ReadLine());
                    Console.WriteLine("Donnez la taille de la petite diagonale");
                    float pd = float.Parse(Console.ReadLine());

                    Losange lo          = new Losange(gd, pd);
                    float   aireLosange = lo.Aire();
                    Console.WriteLine("La surface d'un Losange de {0} Cm de grande diagonal et {1} Cm de petite diagonale est : {2} Cm2", gd, pd, aireLosange);
                    Console.ReadLine();
                    break;

                // Calcul de la surface d'un Trapeze
                case 6:
                    Console.ForegroundColor = ConsoleColor.Magenta;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UN TRAPEZE");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine("Donnez la taille de la grande base");
                    float gb = float.Parse(Console.ReadLine());
                    Console.WriteLine("Donnez la taille de la petite base");
                    float pb = float.Parse(Console.ReadLine());
                    Console.WriteLine("Donnez la taille de la hauteur");
                    float ha = float.Parse(Console.ReadLine());

                    Trapeze Tr          = new Trapeze(gb, pb, ha);
                    float   aireTrapeze = Tr.Aire();
                    Console.WriteLine("La surface d'un Trapeze de {0} Cm de grande base, {1} Cm de petite base et {2} de hauteur est : {3} Cm2", gb, pb, ha, aireTrapeze);
                    Console.ReadLine();
                    break;

                // Calcul de la surface d'un Parallelogramme
                case 7:
                    Console.ForegroundColor = ConsoleColor.Yellow;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UN PARALLELOGRAMME");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine("Donnez la longueur de la grande base du parallelogramme");
                    float lb = float.Parse(Console.ReadLine());
                    Console.WriteLine("Donnez la taille de la hauteur du parallelogramme");
                    float ht = float.Parse(Console.ReadLine());

                    Parallelogramme Pa = new Parallelogramme(lb, ht);
                    float           aireParallelogramme = Pa.Aire();
                    Console.WriteLine("La surface d'un Parallelogramme de {0} Cm de longueur de la base et de {1} Cm de hauteur est : {2} Cm2", lb, ht, aireParallelogramme);
                    Console.ReadLine();

                    break;

                // Calcul de la surface d'un Pentagone Regulier
                case 8:
                    Console.ForegroundColor = ConsoleColor.DarkRed;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UN PENTAGONE REGULIER");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine("Donnez la Longueur du triangle");
                    float LT = float.Parse(Console.ReadLine());
                    Console.WriteLine("Donnez la longueur de la hauteur");
                    float HT = float.Parse(Console.ReadLine());

                    Pentagone Pe            = new Pentagone(LT, HT);
                    float     airePentagone = Pe.Aire();
                    Console.WriteLine("La surface d'un Pentagone de {0} cm de la Longueur du triangle et de {1} Cm de hauteur est : {2} Cm2", LT, HT, airePentagone);
                    Console.ReadLine();
                    break;

                // Calcul de la surface d'une Couronne(Anneau)
                case 9:
                    Console.ForegroundColor = ConsoleColor.DarkMagenta;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UNE COURONNE");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine("Donnez la taille du grand Rayon");
                    float gR = float.Parse(Console.ReadLine());
                    Console.WriteLine("Donnez la taille du petit Rayon");
                    float pR = float.Parse(Console.ReadLine());

                    Couronne Cou          = new Couronne(gR, pR);
                    float    aireCouronne = Cou.Aire();
                    Console.WriteLine("La surface d'une Couronne de {0} Cm de grand rayon et de {1} Cm de petit rayon est {2} Cm2", gR, pR, aireCouronne);
                    Console.ReadLine();

                    break;

                // Calcul de la surface d'un Demi - Cercle
                case 10:
                    Console.ForegroundColor = ConsoleColor.DarkGreen;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UN DEMI-CERCLE");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine("Donnez la taille du rayon du Demi - cercle");
                    float R = float.Parse(Console.ReadLine());

                    Demicercle DC             = new Demicercle(R);
                    float      aireDemicercle = DC.Aire();
                    Console.WriteLine("La surface d'un Demi Cercle de rayon {0} Cm est : {1} Cm2", R, aireDemicercle);
                    Console.ReadLine();
                    break;

                // Calcul de la surface d'une Ellipse
                case 11:
                    Console.ForegroundColor = ConsoleColor.Cyan;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UNE ELLIPSE");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine("Donnez la taille de la moitier du grand axe");
                    float mga = float.Parse(Console.ReadLine());
                    Console.WriteLine("Donnez la taille de la moitier du grand axe");
                    float mpa = float.Parse(Console.ReadLine());

                    Ellipse El          = new Ellipse(mga, mpa);
                    float   aireEllipse = El.Aire();
                    Console.WriteLine("La surface d'une Ellipse de {0} Cm de grand axe et de {1} Cm de petit axe est : {2} Cm2", mga, mpa, aireEllipse);
                    Console.ReadLine();
                    break;

                // Calcul de la surface d'un Hexagone Regulier
                case 12:
                    Console.ForegroundColor = ConsoleColor.DarkYellow;
                    Console.SetCursorPosition(15, 19);
                    Console.WriteLine("LA SURFACE D'UN HEXAGONE");
                    Console.ForegroundColor = ConsoleColor.Gray;
                    Console.WriteLine("Donnez la longueur du Coté de l'Hexagone");
                    float Ct = float.Parse(Console.ReadLine());

                    Hexagone He           = new Hexagone(Ct);
                    float    aireHexagone = He.Aire();
                    Console.WriteLine("La surface d'un Hexagone de {0} Cm de cote est : {1} m2", Ct, aireHexagone);
                    Console.ReadLine();
                    break;

                default:
                    break;
                }
            } while (reponse != 0);
        }
 public int?GetTargetPosition(Couronne c, Axe a)
 {
     return(_lst.First((x) => x.Couronne == c && x.Axe == a).TargetPosition);
 }
 public void SetTargetPosition(Couronne c, Axe a, int value)
 {
     _lst.First((x) => x.Couronne == c && x.Axe == a).TargetPosition = value;
 }
        private static void AddWithAnticollision(GlobalState state, int quarters, Couronne couronne, Axe axe)
        {
            if (quarters == 0)
            {
                return;
            }

            var couronnesToFix = new Couronne[] { Couronne.MidMin, Couronne.MidMax, Couronne.Max }.Except(new Couronne[] { couronne }).ToArray();

            var sens = Math.Sign(quarters);

            Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.DisengagedAcceleration));
            Add(new SetSpeedInstruction(state.HardwareConfigGlobal.DisengagedSpeed));

            // mise en position des couronnes parallèles
            foreach (var c in couronnesToFix)
            {
                /*
                 * if (couronne == Couronne.Max)
                 * {
                 *  AddMoveToKnowPosition(axe, c, sens < 0 ? KnownPosition.MinStop : KnownPosition.MaxStop);
                 * }
                 * else
                 * {
                 */
                if (axe == Axe.Z && couronne == Couronne.Max)
                {
                    AddMoveToKnowPosition(axe, c, KnownPosition.MinStop);
                }
                else if (axe == Axe.Y && couronne == Couronne.Max)
                {
                    AddMoveToKnowPosition(axe, c, KnownPosition.MaxStop);
                }
                else
                {
                    AddMoveToKnowPosition(axe, c, sens > 0 ? KnownPosition.MinStop : KnownPosition.MaxStop);
                }
                // }
            }

            if (axe == Axe.Z && couronne == Couronne.Max)
            {
                AddMoveToKnowPosition(axe, couronne, KnownPosition.MaxStop);
            }
            else if (axe == Axe.Y && couronne == Couronne.Max)
            {
                AddMoveToKnowPosition(axe, couronne, KnownPosition.MinStop);
            }
            else
            {
                // moteur en position
                AddMoveToKnowPosition(axe, couronne, sens > 0 ? KnownPosition.MaxStop : KnownPosition.MinStop);
            }



            //Déplacement des autres couronnes perpendiculaires
            foreach (var motor in state.Motors.Motors)
            {
                if (motor.Axe == axe)
                {
                    continue;
                }

                //var negCollision = motor.NegativeCollision.HasCollision(axe, couronne);
                //var posCollision = motor.PositiveCollision.HasCollision(axe, couronne);

                //KnownPosition pos;

                //if (negCollision && posCollision) pos = KnownPosition.Middle;
                //else if (negCollision) pos = KnownPosition.MaxStopIntermediaire;
                //else if (posCollision) pos = KnownPosition.MinStopIntermediaire;
                //else
                //{
                //    // si pas de collision, ne pas toucher au moteur sauf s'il est en position middle non engreiné
                //    if (_designContext.GetPosition(motor.Courronne, motor.Axe) == KnownPosition.Middle) pos = KnownPosition.MinStopIntermediaire;
                //    else continue;
                //}

                //AddMoveToKnowPosition(motor.Axe, motor.Courronne, pos);

                AddMoveToKnowPosition(motor.Axe, motor.Courronne, KnownPosition.Middle);
            }

            Add(new WaitTargetReachedInstruction());

            Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.EngagedAcceleration));
            Add(new SetSpeedInstruction(state.HardwareConfigGlobal.EngagedSpeed));

            /*
             * if(couronne == Couronne.Max)
             * {
             *  AddMoveToKnowPosition(axe, Couronne.MidMin, sens > 0 ? KnownPosition.PositiveSmallAmount : KnownPosition.NegativeSmallAmount);
             *  AddMoveToKnowPosition(axe, Couronne.MidMax, sens > 0 ? KnownPosition.PositiveSmallAmount : KnownPosition.NegativeSmallAmount);
             *  Add(new WaitTargetReachedInstruction());
             *  Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.DisengagedAcceleration));
             *  Add(new SetSpeedInstruction(state.HardwareConfigGlobal.DisengagedSpeed));
             *  AddMoveToKnowPosition(axe, Couronne.MidMin, sens < 0 ? KnownPosition.PositiveSmallAmount : KnownPosition.NegativeSmallAmount);
             *  AddMoveToKnowPosition(axe, Couronne.MidMax, sens < 0 ? KnownPosition.PositiveSmallAmount : KnownPosition.NegativeSmallAmount);
             *  Add(new WaitTargetReachedInstruction());
             *  AddMoveToKnowPosition(axe, Couronne.MidMin, sens > 0 ? KnownPosition.MinStop : KnownPosition.MaxStop);
             *  AddMoveToKnowPosition(axe, Couronne.MidMax, sens > 0 ? KnownPosition.MinStop : KnownPosition.MaxStop);
             *  Add(new WaitTargetReachedInstruction());
             *  Add(new SetAccelerationInstruction(state.HardwareConfigGlobal.EngagedAcceleration));
             *  Add(new SetSpeedInstruction(state.HardwareConfigGlobal.EngagedSpeed));
             * }
             */

            if (axe == Axe.Z && couronne == Couronne.Max && quarters == -1)
            {
                AddMoveToKnowPosition(axe, couronne, KnownPosition.UTurnPositive);
                AddMoveToKnowPosition(axe, couronne, KnownPosition.PositiveQuarter);
            }
            else if (axe == Axe.Y && couronne == Couronne.Max && quarters == 1)
            {
                AddMoveToKnowPosition(axe, couronne, KnownPosition.UTurnNegative);
                AddMoveToKnowPosition(axe, couronne, KnownPosition.NegativeQuarter);
            }
            else if (axe == Axe.Y && couronne == Couronne.Max && quarters == 2)
            {
                AddMoveToKnowPosition(axe, couronne, KnownPosition.UTurnNegative);
            }
            else
            {
                // faire les quarts de tour
                AddMoveToKnowPosition(axe, couronne, quarters == -1 ? KnownPosition.NegativeQuarter : (quarters == 1 ? KnownPosition.PositiveQuarter : KnownPosition.UTurnPositive));
            }

            Add(new WaitTargetReachedInstruction());
        }
 public KnownPosition GetPosition(Couronne c, Axe a)
 {
     return(_lst.First((x) => x.Couronne == c && x.Axe == a).Position);
 }
 public void SetPosition(Couronne c, Axe a, KnownPosition value)
 {
     _lst.First((x) => x.Couronne == c && x.Axe == a).Position = value;
 }
예제 #15
0
 public MoveToKnownPositionInstruction(Axe axe, Couronne couronne, KnownPosition pos)
 {
     this.Couronne      = couronne;
     this.Axe           = axe;
     this.KnownPosition = pos;
 }
        public MotorMove(Axe a, Couronne c, Sens s)
        {
            this.Axe = a;

            Add(c, s);
        }
예제 #17
0
        public static void MoveToKnownPosition(Axe Axe, Couronne Couronne, KnownPosition KnownPosition, ResolutionSessionRuntimeContext ctx = null)
        {
            int steps;

            using (var state = GlobalState.GetState())
            {
                var Motor = state.Motors.Motors.FirstOrDefault((x) => x.Axe == Axe && x.Courronne == Couronne);

                if (Motor == null)
                {
                    throw new Exception("Unable to find motor definition for crown " + Couronne + " axe " + Axe);
                }

                var stepPerQuarter = state.HardwareConfigGlobal.StepsPerCubeQuarter;

                var modPos = Motor.Position % stepPerQuarter;
                if (modPos < 0)
                {
                    modPos += stepPerQuarter;
                }

                switch (KnownPosition)
                {
                case KnownPosition.NegativeQuarter:
                    steps = -stepPerQuarter;
                    break;

                case KnownPosition.PositiveQuarter:
                    steps = stepPerQuarter;
                    break;

                case KnownPosition.NegativeQuarterFromMinStop:
                    steps = -stepPerQuarter + Motor.StepsToPositivePosition / 2;
                    break;

                case KnownPosition.PositiveQuarterFromMaxStop:
                    steps = stepPerQuarter - Motor.StepsToPositivePosition / 2;
                    break;

                case KnownPosition.UTurnFromMaxStop:
                    steps = 2 * stepPerQuarter - Motor.StepsToPositivePosition / 2;;
                    break;

                case KnownPosition.UTurnPositive:
                    steps = 2 * stepPerQuarter;
                    break;

                case KnownPosition.UTurnNegative:
                    steps = -2 * stepPerQuarter;
                    break;

                case KnownPosition.MaxStop:
                    steps = Motor.StepsToPositivePosition - modPos;
                    break;

                case KnownPosition.MinStop:
                    steps = -modPos;
                    break;

                case KnownPosition.Middle:
                    steps = Motor.StepsToPositivePosition / 2 - modPos;
                    break;

                case KnownPosition.PositiveSmallAmount:
                    steps = stepPerQuarter / 6;
                    break;

                case KnownPosition.NegativeSmallAmount:
                    steps = -stepPerQuarter / 6;
                    break;

                case KnownPosition.MaxStopIntermediaire:
                    steps = Motor.StepsToPositivePosition - modPos - stepPerQuarter / 10;
                    break;

                case KnownPosition.MinStopIntermediaire:
                    steps = -modPos + stepPerQuarter / 10;
                    break;

                default:
                    throw new Exception("Unknow position : " + KnownPosition);
                }


                steps += Motor.Position;

                if (ctx != null)
                {
                    ctx.SetTargetPosition(Motor.Courronne, Motor.Axe, steps);
                }


                if (state.Simulated)
                {
                    return;
                }


                Runner.BeginMoveAbsolute(Motor, steps);
            }
        }