]> Creatis software - creaMaracasVisu.git/blob - lib/maracasVisuLib/src/kernel/include/vtkDijkstraImageData.h
a3e0833c8a31826561d311ad9b5779d8aba738f0
[creaMaracasVisu.git] / lib / maracasVisuLib / src / kernel / include / vtkDijkstraImageData.h
1
2  
3  
4  #ifndef __VTK__VTK__DIJKSTRA__IMAGE__DATA__H
5  #define __VTK__VTK__DIJKSTRA__IMAGE__DATA__H
6  
7  #include "vtkPolyDataSource.h"
8  #include "vtkImageData.h"
9  #include "vtkPoints.h"
10  #include "vtkCellArray.h"
11  #include "vtkPolyData.h"
12
13  
14  class vtkIntArray;
15  class vtkDataArray;
16  class vtkPriorityQueue;
17  class vtkIdList;
18  class vtkDijkstraImageData : public vtkPolyDataSource
19  {
20    public:
21    static vtkDijkstraImageData *New();
22    vtkTypeMacro(vtkDijkstraImageData,vtkPolyDataSource);
23    void PrintSelf(ostream& os, vtkIndent indent);
24    
25    vtkSetMacro(SourceID,int);
26    vtkGetMacro(SourceID,int);
27  
28  
29    vtkSetMacro(SinkID,int);
30    vtkGetMacro(SinkID,int);
31  
32    vtkGetObjectMacro(Parent,vtkIntArray);
33  
34    
35    
36    virtual void SetBoundaryScalars(vtkDataArray*);
37    vtkGetObjectMacro(BoundaryScalars,vtkDataArray);
38  
39    
40    vtkSetMacro(NumberOfInputPoints,int);
41    vtkGetMacro(NumberOfInputPoints,int);
42    
43    
44    vtkSetMacro(NumberOfGraphNodes,int);
45    vtkGetMacro(NumberOfGraphNodes,int);
46    
47    
48    vtkIdList* GetShortestPathIdList();
49    
50    
51    vtkSetMacro(UseInverseDistance,int);
52    vtkGetMacro(UseInverseDistance,int);
53    
54   
55    vtkSetMacro(UseInverseSquaredDistance,int);
56    vtkGetMacro(UseInverseSquaredDistance,int);
57  
58   
59    vtkSetMacro(UseInverseExponentialDistance,int);
60    vtkGetMacro(UseInverseExponentialDistance,int);
61  
62    vtkSetMacro(UseSquaredDistance,int);
63    vtkGetMacro(UseSquaredDistance,int);
64  
65        
66    // Description:
67    unsigned long GetMTime();
68    
69    // path operations
70    void InitTraversePath();
71    int GetNextPathNode();
72    int GetNumberOfPathNodes();
73    
74  
75    void SetInput(vtkImageData*);
76    vtkImageData* GetInput();
77    
78    
79    void CreateGraph(vtkImageData *inData);
80    void DeleteGraph();
81    void FindNeighbors(vtkIdList *list,int id, vtkDataArray *scalars); 
82    
83    int findClosestPointInGraph(vtkDataArray *scalars,int id,int dim0,int dim1, int dim2); 
84    
85  
86   
87    
88    void InitSingleSource(int startv);
89   
90    void RunDijkstra(vtkDataArray *scalars,int source, int sink);
91    
92    float EdgeCost(vtkDataArray *scalars, int u, int v);
93    void BuildShortestPath(int start,int end);
94   
95          
96    
97    
98    int SourceID;
99    
100    
101    int SinkID;  
102    
103    
104    vtkDataArray *BoundaryScalars;
105  
106   
107    int NumberOfInputPoints;
108    int NumberOfGraphNodes;
109  
110    int UseInverseDistance;
111    int UseInverseSquaredDistance;
112    int UseInverseExponentialDistance;
113    int UseSquaredDistance;
114  
115   
116    
117    vtkPriorityQueue *PQ;
118  
119    
120    vtkIdList *ShortestPathIdList;
121    
122    vtkIntArray *Parent;
123    
124    vtkIntArray *Visited;  
125   
126   
127    int PathPointer;
128   
129    int StopWhenEndReached;
130
131
132    vtkPoints *puntos; 
133    vtkCellArray *lineas;
134    vtkImageData *input;
135
136
137
138         void init(vtkImageData *inData);
139
140         void printPointData(int pointID);
141
142         float fuerzaAtraccion(int u, float w);
143         
144  
145  protected:
146    vtkDijkstraImageData();
147    ~vtkDijkstraImageData();
148     void Execute();
149
150    
151    FILE *logger;
152  
153  private:
154 //   vtkDijstraImageData(const vtkDijkstraImageData&);
155    void operator=(const vtkDijkstraImageData&);
156  };
157  
158  #endif //__VTK__VTK__DIJKSTRA__IMAGE__DATA__H
159  
160  
161  
162