vtkDijkstraImageData.h
Go to the documentation of this file.00001
00002
00003
00004 #ifndef __VTK__VTK__DIJKSTRA__IMAGE__DATA__H
00005 #define __VTK__VTK__DIJKSTRA__IMAGE__DATA__H
00006
00007 #include "vtkPolyDataSource.h"
00008 #include "vtkImageData.h"
00009 #include "vtkPoints.h"
00010 #include "vtkCellArray.h"
00011 #include "vtkPolyData.h"
00012
00013
00014 class vtkIntArray;
00015 class vtkDataArray;
00016 class vtkPriorityQueue;
00017 class vtkIdList;
00018 class vtkDijkstraImageData : public vtkPolyDataSource
00019 {
00020 public:
00021 static vtkDijkstraImageData *New();
00022 vtkTypeMacro(vtkDijkstraImageData,vtkPolyDataSource);
00023 void PrintSelf(ostream& os, vtkIndent indent);
00024
00025 vtkSetMacro(SourceID,int);
00026 vtkGetMacro(SourceID,int);
00027
00028
00029 vtkSetMacro(SinkID,int);
00030 vtkGetMacro(SinkID,int);
00031
00032 vtkGetObjectMacro(Parent,vtkIntArray);
00033
00034
00035
00036 virtual void SetBoundaryScalars(vtkDataArray*);
00037 vtkGetObjectMacro(BoundaryScalars,vtkDataArray);
00038
00039
00040 vtkSetMacro(NumberOfInputPoints,int);
00041 vtkGetMacro(NumberOfInputPoints,int);
00042
00043
00044 vtkSetMacro(NumberOfGraphNodes,int);
00045 vtkGetMacro(NumberOfGraphNodes,int);
00046
00047
00048 vtkIdList* GetShortestPathIdList();
00049
00050
00051 vtkSetMacro(UseInverseDistance,int);
00052 vtkGetMacro(UseInverseDistance,int);
00053
00054
00055 vtkSetMacro(UseInverseSquaredDistance,int);
00056 vtkGetMacro(UseInverseSquaredDistance,int);
00057
00058
00059 vtkSetMacro(UseInverseExponentialDistance,int);
00060 vtkGetMacro(UseInverseExponentialDistance,int);
00061
00062 vtkSetMacro(UseSquaredDistance,int);
00063 vtkGetMacro(UseSquaredDistance,int);
00064
00065
00066
00067 unsigned long GetMTime();
00068
00069
00070 void InitTraversePath();
00071 int GetNextPathNode();
00072 int GetNumberOfPathNodes();
00073
00074
00075 void SetInput(vtkImageData*);
00076 vtkImageData* GetInput();
00077
00078
00079 void CreateGraph(vtkImageData *inData);
00080 void DeleteGraph();
00081 void FindNeighbors(vtkIdList *list,int id, vtkDataArray *scalars);
00082
00083 int findClosestPointInGraph(vtkDataArray *scalars,int id,int dim0,int dim1, int dim2);
00084
00085
00086
00087
00088 void InitSingleSource(int startv);
00089
00090 void RunDijkstra(vtkDataArray *scalars,int source, int sink);
00091
00092 float EdgeCost(vtkDataArray *scalars, int u, int v);
00093 void BuildShortestPath(int start,int end);
00094
00095
00096
00097
00098 int SourceID;
00099
00100
00101 int SinkID;
00102
00103
00104 vtkDataArray *BoundaryScalars;
00105
00106
00107 int NumberOfInputPoints;
00108 int NumberOfGraphNodes;
00109
00110 int UseInverseDistance;
00111 int UseInverseSquaredDistance;
00112 int UseInverseExponentialDistance;
00113 int UseSquaredDistance;
00114
00115
00116
00117 vtkPriorityQueue *PQ;
00118
00119
00120 vtkIdList *ShortestPathIdList;
00121
00122 vtkIntArray *Parent;
00123
00124 vtkIntArray *Visited;
00125
00126
00127 int PathPointer;
00128
00129 int StopWhenEndReached;
00130
00131
00132 vtkPoints *puntos;
00133 vtkCellArray *lineas;
00134 vtkImageData *input;
00135
00136
00137
00138 void init(vtkImageData *inData);
00139
00140 void printPointData(int pointID);
00141
00142 float fuerzaAtraccion(int u, float w);
00143
00144
00145 protected:
00146 vtkDijkstraImageData();
00147 ~vtkDijkstraImageData();
00148 void Execute();
00149
00150
00151 FILE *logger;
00152
00153 private:
00154
00155 void operator=(const vtkDijkstraImageData&);
00156 };
00157
00158 #endif //__VTK__VTK__DIJKSTRA__IMAGE__DATA__H
00159
00160
00161
00162