00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00037 #ifndef __vtkCommunity2DLayoutStrategy_h
00038 #define __vtkCommunity2DLayoutStrategy_h
00039
00040 #include "vtkGraphLayoutStrategy.h"
00041
00042 #include "vtkSmartPointer.h"
00043
00044 class vtkFastSplatter;
00045 class vtkImageData;
00046 class vtkFloatArray;
00047
00048 class VTK_INFOVIS_EXPORT vtkCommunity2DLayoutStrategy : public vtkGraphLayoutStrategy
00049 {
00050 public:
00051 static vtkCommunity2DLayoutStrategy *New();
00052
00053 vtkTypeRevisionMacro(vtkCommunity2DLayoutStrategy, vtkGraphLayoutStrategy);
00054 void PrintSelf(ostream& os, vtkIndent indent);
00055
00057
00060 vtkSetClampMacro(RandomSeed, int, 0, VTK_LARGE_INTEGER);
00061 vtkGetMacro(RandomSeed, int);
00063
00065
00070 vtkSetClampMacro(MaxNumberOfIterations, int, 0, VTK_LARGE_INTEGER);
00071 vtkGetMacro(MaxNumberOfIterations, int);
00073
00075
00079 vtkSetClampMacro(IterationsPerLayout, int, 0, VTK_LARGE_INTEGER);
00080 vtkGetMacro(IterationsPerLayout, int);
00082
00084
00087 vtkSetClampMacro(InitialTemperature, float, 0.0, VTK_FLOAT_MAX);
00088 vtkGetMacro(InitialTemperature, float);
00090
00092
00096 vtkSetClampMacro(CoolDownRate, double, 0.01, VTK_DOUBLE_MAX);
00097 vtkGetMacro(CoolDownRate, double);
00099
00100
00102
00104 vtkSetMacro(RestDistance, float);
00105 vtkGetMacro(RestDistance, float);
00107
00110 virtual void Initialize();
00111
00116 virtual void Layout();
00117
00120 virtual int IsLayoutComplete() {return this->LayoutComplete;}
00121
00123
00124 vtkGetStringMacro(CommunityArrayName);
00125 vtkSetStringMacro(CommunityArrayName);
00127
00128 protected:
00129 vtkCommunity2DLayoutStrategy();
00130 ~vtkCommunity2DLayoutStrategy();
00131
00132 int MaxNumberOfIterations;
00133 float InitialTemperature;
00134 float CoolDownRate;
00135
00136 private:
00137
00138
00139
00140
00141
00142 typedef struct
00143 {
00144 vtkIdType from;
00145 vtkIdType to;
00146 float weight;
00147 } vtkLayoutEdge;
00148
00149
00150 vtkSmartPointer<vtkFastSplatter> DensityGrid;
00151 vtkSmartPointer<vtkImageData> SplatImage;
00152 vtkSmartPointer<vtkFloatArray> RepulsionArray;
00153 vtkSmartPointer<vtkFloatArray> AttractionArray;
00154
00155
00156 vtkLayoutEdge *EdgeArray;
00157
00158 int RandomSeed;
00159 int IterationsPerLayout;
00160 int TotalIterations;
00161 int LayoutComplete;
00162 float Temp;
00163 float RestDistance;
00164
00166 char* CommunityArrayName;
00167
00168
00169 void GenerateCircularSplat(vtkImageData *splat, int x, int y);
00170 void GenerateGaussianSplat(vtkImageData *splat, int x, int y);
00171 void ResolveCoincidentVertices();
00172
00173 vtkCommunity2DLayoutStrategy(const vtkCommunity2DLayoutStrategy&);
00174 void operator=(const vtkCommunity2DLayoutStrategy&);
00175 };
00176
00177 #endif
00178