예제 #1
0
        public DisplayPos GetDisplayPosByID(int IDtoFind)
        {
            DisplayPos Ret = null;

            if ((IDtoFind > 0) && (_displayPos != null))
            {
                foreach (DisplayPos current in _displayPos)
                {
                    if (current.actionID == IDtoFind)
                    {
                        Ret = current;
                    }
                }
            }

            return(Ret);
        }
예제 #2
0
        private void LoadDisplayPos()
        {
            if ((_mainModel.selectedStrategyDisplay != null) && (_modifiedRobotAction != null))
            {
                DisplayPos currentDisplayPos = _mainModel.selectedStrategyDisplay.GetDisplayPosByID(_currentRobotAction.ID);

                if (currentDisplayPos != null)
                {
                    _modifiedDisplayRobot = new DisplayPos(_modifiedRobotAction);
                    _modifiedDisplayRobot.AddInitialPos(currentDisplayPos.GetInitialPos());
                }
            }
        }
예제 #3
0
        public void ComputeRobotPos(Strategy currentStrategy)
        {
            DisplayPos         currentDisplayPos = null;
            List <DisplayPos>  nextList          = new List <DisplayPos>();
            RobotPos           currentRobotPos   = new RobotPos();
            List <RobotAction> allRobotActions   = null;

            if (currentStrategy != null)
            {
                // On commence par détruire les anciens éléments
                _displayPos = null;
                _displayPos = new List <DisplayPos>();

                // Creation de la liste
                allRobotActions = currentStrategy.GetAllRobotAction();
                foreach (RobotAction currentRobotAction in allRobotActions)
                {
                    currentDisplayPos = new DisplayPos(currentRobotAction);
                    _displayPos.Add(currentDisplayPos);
                }

                // Creation de l'objet initial
                currentRobotPos.x          = currentStrategy.DefaultPosX;
                currentRobotPos.y          = currentStrategy.DefaultPosY;
                currentRobotPos.angle      = currentStrategy.DefaultPosA;
                currentRobotPos.statusFlag = new RobotStatusFlag();

                // Creation du premier élément
                nextList.Clear();
                currentDisplayPos = GetDisplayPosByID(1);
                if (currentDisplayPos != null)
                {
                    currentDisplayPos.AddInitialPos(currentRobotPos);
                    nextList.Add(currentDisplayPos);
                }

                // On ajoute tous les élements de la stratégie principale
                foreach (DisplayPos current in _displayPos)
                {
                    if ((current.actionID >= 1) && (current.actionID < 1000))
                    {
                        nextList.Add(current);
                    }
                }

                int loopDetection = 0;

                while ((nextList.Count() > 0) && (loopDetection < loopDetectionMaxValue))
                {
                    loopDetection = loopDetection + 1;

                    // Etape 1 : On transfert les données de la liste nextIDs vers currentIDs
                    List <DisplayPos> currentList = new List <DisplayPos>(nextList);
                    DisplayPos        currentItem = null;
                    nextList.Clear();

                    // Etape 2 : Pour chaque élément de la liste
                    while (currentList.Count() > 0)
                    {
                        // On récupère le premier élément de la liste et on le supprimer de la liste courante
                        currentItem = currentList[0];
                        currentList.RemoveAt(0);

                        // Etape 2.1 : On calcule la position de sortie
                        List <RobotPos> outputPos = currentItem.GetOutputPos();

                        if ((outputPos != null) && (outputPos.Count() > 0))
                        {
                            // On ajoute les données que si on ne boucle pas sur nous même et qu'on a un ID valide
                            if ((currentItem.nextID != currentItem.actionID) && (currentItem.nextID > 0))
                            {
                                // On ajoute que si on est dans la stratégie principale
                                if (((currentItem.actionID > 0) && (currentItem.actionID < 100)) || ((currentItem.actionID >= 100) && (currentItem.nextID > 100)))
                                {
                                    currentDisplayPos = GetDisplayPosByID(currentItem.nextID);
                                    if (currentDisplayPos != null)
                                    {
                                        Boolean addNewItemToList = true;

                                        currentDisplayPos.AddInitialPos(outputPos);
                                        foreach (DisplayPos current in nextList)
                                        {
                                            if (current.actionID == currentDisplayPos.actionID)
                                            {
                                                addNewItemToList = false;
                                            }
                                        }

                                        foreach (DisplayPos current in currentList)
                                        {
                                            if (current.actionID == currentDisplayPos.actionID)
                                            {
                                                addNewItemToList = false;
                                            }
                                        }

                                        if (addNewItemToList == true)
                                        {
                                            nextList.Add(currentDisplayPos);
                                        }
                                    }
                                }
                            }
                        }
                    }

                    currentList.Clear();
                    currentList = null;
                }

                if (loopDetection >= loopDetectionMaxValue)
                {
                    MessageBox.Show("Une Loop a été détectée dans la stratégie!\nLa génération de la trajectoire est stoppée.", "Strategy Générator", MessageBoxButton.OK, MessageBoxImage.Warning);
                }
            }
        }
예제 #4
0
        public void ComputeRobotPos(Strategy currentStrategy)
        {
            DisplayPos currentDisplayPos = null;
            List<DisplayPos> nextList = new List<DisplayPos>();
            RobotPos currentRobotPos = new RobotPos();
            List<RobotAction> allRobotActions = null;

            if (currentStrategy != null)
            {
                // On commence par détruire les anciens éléments
                _displayPos = null;
                _displayPos = new List<DisplayPos>();

                // Creation de la liste
                allRobotActions = currentStrategy.GetAllRobotAction();
                foreach (RobotAction currentRobotAction in allRobotActions)
                {
                    currentDisplayPos = new DisplayPos(currentRobotAction);
                    _displayPos.Add(currentDisplayPos);
                }

                // Creation de l'objet initial
                currentRobotPos.x = currentStrategy.DefaultPosX;
                currentRobotPos.y = currentStrategy.DefaultPosY;
                currentRobotPos.angle = currentStrategy.DefaultPosA;
                currentRobotPos.statusFlag = new RobotStatusFlag();

                // Creation du premier élément
                nextList.Clear();
                currentDisplayPos = GetDisplayPosByID(1);
                if (currentDisplayPos != null)
                {
                    currentDisplayPos.AddInitialPos(currentRobotPos);
                    nextList.Add(currentDisplayPos);
                }

                // On ajoute tous les élements de la stratégie principale
                foreach (DisplayPos current in _displayPos)
                {
                    if ((current.actionID >= 1) && (current.actionID < 1000))
                        nextList.Add(current);
                }

                int loopDetection = 0;

                while ((nextList.Count() > 0) && (loopDetection < loopDetectionMaxValue))
                {
                    loopDetection = loopDetection + 1;

                    // Etape 1 : On transfert les données de la liste nextIDs vers currentIDs
                    List<DisplayPos> currentList = new List<DisplayPos>(nextList);
                    DisplayPos currentItem = null;
                    nextList.Clear();

                    // Etape 2 : Pour chaque élément de la liste
                    while (currentList.Count() > 0)
                    {
                        // On récupère le premier élément de la liste et on le supprimer de la liste courante
                        currentItem = currentList[0];
                        currentList.RemoveAt(0);

                        // Etape 2.1 : On calcule la position de sortie
                        List<RobotPos> outputPos = currentItem.GetOutputPos();

                        if ((outputPos != null) && (outputPos.Count() > 0))
                        {
                            // On ajoute les données que si on ne boucle pas sur nous même et qu'on a un ID valide
                            if((currentItem.nextID != currentItem.actionID) && (currentItem.nextID > 0))
                            {
                                // On ajoute que si on est dans la stratégie principale
                                if (((currentItem.actionID > 0) && (currentItem.actionID <100)) || ((currentItem.actionID >=100) && (currentItem.nextID > 100)))
                                {
                                    currentDisplayPos = GetDisplayPosByID(currentItem.nextID);
                                    if (currentDisplayPos != null)
                                    {
                                        Boolean addNewItemToList = true;

                                        currentDisplayPos.AddInitialPos(outputPos);
                                        foreach(DisplayPos current in nextList)
                                        {
                                            if (current.actionID == currentDisplayPos.actionID)
                                                addNewItemToList = false;
                                        }

                                        foreach (DisplayPos current in currentList)
                                        {
                                            if (current.actionID == currentDisplayPos.actionID)
                                                addNewItemToList = false;
                                        }

                                        if(addNewItemToList == true)
                                            nextList.Add(currentDisplayPos);
                                    }
                                }
                            }
                        }
                    }

                    currentList.Clear();
                    currentList = null;
                }

                if (loopDetection >= loopDetectionMaxValue)
                    MessageBox.Show("Une Loop a été détectée dans la stratégie!\nLa génération de la trajectoire est stoppée.", "Strategy Générator", MessageBoxButton.OK, MessageBoxImage.Warning);
            }
        }