00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00052 #ifndef __vtkDijkstraImageGeodesicPath_h
00053 #define __vtkDijkstraImageGeodesicPath_h
00054
00055 #include "vtkDijkstraGraphGeodesicPath.h"
00056
00057 class vtkImageData;
00058
00059 class VTK_GRAPHICS_EXPORT vtkDijkstraImageGeodesicPath :
00060 public vtkDijkstraGraphGeodesicPath
00061 {
00062 public:
00063
00065 static vtkDijkstraImageGeodesicPath *New();
00066
00068
00069 vtkTypeMacro( vtkDijkstraImageGeodesicPath, vtkDijkstraGraphGeodesicPath );
00070 void PrintSelf( ostream& os, vtkIndent indent );
00072
00074
00075 void SetInput( vtkDataObject* );
00076 vtkImageData* GetInputAsImageData();
00078
00080
00081 void SetImageWeight( double );
00082 vtkGetMacro( ImageWeight, double );
00084
00086
00087 void SetEdgeLengthWeight( double );
00088 vtkGetMacro( EdgeLengthWeight, double );
00090
00092
00093 vtkSetClampMacro( CurvatureWeight, double, 0.0, 1.0 );
00094 vtkGetMacro( CurvatureWeight, double );
00096
00097 protected:
00098 vtkDijkstraImageGeodesicPath();
00099 ~vtkDijkstraImageGeodesicPath();
00100
00101 virtual int FillInputPortInformation(int port, vtkInformation *info);
00102 virtual int RequestData(vtkInformation *, vtkInformationVector **,
00103 vtkInformationVector *);
00104
00105
00106 virtual void BuildAdjacency( vtkDataSet *inData );
00107
00108
00109 void UpdateStaticCosts( vtkImageData *image );
00110
00111
00112 virtual double CalculateStaticEdgeCost( vtkDataSet *inData , vtkIdType u, vtkIdType v);
00113 virtual double CalculateDynamicEdgeCost( vtkDataSet *inData , vtkIdType u, vtkIdType v);
00114
00115 double PixelSize;
00116 double ImageWeight;
00117 double EdgeLengthWeight;
00118 double CurvatureWeight;
00119 bool RebuildStaticCosts;
00120
00121 private:
00122 vtkDijkstraImageGeodesicPath(const vtkDijkstraImageGeodesicPath&);
00123 void operator=(const vtkDijkstraImageGeodesicPath&);
00124
00125 };
00126
00127 #endif
00128