]> SALOME platform Git repositories - modules/yacs.git/blob - src/genericgui/LinkAStar.hxx
Salome HOME
mergefrom branch BR_V511_PR tag mergeto_trunk_03feb09
[modules/yacs.git] / src / genericgui / LinkAStar.hxx
1 //  Copyright (C) 2006-2008  CEA/DEN, EDF R&D
2 //
3 //  This library is free software; you can redistribute it and/or
4 //  modify it under the terms of the GNU Lesser General Public
5 //  License as published by the Free Software Foundation; either
6 //  version 2.1 of the License.
7 //
8 //  This library is distributed in the hope that it will be useful,
9 //  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 //  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
11 //  Lesser General Public License for more details.
12 //
13 //  You should have received a copy of the GNU Lesser General Public
14 //  License along with this library; if not, write to the Free Software
15 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
16 //
17 //  See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
18 //
19 #ifndef _LINKASTAR_HXX_
20 #define _LINKASTAR_HXX_
21
22 #include "LinkMatrix.hxx"
23
24 #include <map>
25 #include <list>
26
27 namespace YACS
28 {
29   namespace HMI
30   {
31
32     class LCostNode
33     {
34     public:
35       LCostNode();
36       LCostNode(std::pair<int,int> parent);
37       virtual ~LCostNode() {};
38       inline void setParent(std::pair<int,int> parent) { _parent = parent; };
39       std::pair<int,int> getParent() const {return _parent; };
40       inline void setGCost(double c) { _gCost = c; };
41       inline void setHCost(double c) { _hCost = c; };
42       inline void setFCost(double c) { _fCost = c; };
43       inline double getGCost() const { return _gCost; };
44       inline double getHCost() const { return _hCost; };
45       inline double getFCost() const { return _fCost; };
46     protected:
47       double _gCost, _hCost, _fCost;
48       std::pair<int,int> _parent;
49     };
50
51     typedef std::map<std::pair<int,int>, LCostNode> LNodeMap;
52
53     class LinkAStar
54     {
55     public:
56       LinkAStar(const LinkMatrix& linkMatrix);
57       ~LinkAStar();
58       
59       bool computePath(LNode from, LNode to);
60       LNodePath givePath();
61       bool isAlreadyInList(std::pair<int,int> n, const LNodeMap& aList);
62       void addNeighbours(std::pair<int,int> n);
63       std::pair<int,int> bestNode(const LNodeMap& aList);
64       void moveToClosedList(std::pair<int,int> n);
65       double distance(int i1, int j1, int i2, int j2);
66     protected:
67       const LinkMatrix &_linkMatrix;
68       LNodeMap _closedList;
69       LNodeMap _openList;
70       LNode _from;
71       LNode _to;
72     };
73
74   }
75 }
76 #endif